/agent ou /coder roda dentro dele: cada agente especializado (FileAgent, CoderAgent, Planner, Refiner, …) executa seu próprio loop Reason → Act → Observe até resolver a tarefa ou atingir o limite.
ReAct sempre está ativo. Os demais seis padrões do pipeline compõem em volta dele sem substituí-lo.
Como funciona
Reason
O LLM recebe o system prompt do agente + a tarefa + histórico de observações e produz uma resposta que pode conter texto de raciocínio, uma
<tool_call>, uma <agent_call>, ou a resposta final.Act
Se houve tool/agent call, o chatcli executa (shell, file read, API call, sub-agent dispatch, …) e captura a saída.
Observe
A saída da tool volta para o histórico como mensagem de sistema — o próximo turno do LLM já vê o resultado.
Arquitetura no código
Configuração
| Env var | Default | O que faz |
|---|---|---|
CHATCLI_AGENT_WORKER_MAX_TURNS | 30 | Limite de turnos por worker |
CHATCLI_AGENT_WORKER_TIMEOUT | 10m | Timeout por worker individual |
CHATCLI_AGENT_PARALLEL_MODE | true | Desativa orquestração multi-agent (mas ReAct continua) |
Interação com o resto do pipeline
Dentro doPipeline.Run, o fluxo é:
Observabilidade
Cada turno do loop emite eventos estruturados viazap.Logger:
AgentEvent{Type: Started|Completed|Failed} via canal (ver DispatchWithProgress), consumidos pela UI para renderizar a timeline.
Leia também
Multi-Agent Orchestration
Como o dispatcher fan-out paralelo coordena vários workers ReAct ao mesmo tempo.
#7 Reasoning Backbone
Como o effort hint é auto-atachado ao ctx antes de cada turno.