Ir al contenido

Multi-Agent Orchestration

Companion del AI-First Engineering Framework v6.5

Version: 2.0.0 | Fecha: Marzo 2026 Fuentes: Anthropic Trends (2026), MachineLearningMastery “7 Agentic Trends” (Ene 2026), GuruSup Multi-Agent Comparison (Mar 2026), Turing “6 Frameworks” (Feb 2026), Google ADK (Dic 2025), OpenAI “Harness Engineering” (Feb 2026)

“Single agents evolve into coordinated teams” — Anthropic, Trend #2 (2026)

SeñalAgente ÚnicoMulti-Agent
Tarea dura < 15 minOverkill
Tarea cruza > 2 dominiosPierde contexto
Output necesita review especializadoPosible✅ Más fiable
Paralelismo posibleNo✅ N tareas simultáneas
Context window > 80% llenoDegrada✅ Contextos frescos
Tarea > 1 horaCompaction frecuente✅ Sub-agents con scope
PATRON 1: ORCHESTRATOR → WORKERS (Hub & Spoke)
┌──────────────┐
│ Orchestrator │ ← Plan + Synthesize
│ (Lead) │
└──┬───┬───┬───┘
│ │ │
▼ ▼ ▼
┌──┐ ┌──┐ ┌──┐
│W1│ │W2│ │W3│ ← Implement tasks in parallel
└──┘ └──┘ └──┘
PATRON 2: PIPELINE (Sequential Handoff)
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ Spec │──►│ Plan │──►│Build │──►│Review│
│Agent │ │Agent │ │Agent │ │Agent │
└──────┘ └──────┘ └──────┘ └──────┘
PATRON 3: REVIEW LOOP (Build + Critique)
┌──────────┐ code ┌──────────┐
│ Builder │──────────►│ Reviewer │
│ Agent │◄──────────│ Agent │
└──────────┘ feedback └──────────┘
│ (iterate until approved)
✅ Merge
PATRON 4: SPECIALIST SWARM
┌──────────────┐
│ Coordinator │
└──┬───┬───┬───┘
│ │ │
▼ ▼ ▼
┌────┐┌────┐┌────┐
│Arch││ QA ││Sec │ ← Each reviews same artifact
└────┘└────┘└────┘
│ │ │
▼ ▼ ▼
┌──────────────┐
│ Merge │ ← Synthesize all feedback
└──────────────┘
IDAgentRolInvocaciónContext Scope
AG-01@architectReview arquitectura, ADRs, stack, AI partitionF04, F05ADRs + config + code structure
AG-02@qa_engineerTests, coverage, spec verificationF07Tests + specs + code
AG-03@security_reviewerSecurity, compliance, PII, OWASPF08Full code + deps + infra
AG-04@spec_writerGenera/refina specificationsF01, F05Requirements + domain docs
AG-05@code_reviewerReview de código AI-generatedF06PR diff + guidelines
AG-06@ops_engineerDeploy, monitoring, incident responseF09Infra config + logs
.claude/agents/spec_writer.md
# @spec_writer Agent
## Role
Generate and refine specifications from requirements.
Translate business intent into unambiguous technical specs.
## Capabilities
- Convert PRD/RFC into structured spec.md
- Generate OpenAPI specs from natural language
- Create Given/When/Then scenarios
- Identify ambiguities and ask clarifying questions
## Instructions
- Always use domain ubiquitous language
- Specs must be deterministic (no ambiguity)
- Include edge cases and error scenarios
- Reference existing ADRs for architectural constraints
- Output format: markdown with YAML code blocks
## Boundaries
- Do NOT write implementation code
- Do NOT make architecture decisions (defer to @architect)
- Always flag assumptions explicitly
.claude/agents/code_reviewer.md
# @code_reviewer Agent
## Role
Review AI-generated code for quality, consistency, and adherence
to project guidelines.
## Capabilities
- Review PRs for style, correctness, and security
- Verify code matches specification
- Check for common AI-generation anti-patterns
- Suggest improvements with specific code examples
## Review Checklist
1. Does the code match the spec?
2. Are there tests for all new functionality?
3. Does it follow project conventions (CLAUDE.md)?
4. Any security issues (injection, auth bypass, data leak)?
5. Is error handling comprehensive?
6. Are there AI hallucination artifacts (fake imports, non-existent APIs)?
7. Is the code maintainable by humans?
## Anti-Patterns to Flag
- Duplicate logic (AI often duplicates instead of extracting)
- Inconsistent naming (each generation uses different conventions)
- Over-engineering (AI loves abstractions)
- Missing error handling on happy path
- Fake/hallucinated library usage
# Formato estándar de handoff entre agentes
agent_message:
from: "@architect"
to: "@qa_engineer"
type: "task_handoff" # task_handoff | review_request | feedback | escalation
timestamp: "2026-03-19T15:00:00Z"
context:
phase: "F06_Build"
task_id: "TASK-042"
files_involved:
- src/api/search.ts
- src/services/embedding.ts
decisions_made:
- "Using pgvector for embeddings (ADR-002)"
- "Batch indexing, not real-time"
request: |
Implementation complete for search endpoint.
Please generate tests covering:
- Happy path: valid query returns results
- Edge: empty query, special characters
- Performance: response < 200ms for 10K docs
constraints:
- "Use vitest, not jest"
- "Mock external embedding API"
- "Min coverage: 85%"
Level 0: Agent handles autonomously
↓ (agent uncertain OR destructive action)
Level 1: Agent asks lead orchestrator
↓ (orchestrator uncertain OR cross-domain impact)
Level 2: Agent asks human for decision
↓ (business/legal/ethical decision)
Level 3: Full stop — human takes over

Cuando dos agentes dan recomendaciones contradictorias:

  1. @architect says: “Use microservice for search”
  2. @qa_engineer says: “Monolith is more testable”

Resolution: Defer to spec + ADRs. Si no hay ADR, escalar a humano para nueva ADR.

Ventana de terminal
# Ejecutar 3 features en paralelo con git worktrees
git worktree add ../feature-auth feature/auth
git worktree add ../feature-search feature/search
git worktree add ../feature-dashboard feature/dashboard
# Cada worktree tiene su propio agente
# Agent 1 en ../feature-auth
# Agent 2 en ../feature-search
# Agent 3 en ../feature-dashboard
# Merge cuando todos terminen
git merge feature/auth feature/search feature/dashboard
Ventana de terminal
# Un PR es revisado por 3 agentes simultáneamente
# Cada uno con diferente skill activada
# Terminal 1: Architecture review
claude --skill /f04_architecture "Review PR #42 for architecture"
# Terminal 2: Security review
claude --skill /f08_security "Review PR #42 for security"
# Terminal 3: Test coverage review
claude --skill /f07_tevv "Review PR #42 test coverage"
# Humano sintetiza los 3 reviews

Cada sub-agent debe operar con contexto mínimo necesario:

AgentContext necesarioContext prohibido
@architectADRs, config, structureTests, implementation details
@qa_engineerSpecs, tests, code under testInfra, deploy config
@security_reviewerAll code, deps, infra configBusiness requirements
@spec_writerRequirements, domain docsImplementation code
@code_reviewerPR diff, guidelines, specsUnrelated code

Cada sub-agent debe retornar output comprimido:

# Máximo: 1000-2000 tokens de output por sub-agent
output_format:
summary: "1-2 sentences of overall assessment"
findings:
- severity: critical|high|medium|low
location: "file:line"
description: "What's wrong"
suggestion: "How to fix"
verdict: pass|fail|needs_review
confidence: 0.0-1.0
Ventana de terminal
# Session 1: Orchestrator crea plan
claude "Read the spec at project/F05_contracts/.openspec/api-search.yaml
and create an implementation plan with 5 tasks.
Save to project/F06_build/plan-search.md"
# Session 2: Builder implementa task 1-3
claude "Read project/F06_build/plan-search.md.
Implement tasks 1-3. Run tests after each task."
# Session 3: Builder implementa task 4-5
claude "Read project/F06_build/plan-search.md.
Tasks 1-3 are done. Implement tasks 4-5."
# Session 4: Reviewer
claude --skill /f07_tevv "Review all changes in src/api/search.ts
against the spec. Check test coverage."
scripts/multi-agent-pipeline.py
#!/usr/bin/env python3
"""Pipeline multi-agent automatizado."""
import subprocess
import json
def run_agent(skill: str, prompt: str, timeout: int = 300) -> str:
"""Ejecuta un agente con skill específica."""
result = subprocess.run(
["claude", "--skill", skill, "--output-format", "json", prompt],
capture_output=True, text=True, timeout=timeout
)
return result.stdout
def pipeline(spec_path: str):
"""Pipeline: spec → plan → build → review → approve."""
# Step 1: Plan
plan = run_agent("/f04_architecture",
f"Create implementation plan for {spec_path}")
# Step 2: Build (can be parallelized)
build = run_agent("/f06_build",
f"Implement according to plan. Spec: {spec_path}")
# Step 3: Parallel Reviews
reviews = {}
for skill, focus in [
("/f07_tevv", "test coverage and correctness"),
("/f08_security", "security vulnerabilities"),
]:
reviews[skill] = run_agent(skill,
f"Review implementation. Focus: {focus}")
# Step 4: Synthesize
all_clear = all("pass" in r.lower() for r in reviews.values())
if all_clear:
print("✅ All reviews passed. Ready for human review.")
else:
print("⚠️ Issues found. Review needed.")
for skill, review in reviews.items():
print(f"\n--- {skill} ---\n{review}")
if __name__ == "__main__":
import sys
pipeline(sys.argv[1])

