thinking_budget em tokens; OpenAI o-series expõe reasoning effort como enum low/medium/high. O pipeline abstrai isso em SkillEffort e auto-attacha ao ctx antes de cada chamada LLM dos agents que fazem reasoning pesado.
A abstração cross-provider é pré-existente em
llm/client/skill_hints.go. O que o pipeline adiciona é: política de auto-attach (auto para agents listados), session override via /thinking, e exposição em /config quality.A abstração existente (pré-pipeline)
llm/client/skill_hints.go:
client.EffortFromContext(ctx) dentro de seus SendPrompt, traduzem para o campo nativo, e enviam.
Auto-attach: o que o pipeline adiciona
applyAutoReasoning(ctx, cfg ReasoningConfig, agent WorkerAgent) context.Context:
cfg.Budget (tokens) para o tier SkillEffort mais próximo:
Três modos
- auto (default)
- on
- off
AutoAgents. Agents mecânicos (formatter, shell) não pagam pelo thinking mais caro.Prioridade de resolução
Para uma chamada LLM dentro de um worker, o effort hint é resolvido nesta ordem (último ganha):1
Skill frontmatter
Se o turn ativou uma skill com
effort: high, esse hint já está no ctx antes do dispatcher.2
Agent default
PlannerAgent tem effort="high" embutido; dispatcher attacha via WithEffortHint.3
CHATCLI_QUALITY_REASONING_*
applyAutoReasoning só attacha se (1) mode não é off e (2) ctx ainda não tem effort hint.4
/thinking session override
No chat (cli_llm.go) e no orchestrator turn (agent_mode.go),
cli.applyThinkingOverride(skillEffort) ganha de tudo acima para aquele turn./thinking off pode forçar zero thinking mesmo se o agente tem default high. Útil para turns onde velocidade importa mais que qualidade.
/thinking — o slash
cli.thinkingOverride:
Providers que suportam
Por que duas linhas Anthropic: a partir do Opus 4.7, a Anthropic descontinuou budgeted extended thinking e passou a aceitar apenas
thinking:{type:"adaptive"} — enviar budget_tokens para 4.7 / 4.8 retorna HTTP 400. O ChatCLI dispatcha lendo a capability flag adaptive_thinking no catálogo, então o mesmo hint effort: high é traduzido automaticamente na shape certa por modelo. Adicionar novos modelos adaptive-only no futuro é mudança só no catálogo.Variáveis de ambiente
Override por agent
Cada agent também tem seu próprio default viaBuiltinAgentMeta:
agent.Effort() → se não-vazio, attacha via WithEffortHint. Isso ganha do applyAutoReasoning (ver passo 2 da priority).
Interação com effort hints de skills
Skills podem declarar effort no frontmatter:/skill), skillEffortHint é setado e propagado. A ordem fica:
Skills e reasoning backbone são ortogonais e compostos. Skill diz “a task toda precisa de effort alto”; quality diz “estes agents específicos sempre pensam”; o usuário pode sobrescrever com
/thinking.Observabilidade
/config quality mostra o estado:
Custo
Estratégia de budget recomendada:Troubleshooting
Provider parece não estar usando thinking
Provider parece não estar usando thinking
- Check
/config quality— confirmeCHATCLI_QUALITY_REASONING_MODE != off - Check
CHATCLI_QUALITY_REASONING_AUTO_AGENTSinclui o agent que está rodando - Check logs do provider —
thinking_budgetdeve aparecer no request body - Para Anthropic via OAuth: precisa de beta header
interleaved-thinking-2025-05-14(já ativo emclaude_client.go:46)
/thinking não persiste entre turns
/thinking não persiste entre turns
Correto!
/thinking on vale para o próximo turn apenas, depois o flag se mantém mas pode ser limpo com /thinking auto ou /thinking off. Cada /thinking substitui o anterior.Custo explodiu depois de ativar reasoning
Custo explodiu depois de ativar reasoning
O budget default (8000) é calibrado para Sonnet. Para Opus ou GPT-5, considere baixar:
CHATCLI_QUALITY_REASONING_BUDGET=4000. Ou use mode=off e dispare manualmente com /thinking só quando faz diferença.Leia também
Multi-Agent Orchestration
Como os effort hints fluem do dispatcher para workers paralelos.
Skills and Registry
Como skills declaram
effort: no frontmatter.OpenAI Responses API
Documentação oficial do reasoning.effort.
Anthropic Extended Thinking
Documentação oficial do thinking_budget.