pcommittee (comitê de causa raiz com dois agentes)
Visão Geral
Dois agentes, duas famílias de modelos, o mesmo problema, contexto fresco em ambos os lados. Eles analisam em paralelo; você os faz debater onde discordam; você sintetiza o que sobrevive. Depois VOCÊ implementa — o comitê nunca toca em arquivos.
Quando vale o custo: você deu duas voltas no mesmo loop, o bug não tem causa raiz óbvia,
ou um plano é caro o suficiente para merecer uma segunda e terceira opinião antes de ser construído. Dois
agentes xhigh não são baratos. Para uma opinião use padvisor; para delegar trabalho use pspawn
ou phandoff.
O que os agentes gerados podem fazer. Ambos rodam sem prompts de permissão com o padrão da equipe
(bypassPermissions no Claude, full-access no Codex), mas são somente leitura por instrução, não por modo:
o sufixo 'sem edições' no prompt os impede de alterar arquivos. Uma equipe que queira mais pode solicitar no
AGENTS.md do repositório, que também é uma instrução, ou bloquear com regras de permissions.deny do Claude Code,
que ainda se aplicam em bypassPermissions.
Invocação
/pcommittee <problema> — o par padrão está abaixo; membros nomeados pelo usuário o substituem.
Composição
Contraste é o mecanismo, não um detalhe. Dois agentes da mesma família produzem o mesmo ponto cego duas vezes e chamam a concordância de confirmação.
O comitê padrão emparelha claude e codex; ambos devem aparecer como available e Enabled em
paseo provider ls:
- Membro A: o Opus mais recente que
paseo provider models claudelista (por exemplo,claude/claude-opus-5-5) · raciocínioxhigh· modobypassPermissions - Membro B: o modelo mais recente do Codex, o primeiro id em
paseo provider models codex· raciocínioxhigh· modofull-access
Leia os ids dessas listas, nunca da memória. O membro claude usa o id simples, que é o modelo de 1M
(pspawn explica por que sem [1m]). Ambos os membros rodam sem prompts de permissão, como todo spawn (padrão da
equipe); o sufixo 'sem edições', não o modo, os impede de alterar arquivos.
Se o usuário nomear membros, use esses. Se apenas uma família estiver disponível, informe e execute padvisor
em vez de fingir que um comitê de um membro é um comitê.
Passos
1. Escreva UM prompt de problema. Ambos os membros recebem o texto idêntico — prompts diferentes tornam a discordância um artefato da sua redação em vez de uma divergência real.
Escreva-o em um arquivo próprio e passe "$(cat <arquivo_prompt>)" para ambos os spawns. Digitar o mesmo
heredoc duas vezes é como os textos silenciosamente divergem; um arquivo torna a identidade estrutural em vez de
cuidado. Crie o arquivo com mktemp e use o caminho que ele imprime como <arquivo_prompt>: um nome fixo em
/tmp colide com o comitê de outra sessão e é legível por qualquer usuário; um arquivo mktemp é novo para esta
rodada e legível apenas por você.
Comece com o idioma da resposta, aquele em que a conversa do usuário está (Responda em <idioma>.) — os
membros respondem no idioma em que o prompt está, e uma conversa em um idioma com dois relatórios em outro é
atrito que você paga na hora da síntese.
[O idioma da conversa do usuário, como instrução: "Responda em <esse idioma>."]
## O problema
[O que está errado ou indeciso. Sintomas, não sua teoria — sua teoria é o que você quer testado.]
## O que se sabe
[Fatos, medições, mensagens de erro, ipsis litteris. Não conclusões.]
## O que foi tentado
- [Abordagem] — [o que aconteceu, por que foi abandonada]
## Onde olhar
- `/caminho/absoluto/arquivo.ts` — [o que é e por que importa]
## O que quero de volta
Uma análise de causa raiz e um plano. Declare sua confiança e nomeie o que falsificaria seu diagnóstico.
Se o problema, como enquadrado, for o problema errado, diga isso primeiro.
Isto é apenas análise. NÃO edite, crie ou exclua nenhum arquivo. NÃO escreva código.
Mantenha SUA própria hipótese FORA do prompt, ou você a receberá de volta duas vezes em palavras diferentes. Se precisar mencioná-la, marque-a como uma hipótese a ser atacada.
2. Gere ambos como filhos desta sessão. Disponibilidade do provedor primeiro, exatamente como no passo 1 do
pspawn (<diretório base desta skill>/../pspawn/SKILL.md). Depois, na mesma resposta para que pensem em
paralelo:
paseo run --no-wait --json --provider '<claude/opus-mais-recente>' --thinking xhigh \
--mode bypassPermissions --title "[Comitê A] <tópico>" "$(cat <arquivo_prompt>)"
paseo run --no-wait --json --provider '<codex/mais-recente>' --thinking xhigh \
--mode full-access --title "[Comitê B] <tópico>" "$(cat <arquivo_prompt>)"
No paseo, ambos caem no workspace desta sessão por conta própria, como filhos desta sessão — e
permanecem assim: não os desanexe. O comitê pertence a esta pergunta; arquivar esta sessão os arquiva
também, que é o que deve acontecer. Fora do paseo, adicione --workspace <id>, consultado uma vez
como no passo 2 do pspawn.
3. Aguarde ambos — um paseo-notify por membro, depois encerre sua vez.
paseo-notify <id-a>; paseo-notify <id-b>
A mensagem de cada membro chega por conta própria. Se um já terminou e o outro ainda está processando, encerre
sua vez novamente; a segunda mensagem o acorda. finished its turn → respondeu. is waiting for a permission → uma solicitação está esperando por você. stopped with an error → informe e leia seus logs;
não o recrie silenciosamente. Um limite de uso não o acorda: paseo-limit-watch retoma o membro e
reativa a vigília, onde sua linha cron está instalada (veja o README); sem ela, verifique o membro
você mesmo após o reset. Os membros normalmente levam de 15 a 30 minutos. Nunca faça polling, nunca use sleep,
nunca envie mensagens de pressa.
Fora do paseo (sem $PASEO_AGENT_ID): paseo wait <id-a> --json; paseo wait <id-b> --json em UMA
chamada bash com run_in_background: true e leia cada status do JSON, nunca o código de saída.
Em caso de permission (raro em bypass e full-access, mas um rm -rf ainda pergunta) o membro para
com ninguém vigiando. Leia (paseo permit ls), decida se está dentro do mandato que você deu, depois
paseo permit allow <agent-id> <request-id> ou deny (ambos os ids de paseo permit ls) e ative
paseo-notify novamente. Fora do mandato ou duvidoso → pergunte ao
usuário, não aprove por ele.
4. Leia ambos.
paseo logs <id> --filter text --tail 3
pagent.py <id> -t -n 3 --full (<diretório base desta skill>/../pagent/) é mais rico, com
carimbos de data/hora, e lê tanto o membro Claude quanto o Codex igualmente.
5. Faça-os debater. Este é o passo que torna um comitê melhor que dois agentes — pulá-lo deixa você com dois relatórios e nenhuma resolução.
Encontre onde eles realmente divergem — uma causa raiz diferente, uma correção diferente, uma avaliação de risco diferente. Ignore diferenças de redação e ênfase; essas não são discordâncias.
Para cada divergência real, envie a cada membro o argumento do OUTRO:
paseo send --behavior steer --no-wait <id-a> "O Membro B conclui <X>, com base nestes fundamentos: <raciocínio ipsis litteris>. Aborde isso diretamente: onde B está errado, ou onde você estava? Mude sua posição se B estiver certo — diga claramente se não."
paseo send --behavior steer --no-wait <id-b> "O Membro A conclui <Y>, com base nestes fundamentos: <raciocínio ipsis litteris>. Aborde isso diretamente: onde A está errado, ou onde você estava? Mude sua posição se A estiver certo — diga claramente se não."
Raciocínios longos ipsis litteris são mais fáceis de passar como arquivo: escreva a mensagem e use
paseo send --behavior steer --no-wait --prompt-file <arquivo> <id>. Se o provedor não aceitar
direcionamento (steering), pode recorrer à interrupção. paseo send revive um agente arquivado — verifique
ArchivedAt em paseo inspect <id> --json primeiro; não reviva membros arquivados.
--no-wait é obrigatório aqui. paseo send simples BLOQUEIA até o agente terminar — dois envios
bloqueantes executam os membros sequencialmente em vez de em paralelo, e só o primeiro já estoura o
limite de 10 minutos do Bash em primeiro plano. Dispare ambos sem bloqueio, depois ative ambas as vigílias novamente (passo 3) e leia novamente
(passo 4). Duas rodadas normalmente são suficientes. Se eles ainda
discordarem após duas rodadas, pare e relate a discordância como resultado — uma divergência genuína e
não resolvida entre dois modelos fortes é um achado real sobre o problema, e forçar consenso com
uma terceira rodada o destrói.
6. Sintetize para o usuário:
- No que ambos concordaram — esta é a parte estrutural
- Onde divergiram e como se resolveu (ou que não se resolveu)
- Sua própria leitura, marcada como sua
- O plano que você seguiria agora
7. Arquive ambos — paseo archive <id> cada — a menos que o usuário queira continuar questionando-os.
Erros comuns
| Erro | Correção |
|---|---|
| Dois membros da mesma família de provedor | Contraste é o mecanismo — claude + codex |
| Prompt diferente por membro | Um arquivo, "$(cat …)" em ambos os spawns — dois heredocs divergem |
| Idioma da resposta não declarado | Membros respondem no idioma do prompt; comece com o do usuário |
| Sua própria hipótese declarada como fato no prompt | Deixe-a de fora, ou marque-a como hipótese a ser atacada |
| Pular a rodada de debate | Dois relatórios não são um comitê — o passo 5 é o valor |
| Forçar consenso na terceira rodada | Uma divergência não resolvida entre dois modelos fortes É o achado |
Confiar no código de saída de paseo wait | Ele é 0 para ocioso, permissão e erro igualmente — leia status de --json |
| Espera em primeiro plano | run_in_background: true; o limite de 10 minutos do Bash mata a espera, não os agentes |
Membro Codex deixado em seu modo padrão, ou claude em auto | codex → full-access, claude → bypassPermissions (padrões da equipe); um membro em seu modo padrão para em prompts que ninguém responde |
| Polling / mensagens de pressa | paseo-notify por membro e encerre sua vez; membros raciocinam por 15–30 minutos |
paseo send simples na segunda rodada | Ele BLOQUEIA até terminar — --no-wait para ambos, depois passo 3 |
| Sufixo 'sem edições' omitido | Ambos os membros começam a implementar o que você pediu para analisar |
Desanexar os membros, ou env -u PASEO_AGENT_ID | Eles são filhos desta sessão de propósito: vão embora quando ela é arquivada |
| Executar um comitê em uma pergunta pequena | padvisor — um agente, uma opinião, uma fração do custo |