Fuente: Anthropic Agentic Coding Trends Trend #3 (2026) — “Agentes long-running construyen sistemas completos. Horizontes de tareas de minutos a dias.”

Los agentes actuales trabajan bien en sesiones de 15-60 minutos. Pero tareas complejas (migraciones, re-arquitecturas, builds de features grandes) requieren horas o dias de trabajo continuo. Los retos:

  • Context window se llena y compaction pierde informacion critica
  • El agente pierde coherencia despues de muchas interacciones
  • Fallos a mitad de sesion pueden perder horas de trabajo
  • Sin checkpoints, no hay forma de revertir parcialmente
┌─────────────────────────────────────────────────────────────────┐
│ LONG-RUNNING SESSION (6h+) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Phase 1 │─►│ Phase 2 │─►│ Phase 3 │─►│ Phase N │ │
│ │ (60 min) │ │ (60 min) │ │ (60 min) │ │ (60 min) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │ │
│ Checkpoint Checkpoint Checkpoint Final │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ Commit │ │ Commit │ │ Commit │ │ Commit │ │
│ │ HANDOFF│ │ HANDOFF│ │ HANDOFF│ │ PR │ │
│ │ /compact│ │ /compact│ │ /compact│ │ Report │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
└─────────────────────────────────────────────────────────────────┘
project/long_session_protocol.yaml
long_session:
max_phase_duration_min: 60
checkpoint_trigger:
- "context_window > 70%"
- "phase_complete"
- "error_count > 3"
- "manual_trigger"
checkpoint_actions:
1_commit: "git add -A && git commit -m 'checkpoint: [phase] [summary]'"
2_handoff: "Write HANDOFF.md with current state"
3_compact: "Execute /compact preserving key decisions"
4_verify: "Run smoke tests to confirm checkpoint is stable"
recovery:
from_checkpoint: "git log --oneline -10 && cat HANDOFF.md"
rollback: "git reset --hard [checkpoint-hash]"
fresh_start: "New session reading HANDOFF.md"
state_persistence:
- HANDOFF.md # Session state (required)
- progress-tracker.md # Task completion tracking
- decisions.log # Decisions made (append-only)

Para sesiones largas, mantener un archivo de tracking que el agente actualiza:

<!-- progress-tracker.md — Auto-maintained by agent -->
# Long Session: Feature Search Implementation
## Plan (5 phases, ~5 hours)
- [x] Phase 1: Database schema + migrations (done, checkpoint c1a2b3)
- [x] Phase 2: Embedding service (done, checkpoint d4e5f6)
- [x] Phase 3: Search API endpoint (done, checkpoint g7h8i9)
- [ ] Phase 4: Frontend search UI (IN PROGRESS)
- [ ] Phase 5: Integration tests + performance
## Current Phase: 4
- Started: 2026-03-19T14:00:00Z
- Context window: 45%
- Errors encountered: 1 (resolved — CSS import path)
- Files modified this phase: src/ui/Search.tsx, src/ui/SearchResults.tsx
## Blockers
- None currently
## Decision Log
- [14:05] Using React Server Components for search (ADR-003)
- [14:22] Debounce search input at 300ms
- [15:10] Using Suspense boundary for loading state

7.5 Sesion-Relay Pattern (Multi-session continuity)

Sección titulada «7.5 Sesion-Relay Pattern (Multi-session continuity)»

Cuando una sesion termina (por limite de context o tiempo), relay a nueva sesion:

Ventana de terminal
# Sesion 1 termina — agente escribe HANDOFF.md automaticamente
# (via post_compaction hook o instruccion en compact instructions)
# Sesion 2 comienza leyendo el relay
claude --continue # O nueva sesion:
claude "Lee HANDOFF.md y progress-tracker.md.
Continua desde Phase 4 del plan.
El checkpoint mas reciente es g7h8i9."
# Metricas para sesiones de 6+ horas
long_session_metrics:
- name: "Phases completed"
target: ">= plan_phases"
- name: "Checkpoint frequency"
target: "every 45-60 min"
- name: "Rollback count"
target: "< 2 per session"
- name: "Context resets"
target: "< 3 per session"
- name: "Human interventions"
target: "< 1 per 2 hours"
- name: "Test pass rate at checkpoints"
target: ">= 90%"

Fuente: OpenAI “Harness Engineering” (Feb 2026) — agentes que reproducen bugs, graban video, implementan fix, responden feedback, y mergean — todo autonomamente.

┌──────────────────────────────────────────────────────────────────┐
│ FULL AUTONOMY CYCLE (Advanced) │
│ │
│ 1. VALIDATE 2. REPRODUCE 3. IMPLEMENT 4. VERIFY │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Read bug │───►│ Repro │────►│ Write │────►│ Run all │ │
│ │ report │ │ the bug │ │ the fix │ │ tests │ │
│ └─────────┘ └────┬────┘ └─────────┘ └────┬────┘ │
│ │ │ │
│ Record video All pass? │
│ as evidence ┌──────┤ │
│ │ │ │
│ 5. SUBMIT 6. RESPOND 7. MERGE No │ Yes │ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ ┌───▼───┐ │
│ │ Open PR │───►│ Address │────►│ Auto- │◄───┘ │ Back │ │
│ │ + video │ │ feedback│ │ merge │ │ to 3 │ │
│ └─────────┘ └─────────┘ └─────────┘ └───────┘ │
│ │
│ ⚡ Guardrails: circuit breakers, escalation, confidence gates │
└──────────────────────────────────────────────────────────────────┘
EtapaQue hace el agenteGuardrails requeridos
1. ValidateLee bug report/issue, entiende el problema, identifica archivos relevantesMax 5 min; si no entiende, escalar
2. ReproduceCorre tests, reproduce el bug, graba evidencia (logs, screenshots, video)Max 10 min; si no reproduce, reportar
3. ImplementEscribe fix minimo (no refactoring extra), corre tests localesMax 30 min; cambios en < 5 archivos
4. VerifyCorre test suite completa, verifica que no hay regresionesTodos los tests deben pasar
5. SubmitAbre PR con descripcion, video de reproduccion, tests nuevosPR template obligatorio
6. RespondLee feedback de reviewers (humanos u otros agentes), iteraMax 3 rondas de feedback
7. MergeAuto-merge si confidence > threshold y reviews aprobadosRequiere approval explicito
# Configuracion de auto-merge por confianza
auto_merge:
enabled: true # Solo para tracks maduros
confidence_gates:
- gate: "all_tests_pass"
weight: 0.30
required: true # Bloquea si falla
- gate: "no_security_findings"
weight: 0.20
required: true
- gate: "change_scope_small"
weight: 0.15
criteria: "files_changed <= 5 AND lines_changed <= 200"
- gate: "agent_review_approved"
weight: 0.15
criteria: "@code_reviewer verdict == 'pass'"
- gate: "spec_compliance"
weight: 0.10
criteria: "implementation matches spec"
- gate: "no_golden_principle_violation"
weight: 0.10
criteria: "all golden principles pass"
thresholds:
auto_merge: 0.90 # Score >= 0.90 → auto merge
human_review: 0.70 # 0.70-0.89 → human review required
reject: 0.70 # < 0.70 → reject, escalate
circuit_breakers:
- "3+ auto-merges fallidos en 24h → desactivar auto-merge"
- "Rollback de auto-merge → desactivar por 48h"
- "Security finding en auto-merge → desactivar permanentemente hasta review"

8.4 Ralph Wiggum Loop (Iterate Until Satisfied)

Sección titulada «8.4 Ralph Wiggum Loop (Iterate Until Satisfied)»

Patron de OpenAI donde el agente itera sobre su propio output hasta convergencia:

# Pseudocodigo del Ralph Wiggum Loop
def ralph_wiggum_loop(task, max_iterations=5):
"""Iterate: build → review → fix → review → ... → converge."""
result = agent_build(task)
for i in range(max_iterations):
review = agent_review(result)
if review.verdict == "approved":
return result # Convergido
if review.confidence < 0.3:
escalate_to_human(task, result, review)
return None # Humano decide
# Iterar
result = agent_fix(result, review.feedback)
# Max iterations — escalar
escalate_to_human(task, result, "Max iterations reached")
return None
TrackNivel de autonomia recomendadoJustificacion
SoloStages 1-5 (sin auto-merge)Humano revisa y mergea
LeanStages 1-6 (con human approval)Auto-PR + feedback, human merge
FullStages 1-7 (full autonomy con gates)Auto-merge para cambios de baja complejidad

Antes de habilitar el ciclo completo, verificar:

  • Test suite con coverage > 85%
  • CI pipeline < 10 min (feedback rapido)
  • Golden Principles codificados y verificados mecanicamente
  • @code_reviewer y @security_reviewer configurados
  • Circuit breakers implementados
  • Alertas de rollback configuradas
  • Equipo ha operado en stages 1-5 por al menos 2 semanas
  • Metricas de agent review agreement > 80%

