🆚 Prompt Único vs Automation Recorrente
Prompt único = você dispara, agente faz, acabou. Automation = agente acorda sozinho em horário/evento, sem você lembrar. Confundir os dois é o erro de design mais comum — e o mais caro.
Prompt Único
- •Disparo manual quando precisa
- •Contexto fresco em cada execução
- •Bom para tarefas únicas
- •Custo previsível por execução
- •Você lembra de rodar
Automation Recorrente
- •Roda sozinho por cron/webhook
- •Estado entre execuções (cache)
- •Bom para repetições previsíveis
- •Custo mensal multiplicado por N
- •Você esquece (bom e ruim)
💡 Regra prática
Se você executa algo ≥ 2x/semana e o disparo é previsível, vira automation. Se é raro ou contexto muda muito, mantém prompt único. Promover prompt repetido para automation é o ganho compounding da fábrica.
💼 Casos Reais de Automation
Quatro automations que pagam mensalidade por si só. Cada uma é vendável como add-on do seu micro-SaaS ou serviço avulso recorrente.
| Automation | Trigger | Output | Preço/mês |
|---|---|---|---|
| 📊 Relatório semanal de vendas | cron seg 09h | PDF + e-mail | R$ 400 |
| 🎯 Triagem matinal de issues | cron 08h dia útil | labels + comments | R$ 300 |
| 🤖 Dependabot review | webhook PR aberta | aprovação ou bloqueio | R$ 250 |
| 🔒 Scan de vulnerabilidade | cron domingo 22h | issue + Slack alert | R$ 500 |
📌 Combo de margem alta
Pacote "DevOps Inteligente" = 4 automations acima por R$ 1.200/mês. Custo de execução: ~R$ 80 em tokens. Margem 93%. Setup: 2h. Cliente vê valor desde o primeiro relatório recebido. Esse é o tipo de oferta que vira contrato anual com pouca discussão.
⚙️ Configurando uma Automation
Automation versionada é auditável e reproduzível. Use YAML no repo, env vars para secrets, dry-run antes de ativar. Sem isso, vira "magia que só você sabe configurar" — e morre quando você sai de férias.
📄 Exemplo: relatório-semanal-vendas.yml
name: relatorio-semanal-vendas
description: Gera PDF com vendas da semana e envia por e-mail.
trigger:
type: cron
schedule: "0 9 * * MON" # toda segunda 09:00
timezone: America/Sao_Paulo
inputs:
cliente_id: "{{ secrets.CLIENTE_ID }}"
periodo_dias: 7
steps:
- id: fetch
run: |
codex run "Busque vendas dos ultimos {{ periodo_dias }} dias
do cliente {{ cliente_id }} no Convex e agrupe por produto."
- id: render
run: |
codex run "Renderize relatorio em PDF usando template
./templates/vendas.html com os dados de {{ steps.fetch.output }}."
- id: send
run: |
codex run "Envie {{ steps.render.output }} por e-mail
para {{ secrets.EMAIL_DESTINO }} com assunto 'Vendas semanais'."
budget:
max_cost_per_run_brl: 8
max_runs_per_month: 5
on_failure:
notify: slack://#alerts
🧪 Sequência de validação
codex automation validate ./relatorio.yml— checa sintaxecodex automation dry-run ./relatorio.yml— simula sem efeitos colateraiscodex automation run-once ./relatorio.yml— executa imediatamente uma vezcodex automation enable ./relatorio.yml— ativa o cron
📅 Schedule: Cron Expression e Janela
Cron mal configurado dispara em horário errado, polui logs e gera complaint do cliente. Conhecer minimamente timezone, jitter e retries elimina 90% dos incidentes.
🕒 Cron expression — leitura rápida
┌──── minuto (0-59)
│ ┌── hora (0-23)
│ │ ┌─ dia mes (1-31)
│ │ │ ┌─ mes (1-12)
│ │ │ │ ┌─ dia semana (0-6, 0=DOM)
│ │ │ │ │
0 9 * * MON → toda segunda 09:00
*/15 * * * * → a cada 15 minutos
0 22 * * SUN → domingo 22:00
0 8 1-5 * * → 08:00 dos dias 1 a 5 do mes
🌍 Timezone
Sempre IANA (ex: America/Sao_Paulo). Nunca UTC sem comentar — relatório do cliente do RJ no horário errado é constrangedor.
timezone: America/Sao_Paulo
🎲 Jitter
10 clientes com cron "0 9" disparam todos às 09:00 = thundering herd. Jitter espalha em janela.
jitter: 5min
🔁 Retries
Falhou? Backoff exponencial 3 tentativas. API instável é parte da vida.
retries: { max: 3, backoff: exp }
🪟 Janela
"Rode em qualquer momento entre 08h e 10h" — útil quando horário exato não importa.
window: "08:00-10:00"
👀 Monitoramento: Quando Algo Deu Errado
Sem monitoramento, automation que falha 3 dias seguidos te queima com cliente. Com logs estruturados, alerta no Slack e fallback graceful, você corrige antes do cliente perceber.
🛎️ Webhook de alerta no Slack
// scripts/notify-slack.js
const fetch = require('node-fetch');
async function notifySlack(automation, status, error) {
const color = status === 'error' ? '#dc2626' : '#16a34a';
const payload = {
attachments: [{
color,
title: `[${status.toUpperCase()}] ${automation}`,
fields: [
{ title: 'Cliente', value: process.env.CLIENTE_ID, short: true },
{ title: 'Horário', value: new Date().toISOString(), short: true },
{ title: 'Erro', value: error || '—', short: false }
],
footer: 'Codex Automations'
}]
};
await fetch(process.env.SLACK_WEBHOOK, {
method: 'POST',
body: JSON.stringify(payload)
});
}
module.exports = notifySlack;
🔄 Fallback graceful
Se a execução falhou, o cliente não pode receber "(vazio)". Use o último output bom como fallback temporário e dispare alerta interno.
try {
const report = await generateReport();
await sendEmail(report);
await cache.save('last_good', report);
} catch (err) {
await notifySlack('relatorio-semanal', 'error', err.message);
const lastGood = await cache.load('last_good');
await sendEmail({ ...lastGood, notice: 'Dados da semana anterior — atualização em andamento' });
}
💰 Custos: Usage Budget para Automations
Cliente paga R$ 800/mês. Se a automation custar R$ 1.000 em tokens, é prejuízo. Calibrar budget é matemática direta de margem, não detalhe técnico.
| Mecanismo | O que faz | Quando usar |
|---|---|---|
| Hard limit | Mata execução ao atingir teto | Sempre — última linha de defesa |
| Soft alert | Notifica em 80% do limite | Antecipar antes de bater hard |
| Cost per run | Cap por execução individual | Loop mal configurado |
| Modelo Fast | Substitui High em automations rotineiras | Triagem, classificação, scan |
| Cache de resultados | Reusa output quando input não mudou | Inputs estáveis (ex: scan diário) |
📊 Cálculo de margem por cliente
Receita: R$ 1.200/mês. Custos: tokens R$ 80 + Convex R$ 25 + Slack/email R$ 0 = R$ 105. Margem bruta: 91%. Multiplicado por 10 clientes = R$ 12k de margem mensal — com 0 horas adicionais depois do setup. Esse é o motor da fábrica.
✅ O que Aprendemos
Próximo Módulo:
6.3 — Criando Suas Próprias Skills: anatomia, frontmatter, progressive disclosure e a skill autoral "novo-vertical" que clona o InboxAI por nicho.