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:
| Budget (tokens) | Tier resultante |
|---|---|
≥ 16384 | EffortMax |
≥ 8192 | EffortHigh |
≥ 4096 | EffortMedium |
< 4096 ou 0 | EffortHigh (default sane) |
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):Skill frontmatter
Se o turn ativou uma skill com
effort: high, esse hint já está no ctx antes do dispatcher.CHATCLI_QUALITY_REASONING_*
applyAutoReasoning só attacha se (1) mode não é off e (2) ctx ainda não tem effort hint./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
| Provider | Campo nativo | Notas |
|---|---|---|
| Anthropic Claude | thinking: {type: enabled, budget_tokens: N} | Beta header interleaved-thinking-2025-05-14 |
| OpenAI o1 / o3 / o4 | reasoning: {effort: "low|medium|high"} | Via /v1/responses endpoint |
| Anthropic via Bedrock | Mesma shape, mas via AWS API | Suporta thinking |
| Demais providers | Ignoram silenciosamente | Fall-through sem erro |
Variáveis de ambiente
| Env var | Default | Valores | O que faz |
|---|---|---|---|
CHATCLI_QUALITY_REASONING_MODE | auto | off|auto|on | Política |
CHATCLI_QUALITY_REASONING_BUDGET | 8000 | int | Tokens de thinking (Anthropic); mapeado para tier na OpenAI |
CHATCLI_QUALITY_REASONING_AUTO_AGENTS | planner,refiner,verifier,reflexion | CSV | Lista para mode=auto |
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:| Cenário | Recomendação |
|---|---|
| Chat casual | CHATCLI_QUALITY_REASONING_MODE=off |
| Dev diário | mode=auto, budget=8000 (default) |
| Workflows críticos (refactors grandes, debugging) | /thinking max no turn específico |
| Batch sem user na frente | mode=on, budget=16384 |
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.