Toda a configuração do harness/pipeline de qualidade em um lugar só. Três canais: env vars (persistentes), slashes (sessão), /config quality (inspeção).
/config quality
Comando único que lista todo o estado do pipeline:
Saída típica:
✨ HARNESS/PIPELINE DE QUALIDADE DO AGENTE ──────────────────
CHATCLI_QUALITY_ENABLED : enabled
Hooks registrados : pre=0, post=2
── Self-Refine (#5)
CHATCLI_QUALITY_REFINE_ENABLED : disabled
CHATCLI_QUALITY_REFINE_MAX_PASSES : 1
CHATCLI_QUALITY_REFINE_MIN_BYTES : 200
CHATCLI_QUALITY_REFINE_EPSILON : 50
CHATCLI_QUALITY_REFINE_EXCLUDE : formatter, deps, refiner, verifier
CHATCLI_QUALITY_REFINE_CONVERGENCE_ENABLED : enabled
CHATCLI_QUALITY_REFINE_CONVERGENCE_EMBEDDING : disabled
CHATCLI_QUALITY_REFINE_CONVERGENCE_STRICT : disabled
CHATCLI_QUALITY_REFINE_CONVERGENCE_CHAR_HIGH : 0.99
CHATCLI_QUALITY_REFINE_CONVERGENCE_JACCARD_HIGH: 0.95
CHATCLI_QUALITY_REFINE_CONVERGENCE_EMBEDDING_SIM: 0.92
── Chain-of-Verification / CoVe (#6)
CHATCLI_QUALITY_VERIFY_ENABLED : disabled
CHATCLI_QUALITY_VERIFY_NUM_QUESTIONS : 3
CHATCLI_QUALITY_VERIFY_REWRITE : enabled
CHATCLI_QUALITY_VERIFY_EXCLUDE : formatter, deps, shell, refiner, verifier
── Reflexion (#3)
CHATCLI_QUALITY_REFLEXION_ENABLED : enabled
CHATCLI_QUALITY_REFLEXION_ON_ERROR : enabled
CHATCLI_QUALITY_REFLEXION_ON_HALLUCINATION: enabled
CHATCLI_QUALITY_REFLEXION_ON_LOW_QUALITY : disabled
CHATCLI_QUALITY_REFLEXION_PERSIST : enabled
CHATCLI_QUALITY_REFLEXION_QUEUE_ENABLED : enabled
CHATCLI_QUALITY_REFLEXION_QUEUE_WORKERS : 2
CHATCLI_QUALITY_REFLEXION_QUEUE_CAPACITY: 1000
CHATCLI_QUALITY_REFLEXION_QUEUE_MAX_ATTEMPTS: 5
CHATCLI_QUALITY_REFLEXION_QUEUE_STALE_AFTER : 168h0m0s
Estado em tempo real : queue=0 dlq=0
── Plan-and-Solve / ReWOO (#2)
CHATCLI_QUALITY_PLAN_FIRST_MODE : auto
CHATCLI_QUALITY_PLAN_FIRST_THRESHOLD : 6
── RAG + HyDE (#4)
CHATCLI_QUALITY_HYDE_ENABLED : disabled
CHATCLI_QUALITY_HYDE_USE_VECTORS : disabled
CHATCLI_EMBED_PROVIDER : (not set)
CHATCLI_EMBED_MODEL : (not set)
CHATCLI_QUALITY_HYDE_NUM_KEYWORDS : 5
Índice vetorial : (not attached)
── Backbone de reasoning (#7)
CHATCLI_QUALITY_REASONING_MODE : auto
CHATCLI_QUALITY_REASONING_BUDGET : 8000
CHATCLI_QUALITY_REASONING_AUTO_AGENTS: planner, refiner, verifier, reflexion
Slash commands
/thinking — reasoning override
/thinking # mostra estado atual
/thinking auto # limpa override
/thinking off # força no-thinking no próximo turn
/thinking on # alias para /thinking high
/thinking low | medium | high | max
/thinking budget=N # tier mais próximo de N tokens
Detalhes: #7 Reasoning Backbone .
/plan — forçar Plan-and-Solve
Seis formas (autocomplete via Tab)
/plan # arma flag; próximo /agent ou /coder usa Plan-First
/plan < task livr e > # arma + entra em agent mode e executa
/plan agent < tas k > # equivalente explícito ao anterior
/plan coder < tas k > # entra em coder mode (engenheiro de software) e executa
/plan preview < tas k > # dry-run: gera e mostra o plano SEM executar
/plan dry < tas k > # alias de preview
Fluxo recomendado para mudanças grandes: /plan preview <task> → revise o plano → /plan coder <mesma task> para executar.
Detalhes: #2 Plan-and-Solve .
/refine — Self-Refine session toggle
/refine # estado atual
/refine on # liga para a sessão
/refine off # desliga
/refine once | next # liga (hoje idêntico a on)
/refine auto | clear # limpa override → usa /config
Detalhes: #5 Self-Refine .
/verify — CoVe session toggle
/verify # estado atual
/verify on # liga
/verify off # desliga
/verify once # liga uma vez
/verify auto # limpa override
Detalhes: #6 CoVe .
/reflect — fila durável de lições
Persistir lição manual (sem LLM)
Status
Inspecionar fila
Operações na DLQ
/reflect < texto livre da liçã o >
# Ex: /reflect quando editar arquivos Go grandes use Edit, não rewrite total
/reflect <texto livre> grava direto em memory.Fact (categoria=lesson, trigger=manual) sem chamada LLM . Os subcomandos de fila (list/failed/retry/purge/drain) mostram e operam sobre triggers automáticos (erro, alucinação, baixa qualidade) que ficam em WAL esperando processamento async.
/reflect retry e /reflect purge têm autocomplete dinâmico: Tab puxa IDs reais da DLQ com preview da task + último erro.
Detalhes completos: #3 Reflexion → Fila Durável .
Env vars — referência completa
Master switch
Env var Default Valores Efeito CHATCLI_QUALITY_ENABLEDtruetrue|falseDesligar o pipeline inteiro. false = Pipeline.Run → agent.Execute direto, zero overhead
Self-Refine (#5)
Env var Default Valores Efeito CHATCLI_QUALITY_REFINE_ENABLEDfalsetrue|falseLiga o RefineHook CHATCLI_QUALITY_REFINE_MAX_PASSES1int ≥ 1 Hard cap de passes CHATCLI_QUALITY_REFINE_MIN_BYTES200int ≥ 0 Skip outputs menores que N bytes CHATCLI_QUALITY_REFINE_EPSILON50int ≥ 0 Threshold do fallback char em caracteres CHATCLI_QUALITY_REFINE_EXCLUDEformatter,deps,refiner,verifierCSV Agents que não passam por refine
Cascade semântico de convergência
Env var Default Valores Efeito CHATCLI_QUALITY_REFINE_CONVERGENCE_ENABLEDtruetrue|falseMaster switch do cascade (char→Jaccard→embedding) CHATCLI_QUALITY_REFINE_CONVERGENCE_EMBEDDINGfalsetrue|falseInclui embedding scorer (opt-in — custa $) CHATCLI_QUALITY_REFINE_CONVERGENCE_STRICTfalsetrue|falseStrict: recusa convergência sem embedding CHATCLI_QUALITY_REFINE_CONVERGENCE_CHAR_HIGH0.990.0-1.0 Short-circuit CONVERGIU no char CHATCLI_QUALITY_REFINE_CONVERGENCE_CHAR_LOW0.30.0-1.0 Short-circuit DIVERGIU no char CHATCLI_QUALITY_REFINE_CONVERGENCE_JACCARD_HIGH0.950.0-1.0 Short-circuit CONVERGIU no Jaccard CHATCLI_QUALITY_REFINE_CONVERGENCE_EMBEDDING_SIM0.920.0-1.0 Threshold final do embedding cosine CHATCLI_QUALITY_REFINE_CONVERGENCE_CACHE_SIZE256int LRU cache size CHATCLI_QUALITY_REFINE_CONVERGENCE_CACHE_TTL_MIN5int TTL do cache (minutos) CHATCLI_QUALITY_REFINE_CONVERGENCE_BREAKER_THRESHOLD3int Falhas antes do breaker abrir
CoVe (#6)
Env var Default Valores Efeito CHATCLI_QUALITY_VERIFY_ENABLEDfalsetrue|falseLiga o VerifyHook CHATCLI_QUALITY_VERIFY_NUM_QUESTIONS3int 1-7 Número de perguntas de verificação CHATCLI_QUALITY_VERIFY_REWRITEtruetrue|falseReescrever output em discrepância CHATCLI_QUALITY_VERIFY_EXCLUDEformatter,deps,shell,refiner,verifierCSV Agents que não passam por verify
Reflexion (#3)
Env var Default Valores Efeito CHATCLI_QUALITY_REFLEXION_ENABLEDtruetrue|falseLiga o ReflexionHook CHATCLI_QUALITY_REFLEXION_ON_ERRORtruetrue|falseDisparar em erro de worker CHATCLI_QUALITY_REFLEXION_ON_HALLUCINATIONtruetrue|falseDisparar em verified_with_discrepancy CHATCLI_QUALITY_REFLEXION_ON_LOW_QUALITYfalsetrue|falseDisparar em refine_low_quality CHATCLI_QUALITY_REFLEXION_PERSISTtruetrue|falseEscrever em memory.Fact
Fila durável (WAL + worker pool + DLQ)
Env var Default Valores Efeito CHATCLI_QUALITY_REFLEXION_QUEUE_ENABLEDtruetrue|falseLiga a fila (default). false = modo legado (goroutine) CHATCLI_QUALITY_REFLEXION_QUEUE_WORKERS2int ≥ 1 Workers processando em paralelo CHATCLI_QUALITY_REFLEXION_QUEUE_CAPACITY1000int Cap in-memory CHATCLI_QUALITY_REFLEXION_QUEUE_DROP_OLDESTfalsetrue|falsetrue = drop oldest; false = blockCHATCLI_QUALITY_REFLEXION_QUEUE_BLOCK_TIMEOUT5sduração Timeout do Enqueue com fila cheia CHATCLI_QUALITY_REFLEXION_QUEUE_MAX_ATTEMPTS5int ≥ 1 Retries totais CHATCLI_QUALITY_REFLEXION_QUEUE_INITIAL_DELAY1sduração Primeiro retry delay CHATCLI_QUALITY_REFLEXION_QUEUE_MAX_DELAY5mduração Cap no backoff exponencial CHATCLI_QUALITY_REFLEXION_QUEUE_JITTER0.20.0-0.5 Jitter fracionário CHATCLI_QUALITY_REFLEXION_QUEUE_JOB_TIMEOUT2mduração Timeout per-job CHATCLI_QUALITY_REFLEXION_QUEUE_STALE_AFTER168hduração Records velhos descartados no replay CHATCLI_QUALITY_REFLEXION_QUEUE_BASE_DIR— path Override do diretório da fila
Plan-and-Solve (#2)
Env var Default Valores Efeito CHATCLI_QUALITY_PLAN_FIRST_MODEautooff|auto|alwaysQuando disparar CHATCLI_QUALITY_PLAN_FIRST_THRESHOLD6int 0-10 Score mínimo para auto disparar
RAG + HyDE (#4)
Env var Default Valores Efeito CHATCLI_QUALITY_HYDE_ENABLEDfalsetrue|falseLiga phase 3a (keyword expansion) CHATCLI_QUALITY_HYDE_USE_VECTORSfalsetrue|falseLiga phase 3b (vector search) CHATCLI_QUALITY_HYDE_NUM_KEYWORDS5int ≥ 1 Cap de keywords da hipótese
Embedding providers (usado por HyDE 3b)
Env var Default Valores Efeito CHATCLI_EMBED_PROVIDERnullvoyage / openai / bedrock / nullEscolhe o backend de embeddings CHATCLI_EMBED_MODELprovider default string Voyage: voyage-3. OpenAI: text-embedding-3-small / -large. Bedrock: amazon.titan-embed-text-v2:0 (default), amazon.titan-embed-text-v1, cohere.embed-english-v3, cohere.embed-multilingual-v3. CHATCLI_EMBED_DIMENSIONSnativa do modelo int OpenAI: trunca via Matryoshka (text-embedding-3-small=1536, -large=3072 nativo). Bedrock Titan v2: aceita 256 / 512 / 1024 (rejeita outros). Bedrock Titan v1 / Cohere v3: dimensão fixa, ignorada. VOYAGE_API_KEY— string Necessário para provider=voyage OPENAI_API_KEY— string Necessário para provider=openai (usa a mesma chave do chat) BEDROCK_REGION / AWS_REGION / AWS_PROFILE / credenciais AWSconforme chat Bedrock — Necessárias para provider=bedrock — reusa a mesma cadeia da feature AWS Bedrock (IAM role, SSO, assume-role, profile).
Bedrock embeddings suportam Titan (single-text por chamada — paralelizado com pool de 8 workers internamente) e Cohere v3 (batch nativo). A dispatch entre famílias é auto pelo prefixo do model id. Veja RAG + HyDE para arquitetura completa.
Reasoning Backbone (#7)
Env var Default Valores Efeito CHATCLI_QUALITY_REASONING_MODEautooff|auto|onPolítica de auto-attach CHATCLI_QUALITY_REASONING_BUDGET8000int (tokens) Budget de thinking (Anthropic); mapeado para tier na OpenAI CHATCLI_QUALITY_REASONING_AUTO_AGENTSplanner,refiner,verifier,reflexionCSV Lista para mode=auto
Overrides por agent (aplicam a qualquer agent built-in)
Env var Efeito CHATCLI_AGENT_<NAME>_MODELForça modelo específico para aquele agent CHATCLI_AGENT_<NAME>_EFFORTForça effort tier (low|medium|high|max)
<NAME> é o nome em uppercase. Para os novos: REFINER, VERIFIER.
# Exemplos
export CHATCLI_AGENT_REFINER_MODEL = "claude-haiku-4-5"
export CHATCLI_AGENT_VERIFIER_MODEL = "claude-opus-4-8"
export CHATCLI_AGENT_VERIFIER_EFFORT = "max"
Presets recomendados
Dev barato (default)
Code review rigoroso
Docs técnicas
Incident investigation
Autopilot batch
# Sem ajustes: chatcli out-of-the-box já é barato
# ReAct + Reasoning auto para Planner + Reflexion on (só em erros)
Custo extra por turn : zero normalmente; +1 LLM call em erros raros.export CHATCLI_QUALITY_REFINE_ENABLED = true
export CHATCLI_QUALITY_REFINE_MAX_PASSES = 2
export CHATCLI_QUALITY_VERIFY_ENABLED = true
export CHATCLI_QUALITY_VERIFY_NUM_QUESTIONS = 5
Custo extra : +3-4 calls por worker com output não-mecânico. Use em PR reviews críticos.export CHATCLI_QUALITY_REFINE_ENABLED = true
export CHATCLI_QUALITY_VERIFY_ENABLED = true
export CHATCLI_QUALITY_HYDE_ENABLED = true
# Opcional: HyDE vectors para recall máximo
export CHATCLI_QUALITY_HYDE_USE_VECTORS = true
# Escolha um provider de embeddings (qualquer um destes funciona):
# — Voyage (recomendado pela Anthropic)
export CHATCLI_EMBED_PROVIDER = voyage
export VOYAGE_API_KEY = pa- ...
# — OpenAI (se já tem OPENAI_API_KEY no ambiente)
# export CHATCLI_EMBED_PROVIDER=openai
# — Bedrock (mesma cadeia AWS do chat, sem nova API key)
# export CHATCLI_EMBED_PROVIDER=bedrock
# export CHATCLI_EMBED_MODEL=amazon.titan-embed-text-v2:0
# export BEDROCK_REGION=us-east-1
Custo extra : +1 HyDE hypothesis + refine + verify por doc geração. Output polido e factualmente checado.export CHATCLI_QUALITY_REASONING_MODE = on
export CHATCLI_QUALITY_REASONING_BUDGET = 16384
export CHATCLI_QUALITY_REFLEXION_ON_LOW_QUALITY = true
Custo extra : thinking máximo em todos agents + lesson generation generosa. Use em root-cause analysis.export CHATCLI_QUALITY_PLAN_FIRST_MODE = always
export CHATCLI_QUALITY_REFINE_ENABLED = true
export CHATCLI_QUALITY_VERIFY_ENABLED = true
export CHATCLI_QUALITY_REASONING_MODE = on
Custo extra : todos os padrões ligados sempre. Use em workflows sem user na frente (cron, CI).
Desligar tudo
Se algo quebra em produção e você precisa voltar ao comportamento pré-pipeline instantaneamente:
export CHATCLI_QUALITY_ENABLED = false
Isso faz Pipeline.Run degenerar em return agent.Execute(...) — byte-identical ao chatcli pré-PR. Zero hooks, zero reasoning auto-attach, zero HyDE.
O master switch é a saída de emergência. Os toggles individuais são para afinar cenários; o master é para rollback.
O harness/pipeline de qualidade não conflita com, nem substitui:
Feature Relação Skills (com frontmatter effort:) Ganha de applyAutoReasoning (skill hint já no ctx) Personas (custom agents) Podem ter effort: no .md; override por agente continua funcionando Multi-agent orchestration Dispatcher continua idêntico; pipeline só envolve cada worker Policy (CODER policy rules) Aplicada dentro do worker, independente de refine/verify/reflexion MCP tools Resultado de MCP tools passa pelo pipeline como qualquer outro worker output
Leia também
Visão Geral dos 7 padrões Volte ao hub.
Environment Variables (completo) Toda a matriz de env vars do ChatCLI.
Command Reference Todos os slashes.
/config (hierárquico) Como /config <section> foi estruturado.