Advertencia: Full Autonomy requiere inversion significativa en tooling (Harness Engineering). No es para todos los equipos ni todos los proyectos. Empezar con stages 1-5 y escalar gradualmente.


Fuentes: MachineLearningMastery “7 Agentic AI Design Patterns” (Ene 2026), AgileSoftLabs “ReAct Pattern” (Mar 2026), Anthropic “Building Effective Agents” (2025-2026)

La industria ha convergido en 7 patrones canonicos para agentes AI. Este framework los usa todos, pero no los nombraba explicitamente con la terminologia estandar. Esta seccion mapea cada patron a nuestras implementaciones.

#Patron CanonicoDescripcionEn nuestro frameworkDonde
1ReAct (Reasoning + Acting)El agente razona sobre la tarea, ejecuta una accion, observa el resultado, y repiteLoop principal de Claude Code: think → tool_call → observe → thinkSesion estandar
2ReflectionEl agente revisa su propio output y lo mejora iterativamenteReview Loop (Patron 3, seccion 1.2) + Ralph Wiggum Loop (8.4)Multi-Agent + Autonomy
3Tool UseEl agente invoca herramientas externas para obtener informacion o ejecutar accionesMCP Integration (toda la MCP Guide) + built-in toolsMCP Guide + F06
4PlanningEl agente descompone una tarea compleja en sub-tareas antes de ejecutarPlan Mode (Context Guide seccion 9) + Pipeline patron (1.2)Context + Multi-Agent
5Multi-Agent CollaborationMultiples agentes especializados coordinan para resolver una tareaSpecialist Swarm (1.2) + Agents del framework (2.1)Multi-Agent Guide
6Sequential WorkflowsCadena de procesamiento donde cada paso alimenta al siguientePipeline patron (1.2) + Long-running sessions (7.x)Multi-Agent Guide
7Human-in-the-Loop (HITL)El agente escala a humanos para decisiones criticas o validacionEscalation Protocol (3.2) + Confidence Gates (8.3)Multi-Agent + Autonomy

El patron mas fundamental. El agente alterna entre razonamiento (pensar que hacer) y accion (ejecutar herramientas).

┌──────────────────────────────────────────────┐
│ ReAct LOOP │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ REASON │──►│ ACT │──►│ OBSERVE │ │
│ │ "Necesito│ │ Read │ │ "El file │ │
│ │ ver el │ │ file.ts │ │ tiene │ │
│ │ codigo" │ │ │ │ un bug" │ │
│ └──────────┘ └──────────┘ └────┬─────┘ │
│ ▲ │ │
│ └──────────────────────────────┘ │
│ (repeat) │
│ │
│ EXIT CONDITIONS: │
│ - Tarea completada (tests pasan) │
│ - Max iterations alcanzado │
│ - Error irrecuperable → escalate │
└──────────────────────────────────────────────┘

Implementacion en el framework: Cada sesion de Claude Code ES un ReAct loop. No requiere configuracion adicional — es el comportamiento por defecto.

Optimizacion: Usar maxTurns en sub-agentes para limitar iteraciones y evitar loops infinitos.

El agente critica su propio output antes de entregarlo. Mejora calidad significativamente para tareas complejas.

# Patron Reflection implementado con nuestro Review Loop
def reflection_pattern(task: str, max_reflections: int = 3):
"""Agente genera → se auto-evalua → mejora."""
# Step 1: Generate initial output
output = agent_build(task)
for i in range(max_reflections):
# Step 2: Self-reflect
critique = agent_review(output, criteria=[
"correctness",
"spec_compliance",
"code_quality",
"edge_cases_covered",
])
if critique.score >= 0.9:
break # Good enough
# Step 3: Improve based on critique
output = agent_fix(output, critique.feedback)
return output

Mapping: Este patron es exactamente nuestro Review Loop (seccion 1.2, Patron 3) y el Ralph Wiggum Loop (seccion 8.4), combinados.

El agente extiende sus capacidades invocando herramientas externas.

# Tool Use hierarchy en nuestro framework
tool_layers:
layer_1_builtin:
description: "Herramientas nativas del agente"
examples: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
config: "Siempre disponibles"
layer_2_mcp:
description: "Herramientas via MCP Protocol"
examples: ["Context7", "PostgreSQL", "GitHub", "project-tools"]
config: ".claude/settings.json → mcpServers"
layer_3_custom:
description: "Herramientas personalizadas del proyecto"
examples: ["validate_spec", "run_migration", "deploy_canary"]
config: "MCP server propio (ver MCP Guide seccion 4)"
layer_4_hooks:
description: "Acciones automaticas pre/post tool use"
examples: ["lint on Edit", "type-check on save"]
config: ".claude/settings.json → hooks"

Best practice: Marcar herramientas con tool annotations (readOnly, destructive, idempotent) para que el agente tome decisiones informadas sobre riesgo.

El agente descompone la tarea antes de ejecutar. Critico para tareas > 15 minutos.

┌──────────────────────────────────────────────────────┐
│ PLANNING PATTERN │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ ANALYZE │──►│ PLAN │──►│ EXECUTE │ │
│ │ Specs, │ │ Break │ │ Follow plan │ │
│ │ context, │ │ into │ │ step by step │ │
│ │ codebase │ │ tasks │ │ (checkpoint │ │
│ └──────────┘ └──────────┘ │ between tasks) │ │
│ └──────────────────┘ │
│ │
│ Implementation: Plan Mode (Shift+Tab×2) │
│ + Sequential Thinking MCP server │
│ + progress-tracker.md for long sessions │
└──────────────────────────────────────────────────────┘

Multiples agentes especializados trabajan juntos. Los patrones de orquestacion (seccion 1.2) son instancias de este patron.

Sub-patronNuestro nombreTopologia
HierarchicalHub & Spoke (Patron 1)Orchestrator → Workers
SequentialPipeline (Patron 2)Agent → Agent → Agent
Peer ReviewReview Loop (Patron 3)Builder ↔ Reviewer
BroadcastSpecialist Swarm (Patron 4)Coordinator → [Arch, QA, Sec]
Debate(Nuevo en v6.2)Agent A vs Agent B → Arbiter

Patron Debate (nuevo):

Ventana de terminal
# Dos agentes debaten, un arbitro decide
# Agent A: propone solucion
claude --skill /f04_architecture "Proponer solucion para high-concurrency search"
# Agent B: critica y propone alternativa
claude --skill /f04_architecture "Critica esta solucion y propone alternativa: [output A]"
# Arbiter: sintetiza
claude "Evalua ambas propuestas. Elige la mejor o sintetiza. Criterios: performance, maintainability, cost."

Cadena de procesamiento donde la salida de cada paso es la entrada del siguiente. Diferente a Pipeline en que los pasos pueden ser del mismo agente.

# Sequential Workflow: Code Generation Pipeline
sequential_workflow:
name: "Feature Implementation"
steps:
- id: "spec_validate"
action: "Validate and clarify spec"
input: "spec.yaml"
output: "validated_spec.yaml"
agent: "@spec_writer"
- id: "design"
action: "Create technical design"
input: "validated_spec.yaml"
output: "design.md"
agent: "@architect"
- id: "implement"
action: "Write code"
input: "design.md + validated_spec.yaml"
output: "src/**/*.ts"
agent: "builder"
- id: "test"
action: "Write and run tests"
input: "src/**/*.ts + validated_spec.yaml"
output: "tests/**/*.test.ts"
agent: "@qa_engineer"
- id: "review"
action: "Security + code review"
input: "src/**/*.ts + tests/**/*.test.ts"
output: "review_report.md"
agent: "@security_reviewer + @code_reviewer"
parallel: true
error_handling:
on_step_failure: "retry_once_then_escalate"
on_pipeline_failure: "rollback_to_last_checkpoint"

El patron mas critico para produccion. El agente reconoce sus limites y escala a humanos.

