/coder é especializado para tarefas de engenharia de software com ciclo de leitura, alterações e feedback.
Ele dá mais rigorosidade que o /agent, porque o assistente segue um contrato de saída para que o ChatCLI execute ações com segurança (e semântica de reversão).
Quando usar
Use /coder para...
Use /agent para...
Fluxo de Engenharia
Orquestração Multi-Agent
O/coder inclui orquestração multi-agent ativada por padrão. O LLM orquestrador despacha agents especialistas em paralelo:
CHATCLI_AGENT_MAX_WORKERS).
CHATCLI_AGENT_PARALLEL_MODE=false se necessário. Veja a documentação completa.Contrato de Saída
O formato de resposta do assistente no/coder é obrigatório:
Reasoning
reasoning curto (2 a 6 linhas).Tool Call
tool_call name="@coder" args="..." com JSON nos args.Sem comandos diretos
@coder.Validação e Enforcement do Contrato
Quando a IA viola o contrato de saída, o ChatCLI detecta automaticamente e injeta uma mensagem de feedback de correção de formato. O turno é reprocessado até que o formato esteja correto. As regras de enforcement são:agent_coder_validation.go — um módulo dedicado que inspeciona cada resposta da IA antes de executar qualquer tool_call. A sequência é:
- Parse da resposta — extrai
<reasoning>,<tool_call>, blocos de código e texto solto - Checagem de reasoning — se
<tool_call>existe mas<reasoning>não, rejeita - Checagem de tool name — se o
namedotool_callnão é@coder, rejeita - Checagem de code blocks — se há blocos de código (
```) na resposta, rejeita - Checagem de shell patterns — detecta padrões como
$ cmd,> cmd,run: cmd - Se qualquer checagem falha, injeta feedback e retenta o turno (até 3 tentativas)
Diferença Interna entre /coder e /agent
Ambos os modos usam o mesmo loop ReAct (processAIResponseAndAct). A diferença está na configuração, não na arquitetura:
/coder é o /agent com guardrails adicionais. Se você mudar de /agent para /coder no meio da conversa, o histórico é mantido — apenas as regras de validação e o system prompt mudam.isCoderMode é o que ativa todas as diferenças. Quando true:
- O validador de contrato é executado em cada resposta
- O contexto de tools é reduzido para economizar tokens
- O anchor de formato é específico para
@coder - O system prompt inclui regras de base64 encoding
Task Tracker e Progresso
Quando a IA inclui um bloco<reasoning> com tarefas numeradas (ex: “1. Ler arquivos\n2. Aplicar patch\n3. Rodar testes”), o TaskTracker faz o parse automaticamente e cria um TaskPlan:
Como funciona
- Parse: Cada linha numerada vira uma
Taskcom status inicialPending - Tracking: Conforme tool_calls são executados, o status da tarefa atual é atualizado
- Renderização: O progresso aparece abaixo do reasoning como linhas compactas de status
Status de cada tarefa
Replanejamento automático
Se 3 ou mais tarefas falham consecutivamente, o TaskTracker sinalizaNeedsReplan = true. O ChatCLI então injeta uma mensagem de sistema pedindo à IA para reformular seu plano antes de continuar.
O TaskTracker também calcula uma assinatura (hash) do plano. Se a IA mudar seu plano entre turnos (ex: adicionar ou remover tarefas), o tracker detecta a mudança e reinicia o tracking com o novo plano.
TodoWrite parity — plugin @todo
Além do TaskTracker (que extrai tarefas do bloco <reasoning> automaticamente), o modo agente expõe um plugin atômico @todo com paridade ao TodoWrite do Claude Code. A IA pode emitir explicitamente:
liveTodoAdapter, então o checkbox UI renderiza o mesmo plano que aparece em <reasoning>. Detalhes em Atomic Tools.
Requisitos de Codificação Base64
Para operações de escrita e patch, o system prompt do/coder exige codificação base64:
Por que base64?
Conteúdo de código frequentemente contém caracteres que conflitam com o formato JSON dos args:- Aspas duplas e simples
- Quebras de linha
- Barras invertidas (escapes)
- Indentação com tabs vs. espaços
Regras de encoding
Flag --encoding
A flag --encoding controla a interpretação do conteúdo:
text(padrão): conteúdo é interpretado como texto literalbase64: conteúdo é decodificado de base64 antes de ser escrito
Composição do System Prompt no /coder
O system prompt é montado em camadas, na seguinte ordem:Camada 1: Persona ou CoderSystemPrompt
--persona senior-go), o prompt da persona é usado como base. Caso contrário, o CoderSystemPrompt padrão é utilizado.Camada 2: CoderFormatInstructions
CoderFormatInstructions são anexadas ao prompt da persona. Isso garante que a persona respeite o contrato de saída do /coder. Quando não há persona, as instruções já estão embutidas no CoderSystemPrompt.Camada 3: Contexto do Workspace
contextBuilder:SOUL.md— personalidade e diretrizes globaisUSER.md— preferências do usuárioRULES.md— regras específicas do projeto
Camada 4: Contexto de Tools
@coder é incluído: lista de subcomandos, flags obrigatórias e 1-2 exemplos por subcomando. No modo /coder, esse contexto é reduzido comparado ao /agent para economizar tokens.Camada 5: Prompt do Orquestrador Multi-Agent
CHATCLI_AGENT_PARALLEL_MODE=true), o prompt do orquestrador multi-agent é anexado com a lista de agents disponíveis e instruções de despacho.Anchor de Formato (Lembrete Per-Turn)
A cada turno do loop ReAct, um lembrete curto de formato é anexado ao histórico de mensagens. Isso evita que a IA “esqueça” as regras de formato em conversas longas.No modo /coder
O anchor lembra:- Formato obrigatório:
<reasoning>seguido de<tool_call name="@coder"> - Proibição de blocos de código e comandos diretos
- Exigência de base64 para escrita de arquivos
No modo /agent
O anchor lembra:- Formato de
tool_calle blocosexecute - Ferramentas disponíveis no turno atual
Ferramentas e Dependência
O modo/coder utiliza o plugin @coder, que já vem embutido no ChatCLI — nenhuma instalação adicional necessária.
Subcomandos Suportados
Exemplo de Fluxo
Listar a árvore
tree --dir .Buscar ocorrências
search --term "FAIL" --dir .Ler arquivos relevantes
read --file cli/agent_mode.goAplicar patch
patch --file cli/agent_mode.go --search "..." --replace "..."Rodar testes
exec --cmd "go test ./..."Paralelização de Operações
O/coder maximiza paralelismo emitindo múltiplos tool_calls em uma única resposta quando as operações são independentes. Por exemplo, ao precisar ler 3 arquivos, a IA emite 3 tool_call tags de uma vez em vez de uma por turno.
Para tarefas complexas com 3+ operações independentes, a IA usa <agent_call> para despachar agents especializados em paralelo via goroutines.
Interação com o Usuário (Ask When Needed)
Nem sempre a IA tem todas as informações necessárias para executar uma tarefa. Quando precisa de dados que só o usuário pode fornecer (banco de dados, framework, credenciais, escolha entre opções), a IA pergunta diretamente em vez de adivinhar.Como funciona
Quando a IA responde sem emitir nenhumtool_call (apenas texto com a pergunta), o ChatCLI detecta isso e:
- Exibe a pergunta da IA normalmente
- Mostra o prompt
⏳ Aguardando sua resposta...em vez de encerrar a sessão - Aguarda o usuário digitar a resposta
- Adiciona a resposta ao histórico e continua o ciclo ReAct
<reasoning> + <tool_call> normalmente.
Respostas multilinha
Se a resposta for complexa, use o modo multilinha com--- (também aceita ``` como abridor de fence):
UX do prompt em modo coder (paridade com chat)
A entrada que aparece quando o/coder está aguardando sua resposta usa a mesma engine de readline do modo chat (go-prompt + BracketedPasteParser). Isso significa:
Sair da sessão
Para encerrar a sessão quando a IA está aguardando, digite:exit,quitousair- Ou pressione
Ctrl+C
/coder. A IA é instruída a não emitir tool_calls quando precisa de informações do usuário, e sim fazer a pergunta diretamente. Isso garante que o ChatCLI detecte a pergunta e aguarde a resposta.FAQ
Posso usar JSON em args?
Posso usar JSON em args?
tool_call name="@coder" args='{"cmd":"read","args":{"file":"main.go"}}'Quando usar patch --diff?
Quando usar patch --diff?
text ou base64.Preciso instalar o @coder separadamente?
Preciso instalar o @coder separadamente?
@coder é um plugin builtin — já vem embutido no binário. Se instalar uma versão customizada em ~/.chatcli/plugins/, ela prevalece sobre o builtin.exec é seguro?
exec é seguro?
@coder exec bloqueia padrões perigosos por padrão. Para comandos sensíveis, prefira usar os subcomandos Git e test.Existe limite de leitura?
Existe limite de leitura?
read --max-bytes, --head ou --tail para controlar o tamanho da saída.Como o /coder lida com erros de formato da IA?
Como o /coder lida com erros de formato da IA?
Posso usar /coder com uma persona customizada?
Posso usar /coder com uma persona customizada?
--persona senior-go), o prompt da persona é usado como base e as CoderFormatInstructions são automaticamente anexadas. Isso garante que a persona respeite o contrato de saída do /coder sem perder sua personalidade customizada.O que é o Task Tracker?
O que é o Task Tracker?
<reasoning> da IA (ex: “1. Ler arquivos\n2. Aplicar patch”). Cada tarefa recebe um status (Pending, InProgress, Completed, Failed) que é atualizado conforme os tool_calls são executados. O progresso é exibido na interface. Se 3+ tarefas falham, o ChatCLI solicita à IA que reformule seu plano.Por que base64 é obrigatório para write?
Por que base64 é obrigatório para write?