Um Bot de standup em 90 linhas de TOML
Um agente autónomo que trabalha sem si, usa apenas shell + git e lembra entre sessões.
O problema
Standup é uma tarefa repetitiva. Esquece o que fez ontem. O seu histórico do git sabe, mas não tem tempo para revê-lo todas as manhãs. E quando escreve notas, elas costumam ser genéricas e pouco úteis.
E se um agente pudesse fazer isso por si, todos os dias no mesmo horário, sem que tivesse de pedir?
A config
O agente completo é definido em standup_bot.toml : 90 linhas de TOML. Sem Python. Sem JavaScript. Sem dependências de runtime além do QueryMT.
Definição do agente
[agent] provider = "anthropic" model = "claude-sonnet-4-5-20250929" assume_mutating = false # No mutating tools — this agent is strictly read-only mutating_tools = []
assume_mutating = false e uma lista mutating_tools vazia significam que este agente nunca pode escrever em disco nem correr comandos mutantes. Ele lê o histórico do git e escreve no knowledge store; nada mais.
Seleção de tools
[agent] tools = [ # Git & codebase analysis (read-only) "read_tool", "index", "glob", "search_text", "ls", "shell", # Knowledge lifecycle — the magic "knowledge_ingest", # Store findings "knowledge_query", # Recall past standups "knowledge_consolidate", # Merge daily → weekly "knowledge_list_unconsolidated", "knowledge_stats", # Task tracking "create_task", "todowrite", "todoread", ]
Três tools gerem a memória persistente: knowledge_ingest guarda descobertas estruturadas, knowledge_query as recupera, e knowledge_consolidate funde entradas relacionadas em resumos de nível mais alto. O agente lembra automaticamente entre sessões.
Compactação de contexto em três camadas
# Layer 1: Tool output truncation [agent.execution.tool_output] max_lines = 1000 max_bytes = 25600 # Layer 2: Pruning after every turn [agent.execution.pruning] protect_tokens = 20000 # Layer 3: AI summary on context overflow [agent.execution.compaction] auto = true
A saída de git log pode ser enorme. Estas três camadas mantêm a janela de contexto gerível: truncam a saída de tools em 1000 linhas, podam mensagens antigas enquanto protegem as recentes e resumem automaticamente a conversa quando ela cresce demais.
Middleware: limites de execução
[[middleware]] type = "limits" max_steps = 30 # Max tool calls per cycle max_turns = 15 # Max conversation turns [[middleware]] type = "context" warn_at_percent = 80 # Warn when 80% of context used compact_at_percent = 90 # Auto-compact at 90% fallback_max_tokens = 128000
Com max_steps = 30 e max_turns = 15, cada ciclo agendado tem um teto estrito de custo. O agente não pode sair do controle. A gestão de contexto garante que ele não alcance limites de tokens inesperadamente.
Configurar o agendamento
Depois de iniciar o dashboard, crie um agendamento pela UI:
- Abra Session -> Schedules -> Create Schedule
- Prompt: "Run a standup cycle: analyze recent git activity, ingest findings, and report."
- Trigger: Interval,
86400segundos (cada 24 horas) - Max runs: 30 (um mês de standups diários)
- Max steps: 20
Depois de 30 execuções (um mês), o agendamento expira automaticamente. Sem processos órfãos. Sem limpeza necessária.
O que acontece
Todos os dias no mesmo horário, o agente corre este ciclo de forma autônoma:
git log das últimas 24 horas. Lê ficheiros modificados, mensagens de commit e padrões de diff. Com o tempo, o agente constrói um grafo de conhecimento do histórico do seu projeto. A consolidação semanal funde standups diários em resumos semanais. Consulte standups passados a qualquer momento:
# Ask the agent in the dashboard:
"What were the main themes from last week's standups?" Funcionalidades-chave
- Agendamento por intervalo — corre numa cadência fixa, sem interação do utilizador
- Ciclo de vida do conhecimento — ingestão diária, consolidação semanal, consulta a qualquer momento
- Execução autônoma — o bot faz o trabalho sem si ficar olhando
- Custo limitado —
max_stepsemax_turnsevitam custos descontrolados - Compactação em três camadas — lida com elegância com saídas grandes de git
- Expiração automática do agendamento — sem processos órfãos depois do período de teste
Experimente
# Clone and run git clone https://github.com/querymt/querymt.git && cd querymt cargo run --example qmtcode --features dashboard -- \ confs/standup_bot.toml --dashboard # In the dashboard, create a schedule: # Session -> Schedules -> Create Schedule # Prompt: "Run a standup cycle: analyze recent git activity, ingest findings, and report." # Trigger: Interval, 86400s (daily) # Max runs: 30