# HITL configuration en nuestro framework
human_in_the_loop:
# Cuando escalar automaticamente
automatic_escalation:
- trigger: "confidence < 0.7"
action: "Ask human for confirmation"
- trigger: "destructive_action AND no_tests"
action: "Block and request human approval"
- trigger: "security_finding.severity == 'critical'"
action: "Stop work, alert human immediately"
- trigger: "cost_estimate > $50"
action: "Present estimate, wait for approval"
- trigger: "touches_production_data"
action: "Require explicit human authorization"
# Mapping a nuestro Escalation Protocol (seccion 3.2)
escalation_levels:
level_0: "Agent autonomo — no necesita humano"
level_1: "Agent pide confirmacion — humano aprueba/rechaza"
level_2: "Agent presenta opciones — humano elige"
level_3: "Agent se detiene — humano toma control completo"
# MCP Elicitation (standard MCP feature)
mcp_elicitation:
enabled: true
description: "Agente usa MCP elicitation para pedir input al humano mid-task"
use_cases:
- "Clarificar requisito ambiguo"
- "Elegir entre dos enfoques validos"
- "Confirmar operacion destructiva"
¿Es una tarea simple y directa?
→ SI → ReAct solo (patron por defecto)
→ NO ↓
¿Requiere planificacion (> 15 min, > 3 archivos)?
→ SI → Planning + ReAct
→ NO ↓
¿Requiere herramientas externas (DB, API, deploy)?
→ SI → Tool Use + ReAct
→ NO ↓
¿El output necesita alta calidad? (usuario final, produccion)
→ SI → Reflection (auto-review)
→ NO ↓
¿Involucra multiples dominios?
→ SI → Multi-Agent Collaboration
→ NO ↓
¿Es una cadena de pasos dependientes?
→ SI → Sequential Workflow
→ NO ↓
¿Tiene implicaciones de seguridad/costo/produccion?
→ SI → HITL gates
→ NO → ReAct basico
EscenarioPatrones combinadosEjemplo
Bug fix simpleReActLee error → find file → fix → test
Feature nuevaPlanning + ReAct + ReflectionPlan → Build → Self-review → Fix
MigrationPlanning + Multi-Agent + HITLPlan → Parallel build → Human checkpoints
Security auditMulti-Agent + Tool Use + HITLSwarm reviews → tools scan → human final
Incident responseReAct + Tool Use + SequentialRead alert → investigate → fix → deploy

Fuentes: GuruSup “Best Multi-Agent Frameworks 2026” (Mar 2026), Turing “6 Agent Frameworks” (Feb 2026), Reddit LangChain “Comprehensive Comparison” (Mar 2026), LevelUp “LangGraph vs CrewAI vs AutoGen” (Mar 2026)

FrameworkLenguajeLicenciaOrquestacionState MgmtObservabilityMCP SupportProd Ready
OpenAI Agents SDKPythonMITHandoffs + guardrailsBuilt-inTracing nativoVia tools✅ Alta
LangGraphPython/TSMITGraph (nodos + edges)CheckpointerLangSmithVia tools✅ Alta
CrewAIPythonMITRole-based crewsShared memoryCallbacksLimitado⚠️ Media
AutoGen/AG2PythonMITConversation-drivenShared contextLoggingLimitado⚠️ Media
Google ADKPythonApache 2.0Hierarchical agentsTiered contextCloud TraceNativo✅ Alta
Claude Code SDKPython/TSAnthropicSub-agents + hooksSession stateLogs + hooksNativo✅ Alta
¿Tu ecosistema es Google Cloud?
→ SI → Google ADK (integracion nativa, tiered context)
→ NO ↓
¿Necesitas grafos de estado complejos (conditional branching, cycles)?
→ SI → LangGraph (state machine con checkpoints)
→ NO ↓
¿Usas Claude Code como agente principal?
→ SI → Claude Code SDK + Sub-agents (lo que este framework recomienda)
→ NO ↓
¿Necesitas role-based teams con poca configuracion?
→ SI → CrewAI (facil setup, role-based)
→ NO ↓
¿Necesitas conversaciones multi-agente dinamicas?
→ SI → AutoGen/AG2
→ NO → OpenAI Agents SDK (versatil, buenas guardrails)

Nuestros patrones son framework-agnostic. Los 4 patrones de orquestacion (Hub&Spoke, Pipeline, Review Loop, Specialist Swarm) y los 7 patrones canonicos (ReAct, Reflection, Tool Use, Planning, Multi-Agent, Sequential, HITL) se implementan en CUALQUIER framework. Este framework usa Claude Code como referencia pero los principios aplican universalmente.


11. Tiered Context for Multi-Agent (Inspirado en Google ADK)

Sección titulada «11. Tiered Context for Multi-Agent (Inspirado en Google ADK)»

Fuente: Google ADK “Context-Aware Multi-Agent Framework” (Dic 2025)

Cuando multiples agentes colaboran, el contexto se fragmenta:

  • Cada agente tiene su propio context window
  • Las decisiones de un agente no son visibles para otro
  • No hay “memoria compartida” entre agentes
  • El overhead de pasar contexto entre agentes crece exponencialmente
┌───────────────────────────────────────────────────────┐
│ TIERED CONTEXT MODEL │
│ │
│ Tier 4: SHARED STATE (Inter-Agent) │
│ ┌─────────────────────────────────────────────┐ │
│ │ ADRs, Golden Principles, Team Decisions │ │
│ │ Visible por: TODOS los agentes │ │
│ │ Mutabilidad: Solo por orchestrator │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ Tier 3: USER STATE (Cross-Session) │
│ ┌────────────────────┐ ┌──────────────────────┐ │
│ │ User preferences │ │ Project history │ │
│ │ Accumulated │ │ Past decisions │ │
│ │ knowledge │ │ Patterns learned │ │
│ └────────────────────┘ └──────────────────────┘ │
│ │
│ Tier 2: AGENT STATE (Per-Agent Persistent) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │@architect│ │@qa_eng │ │@security │ │
│ │ ADR cache│ │ Test │ │ Vuln DB │ │
│ │ Stack │ │ patterns │ │ OWASP │ │
│ │ prefs │ │ Coverage │ │ rules │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ Tier 1: SESSION STATE (Transient) │
│ ┌──────────────────────────────────────────────┐ │
│ │ Current conversation, open files, last error │ │
│ │ Resets with each new session │ │
│ └──────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────┘
# Tiered context configuration for multi-agent
tiered_context:
tier_1_session:
storage: "in_memory"
lifetime: "session"
max_tokens: 50000
contents:
- "Current conversation history"
- "Open file buffers"
- "Recent tool outputs"
on_session_end: "Summarize → promote key items to tier_2"
tier_2_agent:
storage: "filesystem" # .claude/agent_state/{agent_id}.json
lifetime: "persistent"
max_tokens: 10000
contents:
- "Agent-specific learned patterns"
- "Frequently used files/paths"
- "Cached analysis results"
update_policy: "append_only + weekly_compaction"
tier_3_user:
storage: "project_memory" # .claude/memory/ or Mem0
lifetime: "persistent"
max_tokens: 5000
contents:
- "User preferences and patterns"
- "Historical decisions"
- "Project-specific knowledge"
update_policy: "on_significant_decision"
tier_4_shared:
storage: "git_tracked" # CLAUDE.md, ADRs, project-config.yaml
lifetime: "permanent"
max_tokens: 8000
contents:
- "Architecture Decision Records"
- "Golden Principles (never violate)"
- "Team conventions"
- "Compliance requirements"
update_policy: "PR_required"
writable_by: ["orchestrator", "human"] # Sub-agents read-only
Orchestrator recibe tarea
├── Lee Tier 4 (shared): ADRs, principios
├── Lee Tier 3 (user): historial de decisiones
├── Crea plan en Tier 1 (session)
├── Invoca @architect
│ ├── Recibe: Tier 4 (shared) + subset Tier 1 (task context)
│ ├── Lee: Tier 2 (agent state: ADR cache)
│ └── Output: 1000 tokens max → orchestrator
├── Invoca @qa_engineer
│ ├── Recibe: Tier 4 (shared) + subset Tier 1 (task context)
│ ├── Lee: Tier 2 (agent state: test patterns)
│ └── Output: 1000 tokens max → orchestrator
└── Sintetiza outputs en Tier 1 (session)
└── Promueve decisiones importantes a Tier 3/4
TierSoloLeanFull
SessionHANDOFF.mdSession state fileIn-memory + persistence
AgentN/A (1 agente).claude/agent_state/Persistent store (DB/file)
UserCLAUDE.md manual.claude/memory/Mem0 / vector store
SharedCLAUDE.md + ADRsGit-tracked configsGit + shared DB + event log

GAP-22: mapeo directo entre nuestro modelo de 4 tiers y las abstracciones de Google ADK para equipos que usen ADK en produccion.

Google ADK (Agent Development Kit) implementa el contexto tiered mediante tres servicios core:

