Un Standup Bot en 90 líneas de TOML
Un agente autónomo que trabaja sin ti, usa solo shell + git y recuerda entre sesiones.
El problema
El standup es una tarea repetitiva. Olvidas qué hiciste ayer. Tu historial de git lo sabe, pero no tienes tiempo de revisarlo cada mañana. Y cuando escribes notas, suelen ser genéricas y poco útiles.
¿Y si un agente pudiera hacerlo por ti, todos los días a la misma hora, sin que se lo pidas?
La config
El agente completo se define en standup_bot.toml : 90 líneas de TOML. Sin Python. Sin JavaScript. Sin dependencias de runtime más allá de QueryMT.
Definición del 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 y una lista mutating_tools vacía significan que este agente nunca puede escribir en disco ni ejecutar comandos mutantes. Lee el historial de git y escribe en su knowledge store; nada más.
Selección 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", ]
Tres tools gestionan la memoria persistente: knowledge_ingest guarda hallazgos estructurados, knowledge_query los recupera, y knowledge_consolidate fusiona entradas relacionadas en resúmenes de mayor nivel. El agente recuerda automáticamente entre sesiones.
Compactación de contexto en tres capas
# 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
La salida de git log puede ser enorme. Estas tres capas mantienen manejable la ventana de contexto: truncan la salida de tools a 1000 líneas, podan mensajes antiguos mientras protegen los recientes y resumen automáticamente la conversación cuando crece demasiado.
Middleware: límites de ejecución
[[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
Con max_steps = 30 y max_turns = 15, cada ciclo programado tiene un techo estricto de costo. El agente no puede descontrolarse. La gestión de contexto asegura que no llegue inesperadamente a los límites de tokens.
Configurar el horario
Después de lanzar el dashboard, crea un horario desde la UI:
- Abre 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 (un mes de standups diarios)
- Max steps: 20
Después de 30 ejecuciones (un mes), el horario expira automáticamente. Sin procesos huérfanos. Sin limpieza necesaria.
Qué ocurre
Cada día a la misma hora, el agente ejecuta este ciclo de forma autónoma:
git log para las últimas 24 horas. Lee archivos modificados, mensajes de commit y patrones de diff. Con el tiempo, el agente construye un grafo de conocimiento del historial de tu proyecto. La consolidación semanal fusiona standups diarios en resúmenes semanales. Consulta standups pasados en cualquier momento:
# Ask the agent in the dashboard:
"What were the main themes from last week's standups?" Funciones clave
- Programación por intervalo — corre con una cadencia fija, sin interacción del usuario
- Ciclo de vida del conocimiento — ingesta diaria, consolidación semanal, consulta en cualquier momento
- Ejecución autónoma — el bot hace su trabajo sin que lo estés mirando
- Costo acotado —
max_stepsymax_turnsevitan costos descontrolados - Compactación en tres capas — maneja con elegancia salidas grandes de git
- Expiración automática del horario — sin procesos huérfanos después del período de prueba
Pruébalo tú mismo
# 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