Corrección de rumbo. El bot no necesita menos responsabilidad — necesita mejor coordinación interna. · 2026-04-13
No es que el bot no pueda hacer tareas complejas. Es que la coordinación interna entre PMO → dev → producción no tiene gates de verificación. El flujo actual es:
Frank pide cambio
→ PMO delega al dev_agent
→ dev_agent commitea algo
→ PMO reporta "listo ✅" a Frank sin verificar
→ Frank descubre que está mal
→ vuelta a empezar
El PMO confía ciegamente en el output del dev_agent. No hay un "Smith" (governance agent) que valide el artefacto antes de que llegue al cliente. Eso es lo que rompe la confianza de Frank — no la capacidad del dev, sino la falta de QA interno antes de reportar.
Flujo actual (roto):
Frank: "cambia el H1 a 'Tu lugar en el ecosistema'" PMO → dev_agent: "hazlo" dev_agent: commit + push PMO → Frank: "listo ✅" ← SIN VERIFICAR Frank: "no lo hiciste bien" ← DESCUBRIMIENTO TARDÍO
Flujo propuesto (con gate Smith):
Frank: "cambia el H1 a 'Tu lugar en el ecosistema'"
PMO → dev_agent: "hazlo"
dev_agent: commit + push
PMO [GATE]: verificar ANTES de reportar
├─ Opción A: invocar qa_agent con TestSprite → screenshot
├─ Opción B: curl + grep del string esperado
└─ Opción C: si no puede verificar → decirlo explícito
PMO evalúa resultado:
├─ APROBADO → Frank: "listo ✅ — evidencia: [screenshot/grep]"
├─ RECHAZADO → dev_agent: "el H1 dice X, debería decir Y, corrige"
└─ NO VERIFICABLE → Frank: "commiteado, no pude verificar estado enabled, confirma tú"
No requiere nuevo código Python — se implementa como cambio en el flujo del prompt del PMO. El PMO ya tiene acceso a Playwright, curl, y al qa_agent. Solo le falta la regla de no reportar sin verificar (que yo intenté agregar como parche pero la puse en la capa equivocada — el prompt individual en vez del flujo de coordinación).
La diferencia clave vs. mis parches anteriores: en vez de 7 reglas sueltas en el prompt ("verifica con curl", "no digas guardado sin guardar", etc.), una sola regla arquitectónica:
REGLA SMITH: Después de que el dev_agent complete una tarea, ANTES de responder al cliente: 1. Lee el diff del commit (git show HEAD) 2. Verifica contra el pedido original de Frank 3. Si hay cambio visual → curl/TestSprite/screenshot 4. Emite veredicto: APROBADO (reportar) / RECHAZADO (corregir) / NO VERIFICABLE (ser honesto) Solo APROBADO genera un mensaje a Frank con "✅".
Esto reemplaza los 7 parches sueltos con un solo patrón estructural. Y reduce el prompt de 966 líneas porque las reglas individuales se subsumen en el gate.
| Componente | Qué hace | Dónde vive |
|---|---|---|
feedback_tracker.py |
Loguea cada interacción: skill, modelo, tokens, éxito/fallo, corrección de Frank | ~/shared/ |
weekly-feedback-digest.py |
Cron semanal: agrega logs, identifica patrones, genera digest HTML, flag skills con >3 fallos | ~/bin/ + cron domingo 7:30am |
| Auto-update BM | Los insights del digest se escriben en basic-memory → el bot los lee al arrancar | basic-memory/agents-pmo/feedback/ |
Ejemplo concreto: Si el digest detecta que "el dev_agent falla 4 de 5 veces cuando Frank envía instrucciones con imágenes adjuntas", esa info se escribe en basic-memory como feedback. En la próxima sesión, el PMO sabe: "cuando Frank manda imagen + texto, pedirle que describa en texto lo que quiere, no asumir que la imagen es suficiente".
Tallaje: M (~4-6h implementación). Sin dependencias. Primeras 2-3 semanas solo logging, después auto-ajuste.
El async generator corruption que causa exit 143 es un bug del claude_agent_sdk. Mientras Anthropic no lo parche, la única opción es detectar y reiniciar automáticamente.
# ~/bin/pmo-health-check.sh (cron cada 15 min) #!/bin/bash # Enviar query trivial al bot via Slack API RESPONSE=$(curl -s -X POST "https://slack.com/api/chat.postMessage" \ -H "Authorization: Bearer $SLACK_BOT_TOKEN" \ -d "channel=C_HEALTH_CHECK&text=ping" | jq -r '.ok') # Si el bot no responde en 30s → pool muerto → restart if [ "$RESPONSE" != "true" ]; then systemctl restart agents-pmo.service echo "$(date): auto-restart triggered" >> /var/log/pmo-health.log fi
Más elegante: agregar un /health endpoint al bot que responda "ok" si el pool tiene al menos 1 cliente pre-warmed. El cron chequea ese endpoint.
Tallaje: S (~2-3h). Sin dependencias. Elimina los downtimes de 12-60 min que Frank experimenta.
agentes_system_prompts — ¿agrega valor?| Patrón del repo | Cómo se aplica al pmo_agent |
|---|---|
| Smith como orquestador no-ejecutivo que valida cada artefacto antes de avanzar | El PMO deja de ser un "pass-through" que delega y reporta → se convierte en el gate que verifica output del dev_agent antes de reportar a Frank |
| Secuencia obligatoria (Requirements → Architecture → Design → Construction → Testing) | Para tasks M/L, el PMO impone: architect analiza primero → dev ejecuta → qa verifica → PMO reporta. Para tasks S, el dev ejecuta directo pero PMO sigue verificando |
| Decisiones formales (APROBADO / RECHAZADO / BLOQUEADO) | El PMO emite veredicto interno antes de responder a Frank. "RECHAZADO → dev corrige" es invisible para Frank. "APROBADO → reportar con evidencia" es lo que Frank ve |
| Trazabilidad de artefactos | Cada respuesta a Frank cita: qué pidió (su mensaje original), qué se commiteó (hash), qué se verificó (curl/screenshot), qué doc de BM se actualizó (path) |
| Patrón del repo | Por qué no aplica |
|---|---|
Agentes como archivos .claude/agents/*.md |
Nuestro stack usa Python + Claude Agent SDK + AgentPool, no Claude Code agents. La implementación es distinta aunque el patrón es el mismo. |
| SWEBOK V4.0 como base de conocimiento | Útil para proyectos de ingeniería de software formal. LPDI es un producto SaaS iterativo con un PO (Frank) que refina sobre la marcha — el formalismo completo de SWEBOK es overkill. |
| 7 agentes especializados | Nuestro stack tiene 4 (PMO + architect + dev + qa). No necesitamos separar "diseño" de "construcción" ni agregar un "requirements specialist" porque Frank es el PO y define requerimientos directamente. Menos agentes = menos coordinación = menos puntos de fallo. |
| # | Cambio | Talla | Impacto | Dependencias |
|---|---|---|---|---|
| 1 | Health check + auto-restart Cron cada 15 min que detecta pool muerto y reinicia |
S 2-3h |
🟢 Elimina downtimes de 12-60min | Ninguna |
| 2 | PMO como Smith (gate de verificación) Refactorizar el prompt: 1 regla arquitectónica en vez de 7 parches sueltos. PMO verifica antes de reportar. |
S-M 3-4h |
🟢 Corta el patrón de "listo ✅ sin verificar". Reduce prompt de 966 → ~400 líneas. | Ninguna |
| 3 | Feedback loop Logger + cron semanal + auto-update de BM con learnings |
M 4-6h |
🟡 El bot deja de repetir errores. ROI crece con el tiempo. | 2-3 semanas de data antes de auto-ajustar |
| 4 | Routing por costo model_router.py — Haiku para S, Sonnet para M, Opus para L |
S 2-3h |
🟡 Ahorro 30-50% en costos API sin reducir calidad | Ninguna (pero medir 1 semana antes de optimizar) |
Total estimado: ~12-16h. Sin dependencias entre los 4 cambios — se pueden hacer en cualquier orden. El #1 (health check) es el quick win inmediato. El #2 (gate Smith) es el cambio estructural que más impacta la experiencia de Frank.
Generado por Claude Code · 2026-04-13 · Para Roberto Aguirre
Fuentes: Ruflo Analysis · agentes_system_prompts