┌──────────────────────────────────────────────────────┐
│ Google ADK State Management │
│ │
│ SessionService ──── Tier 1 (Session) + Tier 2 │
│ │ .create_session(app_name, user_id) │
│ │ .get_session(app_name, user_id, session_id) │
│ │ session.state["key"] = value │
│ │ session.state["{app_name}:key"] = shared_value │
│ │ │
│ MemoryService ──── Tier 3 (User) + Tier 4 │
│ │ .search_memory(app_name, user_id, query) │
│ │ Uses Vertex AI Search for retrieval │
│ │ Automatic summarization of past sessions │
│ │ │
│ ArtifactService ── File/blob persistence │
│ │ .save_artifact(session, name, data) │
│ │ .load_artifact(session, name, version?) │
│ │ Versioned, accessible cross-agent │
└──────────────────────────────────────────────────────┘
Nuestro TierADK AbstractionADK APIScope Key Prefix
Tier 1: Sessionsession.state["key"]SessionServiceSin prefijo (local)
Tier 2: Agentsession.state["{agent_name}:key"]SessionService{agent_name}: prefix
Tier 3: UserMemoryService.search_memory()MemoryServicePer user_id
Tier 4: Sharedsession.state["{app_name}:key"]SessionService{app_name}: prefix
adk_context_management.py
"""Google ADK tiered context — mapeo a nuestro modelo de 4 tiers."""
from google.adk.agents import Agent
from google.adk.sessions import InMemorySessionService, DatabaseSessionService
from google.adk.memory import InMemoryMemoryService
from google.adk.artifacts import InMemoryArtifactService
# --- Tier 1 & 2: Session State ---
# InMemorySessionService para desarrollo, DatabaseSessionService para produccion
session_service = InMemorySessionService() # Dev
# session_service = DatabaseSessionService(db_url="postgresql://...") # Prod
session = session_service.create_session(
app_name="ai-first-framework",
user_id="dev-user-1",
state={
# Tier 1 — Session state (sin prefijo, transient)
"current_task": "implement search endpoint",
"open_files": ["src/api/search.ts", "tests/search.test.ts"],
# Tier 2 — Agent-specific state ({agent_name}: prefix)
"architect:adr_cache": ["ADR-001", "ADR-002"],
"qa_engineer:test_patterns": ["unit", "integration", "contract"],
"security:last_scan": "2026-03-19T10:00:00Z",
# Tier 4 — Shared state ({app_name}: prefix, visible por todos)
"ai-first-framework:golden_principles": [
"startup < 800ms",
"no span > 2s",
"zero DB from handlers",
],
"ai-first-framework:architecture": "microservices + event-driven",
}
)
# --- Tier 3: User Memory (cross-session) ---
memory_service = InMemoryMemoryService() # Dev
# En produccion: usa Vertex AI Search backed MemoryService
# El MemoryService resume automaticamente sesiones pasadas
# y permite busqueda semantica sobre el historial del usuario
results = memory_service.search_memory(
app_name="ai-first-framework",
user_id="dev-user-1",
query="What architectural decisions were made about search?"
)
# Retorna: resumen de decisiones de sesiones anteriores
# --- Agent Definition con State Access ---
architect_agent = Agent(
name="architect",
model="gemini-2.5-pro",
instruction="""You are a software architect.
Access shared state via state['ai-first-framework:golden_principles'].
Your agent state is in state['architect:adr_cache'].
Never modify keys without your prefix except shared app keys.""",
tools=[...],
)
# --- Artifact Service (file persistence across sessions) ---
artifact_service = InMemoryArtifactService()
# Guardar artefacto versionado (ej: ADR generado por architect agent)
artifact_service.save_artifact(
session=session,
filename="adr-003-search-strategy.md",
artifact=types.Part.from_text("# ADR-003: Vector Search Strategy\n...")
)
# Recuperar artefacto (desde cualquier agente con acceso a la sesion)
adr = artifact_service.load_artifact(
session=session,
filename="adr-003-search-strategy.md"
)
# Reglas de scoping para multi-agent en ADK
adk_state_scoping:
# Estado sin prefijo → solo el agente actual lo ve
session_local:
example: "state['current_step'] = 3"
visibility: "current_agent_only"
tier: "Tier 1 (Session)"
# Estado con prefijo {agent_name}: → persistente por agente
agent_scoped:
example: "state['architect:preference'] = 'event-driven'"
visibility: "that_specific_agent"
tier: "Tier 2 (Agent)"
persistence: "across_sessions_if_DB_backed"
# Estado con prefijo {app_name}: → visible por TODOS los agentes
app_shared:
example: "state['my-app:golden_principles'] = [...]"
visibility: "all_agents_in_app"
tier: "Tier 4 (Shared)"
write_policy: "orchestrator_only_recommended"
# MemoryService → busqueda semantica sobre historial
user_memory:
access: "memory_service.search_memory(app, user, query)"
visibility: "all_agents_for_that_user"
tier: "Tier 3 (User)"
update_policy: "automatic_on_session_close"
FeatureClaude Code (Actual)Google ADK
Session stateHANDOFF.md + /memorysession.state
Agent state.claude/agent_state/state["{agent}:key"]
User memory.claude/memory/MemoryService
Shared stateCLAUDE.md + ADRsstate["{app}:key"]
ArtifactsGit-tracked filesArtifactService
State persistenceFilesystemDB-backed SessionService

Recomendacion: iniciar con InMemorySessionService para prototipos; migrar a DatabaseSessionService para produccion. El modelo de 4 tiers es framework-agnostico — funciona tanto con Claude Code como con ADK, LangGraph, o CrewAI.


Anti-patronProblemaSolución
”SaFe en solo mode”Demasiados roles para 1 personaMáximo 3-4 agents activos
Agents sin boundariesSe pisan unos a otrosContext scope estricto por agent
Sin compressionOrchestrator ahogado en outputMax 2000 tokens por sub-agent
Sequential cuando paraleloLento sin necesidadIdentificar independencias, paralelizar
Sin escalation protocolAgent loops infinitosEscalation levels claros
Orchestrator hace todoBottleneckDelegate, don’t do
MétricaTargetCómo medir
Agent utilization> 70%Tiempo activo / tiempo total
Parallel efficiency> 2x vs sequentialTiempo paralelo / tiempo secuencial
Escalation rate< 15%Escalations / total decisions
Review agreement> 80%Agents que coinciden / total agents
Context efficiency< 50% window usedTokens usados / tokens disponibles
Human intervention rate< 20%Human steps / total steps

14. Durable Execution Patterns para Long-Running Agents (v6.4 — GAP-10)

Sección titulada «14. Durable Execution Patterns para Long-Running Agents (v6.4 — GAP-10)»

Fuentes: LangGraph Checkpointing (Mar 2026), Microsoft Durable Task Framework (Feb 2026), Temporal.io Agent Workflows (Ene 2026), Rhesis.ai “Long-Running Agentic Workflows” (Mar 2026)

Los frameworks de agentes convergen en durable execution — la capacidad de persistir estado de workflows que duran horas o dias, con recuperacion automatica ante fallos. Esta seccion documenta los patrones para equipos que implementen workflows agenticos de larga duracion.

Los agentes clasicos operan en una sola session (minutos). Pero workflows reales pueden durar horas o dias:

  • Migration de base de datos con validacion iterativa
  • Code review + fix + re-review cycles
  • Generacion de documentacion para proyecto completo
  • Onboarding de nuevo microservicio (infra + code + tests + deploy)
  • Evaluacion continua de modelo en produccion

Si el agente falla a mitad de un workflow de 4 horas, perder todo el progreso es inaceptable.

El patron mas fundamental. El agente persiste su estado despues de cada paso significativo.

┌─────────────────────────────────────────────────────────┐
│ Durable Agent Workflow │
│ │
│ Step 1: Analyze ──→ 💾 Checkpoint 1 │
│ Step 2: Plan ──→ 💾 Checkpoint 2 │
│ Step 3: Build ──→ ❌ FALLO (OOM, timeout, crash) │
│ │
│ ... restart ... │
│ │
│ 📂 Load Checkpoint 2 │
│ Step 3: Build ──→ 💾 Checkpoint 3 ✅ │
│ Step 4: Test ──→ 💾 Checkpoint 4 │
│ Step 5: Deploy ──→ ✅ Completado │
└─────────────────────────────────────────────────────────┘

Implementacion por framework:

FrameworkMecanismoStorage
LangGraphcheckpointer (built-in)SQLite, PostgreSQL, Redis
Microsoft Durable TaskDurableTask.OrchestrationContextAzure Storage, SQL Server
Temporal.ioEvent sourcing automaticoTemporal Server (Cassandra/PostgreSQL)
CustomYAML state files en discoFilesystem, S3, GCS
# Ejemplo: Checkpoint state structure
checkpoint:
workflow_id: "migration-db-v2"
step_completed: 3
total_steps: 7
state:
analyzed_tables: ["users", "orders", "products"]
migration_plan: "project/F06_build/migration_plan.yaml"
completed_migrations: ["users", "orders"]
pending_migrations: ["products"]
context:
tokens_used: 45000
cost_usd: 1.23
elapsed_seconds: 7200
metadata:
created_at: "2026-03-20T10:00:00Z"
last_checkpoint: "2026-03-20T12:00:00Z"
agent: "migration-agent-v1"
retry_count: 0

Patron 2: Saga Pattern para Workflows Multi-Agent

Sección titulada «Patron 2: Saga Pattern para Workflows Multi-Agent»

Cuando un workflow involucra multiples agentes, cada uno con responsabilidades distintas, el patron Saga coordina la secuencia con compensaciones si un paso falla.

┌─────────────────────────────────────────────────────────┐
│ Saga: Deploy New Microservice │
│ │
│ 1. @architect → Design ✅ (compensar: delete spec) │
│ 2. @builder → Implement ✅ (compensar: revert PR) │
│ 3. @qa → Test ❌ (FALLO: tests fallan) │
│ │
│ → Compensar Step 2: revert PR │
│ → Compensar Step 1: archive spec │
│ → Notificar humano con contexto del fallo │
└─────────────────────────────────────────────────────────┘

Para workflows que requieren esperas entre pasos (ej: esperar a que CI termine, esperar aprobacion humana).

