1
Árbol de Decisión del Harness
dynamic-harness-decision-tree
1
Tarea única (one-shot)
→ Mantener inline. No crear harness.
2
Tarea repetida con inputs cambiantes
→ Harness task-local bajo /tmp o project-local.
3
Tarea repetida entre teammates o repos
→ Extraer patrón a Shared Skill + Harness documentado.
4
Estado externo, colas o aprobaciones
→ Añadir visibilidad en control pane antes de más automatización.
5
Tarea con riesgo de seguridad
→ Eval gate + human merge gate antes de ejecución autónoma.
2
Contrato del Harness
harnesses/flowtrack-onboarding/HARNESS.md
harnesses/flowtrack-onboarding/HARNESS.md
🎯 OBJECTIVE
Ship:
✓ Workspace configurado, emails disparados, informe CS generado, eval 7 días registrada
NOT ship:
✗ Comunicación con cliente antes de aprobación CS. Acceso a datos de producción sin pasar eval gate.
📥 INPUTS
Repo:
flowtrack/onboarding-agentSistemas:
Stripe webhook · Supabase (DB) · Resend API · Notion API (plantillas)
Creds:
⚠ Solo via
process.env.* — nunca hardcodedConstraints:
Máx. 2 agentes paralelos · No tocar prod hasta gate
📤 OUTPUTS
Artefactos:
workspace_config.jsonemails_dispatched.logcs_brief_{client_id}.mdeval_7d_report.json
Estado:
status.json actualizado en cada paso🔄 LOOP DE EJECUCIÓN
01
Discover — Leer webhook Stripe, extraer
customer_id, plan, email, empresa. Verificar en Supabase que el cliente no existe ya.02
Generate — Crear workspace en Notion desde plantilla del plan. Generar
workspace_config.json con permisos según tier.03
Eval check — Validar que config tiene todos los campos requeridos. PARAR si falla. Enviar al CS para aprobación.
04
Gate humano — Esperar aprobación CS en Slack (#onboarding-review). Solo continuar si
status == "approved".05
Dispatch — Enviar secuencia de emails via Resend (bienvenida + 3 drip). Registrar en
emails_dispatched.log.06
Record + Handoff — Escribir
status.json + cs_brief.md. Programar eval de 7 días. Stop.🛑 CONDICIONES DE STOP
Gate fail:
STOP — Config inválida o campos faltantes
Ownership:
STOP — Cliente ya existe en Supabase
Unsafe:
STOP — Intento de escribir en DB de producción sin flag
--prod-confirmedParalelo:
QUEUE — Si hay 2 agentes activos, encolar siguiente
3
Eval Gates
task-specific · reproducible by any teammate
| Tipo de work | Comando eval | Señal de pass | Failure owner |
|---|---|---|---|
| Config workspace | node scripts/validate-config.js workspace_config.json | exit 0 + "all fields valid" | CS Engineer |
| Envío de emails | node scripts/dry-run-emails.js --env staging | 3 emails en Resend sandbox, no errores 4xx | Growth Ops |
| Webhook Stripe | stripe trigger customer.subscription.created | Harness inicia, customer_id extraído correctamente | Backend |
| Eval 7 días | node scripts/eval-activation.js --days 7 --client <id> | JSON con activated: true/false + steps_completed[] | CS Lead |
| No-secret scan | grep -r "sk_" . --include="*.js" --include="*.json" | 0 matches (exit 1 = BLOCKER) | Security (auto) |
4
Control Pane Checkpoints
estado actual del harness · sesión 1 de 2
PLAN
Objetivo: workspace + emails
Owner: CS Team
Aceptación: eval 7d > 60%
Riesgo: Stripe webhooks prod
QUEUE
3 clientes pendientes
2 agentes activos
1 en cola
Branch: feat/onboarding-v1
RUN
Paso actual: 04 (gate CS)
Eval: config ✓
Esperando: aprobación Slack
Coste: ~$0.12/onboarding
GATE
Config validate: PASS
Dry-run emails: PASS
No-secret scan: PASS
CS approval: PENDING
HANDOFF
Done: config + dry-run
Blocked: CS gate
Human needed: sí
ETA: 30 min
5
Artefacto de Handoff
harnesses/flowtrack-onboarding/handoff.md · generado automáticamente
COMPLETADO
Webhook Stripe → customer extraído (id: cus_PQ9x12)
Workspace Notion generado con permisos plan Scale
workspace_config.json validado (11/11 campos)
Dry-run emails OK en sandbox (3 mensajes)
No-secret scan: 0 matches
BLOQUEADO
Envío de emails al cliente — esperando aprobación CS
Escritura en Supabase prod — requiere flag --prod-confirmed
Eval de activación 7 días — programada, no iniciada aún
PRÓXIMO PASO
CS aprueba en #onboarding-review (Slack)
Harness reanuda desde paso 05 (dispatch emails)
Programar cron eval-7d para cliente cus_PQ9x12
Revisar eval-7d en sesión 2 del harness
6
Candidatos a Shared Skill
promote when 2+ criteria met
saas-client-onboarding
PROMOVER
Flujo completo webhook → workspace → emails → eval. Aparece en 3 clientes SaaS diferentes este mes.
multi-sesión
multi-equipo
contrato I/O estable
failures repetidos
control pane
stripe-webhook-parser
PROMOVER
Extracción normalizada de datos de eventos Stripe. Reutilizada en onboarding, churn, y billing.
multi-repo
I/O estable
un solo equipo
sin gate propio
resend-email-sequence
EVALUAR
Dispatcher de secuencias drip via Resend con dry-run y sandbox. 2 usos confirmados.
multi-proyecto
aún una sesión
sequencing específico
falta test coverage
7
Anti-Patrones Evitados en Este Harness
validated against skill anti-patterns
Sin lógica oculta — NO scripts que esconden decisiones: cada paso del loop es explícito y trazable en HARNESS.md
NO skip de tests: modo dinámico no es excusa para omitir evals. Hay 5 gates obligatorios antes de tocar producción.
NO docs one-off: el handoff.md es un artefacto de estado, no documentación estática. Se regenera cada sesión.
NO multi-agente sin ownership: 2 agentes máx con merge gate y conflict policy explícita en HARNESS.md §6.
NO datos privados en docs públicos: cs_brief_{id}.md se genera localmente, nunca se comitea. .gitignore incluye harnesses/*/output/
NO credenciales en código: política explícita de
process.env.* con no-secret scan como gate obligatorio.8
Output Standard — Resumen de Entregables
finish checklist
Harness Path
harnesses/flowtrack-onboarding/HARNESS.md
Eval Commands
5 gates · 3 PASS · 1 PENDING · 1 QUEUED
Control Pane
status.json + handoff.md (sesión 1/2)
Extraction Candidate
skills/saas-client-onboarding/SKILL.md