chatcli daemon start --detach) — mas funcionam igual em modo in-process se você mantiver o chatcli aberto.
1. Deploy Terraform + espera K8s + valida
Subir infraestrutura viaterraform apply, esperar o deployment ficar Available, então imprimir o estado final. Tudo em uma linha — você pode fechar o CLI.
2. Docker compose + healthcheck + smoke tests
and(...) só satisfaz quando o container está healthy e o endpoint retorna 200 — evita o caso clássico de “container up mas app ainda inicializando”.
3. Backup noturno com cron
- Roda todo dia às 02:00 locais.
- Timeout de 1h (restore longo tolerado).
- Até 3 retries com exponential backoff.
- TTL de 7 dias em
/jobs history. - Filtrável por tag em
/jobs list --tag category=backup.
4. Esperar condição e notificar Slack
Sem agendamento — um wait que só avisa quando o banco voltar:--async faz o comando retornar imediatamente (você recebe o job ID). Quando a porta abrir, o webhook dispara.
5. Pipeline DAG — multi-estágio
Deploy canário → smoke tests → rollout para o restante → notificar:rollout e notify ficam StatusFailed com dependency failed no message.
6. Agent agendando sozinho (ReAct)
Você pede algo que demora; o agent decide pausar e voltar:schedule com async:true + triggers para encadear; na próxima conversa o resultado já está no contexto.
7. Job que se auto-limita (budget)
Rate-limit e budget explícitos para evitar LLM cost runaway:- Uma retry só.
- 2 min cap na LLM call (se o modelo travar, falha rápido).
CHATCLI_SCHEDULER_RATE_LIMIT_OWNER_RPS para cap global.
8. Probe periódico com circuit breaker automático
--on-timeout fire_anyway dispara a action mesmo — que por sua vez chama o agent para criar a issue.
Após 5 falhas consecutivas em 60s, o circuit breaker do http_status abre por 30s — os próximos probes retornam OutcomeBreakerOff sem bombardear a API caída.
9. Cancelar em massa via tag
/jobs cancel --tag direto, a combinação IPC + shell basta.
10. Auditoria e troubleshooting
type, timestamp, job_id, status, message e payload completo do evento — use como base para alertas em Splunk/Datadog/Loki.
Troubleshooting comum
Job fica em pending e não dispara
Job fica em pending e não dispara
Verifique:
/config schedulermostraenabled?CHATCLI_SCHEDULER_ACTION_ALLOWLISTinclui o tipo da ação?- Rate limiter não rejeitou (veja
chatcli_scheduler_enqueue_errors_total{reason="rate_limited"})? - Daemon está rodando?
chatcli daemon status.
Wait fica polling para sempre
Wait fica polling para sempre
- Você setou
--timeout? (default 30m) - Cheque breaker state:
/config schedulermostrabreakersna seção daemon; ou métricachatcli_scheduler_breaker_state. - Teste a condição isoladamente com
/wait --until <cond> --async— quando dispara, confere que o evaluator está funcionando.
Daemon não inicia ('address already in use')
Daemon não inicia ('address already in use')
Socket stale de um crash anterior. O start tenta limpar automaticamente, mas pode falhar se outro processo ainda estiver travado nele:
/schedule falha com ErrShellPolicyAsk ou ErrShellPolicyDeny
/schedule falha com ErrShellPolicyAsk ou ErrShellPolicyDeny
Seu comando shell é classificado pelo CoderMode no momento do Ou edite o JSON direto se preferir bulk edit.ErrShellPolicyAsk — o comando bateria num prompt “Allow once / Allow always / Deny” se rodasse interativamente. O scheduler nunca prompta. Três saídas:
/schedule (preflight). Dois casos:ErrShellPolicyDeny — o comando (ou um padrão que casa com ele) está na denylist em ~/.chatcli/coder_policy.json. --i-know NÃO tira essa rejeição; denylist é autoritativa. Remova com:- Pré-aprovar este job específico com
--i-know: - Adicionar permanentemente à allowlist — uma linha:
Também dá pra rodar o comando uma vez via
/coderinterativo e escolher “Allow always” no prompt (mesma infraPolicyManager.AddRulepor baixo). Ambos persistem em~/.chatcli/coder_policy.json. - Converter pra
agent_taskouslash_cmd— comandos via agent passam pela política interativa no momento do fire.
ErrShellPolicyDeny no log — não executa.Shell action bloqueado — quero bypass total (trusted CI)
Shell action bloqueado — quero bypass total (trusted CI)
Pra automação em container efêmero de CI onde você controla a sandbox:Ambos precisam estar presentes —
bypass_safety sozinho sem a env var do operator é rejeitado. Isso impede um agent de escrever bypass_safety:true no spec e escapar da política sem o operator ter ativado antes.Próximos passos
Doc da feature
Arquitetura, invariantes e padrões plug-in completos.
Referência de comandos
Todas as flags e subcomandos.