# workflow: scheduled-eval
steps:
- id: "trigger-eval"
action: "run_eval_suite"
schedule: "0 2 * * *" # 2am diario
- id: "wait-for-results"
action: "wait"
timeout: "30m"
- id: "analyze-results"
action: "compare_with_baseline"
on_regression: "alert_team"
- id: "update-scorecard"
action: "update_eval_scorecard"
artifact: "project/F07_tevv/eval_scorecard.yaml"
AspectoSoloLeanFull
Checkpointing⬜ Archivo YAML local✅ SQLite/Redis✅ PostgreSQL/Temporal
RecoveryManual restartAuto-resume desde ultimo checkpointAuto-resume + retry policy
Compensaciones❌ No requerido⬜ Basico (revert)✅ Saga completa
Timer workflows❌ No requerido⬜ Cron basico✅ Scheduler dedicado
ObservabilidadConsole logsStructured logs + metricasTracing distribuido
Max workflow duration< 1 hora< 8 horasIlimitado
Anti-patronProblemaSolucion
Estado solo en memoriaCrash = perdida totalCheckpoint despues de cada paso costoso
Checkpoint cada lineaOverhead masivo, lentoCheckpoint en boundaries logicos
Sin limites de retryLoop infinito de reintentosmax_retries: 3, exponential backoff
Estado monoliticoCheckpoint de 100MB, lentoSolo delta, referencias a artifacts
Sin timeout globalWorkflow zombie corriendo diasworkflow_timeout configurable
Compensaciones implicitasFallo parcial deja estado corruptoCompensaciones explicitas por paso
# Agregar en project-config.yaml si se usan durable workflows
workflows:
durable_execution:
enabled: false # true si se usan workflows de larga duracion
checkpoint_backend: "yaml" # yaml | sqlite | postgresql | temporal
checkpoint_dir: ".checkpoints/"
max_workflow_duration: 3600 # segundos (1 hora default)
retry_policy:
max_retries: 3
backoff: "exponential" # fixed | linear | exponential
initial_delay: 5 # segundos
cleanup:
retain_completed: 7 # dias
retain_failed: 30 # dias

15. Self-Healing Pipeline — Patron de Auto-Reparacion (NUEVO — Cerrando GAP G4)

Sección titulada «15. Self-Healing Pipeline — Patron de Auto-Reparacion (NUEVO — Cerrando GAP G4)»

Fuentes: BCG Platinion Dark Software Factory Pilar 5 (Mar 2026), AWS AI-DLC (2026), Anthropic Agentic Coding Trends (Trend 3-4)

Un Self-Healing Pipeline es un pipeline CI/CD donde agentes diagnostican y reparan automáticamente fallos sin intervención humana. Es el paso natural de la automatización L2→L3 en una Software Factory.

PIPELINE TRADICIONAL: SELF-HEALING PIPELINE:
Test falla → Build rojo → Dev investiga Test falla → Agent diagnostica →
→ Dev corrige → Push → Re-run Agent corrige → Re-run → Si pasa: merge
(horas/dias) (minutos)
Si no pasa en 3 intentos → Escala a humano
┌──────────────────────────────────────────────────────────┐
│ SELF-HEALING PIPELINE │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐│
│ │ DETECT │──►│ DIAGNOSE │──►│ FIX │──►│VALIDATE││
│ │ │ │ │ │ │ │ ││
│ │ CI fails │ │ Agent │ │ Agent │ │ Re-run ││
│ │ Test red │ │ reads │ │ generates│ │ full ││
│ │ Lint err │ │ logs, │ │ patch, │ │ test ││
│ │ Type err │ │ traces, │ │ commits │ │ suite ││
│ │ Sec scan │ │ diffs │ │ fix │ │ ││
│ └──────────┘ └──────────┘ └──────────┘ └───┬────┘│
│ ▲ │ │
│ │ ┌──────────┐ │ │
│ │ │ DEPLOY │◄─────────────────┘ │
│ │ │ or │ (si pasa) │
│ │ │ ESCALATE│ │
│ │ └────┬─────┘ │
│ │ │ │
│ └───────────────────┘ (si falla 3x → humano) │
└──────────────────────────────────────────────────────────┘

El pipeline detecta fallos en cualquier etapa:

Tipo de falloSeñalPrioridad de healing
Test unitario fallapytest exit 1, jest --failAlta — auto-heal
Lint / format erroreslint, ruff, prettier falloAlta — auto-heal
Type errortsc, mypy, pyright falloAlta — auto-heal
Build fallanpm run build errorMedia — auto-heal con contexto
Security scanpip-audit, npm audit advisoryMedia — evaluar severidad
Integration testAPI contract violationBaja — necesita más contexto
Performance regressionLatency > thresholdBaja — escalar a humano

El agente analiza el fallo con contexto completo:

# diagnosis_context.yaml — lo que el agente recibe
diagnosis:
trigger: "ci_failure"
pipeline_stage: "test"
inputs:
- error_log: "{{ CI log output }}"
- failed_tests: ["test_user_auth.py::test_login_invalid"]
- diff: "{{ git diff desde último green build }}"
- file_changed: ["src/auth/login.py", "tests/test_user_auth.py"]
- related_specs: ["project/F05_contracts/api_auth.yaml"]
- last_green_commit: "abc123"
constraints:
max_diagnosis_time: "2min"
max_files_to_read: 20
read_only: true # Fase de diagnóstico es read-only

Prompt de diagnóstico del agente:

Analiza el fallo de CI. Tu tarea es SOLO diagnosticar, NO corregir aún.
1. Lee el error log y los tests que fallaron
2. Lee el diff desde el último build verde
3. Identifica la CAUSA RAÍZ (no el síntoma)
4. Clasifica: { simple_fix | complex_fix | needs_human | false_positive }
5. Si simple_fix: describe el cambio exacto necesario
6. Si needs_human: explica por qué no puedes arreglarlo
Output en JSON: { category, root_cause, confidence, proposed_fix_description }

Solo se ejecuta si category == "simple_fix" y confidence >= 0.8:

