| name | embed-pi-cli |
| description | Orienta a implementação de integração embedável do pi em projetos CLI externos. Use quando um projeto precisar distribuir configuração pi, publicar extensões customizadas ou invocar pi como subprocesso com governança.
|
Embed Pi CLI
Use este skill quando o objetivo for tornar um projeto CLI externo capaz de usar as capacidades do pi (orquestração, budget, observabilidade) sem forkar o agents-lab.
Escolha o modelo de integração
Antes de qualquer implementação, identifique qual modelo se aplica:
A — Config embedding (mais simples): o projeto só precisa de uma configuração pré-definida. Distribua .pi/settings.json no repositório.
B — Extension bundle (controle total): o projeto tem comportamentos customizados. Publique um pacote npm com extensões próprias.
C — Subprocess bridge (integração programática): o projeto orquestra pi de fora (CI, pipeline). Invoque pi como subprocesso e consuma sessões JSONL.
D — Message adapter (ex.: Telegram/Matrix/WhatsApp): canal externo envia comandos/steering para o control plane. Trate o canal como UI degradada: ele pode acionar loops, acompanhar checkpoints e receber resumos, mas não é autoridade canônica e não bypassa budget/delivery/verification gates.
Se não tiver certeza, comece com A e evolua para B se precisar de tools/commands próprios.
Referência canônica
Guia completo: docs/guides/pi-embedding-cli.md
Pesquisa técnica: docs/research/pi-embedding-ecosystem-survey.md
Exemplo de extension mínima: packages/pi-stack/extensions/claude-code-adapter.ts
Fluxo recomendado
1) Definir o modelo
Responda:
- O projeto precisa de tools ou commands customizados? → B ou C
- O projeto invoca pi de CI/automação? → C
- Só precisa de configuração? → A
2) Implementar
Para modelo A:
- Criar
.pi/settings.json com packages + config de budgetPolicy e deliveryPolicy
- Documentar no README: pré-requisitos,
pi install, comando de início
- Testar com
PI_CODING_AGENT_DIR=/tmp/teste-isolado pi
Para modelo B:
- Criar pacote com estrutura
packages/meu-pi-stack/
- Entry point exporta função
default(pi: ExtensionAPI)
- Extensions em
extensions/, skills em skills/
- Publicar como
@meu-org/pi-stack e testar com pi install npm:@meu-org/pi-stack
Para modelo C:
- Usar
execFileNoThrow (nunca exec com string interpolada)
- Isolar sessões com
PI_CODING_AGENT_DIR por run
- Consumir sessões JSONL de
~/.pi/agent/sessions/<workspace-slug>/
3) Aplicar governança
Independente do modelo:
Para modelo D/message adapter:
4) Validar
pi install ./meu-pacote
pi
PI_CODING_AGENT_DIR=/tmp/pi-test pi --version
/colony-pilot status
Armadilhas comuns
| Problema | Causa | Solução |
|---|
| Sessões CI aparecem em quota-visibility do usuário | PI_CODING_AGENT_DIR não setado | Setar por run em CI |
Extension não carrega após pi install | Entry point não exporta default | Verificar export e build |
| Budget aberto em automação | hardCapUsd não configurado | Sempre definir cap conservador |
| Namespace colide com piStack first-party | Chave sob piStack conflita | Usar namespace próprio piStack.meuOrg.* |
Entregável esperado
Ao final da implementação, deve existir:
- Evidência de que o projeto funciona com
pi install limpo
- Budget policy ativa e testada
- Documentação de setup no README do projeto
- Sessões de teste isoladas e limpas