Notas sobre minha configuração do Pi
- Como uso o Pi
- Extensões instaladas
- Minhas habilidades
- Delegação controlada
- Inferência local: uma API HTTP suportada pelo Pi
- Referências
Como uso o Pi
Eu uso o Pi como um assistente de codificação de terminal personalizável para inspecionar repositórios, fazer alterações focadas e executar verificações. Habilidades capturam fluxos de trabalho reutilizáveis; extensões adicionam delegação, pesquisa, retrocesso (rewind) e metas persistentes.
Minha CLI instalada é o Pi 1.5.2. Em ~/.pi/agent/settings.json, meu padrão é
openai-codex/gpt-6.1-sol com raciocínio xhigh, tema escuro e blocos de
raciocínio ocultos. Ocultar esses blocos altera a apresentação, não o esforço de raciocínio.
Estas são seleções de modelos configuradas, não garantias de disponibilidade do provedor.
cd /path/to/project
pi
# Dentro do Pi: /login, /model, /reload
As ferramentas principais do Pi são read, bash, edit e write. Arquivos AGENTS.md
do projeto fornecem restrições específicas do repositório. Extensões executam integrações;
habilidades fornecem instruções específicas de tarefas carregadas quando relevantes.
Extensões instaladas
Esses pacotes são declarados nas minhas configurações de usuário e instalados em
~/.pi/agent/npm/node_modules/. As versões abaixo descrevem a configuração inspecionada,
não fixações permanentes: minhas declarações de pacotes usam fontes npm: sem versão.
| Pacote | Instalado | Meu uso |
|---|---|---|
pi-subagents |
0.88.1 | Trabalhadores focados, revisores independentes, consultores e auditoria de escopo. |
pi-web-access |
0.47.0 | Pesquisa na web, verificação de fontes, extração de página/PDF, pesquisa de repositório e vídeo. |
pi-rewind-hook |
1.8.8 | Pontos de verificação de arquivos baseados em Git associados ao histórico da sessão; restauração via /tree ou /fork. |
pi-goal-x |
0.34.1 | Metas persistentes explícitas, progresso de tarefas, pausa/retomada e auditoria de conclusão opcional. |
Minha configuração extensions contém "-builtin:mcp": a integração MCP nativa do Pi
está desativada. Os recursos abaixo vêm da documentação das extensões instaladas;
eles não implicam que todos os recursos opcionais estejam habilitados nas minhas configurações.
pi-subagents: trabalho focado e julgamento independente
A delegação requer minha solicitação ou instruções aplicáveis, não apenas complexidade.
subagents_enable expõe as ferramentas de delegação quando necessário. Um filho em primeiro plano
executa como uma sessão dentro do processo pai; um filho em segundo plano usa um
executor desanexado. Cada um recebe sua própria tarefa, contexto, ferramentas e seleção de modelo.
Eu separo o trabalhador de implementação da revisão/aconselhamento somente leitura e da auditoria
de escopo (veja a tabela de funções abaixo). Revisões independentes podem ser executadas em paralelo;
a implementação mantém um escritor por árvore de trabalho. contact_supervisor leva
decisões de ponto de verificação e atualizações significativas de volta ao coordenador.
/subagents-fleet inspeciona o trabalho em execução; /subagents-doctor diagnostica a configuração.
Exemplos de solicitações — não atividade automática em segundo plano:
Use o revisor para verificar esta alteração em relação aos meus requisitos sem editar. Peça ao oráculo para desafiar este plano antes da implementação.
pi-web-access: pesquisa com evidências inspecionáveis
web_enable carrega as ferramentas de pesquisa sob demanda:
web_search: pesquisa ou consultas relacionadas em lote;workflow: "none"retorna resultados sem uma chamada separada de geração de resumo ou navegador curador.fetch_content: recupera páginas, PDFs, repositórios ou conteúdo de vídeo suportado. O processamento em modo de resposta é uma interação de modelo opcional e separada.get_search_content: navega pelos resultados armazenados ou encontra passagens exatas usando umresponseId, em vez de buscar repetidamente o mesmo material.source_check: coleta passagens e metadados de origem para revisão manual de alegações; a recuperação por si só não estabelece que uma alegação é verdadeira.
Pesquisas/buscas podem enviar dados para serviços externos. Mantenho credenciais, fontes privadas e detalhes de projetos não relacionados fora das consultas de pesquisa e exemplos.
pi-rewind-hook: arquivos e conversas podem ser restaurados separadamente
Através de /fork, posso manter arquivos enquanto crio uma ramificação da conversa, restaurar ambos,
ou restaurar código enquanto mantenho a conversa. /tree oferece restauração exata de arquivos
onde existe um ponto de verificação, além de desfazer quando disponível.
Os pontos de verificação pertencem aos limites de prompt/turno do assistente, não a cada chamada de ferramenta.
O registro da sessão os grava; o Git mantém objetos de snapshot acessíveis através de
refs/pi-rewind/store. A cobertura inclui arquivos rastreados e não rastreados não ignorados,
não arquivos ignorados ou diretórios vazios. Isso complementa os commits normais.
Não tenho substituição de rewind.retention: o padrão documentado é sem expiração
automática, portanto, o armazenamento de snapshots pode crescer.
pi-goal-x: trabalho explícito e persistente
/goal discute um resultado e confirma um plano antes da execução;
/sisyphus segue etapas ordenadas. Metas, tarefas e progresso persistem entre
sessões. /goal-direct ignora o rascunho apenas quando eu escolho explicitamente.
/goal-status mostra o progresso, /goal-pause interrompe a continuação automática,
/goal-resume continua e /goal-tweak revisa o objetivo ou plano.
A auditoria de conclusão opcional usa um agente separado para verificar requisitos e
evidências; sua disponibilidade não é uma alegação de que eu a habilitei. Tarefas comuns
não se tornam metas implicitamente.
Minhas habilidades
Apenas commit-msg reside em ~/.pi/agent/skills/. O Pi também descobre o diretório
compartilhado ~/.agents/skills/, onde vivem minhas outras habilidades pessoais/instaladas por ferramentas.
| Local / habilidade | Propósito |
|---|---|
~/.pi/agent/skills/commit-msg |
Mensagens de commit no passado, multilinha, no estilo develop do repositório, baseadas apenas em alterações inspecionadas; sem mutações no Git. |
~/.agents/skills/implementation-steps |
Cursos de reconstrução prática em scratch/implementation_steps/, com código de trabalho cumulativo e verificação. |
~/.agents/skills/lightpanda |
Extração de DOM com reconhecimento de JavaScript e automação funcional de navegador; não é evidência de fidelidade de layout visual. |
~/.agents/skills/rex |
Controla sessões, abas, painéis, comandos e saída de terminal do Rex através de sua CLI. |
~/.agents/skills/ui-sdk |
Constrói e testa interfaces acessíveis baseadas em comportamento usando @ui-sdk/*. |
~/.agents/skills/ui-ux-a11y |
Aplica as regras agrupadas de UI/UX, WCAG 2.2 AA, acessibilidade, contraste e validação. |
O pacote de subagentes também fornece pi-subagents para orquestração e
council-mode para debate de consultores limitado e somente leitura; essas são habilidades empacotadas.
Exemplo de invocação dentro do Pi:
/skill:commit-msg staged files
Trechos de habilidades incorporadas
Estes são trechos literais dos meus seis arquivos SKILL.md pessoais/instalados por ferramentas,
não definições de habilidades substitutas. Arquivos de suporte e caminhos relativos
ainda pertencem a cada diretório de habilidade original. A entrada curta do Rex está incluída
na íntegra; habilidades mais longas são extraídas para manter estas notas legíveis.
commit-msg: evidência antes da redação
Fonte: ~/.pi/agent/skills/commit-msg/SKILL.md, “Core Contract”.
A mensagem de commit gerada DEVE: 1. Corresponder ao estilo e formato dos commits recentes da branch `develop`. 2. Usar tempo passado. 3. Ser multilinha. 4. Ser baseada exclusivamente em alterações de arquivos inspecionadas a partir da entrada solicitada. 5. Evitar alegações que não sejam suportadas pelos dados de diff/stat/name-status. 6. Evitar reutilizar um assunto de espaço reservado como `WIP` do(s) commit(s) de destino. 7. Evitar mutar o estado do git; esta habilidade é somente leitura.
implementation-steps: código de trabalho e ensinabilidade
Fonte: ~/.agents/skills/implementation-steps/SKILL.md, contrato de abertura.
Produza um curso de implementação prática para o alvo selecionado. Cada etapa numerada inclui código-fonte de trabalho real e seu próprio README detalhado. Um aluno que segue as etapas documentadas deve entender o que está escrevendo e por que, e alcançar o código de destino capturado exatamente. Correção técnica, igualdade exata de fonte e ensinabilidade são requisitos separados; nenhum substitui o outro. Este fluxo de trabalho é independente de linguagem e framework. Inspecione o alvo em vez de impor um runtime, arquitetura, número fixo de etapas ou escolhas de implementação de tarefas anteriores. Crie os artefatos de aprendizado; deixe o alvo inalterado.
lightpanda: extração limitada, evidência apropriada
Fonte: ~/.agents/skills/lightpanda/SKILL.md, “CLI and persistent automation”.
Para uma URL autorizada conhecida, comece com uma extração limitada: ```zsh lightpanda fetch --dump markdown --dump-max-bytes 12000 --fail-on-http-error 'http://127.0.0.1:PORT/PATH' ``` Substitua a URL por uma URL de aplicação observada. Use `--dump html` para marcação ou `--dump semantic_tree_text` para uma árvore semântica compacta. Inspecione o status e os erros do comando; um dump por si só não é prova de navegação ou interação bem-sucedida.
rex: carregar orientação da CLI instalada
Fonte: ~/.agents/skills/rex/SKILL.md, arquivo completo.
--- name: rex description: Use a CLI rex para gerenciar sessões Rex, abrir abas, organizar painéis, executar comandos, inspecionar saída de terminal e controlar apps Rex conectados. metadata: rex-stub: "2" --- Execute `rex __internal skill` e siga o guia que ele imprime. O guia vem da CLI Rex instalada, portanto, descreve os comandos disponíveis nessa versão. Se o comando falhar, a versão do Rex instalada é anterior ao guia. Comece com `rex whoami --json`, depois use `rex --help` e `rex COMANDO --help`.
ui-sdk: use documentação com versão correspondente
Fonte: ~/.agents/skills/ui-sdk/SKILL.md, “Read first”.
A documentação da versão instalada é enviada em cada pacote, como Markdown: - `node_modules/@ui-sdk//docs/llms.txt` é o índice. Leia-o primeiro. `` é `react`, `vue`, `svelte`, `solid` ou `web`. - Depois, leia apenas as páginas que sua tarefa precisa, como `docs/components/select.md`. Não leia a pasta `docs/` inteira; ela é grande. - Uma interface construída a partir de nossos componentes não precisa de `docs/core.md`. Apenas o caminho 2 abaixo precisa, e mesmo assim você pesquisa por cabeçalho: tem mais de 300 KB. `docs/rendering.md` fica ao lado dela na mesma pasta `docs/`. - Não leia JavaScript compilado em `dist/*.js`, nem para depurar. A documentação e os tipos `.d.ts` são a API; quando eles não responderem, escreva um pequeno teste que tente.
Aqui, “caminho 2” significa construir um componente/comportamento ausente a partir de
@ui-sdk/core, em vez de compor componentes existentes.
ui-ux-a11y: preservar autoridade e escopo
Fonte: ~/.agents/skills/ui-ux-a11y/SKILL.md, “Scope and authority gate”.
Antes de editar ou aprovar trabalho: 1. Identifique o escopo de implementação autorizado pelo usuário, instruções do repositório e qualquer plano ou critério de aceitação aplicável no projeto atual. 2. Descubra e inspecione as fontes de verdade reais do projeto atual: comportamento do produto existente, referência fornecida pelo usuário, contrato de design, sistema de design, fonte de token e comportamento implantado quando a tarefa exigir. Não presuma nenhum nome de arquivo ou caminho. 3. Identifique cada ID de regra `UX-*`, `A11Y-*`, `CC-*` e `VAL-*` aplicável para as rotas, estados, locais, viewports, temas e interações afetados. 4. Registre a linha de base autoritativa exigida por `VAL-01` antes da implementação. Use uma linha de base de referência apenas quando a tarefa ou projeto atual definir uma. 5. Pare se uma fonte de verdade necessária estiver ausente ou se a conformidade exigir uma rota, recurso, redesign, fluxo de trabalho, dependência, conteúdo, permissão ou mudança de escopo de produto não aprovada.
Sua pasta de regras ui_ux_a11y/ completa permanece autoritativa; este trecho não
substitui suas verificações de acessibilidade, contraste e experiência renderizada.
Delegação controlada
Meu subagents.agentOverrides separa a implementação do julgamento. Todas as quatro
funções herdam o contexto do projeto e usam como padrão um contexto de conversa novo
(substituições explícitas para funções somente leitura; o padrão agrupado para o trabalhador).
| Função | Modelo configurado | Raciocínio | Responsabilidade / ferramentas |
|---|---|---|---|
worker |
openai-codex/gpt-6.1-sol |
médio | Implementar pontos de verificação atribuídos; ler/pesquisar, bash, edit, write, contato com supervisor. |
reviewer |
openai-codex/gpt-6.1-sol |
alto | Revisão de correção e evidência somente leitura; apenas ler/pesquisar e contato com supervisor. |
oracle |
openai-codex/gpt-6-astra |
médio | Aconselhamento arquitetural e verificação de suposições somente leitura. |
scopeCreepPatrol |
openai-codex/gpt-6-astra |
médio | Rastreabilidade de requisitos e detecção de escopo não autorizado somente leitura. |
scopeCreepPatrol tem sua definição de agente em ~/.agents/scopecreeppatrol.md;
o modelo e outras substituições vêm das minhas configurações do Pi.
Para implementação delegada, o coordenador roteia o trabalho, toma decisões e mantém o registro — não código. O trabalhador verifica o código fornecido pelo consultor em relação aos arquivos atuais e requisitos aprovados, relata evidências de validação e solicita uma decisão de ponto de verificação antes da próxima unidade. Funções somente leitura retornam conclusões/código corretivo em linha, não arquivos. Recomendações não são aprovação do usuário.
O auditor de escopo verifica referências de requisitos, uma coluna literal 1 a N,
origem do requisito e os status exatos no-started / in-progress /
deferred / completed / not-applicable; ele não deve inventar o significado dessa coluna.
Perguntas de bloqueio usam contact_supervisor com need_decision; atualizações
não bloqueantes usam progress_update, sem conversa de rotina.
flowchart TD
U["Requisitos e aprovações do usuário"] --> C["Coordenador: rotear e rastrear"]
C --> W["Trabalhador: implementar um ponto de verificação"]
W --> E["Arquivos alterados e evidência de validação"]
E --> R["Revisor: correção"]
E --> S["Patrulha de escopo: rastreabilidade"]
C --> O["Oráculo: aconselhamento limitado"]
R --> D["Coordenador: decisão de ponto de verificação"]
S --> D
O --> D
D -->|Próxima unidade aprovada| W
D -->|Requisitos atendidos| F["Relatório final"]Minha configuração de subagentes
A seção subagents completa de ~/.pi/agent/settings.json está incorporada
abaixo, incluindo todas as quatro substituições de função e seus prompts inalterados. O objeto
JSON externo mostra onde ele pertence nas configurações; configurações não relacionadas são omitidas.
{
"subagents": {
"agentOverrides": {
"worker": {
"model": "openai-codex/gpt-6.1-sol",
"thinking": "medium",
"inheritProjectContext": true,
"tools": [
"read",
"grep",
"find",
"ls",
"bash",
"edit",
"write",
"contact_supervisor"
],
"systemPrompt": "Você é o trabalhador de implementação. Implemente apenas o trabalho atribuído rastreável aos requisitos reais do usuário. Nunca expanda o escopo sem aprovação prévia explícita do USUÁRIO. Recomendações do agente não são aprovação. O coordenador coordena, mantém o registro de progresso e retransmite o código criado pelo agente; ele não deve criar ou revisar código. Aplique o código fornecido pelo consultor apenas após verificar sua aplicabilidade aos arquivos atuais e requisitos aprovados. Em cada ponto de verificação de implementação atribuído, relate referências de requisitos, arquivos alterados, evidências de validação, trabalho restante e atualizações de registro necessárias; solicite a decisão do coordenador antes de iniciar a próxima unidade de implementação. Use contact_supervisor com o motivo need_decision para perguntas de bloqueio e decisões de ponto de verificação, ou progress_update para alterações materiais que exijam atenção do coordenador. Não envie narração de rotina ou mensagens de conclusão duplicadas. Nunca afirme que a validação passou sem evidências."
},
"reviewer": {
"model": "openai-codex/gpt-6.1-sol",
"thinking": "high",
"inheritProjectContext": true,
"defaultContext": "fresh",
"tools": [
"read",
"grep",
"find",
"ls",
"contact_supervisor"
],
"systemPrompt": "Você é o revisor de implementação somente leitura. Revise o ponto de verificação do trabalhador atribuído em relação aos requisitos reais do usuário, à implementação, aos testes e às evidências de validação. Não edite arquivos nem crie arquivos de patch ou relatório. Retorne conclusões acionáveis com referências de requisitos, locais exatos, evidências e código de substituição concreto ou diffs unificados EM LINHA quando útil. Distinga defeitos reais de recomendações opcionais. Não expanda ou redefina o escopo e nunca trate suas recomendações como aprovação do usuário. Relate conclusões de bloqueio prontamente através de contact_supervisor; caso contrário, retorne uma revisão final concisa. Evite batimentos cardíacos, conclusões duplicadas e conversa de rotina. Identifique pontos de verificação obsoletos e alegações de conclusão não suportadas."
},
"oracle": {
"model": "openai-codex/gpt-6-astra",
"thinking": "medium",
"inheritProjectContext": true,
"defaultContext": "fresh",
"tools": [
"read",
"grep",
"find",
"ls",
"contact_supervisor"
],
"systemPrompt": "Você é um consultor somente leitura que responde à pergunta específica atribuída pelo coordenador. Desafie suposições não suportadas, identifique riscos arquiteturais ou de correção e distinga fatos, incertezas e recomendações. Quando útil, forneça código corretivo real ou diffs unificados EM LINHA. Não edite arquivos nem crie arquivos de patch ou relatório. Preserve os requisitos reais do usuário; a expansão do escopo requer aprovação prévia explícita do USUÁRIO. Você não pode conceder essa aprovação. Escale decisões ausentes de bloqueio através de contact_supervisor; caso contrário, retorne sua resposta limitada sem conversa de progresso de rotina. Não invente requisitos adicionais nem inicie trabalho não relacionado."
},
"scopeCreepPatrol": {
"model": "openai-codex/gpt-6-astra",
"thinking": "medium",
"inheritProjectContext": true,
"defaultContext": "fresh",
"tools": [
"read",
"grep",
"find",
"ls",
"contact_supervisor"
],
"systemPrompt": "Você é o auditor de escopo e rastreabilidade de requisitos somente leitura. Compare o ponto de verificação do trabalhador atribuído e o registro de progresso com os requisitos reais do usuário e aprovações prévias explícitas do usuário. Detecte expansão não autorizada, requisitos omitidos ou alterados e sugestões do agente deturpadas como autoridade do usuário. Verifique se o registro inclui referências de requisitos de implementação, uma coluna literal de 1 a N, status e origem do requisito. Não invente o significado de 1 a N. Preserve os status exatamente: no-started / in-progress / deferred / completed / not-applicable. Distinga requisito do usuário de requisito do agente; um requisito do agente não autoriza a expansão do escopo. Relate discrepâncias apoiadas por evidências prontamente através de contact_supervisor. Forneça código corretivo concreto EM LINHA quando útil e dentro do escopo existente. Nunca edite arquivos, crie arquivos de patch ou relatório, redefina requisitos, conceda aprovações ou fabrique portões de aceitação. Evite conversa de rotina."
}
},
"watchdog": {
"enabled": true,
"scope": {
"enabled": true
},
"clarification": true,
"main": {
"model": "openai-codex/gpt-6-astra",
"thinking": "medium"
},
"cadence": {
"everyNTools": 16
},
"children": {
"enabled": false,
"overrides": {
"worker": {
"enabled": true,
"model": "openai-codex/gpt-6.1-sol",
"thinking": "high",
"cadence": {
"everyNTools": 8
}
}
}
}
}
}
}Comportamento do watchdog
O watchdog é um mecanismo de revisão de segundo modelo separado, não a função reviewer.
O watchdog principal verifica a cada 16 resultados de ferramentas e em limites de trabalho alterado elegíveis.
O monitoramento de escopo e o esclarecimento da sessão principal estão habilitados.
Os watchdogs filhos estão desligados exceto para o trabalhador: sua substituição explícita habilita
a revisão a cada oito resultados de ferramentas e em limites elegíveis, usando Sol/alto.
Estes são gatilhos de atividade/limite, não um loop de sondagem ocioso.
Comandos de inspeção úteis dentro do Pi: /subagents-fleet,
/subagents-doctor e /subagents-watchdog status.
Inferência local: uma API HTTP suportada pelo Pi
Meu workspace Bun/TypeScript local-inference/ expõe uma API de Chat Completions compatível
com OpenAI em http://127.0.0.1:8081/v1. É um gateway HTTP local
para provedores gerenciados pelo Pi, não um servidor de pesos de modelo no dispositivo.
packages/protocol: Validação de solicitação Zod 4 e o contrato de backend.packages/pi-proxy:ModelRuntimepúblico do Pi para resolução de modelo, credenciais salvas, atualização OAuth e streaming nativo.packages/server:Bun.serve, tradução HTTP/SSE, cancelamento, contrapressão e envelopes de continuação criptografados.
O gateway fixa @earendil-works/pi-coding-agent e @earendil-works/pi-ai
em 1.5.0, independentemente da versão 1.5.2 da minha CLI instalada.
flowchart LR
C["Cliente HTTP"] -->|Chat Completions| H["local-inference: servidor HTTP Bun"]
H --> V["Solicitação validada por Zod"]
V --> M["Pi ModelRuntime"]
P["Configuração de modelo Pi e login salvo"] --> M
M --> Q["Provedor upstream configurado"]
Q -->|Stream nativo| M
M -->|Texto, raciocínio, eventos de ferramenta| H
H -->|Deltas SSE| C
C --> T["Execução de ferramenta opcional no lado do cliente"]
T -->|Resultados da ferramenta na próxima solicitação| H
Cada solicitação realiza um turno do provedor: o gateway não executa ferramentas nem
edita arquivos. A execução da ferramenta pertence ao cliente. O texto flui separadamente do
raciocínio; desconexões/desligamentos cancelam o trabalho upstream. Dados de continuação nativos
usam um envelope reasoning_details autenticado e criptografado.
Após entrar no provedor desejado com o Pi, inicie o gateway a partir do
diretório que contém local-inference/:
cd local-inference
bun install --frozen-lockfile
bun run start -- --port 8081Em outro terminal, inspecione o listener ou faça explicitamente uma solicitação em stream (o POST usa a conta do provedor e pode incorrer em uso):
curl http://127.0.0.1:8081/healthz
curl http://127.0.0.1:8081/v1/models
curl -N http://127.0.0.1:8081/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"openai-codex/gpt-6.1-sol","stream":true,
"messages":[{"role":"user","content":"Reply with hello."}]}'
IDs de modelo são strings exatas provider/model; /v1/models anuncia modelos, mas
não é uma lista de permissões de admissão. O Pi possui o suporte ao provedor e o manuseio de credenciais.
O listener de loopback padrão não precisa de token de cliente; a vinculação fora do loopback
exige um. --token-env NAME protege opcionalmente o listener, independentemente
do login do provedor. Nunca publique auth.json ou tokens.
A API suporta texto e ferramentas de função, não imagens, respostas com restrição de esquema
ou o endpoint de Respostas. Os clientes devem usar Chat Completions.
Execute bun run typecheck a partir de local-inference/ para verificar os tipos do gateway.
Código de local-inference
Estes são trechos literais, não programas autônomos: a classe, os tipos e as definições de auxiliares ao redor permanecem nos arquivos de origem nomeados. Nenhuma aplicação cliente ou namespace de pacote não relacionado é reproduzido aqui.
Criar o runtime do Pi e listar modelos anunciados
De local-inference/packages/pi-proxy/src/index.ts. Credenciais e configuração
do provedor permanecem atrás de ModelRuntime; a atualização e a listagem recebem o
sinal de cancelamento da solicitação.
static async create(options: PiBackendOptions = {}): Promise<PiBackend> {
const { provider, ...runtimeOptions } = options;
return new PiBackend(await ModelRuntime.create(runtimeOptions), provider);
}
async models(signal: AbortSignal) {
await this.runtime.refresh({ providers: this.provider ? [this.provider] : undefined, signal });
signal.throwIfAborted();
const available = await this.runtime.getAvailable(this.provider, { signal });
return available.map(model => ({ id: this.provider ? model.id : `${model.provider}/${model.id}`, owned_by: model.provider }));
}Resolver o provedor preservando o ID de modelo exato solicitado
Do mesmo arquivo. O Pi fornece metadados do provedor e resolução de modelo personalizado; a camada HTTP retém o ID de modelo exato do chamador em vez de aplicar conveniências de nome difuso ou sufixo de raciocínio da CLI a ele.
async resolve(id: string, signal: AbortSignal): Promise<InferenceModel> {
signal.throwIfAborted();
const slash = id.indexOf("/");
const provider = this.provider ?? (slash > 0 ? id.slice(0, slash) : undefined);
const modelId = this.provider ? id : id.slice(slash + 1);
if (!provider) throw new ApiError(400, "Use provider/model como o ID do modelo, ou comece com --provider");
await this.runtime.refresh({ providers: [provider], signal });
signal.throwIfAborted();
const selected = resolveCliModel({ cliProvider: provider, cliModel: modelId, modelRuntime: this.runtime });
if (!selected.model) throw new ApiError(400, selected.error ?? "O Pi não pôde resolver o modelo solicitado", "model_resolution_error");
// O Pi possui a construção do modelo, metadados do provedor e suporte a modelo personalizado.
// Seu resolvedor CLI também aceita nomes difusos/sufixos de raciocínio; um campo de modelo HTTP
// é um ID exato, então essas conveniências não devem reescrever esse campo.
return { ...selected.model, id: modelId };
}Escolher a API de streaming do Pi
De PiBackend.stream no mesmo arquivo. Opções de raciocínio compartilhadas usam
streamSimple; opções nativas reasoningEffort usam stream.
const events = request.reasoningEffort === undefined
? this.runtime.streamSimple(model, context, request)
: this.runtime.stream(model, context, request);Manter texto e raciocínio separados no fio
De local-inference/packages/server/src/index.ts, dentro do switch de eventos.
Deltas de texto são emitidos conforme chegam, sem esperar pela conclusão do provedor.
case "text_delta": source.push(event.delta); await chunk({ content: event.delta }); break;
case "thinking_delta": await chunk({ reasoning_content: event.delta }); break;Referências
Fontes para o harness, extensões, ferramentas baseadas em habilidades e bibliotecas que uso com o Pi:
- Pi e fonte do Pi: o harness de codificação e suas bibliotecas:
pi-coding-agent(CLI/SDK),pi-agent-core(loop de agente),pi-ai(acesso ao provedor) epi-tui(interface de terminal). - Pi SDK: incorporando o Pi e acessando seus serviços de modelo/runtime para meu gateway de inferência.
- Habilidades do Pi: descobrindo e carregando minhas instruções de tarefa reutilizáveis, incluindo habilidades compartilhadas
~/.agents/skills/. - pi-subagents: definições e substituições de agente, fluxos de trabalho e coordenação, inspeção de frota e configuração do watchdog.
- pi-web-access: referência de ferramenta de pesquisa, incluindo pesquisa, busca, recuperação de resultados armazenados e verificação de fontes.
- pi-rewind-hook: modos de restauração, cobertura de ponto de verificação e retenção.
- pi-goal-x: controles de meta e auditoria de conclusão opcional.
- Lightpanda: extração de DOM e navegação funcional através da minha habilidade de navegador.
- Integração de agente Rex: controle de sessão de terminal, aba e painel através da minha habilidade Rex.
- UI SDK: as bibliotecas de comportamento/componente de interface visadas pela minha habilidade
ui-sdk. - Bun, TypeScript e Zod: executando, implementando e validando solicitações no meu gateway de inferência local do Pi.