fix_policy.yaml
self_healing:
auto_fix_allowed:
- "test_assertion_mismatch" # Test esperaba valor diferente
- "import_missing" # Falta import
- "type_error_simple" # Tipo incorrecto en argumento
- "lint_format" # Formatting/linting
- "dependency_version_bump" # Patch version update
- "schema_migration" # Schema change simple
escalate_to_human:
- "architectural_change" # Cambio de diseño
- "security_vulnerability" # Vulnerabilidad de seguridad
- "data_loss_risk" # Riesgo de pérdida de datos
- "performance_regression" # Degradación de performance
- "multi_service_impact" # Afecta múltiples servicios
- "confidence_below_threshold" # Confianza < 0.8
constraints:
max_lines_changed: 50 # Si el fix cambia > 50 líneas → escalar
max_files_changed: 5 # Si toca > 5 archivos → escalar
max_fix_attempts: 3 # Máximo 3 intentos antes de escalar
require_test_for_fix: true # Cada fix debe incluir/actualizar test
branch: "auto-fix/{{ issue_id }}" # Fix en branch separado
# Después del fix, re-ejecutar TODO el test suite, no solo el test que falló
validation:
steps:
- name: "Re-run failed tests"
command: "pytest {{ failed_test_files }} -v"
must_pass: true
- name: "Re-run full test suite"
command: "pytest --full-suite"
must_pass: true
- name: "Re-run linting"
command: "ruff check . && mypy ."
must_pass: true
- name: "Re-run security scan"
command: "pip-audit && bandit -r src/"
must_pass: true
- name: "Verify no regression"
command: "pytest --benchmark-compare"
warn_on_regression: true
on_validation_pass:
action: "auto_merge" # o "request_human_review" dependiendo del nivel
on_validation_fail:
action: "escalate_to_human"
notify: ["#engineering", "@oncall"]
SI validation pasa:
└→ L1-L2: Crear PR con label "auto-fix" + request review
└→ L3+: Auto-merge si pasa todos los gates
SI validation falla (3 intentos):
└→ Crear issue con diagnóstico completo
└→ Notificar al equipo con:
- Error original
- 3 intentos de fix con diffs
- Razón de cada fallo
- Recomendación del agente
└→ Rollback automático al último green commit
.github/workflows/self-healing.yaml
name: Self-Healing Pipeline
on:
workflow_run:
workflows: ["CI"]
types: [completed]
jobs:
self-heal:
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.workflow_run.head_branch }}
- name: Download CI failure logs
uses: actions/download-artifact@v4
with:
name: ci-logs
run-id: ${{ github.event.workflow_run.id }}
- name: Agent Diagnose
id: diagnose
run: |
# Enviar logs + diff al agente de diagnóstico
claude --print "Diagnose this CI failure. Output JSON only." \
--context ci-logs/test-output.log \
--context <(git diff HEAD~1) \
> diagnosis.json
category=$(jq -r .category diagnosis.json)
confidence=$(jq -r .confidence diagnosis.json)
echo "category=$category" >> $GITHUB_OUTPUT
echo "confidence=$confidence" >> $GITHUB_OUTPUT
- name: Agent Fix
if: steps.diagnose.outputs.category == 'simple_fix' && steps.diagnose.outputs.confidence >= 0.8
run: |
git checkout -b auto-fix/${{ github.run_id }}
# Agente genera el fix
claude --print "Apply the fix described in diagnosis.json. Only modify necessary files." \
--context diagnosis.json \
--allowedTools edit,read,bash
git add -A
git commit -m "fix(auto-heal): $(jq -r .root_cause diagnosis.json)"
- name: Re-validate
if: steps.diagnose.outputs.category == 'simple_fix'
run: |
# Re-ejecutar test suite completo
npm test || pytest --full-suite
- name: Create Auto-Fix PR
if: success()
run: |
git push origin auto-fix/${{ github.run_id }}
gh pr create \
--title "fix(auto-heal): $(jq -r .root_cause diagnosis.json)" \
--body "## Auto-Heal Report\n\n$(cat diagnosis.json | jq .)" \
--label "auto-fix,needs-review"
- name: Escalate if failed
if: failure()
run: |
gh issue create \
--title "🚨 Self-Heal Failed: $(jq -r .root_cause diagnosis.json)" \
--body "Auto-heal attempted 3 fixes but none passed validation.\n\nDiagnosis:\n$(cat diagnosis.json | jq .)" \
--label "needs-human,self-heal-failed"
MétricaDescripciónTarget L2Target L3+
Auto-heal success rate% de fallos resueltos sin humano≥ 40%≥ 70%
Mean time to heal (MTTH)Tiempo desde fallo hasta fix merged< 30min< 10min
False fix rate% de auto-fixes que introducen nuevos bugs≤ 5%≤ 2%
Escalation rate% de fallos escalados a humano≤ 60%≤ 30%
Healing attempts/fixIntentos promedio antes de resolver≤ 2.0≤ 1.5
Rollback from auto-fix% de auto-fixes revertidos post-merge≤ 3%≤ 1%
circuit_breakers.yaml
self_healing_circuit_breakers:
- name: "consecutive_failures"
trigger: "3 auto-fixes consecutivos fallidos"
action: "disable self-healing por 24h, notificar tech lead"
- name: "security_finding"
trigger: "security scan encuentra vulnerability en auto-fix"
action: "revert inmediato, disable self-healing, notificar security lead"
- name: "cost_spike"
trigger: "costo de tokens del self-heal > $50 por fix"
action: "escalar a humano, revisar diagnóstico prompt"
- name: "scope_creep"
trigger: "auto-fix modifica > 50 líneas o > 5 archivos"
action: "rechazar fix, crear PR draft para review humano"
- name: "regression_loop"
trigger: "auto-fix resuelve test A pero rompe test B"
action: "rollback, crear issue con análisis de ambos tests"
Anti-patrónRiesgoSolución
Auto-heal todoFixes complejos incorrectos, deuda técnicaAllowlist estricta de tipos de fix
Sin validación completaFix que pasa un test pero rompe otrosSiempre re-run suite completa
Sin circuit breakersLoop infinito de fix→fail→fixMax 3 intentos + cost cap
Auto-merge sin review en L1-L2Código malo llega a producciónSolo auto-merge en L3+ con gates
Sin rollback automáticoFix roto en producciónRollback antes de escalar
NivelDetectDiagnoseFixValidateDeploy
L0 AssistedCI alertasHumanoHumanoHumanoHumano
L1 StructuredCI + AgentAgent sugiereHumano implementaCI automáticoHumano aprueba
L2 GovernedAgent monitoraAgent diagnosticaAgent propone PRCI + gatesHumano review
L3 AutonomousAgent detectaAgent diagnosticaAgent aplica fixSuite completaAuto-merge (con gates)
L4 Dark FactoryContinuo 24/7InmediatoAutónomoAutónomo + production smokeAutónomo con rollback

Fuentes: Claude Code Agent Teams (2026), Factory-Native FAB coordination patterns, Swarming patterns (seccion 4)

Cuando multiples FABs operan simultaneamente sobre un mismo proyecto, necesitan mecanismos de coordinacion para evitar conflictos, comunicarse entre si, y dividir el trabajo de forma eficiente. Esta seccion define los patrones nativos de coordinacion que el framework provee, implementados como convenciones de filesystem (sin dependencias externas).

Multiples FABs pueden intentar reclamar la misma tarea. El patron de file-locking usa el filesystem como mecanismo de exclusion mutua.

Patron: .fab-claims/TASK-ID.lock — archivos de lock con FAB ID y timestamp.

.fab-claims/
INTENT-2026-001.lock ← FAB-alpha owns this task
INTENT-2026-003.lock ← FAB-beta owns this task

Formato del lock file:

{
"fab_id": "fab-alpha",
"claimed_at": "2026-03-24T10:00:00Z",
"heartbeat_at": "2026-03-24T11:30:00Z",
"task_id": "INTENT-2026-001",
"phase": "F06_Build"
}

Reglas de locking:

ReglaDescripcion
First-write winsEl primer FAB que crea el .lock file es el owner
Heartbeat requiredEl FAB actualiza heartbeat_at en cada checkpoint (cada 60 min)
Timeout releaseSi no hay heartbeat en 2x el intervalo (120 min), el lock se considera abandonado
Explicit releaseEl FAB elimina el .lock file al completar la tarea
No force-acquireUn FAB nunca debe sobreescribir un lock activo de otro FAB

Deteccion de locks abandonados:

heartbeat_interval = 60 min (de .fab-config.yaml → checkpoint_interval_min)
timeout = 2 × heartbeat_interval = 120 min
SI (now - heartbeat_at) > timeout:
→ Lock abandonado → cualquier FAB puede reclamar
→ Registrar en .fab-inbox/lead/ el evento de timeout

Los FABs se comunican via mensajes JSON depositados en directorios inbox. No requiere servicios externos — solo el filesystem.

Patron: .fab-inbox/FAB-ID/ — cada FAB tiene su propio directorio de inbox.

.fab-inbox/
fab-alpha/
2026-03-24T10-00-00Z_task_assignment.json
2026-03-24T11-30-00Z_review_request.json
fab-beta/
2026-03-24T10-05-00Z_task_assignment.json
lead/
2026-03-24T11-00-00Z_status_update.json

Tipos de mensaje:

TipoEmisor tipicoReceptor tipicoDescripcion
task_assignmentLeadWorkerAsignar subtarea a un FAB
status_updateWorkerLeadReportar progreso o bloqueo
artifact_readyWorkerWorker o LeadArtefacto disponible para consumo
help_requestWorkerLead o SpecialistSolicitar ayuda en un tema
review_requestWorkerReviewerSolicitar review de codigo/artefacto

Formato de mensaje:

{
"id": "MSG-2026-001",
"from": "fab-alpha",
"to": "fab-beta",
"type": "review_request",
"timestamp": "2026-03-24T11:30:00Z",
"payload": {
"task_id": "INTENT-2026-001",
"phase": "F06_Build",
"files": ["src/api/search.ts", "tests/search.test.ts"],
"message": "Search endpoint implementation complete. Please review."
},
"priority": "normal"
}

Reglas de comunicacion:

  • El lead agent lee todos los inboxes para mantener visibilidad global
  • Los workers leen solo su propio inbox
  • Los mensajes son append-only — nunca se modifican, solo se agregan nuevos
  • Los mensajes procesados se mueven a .fab-inbox/FAB-ID/processed/
  • El lead puede enviar mensajes broadcast creando el mismo archivo en multiples inboxes

Cuando un lead agent recibe un intent complejo, lo descompone en subtareas independientes que pueden ejecutarse en paralelo.

Patron: intent/subtasks/SUBTASK-NNN.yaml — cada subtarea es un intent con referencia al padre.

intent/
INTENT-2026-001.yaml ← Intent padre (feature completa)
subtasks/
SUBTASK-001.yaml ← F04 Architecture (FAB-architect)
SUBTASK-002.yaml ← F05 Contracts (FAB-spec)
SUBTASK-003.yaml ← F06 Build: API layer (FAB-alpha)
SUBTASK-004.yaml ← F06 Build: UI layer (FAB-beta)
SUBTASK-005.yaml ← F07 Tests (FAB-qa)

Estructura de subtarea:

intent/subtasks/SUBTASK-003.yaml
subtask:
id: "SUBTASK-003"
parent_intent: "INTENT-2026-001"
assigned_fab: "fab-alpha"
phase: "F06_Build"
description: "Implementar search API endpoint con pgvector"
assigned_files:
- "src/api/search.ts"
- "src/services/embedding.ts"
dependencies:
- subtask_id: "SUBTASK-001"
status: "completed" # Debe completarse antes
- subtask_id: "SUBTASK-002"
status: "completed"
acceptance_criteria:
- "GET /api/search?q=term returns results"
- "Response time < 200ms for 10K documents"
- "Tests with coverage >= 85%"
status: "in_progress"

Merge strategy: cada FAB trabaja en su propio branch. Al completar, crea un PR hacia el branch del intent padre. El lead agent (o humano) revisa y mergea.

main
└─ intent/INTENT-2026-001 ← branch del intent
├─ fab-alpha/subtask-003 ← branch del FAB
├─ fab-beta/subtask-004 ← branch del FAB
└─ fab-qa/subtask-005 ← branch del FAB

16.4 Merge Wall Prevention: File-Level Ownership

Sección titulada «16.4 Merge Wall Prevention: File-Level Ownership»

Referencia: patrones de Swarming (seccion 4.1) y Feature Parallel (4.2).

El patron de file-level ownership previene conflictos de merge asignando archivos/directorios a FABs especificos. Ningun FAB modifica archivos asignados a otro.

Patron: .fab-ownership.yaml — mapa de archivos a FAB IDs.

# .fab-ownership.yaml — Generado por lead agent al descomponer tareas
ownership:
intent_id: "INTENT-2026-001"
generated_at: "2026-03-24T10:00:00Z"
generated_by: "fab-lead"
assignments:
- fab_id: "fab-alpha"
files:
- "src/api/search.ts"
- "src/services/embedding.ts"
directories:
- "src/api/"
- fab_id: "fab-beta"
files:
- "src/ui/Search.tsx"
- "src/ui/SearchResults.tsx"
directories:
- "src/ui/search/"
- fab_id: "fab-qa"
files:
- "tests/api/search.test.ts"
- "tests/ui/search.test.tsx"
directories:
- "tests/"
shared_files:
# Archivos que multiples FABs pueden necesitar leer (pero NO modificar sin coordinacion)
- "src/types/search.ts" # Types compartidos — modificar via PR al lead
- "package.json" # Dependencies — lead coordina cambios

Reglas de ownership:

  • Cada FAB solo modifica archivos asignados a el
  • Archivos shared_files requieren coordinacion via mensaje al lead
  • Si un FAB necesita un archivo asignado a otro, envia help_request al lead
  • El lead puede reasignar archivos dinamicamente actualizando .fab-ownership.yaml

Patron 1: Pipeline Secuencial (FAB-1 → FAB-2 → FAB-3)

Sección titulada «Patron 1: Pipeline Secuencial (FAB-1 → FAB-2 → FAB-3)»

Cada FAB ejecuta una fase y pasa el resultado al siguiente. Ideal para workflows donde cada paso depende del anterior.

FAB-architect FAB-builder FAB-qa
┌──────────┐ ┌──────────┐ ┌──────────┐
│ F04 Arch │───►│ F06 Build│───►│ F07 Test │
│ ADRs, │ │ Code │ │ Tests, │
│ design │ │ impl │ │ coverage │
└──────────┘ └──────────┘ └──────────┘
│ │ │
artifact_ready artifact_ready status_update
→ fab-builder → fab-qa → lead

Configuracion en .fab-coordination.yaml:

mode: pipeline
agents:
- id: "fab-architect"
role: "architect"
assigned_phases: ["F04"]
- id: "fab-builder"
role: "builder"
assigned_phases: ["F05", "F06"]
- id: "fab-qa"
role: "qa"
assigned_phases: ["F07"]

Patron 2: Parallel Fan-Out / Fan-In (Lead → N Workers → Lead Merges)

Sección titulada «Patron 2: Parallel Fan-Out / Fan-In (Lead → N Workers → Lead Merges)»

El lead descompone la tarea, N workers ejecutan en paralelo, el lead merge los resultados. Ideal para features grandes divisibles por componente.

FAB-lead (decompose)
┌──────────────┐
│ Descomponer │
│ en subtareas │
└──┬───┬───┬───┘
│ │ │
▼ ▼ ▼
┌──┐ ┌──┐ ┌──┐
│W1│ │W2│ │W3│ ← Workers en paralelo
└──┘ └──┘ └──┘
│ │ │
▼ ▼ ▼
┌──────────────┐
│ FAB-lead │
│ merge PRs │
└──────────────┘

Configuracion:

mode: parallel
lead_agent: "fab-lead"
agents:
- id: "fab-worker-1"
role: "builder"
assigned_files: ["src/api/"]
- id: "fab-worker-2"
role: "builder"
assigned_files: ["src/ui/"]
- id: "fab-worker-3"
role: "builder"
assigned_files: ["src/services/"]
merge_strategy: pr_per_agent

Patron 3: Specialist Routing (Architect → Builder → QA)

Sección titulada «Patron 3: Specialist Routing (Architect → Builder → QA)»

Variante del pipeline donde cada FAB tiene un rol especializado con sus propios agents y skills activados.

FAB-architect FAB-builder FAB-security
(@architect agent) (builder skills) (@security_reviewer)
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Design + │────►│ Implement + │────►│ Security │
│ ADR + review │ │ Test │ │ audit │
└──────────────┘ └──────────────┘ └──────────────┘

Configuracion:

mode: specialist
agents:
- id: "fab-architect"
role: "architect"
assigned_phases: ["F04"]
- id: "fab-builder"
role: "builder"
assigned_phases: ["F05", "F06"]
- id: "fab-security"
role: "security"
assigned_phases: ["F08"]

Patron 4: Peer Review (FAB-1 writes, FAB-2 reviews)

Sección titulada «Patron 4: Peer Review (FAB-1 writes, FAB-2 reviews)»

Dos FABs trabajan en ciclo: uno implementa, otro revisa. El ciclo se repite hasta convergencia (ver Ralph Wiggum Loop, seccion 8.4).

FAB-builder FAB-reviewer
┌──────────┐ code ┌──────────┐
│ Implement│───────────►│ Review │
│ │◄───────────│ │
└──────────┘ feedback └──────────┘
│ (iterate until approved)
✅ PR ready

Configuracion:

mode: pipeline # Pipeline de 2 con ciclo
agents:
- id: "fab-builder"
role: "builder"
assigned_phases: ["F06"]
- id: "fab-reviewer"
role: "reviewer"
assigned_phases: ["F07"]
merge_strategy: pr_per_agent

La coordinacion multi-agente se configura en .fab-coordination.yaml en la raiz del proyecto. Este archivo define el modo de coordinacion, los agentes participantes, y las convenciones de comunicacion.

scripts/schemas/fab_coordination.schema.json
# .fab-coordination.yaml — ver seccion 16 de Multi_Agent_Orchestration_Guide
coordination:
mode: "single" # single | pipeline | parallel | specialist
lead_agent: "fab-lead" # FAB ID del agente lider (requerido si mode != single)
agents:
- id: "fab-lead"
role: "lead"
assigned_phases: ["F01", "F02", "F03", "F04"]
assigned_files: []
communication:
inbox_dir: ".fab-inbox"
claims_dir: ".fab-claims"
ownership_file: ".fab-ownership.yaml"
merge_strategy: "pr_per_agent" # pr_per_agent | sequential_merge | trunk_based

Ver template completo en project-template/.fab-coordination.yaml.

El script scripts/fab-coordinator.py implementa los patrones de esta seccion como CLI:

Ventana de terminal
# Ver estado de todos los FABs activos
python3 scripts/fab-coordinator.py status --project-dir .
# Reclamar una tarea
python3 scripts/fab-coordinator.py claim INTENT-2026-001 --fab-id fab-alpha
# Liberar una tarea
python3 scripts/fab-coordinator.py release INTENT-2026-001 --fab-id fab-alpha
# Enviar mensaje a otro FAB
python3 scripts/fab-coordinator.py send fab-beta review_request \
--fab-id fab-alpha --payload '{"task_id":"INTENT-2026-001","files":["src/api/search.ts"]}'
# Leer inbox
python3 scripts/fab-coordinator.py inbox --fab-id fab-alpha
# Descomponer un intent en subtareas
python3 scripts/fab-coordinator.py decompose intent/INTENT-2026-001.yaml --fab-id fab-lead
MetricaDescripcionTarget
Claim collision rate% de claims donde 2+ FABs compiten< 5%
Message latencyTiempo entre envio y lectura de mensaje< 5 min
Merge conflict rate% de PRs con conflictos de merge< 10%
Ownership violation rate% de commits que tocan archivos de otro FAB0%
Subtask completion rate% de subtareas completadas vs planificadas> 90%
Coordination overheadTiempo en coordinacion vs ejecucion< 15%
Anti-patronProblemaSolucion
Sin ownership fileMerge conflicts constantesGenerar .fab-ownership.yaml antes de fan-out
Lead agent bottleneckLead no procesa inboxes a tiempoLead checkpoint cada 30 min en modo multi-agent
Subtareas acopladasUn FAB espera a otro constantementeDescomponer en unidades verdaderamente independientes
Sin heartbeatLocks abandonados bloquean tareasHeartbeat en cada checkpoint (60 min)
Broadcast excesivoRuido en inboxes, FABs ignoran mensajesSolo mensajes relevantes, usar tipos especificos
Sin merge strategyCada FAB mergea cuando quiere, conflictosDefinir merge_strategy en .fab-coordination.yaml

Documento generado como companion operativo del AI-First Engineering Framework v7.5 — GAP-22 (ADK Tiered Context) cerrado en Sprint 4, GAP-10 (Durable Execution Patterns) cerrado en v6.4, GAP-G4 (Self-Healing Pipeline) cerrado en v6.7, Coordinacion Nativa Multi-Agente agregada en v7.5. Patrones canonicos basados en: MachineLearningMastery (Ene 2026), AgileSoftLabs (Mar 2026), GuruSup (Mar 2026), Turing (Feb 2026), Google ADK (Dic 2025), OpenAI Harness Engineering (Feb 2026), BCG Platinion Dark Software Factory (Mar 2026), Claude Code Agent Teams (2026)