agent:~/.claude$ cat agent-architecture.md

Arquitectura de Agentes: Cómo Construir Entornos de Desarrollo Potenciados por IA

# Arquitectura de Agentes: Cómo Construir Entornos de Desarrollo Potenciados por IA

words: 8955 read_time: 42m updated: 2026-03-25 08:24
$ less agent-architecture.md

TL;DR: Claude Code no es un chat con acceso a archivos. Es un runtime programable con 22 eventos de ciclo de vida, cada uno conectable mediante shell scripts que el modelo no puede omitir. Apila hooks en dispatchers, dispatchers en skills, skills en agents, agents en workflows, y obtienes un harness de desarrollo autónomo que impone restricciones, delega trabajo, persiste memoria entre sesiones y orquesta deliberación multi-agente. Esta guía cubre cada capa de ese stack: desde un solo hook hasta un sistema de consenso de 10 agentes. Sin frameworks. Solo bash y JSON.

Andrej Karpathy acuñó un término para lo que crece alrededor de un agente LLM: claws (garras). Los hooks, scripts y orquestación que permiten al agente agarrarse al mundo fuera de su ventana de contexto.1 La mayoría de los desarrolladores tratan a los agentes de programación con IA como asistentes interactivos. Escriben un prompt, observan cómo edita un archivo y siguen adelante. Ese enfoque limita la productividad a lo que puedas supervisar personalmente.

El modelo mental de infraestructura es diferente: un agente de programación con IA es un runtime programable con un kernel LLM. Cada acción que toma el modelo pasa por hooks que tú controlas. Defines políticas, no prompts. El modelo opera dentro de tu infraestructura de la misma forma en que un servidor web opera dentro de las reglas de nginx. No te sientas frente a nginx a escribir peticiones. Lo configuras, lo despliegas y lo monitoreas.

La distinción importa porque la infraestructura se acumula. Un hook que bloquea credenciales en comandos bash protege cada sesión, cada agente, cada ejecución autónoma. Un skill que codifica tu rúbrica de evaluación se aplica consistentemente, ya sea que lo invoques tú o un agente. Un agente que revisa código en busca de vulnerabilidades ejecuta las mismas verificaciones estés observando o no.2


Puntos Clave

  • Los hooks garantizan la ejecución; los prompts no. Usa hooks para linting, formateo, verificaciones de seguridad y cualquier cosa que deba ejecutarse siempre, independientemente del comportamiento del modelo. El código de salida 2 bloquea acciones. El código de salida 1 solo advierte.3
  • Los skills codifican experiencia de dominio que se activa automáticamente. El campo description lo determina todo. Claude usa razonamiento LLM (no coincidencia de palabras clave) para decidir cuándo aplicar un skill.4
  • Los subagents previenen la saturación de contexto. Ventanas de contexto aisladas para exploración y análisis mantienen la sesión principal ligera. Hasta 10 pueden ejecutarse en paralelo.5
  • La memoria vive en el sistema de archivos. Los archivos persisten entre ventanas de contexto. CLAUDE.md, MEMORY.md, directorios de rules y documentos de handoff forman un sistema de memoria externa estructurado.6
  • La deliberación multi-agente detecta puntos ciegos. Un solo agente no puede cuestionar sus propias suposiciones. Dos agentes independientes con diferentes prioridades de evaluación detectan fallas estructurales que los quality gates no pueden abordar.7
  • El patrón harness es el sistema. CLAUDE.md, hooks, skills, agents y memory no son funciones independientes. Se componen en una capa determinista entre tú y el modelo que escala con la automatización.

Cómo Usar Esta Guía

Experiencia Comienza Aquí Luego Explora
Usas Claude Code a diario y quieres más El Patrón Harness Sistema de Skills, Arquitectura de Hooks
Construyes workflows autónomos Patrones de Subagents Orquestación Multi-Agente, Patrones de Producción
Evalúas arquitectura de agentes Por Qué Importa la Arquitectura de Agentes Marco de Decisión, Consideraciones de Seguridad
Configuras un harness para equipo Diseño de CLAUDE.md Arquitectura de Hooks, Tarjeta de Referencia Rápida

Cada sección se construye sobre la anterior. El Marco de Decisión al final proporciona una tabla de consulta para elegir el mecanismo adecuado para cada tipo de problema.


Por qué importa la arquitectura de agentes

Simon Willison enmarca el momento actual en torno a una sola observación: escribir código ahora es barato.8 Correcto. Pero el corolario es que la verificación es ahora la parte costosa. Código barato sin infraestructura de verificación produce errores a escala. La inversión que realmente vale la pena no es un mejor prompt, sino el sistema alrededor del modelo que atrapa lo que el modelo pasa por alto.

Tres fuerzas hacen necesaria la arquitectura de agentes:

Las ventanas de contexto son finitas y con pérdida. Cada lectura de archivo, salida de herramienta y turno de conversación consume tokens. Microsoft Research y Salesforce probaron 15 LLMs en más de 200.000 conversaciones simuladas y encontraron una caída promedio del 39% en rendimiento entre la interacción de un solo turno y la de múltiples turnos.9 La degradación comienza en tan solo dos turnos y sigue una curva predecible: ediciones precisas de múltiples archivos en los primeros 30 minutos se degradan a visión de túnel en un solo archivo hacia el minuto 90. Ventanas de contexto más grandes no resuelven esto. La condición “Concat” del mismo estudio (la conversación completa como un solo prompt) alcanzó el 95,1% del rendimiento de un solo turno con contenido idéntico. La degradación proviene de los límites entre turnos, no de los límites de tokens.

El comportamiento del modelo es probabilístico, no determinista. Decirle a Claude “siempre ejecuta Prettier después de editar archivos” funciona aproximadamente el 80% de las veces.3 El modelo puede olvidarlo, priorizar la velocidad o decidir que el cambio es “demasiado pequeño”. Para cumplimiento normativo, seguridad y estándares de equipo, el 80% no es aceptable. Los hooks garantizan la ejecución: cada Edit o Write activa tu formateador, siempre, sin excepciones. Lo determinista supera a lo probabilístico.

Las perspectivas únicas pasan por alto problemas multidimensionales. Un solo agente revisando un endpoint API verificó la autenticación, validó la sanitización de entrada y comprobó los headers CORS. Resultado limpio. Un segundo agente, con instrucciones separadas como pentester, encontró que el endpoint aceptaba parámetros de consulta sin límite que podían desencadenar una denegación de servicio mediante amplificación de consultas a la base de datos.7 El primer agente nunca lo verificó porque nada en su marco de evaluación trataba la complejidad de las consultas como una superficie de seguridad. Esa brecha es estructural. Ninguna cantidad de ingeniería de prompts la corrige.

La arquitectura de agentes aborda los tres problemas: los hooks imponen restricciones deterministas, los subagents gestionan el aislamiento de contexto y la orquestación multiagente proporciona perspectivas independientes. Juntos forman el harness.


El patrón harness

El harness no es un framework. Es un patrón: un conjunto componible de archivos, scripts y convenciones que envuelven a un agente de código con IA en infraestructura determinista. Los componentes:

┌──────────────────────────────────────────────────────────────┐
│                      THE HARNESS PATTERN                      │
├──────────────────────────────────────────────────────────────┤
│  ORCHESTRATION                                                │
│  ┌────────────┐  ┌────────────┐  ┌────────────┐             │
│  │   Agent     │  │   Agent    │  │  Consensus │             │
│  │   Teams     │  │  Spawning  │  │  Validation│             │
│  └────────────┘  └────────────┘  └────────────┘             │
│  Multi-agent deliberation, parallel research, voting          │
├──────────────────────────────────────────────────────────────┤
│  EXTENSION LAYER                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐    │
│  │  Skills   │  │  Hooks   │  │  Memory  │  │  Agents  │    │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘    │
│  Domain expertise, deterministic gates, persistent state,     │
│  specialized subagents                                        │
├──────────────────────────────────────────────────────────────┤
│  INSTRUCTION LAYER                                            │
│  ┌──────────────────────────────────────────────────────┐    │
│  │     CLAUDE.md  +  .claude/rules/  +  MEMORY.md       │    │
│  └──────────────────────────────────────────────────────┘    │
│  Project context, operational policy, cross-session memory    │
├──────────────────────────────────────────────────────────────┤
│  CORE LAYER                                                   │
│  ┌──────────────────────────────────────────────────────┐    │
│  │           Main Conversation Context (LLM)             │    │
│  └──────────────────────────────────────────────────────┘    │
│  Your primary interaction; finite context; costs money        │
└──────────────────────────────────────────────────────────────┘

Capa de instrucciones: Los archivos CLAUDE.md y los directorios de reglas definen lo que el agente sabe sobre tu proyecto. Se cargan automáticamente al inicio de la sesión y después de cada compactación. Esta es la memoria arquitectónica a largo plazo del agente.

Capa de extensión: Los skills proporcionan experiencia de dominio que se activa automáticamente según el contexto. Los hooks proporcionan puertas deterministas que se disparan en cada llamada a herramienta coincidente. Los archivos de memoria persisten el estado entre sesiones. Los agentes personalizados proporcionan configuraciones especializadas de subagents.

Capa de orquestación: Los patrones multiagente coordinan agentes independientes para investigación, revisión y deliberación. Los presupuestos de spawn previenen la recursión descontrolada. La validación por consenso asegura la calidad.

La idea clave: la mayoría de los usuarios trabajan enteramente en la capa núcleo, observando cómo el contexto se infla y los costos aumentan. Los usuarios avanzados configuran las capas de instrucciones y extensión, y luego usan la capa núcleo solo para orquestación y decisiones finales.2

Cómo se ve el harness en disco

~/.claude/
├── CLAUDE.md                    # Personal global instructions
├── settings.json                # User-level hooks and permissions
├── skills/                      # Personal skills (44+)
   ├── code-reviewer/SKILL.md
   ├── security-auditor/SKILL.md
   └── api-designer/SKILL.md
├── agents/                      # Custom subagent definitions
   ├── security-reviewer.md
   └── code-explorer.md
├── rules/                       # Categorized rule files
   ├── security.md
   ├── testing.md
   └── git-workflow.md
├── hooks/                       # Hook scripts
   ├── validate-bash.sh
   ├── auto-format.sh
   └── recursion-guard.sh
├── configs/                     # JSON configuration
   ├── recursion-limits.json
   └── deliberation-config.json
├── state/                       # Runtime state
   ├── recursion-depth.json
   └── agent-lineage.json
├── handoffs/                    # Session handoff documents
   └── deliberation-prd-7.md
└── projects/                    # Per-project memory
    └── {project}/memory/MEMORY.md

.claude/                         # Project-level (in repo)
├── CLAUDE.md                    # Project instructions
├── settings.json                # Project hooks
├── skills/                      # Team-shared skills
├── agents/                      # Team-shared agents
└── rules/                       # Project rules

Cada archivo en esta estructura cumple un propósito. El árbol ~/.claude/ es infraestructura personal que se aplica a todos los proyectos. El árbol .claude/ en cada repositorio es específico del proyecto y se comparte vía git. Juntos forman el harness completo.


Sistema de skills

Los skills son extensiones invocadas por el modelo. Claude los descubre y aplica automáticamente según el contexto, sin que tengas que llamarlos explícitamente.4 El momento en que te descubras re-explicando el mismo contexto entre sesiones es el momento en que deberías construir un skill.

Cuándo construir un skill

Situación Construye un… ¿Por qué?
Pegas la misma lista de verificación en cada sesión Skill Experiencia de dominio que se activa automáticamente
Ejecutas la misma secuencia de comandos explícitamente Slash command Acción invocada por el usuario con disparador predecible
Necesitas análisis aislado que no contamine el contexto Subagent Ventana de contexto separada para trabajo enfocado
Necesitas un prompt único con instrucciones específicas Nada Simplemente escríbelo. No todo necesita abstracción.

Los skills son para conocimiento que Claude siempre tiene disponible. Los slash commands son para acciones que tú disparas explícitamente. Si estás decidiendo entre ambos, pregúntate: “¿Debería Claude aplicar esto automáticamente, o debería yo decidir cuándo ejecutarlo?”

Cómo crear un skill

Los skills pueden residir en cuatro ubicaciones posibles, del alcance más amplio al más específico:4

Alcance Ubicación Se aplica a
Empresa Configuración administrada Todos los usuarios de la organización
Personal ~/.claude/skills/<name>/SKILL.md Todos tus proyectos
Proyecto .claude/skills/<name>/SKILL.md Solo este proyecto
Plugin <plugin>/skills/<name>/SKILL.md Donde el plugin esté habilitado

Cada skill requiere un archivo SKILL.md con YAML frontmatter:

---
name: code-reviewer
description: Review code for security vulnerabilities, performance issues,
  and best practice violations. Use when examining code changes, reviewing
  PRs, analyzing code quality, or when asked to review, audit, or check code.
allowed-tools: Read, Grep, Glob
---

# Code Review Expertise

## Controles de Seguridad
Al revisar código, verifica:

### Validación de Entrada
- Toda entrada de usuario sanitizada antes de operaciones con la base de datos
- Consultas parametrizadas (sin interpolación de cadenas en SQL)
- Codificación de salida para contenido HTML renderizado

### Autenticación
- Tokens de sesión validados en cada endpoint protegido
- Verificación de permisos antes de mutaciones de datos
- Sin credenciales codificadas ni claves API en el código fuente

Referencia de Frontmatter

Campo Requerido Propósito
name Identificador único (minúsculas, guiones, máx. 64 caracteres)
description Disparador de descubrimiento (máx. 1024 caracteres). Claude usa esto para decidir cuándo aplicar el skill
allowed-tools No Restringe las capacidades de Claude (ej., Read, Grep, Glob para solo lectura)
disable-model-invocation No Previene la activación automática; el skill solo se activa vía /skill-name
user-invocable No Establece false para ocultar del menú / por completo
model No Sobreescribe qué modelo usar cuando el skill está activo
context No Establece fork para ejecutar en una ventana de contexto aislada
agent No Ejecuta como subagent con su propio contexto aislado
hooks No Define hooks de ciclo de vida con alcance limitado a este skill
$ARGUMENTS No Sustitución de cadena: se reemplaza con la entrada del usuario después de /skill-name

El Campo Description Lo Es Todo

Al inicio de sesión, Claude Code extrae el name y description de cada skill y los inyecta en el contexto de Claude. Cuando envías un mensaje, Claude usa razonamiento de modelo de lenguaje para decidir si algún skill es relevante. Un análisis independiente del código fuente de Claude Code confirma el mecanismo: las descripciones de skills se inyectan en una sección available_skills del prompt del sistema, y el modelo usa comprensión de lenguaje estándar para seleccionar skills relevantes.10

Mala descripción:

description: Helps with code

Descripción efectiva:

description: Review code for security vulnerabilities, performance issues,
  and best practice violations. Use when examining code changes, reviewing
  PRs, analyzing code quality, or when asked to review, audit, or check code.

La descripción efectiva incluye: qué hace (revisar código para tipos específicos de problemas), cuándo usarlo (examinar cambios, PRs, análisis de calidad), y frases disparadoras (review, audit, check) que los usuarios escriben naturalmente.

Presupuesto de Contexto

Todas las descripciones de skills comparten un presupuesto de contexto que escala dinámicamente al 2% de la ventana de contexto, con un respaldo de 16.000 caracteres.4 Si tienes muchos skills, mantén cada descripción concisa. Puedes sobreescribir el presupuesto mediante la variable de entorno SLASH_COMMAND_TOOL_CHAR_BUDGET,11 pero la mejor solución es escribir descripciones más cortas y precisas. Ejecuta /context durante una sesión para verificar si algún skill está siendo excluido.

Archivos de Soporte y Organización

Los skills pueden referenciar archivos adicionales en el mismo directorio:

~/.claude/skills/code-reviewer/
├── SKILL.md                    # Required: frontmatter + core expertise
├── SECURITY_PATTERNS.md        # Referenced: detailed vulnerability patterns
└── PERFORMANCE_CHECKLIST.md    # Referenced: optimization guidelines

Haz referencia a ellos desde SKILL.md con enlaces relativos. Claude lee estos archivos bajo demanda cuando el skill se activa. Mantén SKILL.md por debajo de 500 líneas y mueve el material de referencia detallado a archivos de soporte.12

Compartir Skills vía Git

Los skills de proyecto (.claude/skills/ en la raíz del repositorio) se comparten mediante control de versiones:4

mkdir -p .claude/skills/domain-expert
# ... write SKILL.md ...
git add .claude/skills/
git commit -m "feat: add domain-expert skill for payment processing rules"
git push

Cuando los compañeros de equipo hacen pull, obtienen el skill automáticamente. Sin instalación, sin configuración. Esta es la forma más efectiva de estandarizar experiencia en un equipo.

Skills como Biblioteca de Prompts

Más allá de skills de propósito único, la estructura de directorios funciona como una biblioteca organizada de prompts:

~/.claude/skills/
├── code-reviewer/          # Activates on: review, audit, check
├── api-designer/           # Activates on: design API, endpoint, schema
├── sql-analyst/            # Activates on: query, database, migration
├── deploy-checker/         # Activates on: deploy, release, production
└── incident-responder/     # Activates on: error, failure, outage, debug

Cada skill codifica una faceta diferente de tu experiencia. En conjunto, forman una base de conocimiento de la que Claude extrae automáticamente según el contexto. Un desarrollador junior recibe orientación de nivel senior sin pedirla.

Los Skills se Componen con Hooks

Los skills pueden definir sus propios hooks en el frontmatter que se activan solo mientras el skill se ejecuta. Esto crea comportamiento específico del dominio que no contamina otras sesiones:2

---
name: deploy-checker
description: Verify deployment readiness. Use when preparing to deploy,
  release, or push to production.
hooks:
  PreToolUse:
    - matcher: Bash
      hooks:
        - type: command
          command: "bash -c 'INPUT=$(cat); CMD=$(echo \"$INPUT\" | jq -r \".tool_input.command\"); if echo \"$CMD\" | grep -qE \"deploy|release|publish\"; then echo \"DEPLOYMENT COMMAND DETECTED. Running pre-flight checks.\" >&2; fi'"
---

Los skills de filosofía se activan automáticamente mediante hooks de SessionStart, inyectando restricciones de calidad en cada sesión sin invocación explícita. El skill en sí es conocimiento. El hook es aplicación. Juntos, forman una capa de políticas.

Errores Comunes con Skills

Descripciones demasiado amplias. Un skill git-rebase-helper que se activa ante cualquier prompt relacionado con git (rebases, merges, cherry-picks, incluso git status) contamina el contexto en el 80% de las sesiones. La solución es ajustar la descripción o agregar disable-model-invocation: true y requerir invocación explícita con /skill-name.4

Demasiados skills compitiendo por el presupuesto. Más skills significa más descripciones compitiendo por el presupuesto de contexto del 2%. Si notas que ciertos skills no se activan, revisa /context para ver los excluidos. Prioriza menos skills bien descritos sobre muchos vagos.

Información crítica enterrada en archivos de soporte. Claude lee SKILL.md inmediatamente pero solo accede a los archivos de soporte cuando es necesario. Si hay información crítica en un archivo de soporte, Claude podría no encontrarla. Coloca la información esencial directamente en SKILL.md.4


Arquitectura de Hooks

Los hooks son comandos de shell que se activan mediante eventos del ciclo de vida de Claude Code.3 Se ejecutan fuera del LLM como scripts simples, no como prompts interpretados por el modelo. ¿El modelo quiere ejecutar rm -rf /? Un script de bash de 10 líneas verifica el comando contra una lista de bloqueo y lo rechaza antes de que el shell lo vea. El hook se dispara sin importar si el modelo lo desea o no.

Eventos disponibles

Claude Code expone 22 eventos de ciclo de vida en seis categorías:13

Categoría Eventos ¿Puede bloquear?
Sesión SessionStart, SessionEnd, Setup No
Herramienta PreToolUse, PostToolUse, PostToolUseFailure Pre: Sí
Usuario UserPromptSubmit
Completado Stop, SubagentStop, TeammateIdle, TaskCompleted
Contexto PreCompact, PostCompact, InstructionsLoaded No
Configuración ConfigChange, WorktreeCreate, WorktreeRemove, PermissionRequest, Notification, Elicitation, ElicitationResult, StopFailure Varía

Semántica de códigos de salida

Los códigos de salida determinan si los hooks bloquean acciones:3

Código de salida Significado Acción
0 Éxito La operación continúa. La salida estándar se muestra en modo verbose.
2 Error de bloqueo La operación se detiene. El stderr se convierte en un mensaje de error enviado a Claude.
1, 3, etc. Error no bloqueante La operación continúa. El stderr se muestra como advertencia.

Crítico: Todo hook de seguridad debe usar exit 2, no exit 1. Exit 1 es una advertencia no bloqueante. El comando peligroso se ejecuta de todas formas. Este es el error de hooks más común entre equipos.14

Configuración de hooks

Los hooks residen en archivos de configuración. A nivel de proyecto (.claude/settings.json) para hooks compartidos. A nivel de usuario (~/.claude/settings.json) para hooks personales:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/validate-bash.sh"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'if [[ \"$FILE_PATH\" == *.py ]]; then black --quiet \"$FILE_PATH\" 2>/dev/null; fi'"
          }
        ]
      }
    ]
  }
}

El campo matcher es una expresión regular que coincide con nombres de herramientas: Bash, Write, Edit, Read, Glob, Grep, Agent, o * para todas las herramientas. Usa "" (cadena vacía) para eventos sin herramientas como UserPromptSubmit.

Protocolo de entrada/salida de hooks

Los hooks reciben JSON en stdin con el contexto completo:

{
  "tool_name": "Bash",
  "tool_input": {
    "command": "npm test",
    "description": "Run test suite"
  },
  "session_id": "abc-123",
  "agent_id": "main",
  "agent_type": "main"
}

Para control avanzado, los hooks PreToolUse pueden generar JSON como salida para modificar la entrada de la herramienta, inyectar contexto o tomar decisiones de permisos:

{
  "hookSpecificOutput": {
    "hookEventName": "PreToolUse",
    "permissionDecision": "allow",
    "permissionDecisionReason": "Command validated and modified",
    "updatedInput": {
      "command": "npm test -- --coverage --ci"
    },
    "additionalContext": "Note: This database has a 5-second query timeout."
  }
}

Tres tipos de garantías

Antes de escribir cualquier hook, pregúntate: ¿qué tipo de garantía necesito?14

Garantías de formato aseguran consistencia después de los hechos. Los hooks PostToolUse en Write/Edit ejecutan tu formateador después de cada cambio en un archivo. La salida del modelo no importa porque el formateador normaliza todo.

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'if [[ \"$FILE_PATH\" == *.py ]]; then black --quiet \"$FILE_PATH\" 2>/dev/null; elif [[ \"$FILE_PATH\" == *.js ]] || [[ \"$FILE_PATH\" == *.ts ]]; then npx prettier --write \"$FILE_PATH\" 2>/dev/null; fi'"
          }
        ]
      }
    ]
  }
}

Garantías de seguridad previenen acciones peligrosas antes de que se ejecuten. Los hooks PreToolUse en Bash inspeccionan comandos y bloquean patrones destructivos con código de salida 2:

#!/bin/bash
# validate-bash.sh — block dangerous commands
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command')

if echo "$CMD" | grep -qE "rm\s+-rf\s+/|git\s+push\s+(-f|--force)\s+(origin\s+)?main|git\s+reset\s+--hard|DROP\s+TABLE"; then
    echo "BLOCKED: Dangerous command detected: $CMD" >&2
    exit 2
fi

Garantías de calidad validan el estado en puntos de decisión. Los hooks PreToolUse en comandos git commit ejecutan tu linter o suite de pruebas y bloquean el commit si las verificaciones de calidad fallan:

#!/bin/bash
# quality-gate.sh — lint before commit
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command')

if echo "$CMD" | grep -qE "^git\s+commit"; then
    if ! LINT_OUTPUT=$(ruff check . --select E,F,W 2>&1); then
        echo "LINT FAILED -- fix before committing:" >&2
        echo "$LINT_OUTPUT" >&2
        exit 2
    fi
fi

Tipos de hooks más allá de comandos de shell

Claude Code soporta tres tipos de hooks:13

Hooks de comando (type: "command") ejecutan scripts de shell. Rápidos, deterministas, sin costo de tokens.

Hooks de prompt (type: "prompt") envían un prompt de un solo turno a un modelo Claude rápido. El modelo devuelve { "ok": true } para permitir o { "ok": false, "reason": "..." } para bloquear. Úsalos para evaluaciones con matices que una expresión regular no puede capturar.

Hooks de agente (type: "agent") generan un subagent con acceso a herramientas (Read, Grep, Glob) para verificación de múltiples turnos. Úsalos cuando la verificación requiere inspeccionar archivos reales o resultados de pruebas:

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "agent",
            "prompt": "Verify all unit tests pass. Run the test suite and check results. $ARGUMENTS",
            "timeout": 120
          }
        ]
      }
    ]
  }
}

Hooks asíncronos

Los hooks pueden ejecutarse en segundo plano sin bloquear la ejecución. Agrega async: true para operaciones no críticas como notificaciones y registro:13

{
  "type": "command",
  "command": ".claude/hooks/notify-slack.sh",
  "async": true
}

Usa async para notificaciones, telemetría y respaldos. Nunca uses async para formato, validación o cualquier cosa que deba completarse antes de la siguiente acción.

Dispatchers en lugar de hooks independientes

Ejecutar siete hooks que se disparan en el mismo evento, cada uno leyendo stdin de forma independiente, crea condiciones de carrera. Dos hooks escribiendo al mismo archivo de estado JSON de forma concurrente truncarán el JSON. Cada hook posterior que parsea ese archivo fallará.2

La solución: un dispatcher por evento que ejecuta los hooks secuencialmente desde stdin cacheado:

#!/bin/bash
# dispatcher.sh — run hooks sequentially with cached stdin
INPUT=$(cat)
HOOK_DIR="$HOME/.claude/hooks/pre-tool-use.d"

for hook in "$HOOK_DIR"/*.sh; do
    [ -x "$hook" ] || continue
    echo "$INPUT" | "$hook"
    EXIT_CODE=$?
    if [ "$EXIT_CODE" -eq 2 ]; then
        exit 2  # Propagate block
    fi
done

Depuración de hooks

Cinco técnicas para depurar hooks que fallan silenciosamente:14

  1. Prueba los scripts de forma independiente. Envía JSON de ejemplo por pipe: echo '{"tool_input":{"command":"git commit -m test"}}' | bash your-hook.sh
  2. Usa stderr para salida de depuración. Todo lo escrito en stderr aparece en el contexto de Claude.
  3. Vigila las fallas de jq. Rutas JSON incorrectas devuelven null silenciosamente. Prueba las expresiones jq contra la entrada real de la herramienta.
  4. Verifica los códigos de salida. Un hook PreToolUse que usa exit 1 no proporciona ninguna protección real, aunque parezca funcionar.
  5. Mantén los hooks rápidos. Los hooks se ejecutan de forma síncrona. Mantén todos los hooks bajo 2 segundos, idealmente bajo 500ms.

Memoria y contexto

Toda conversación con IA opera dentro de una ventana de contexto finita. A medida que la conversación crece, el sistema comprime los turnos anteriores para hacer espacio al contenido nuevo. La compresión tiene pérdidas. Decisiones arquitectónicas documentadas en el turno 3 pueden no sobrevivir hasta el turno 15.9

Los tres mecanismos del colapso multi-turno

El estudio de MSR/Salesforce identificó tres mecanismos independientes, cada uno requiriendo una intervención diferente:9

Mecanismo Qué sucede Intervención
Compresión de contexto La información anterior se descarta para dar cabida al contenido nuevo Checkpointing de estado al sistema de archivos
Pérdida de coherencia en el razonamiento El modelo contradice sus propias decisiones anteriores entre turnos Iteración con contexto fresco (Ralph loop)
Fallo de coordinación Múltiples agentes mantienen snapshots de estado diferentes Protocolos de estado compartido entre agentes

Estrategia 1: El sistema de archivos como memoria

La memoria más confiable a través de los límites de contexto reside en el sistema de archivos. Claude Code lee CLAUDE.md y los archivos de memoria al inicio de cada sesión y después de cada compactación.6

~/.claude/
├── configs/           # 14 JSON configs (thresholds, rules, budgets)
│   ├── deliberation-config.json
│   ├── recursion-limits.json
│   └── consensus-profiles.json
├── hooks/             # 95 lifecycle event handlers
├── skills/            # 44 reusable knowledge modules
├── state/             # Runtime state (recursion depth, agent lineage)
├── handoffs/          # 49 multi-session context documents
├── docs/              # 40+ system documentation files
└── projects/          # Per-project memory directories
    └── {project}/memory/
        └── MEMORY.md  # Always loaded into context

El archivo MEMORY.md captura errores, decisiones y patrones entre sesiones. Cuando descubres que ((VAR++)) falla con set -e en bash cuando VAR es 0, lo registras. Tres sesiones después, al encontrar un caso límite similar con enteros en Python, la entrada en MEMORY.md hace emerger el patrón.15

Auto Memory (v2.1.32+): Claude Code registra y recupera automáticamente el contexto del proyecto. Mientras trabajas, Claude escribe observaciones en ~/.claude/projects/{project-path}/memory/MEMORY.md. Auto memory carga las primeras 200 líneas en tu system prompt al inicio de la sesión. Mantenlo conciso y enlaza a archivos temáticos separados para notas detalladas.6

Estrategia 2: Compactación proactiva

El comando /compact de Claude Code resume la conversación y libera espacio de contexto, preservando decisiones clave, contenido de archivos y estado de las tareas.15

Cuándo compactar: - Después de completar una subtarea definida (función implementada, bug corregido) - Antes de comenzar con una nueva área del codebase - Cuando Claude empieza a repetirse u olvidar contexto anterior - Aproximadamente cada 25-30 minutos durante sesiones intensivas

Instrucciones personalizadas de compactación en CLAUDE.md:

# Summary Instructions
When using compact, focus on:
- Recent code changes
- Test results
- Architecture decisions made this session

Estrategia 3: Handoffs de sesión

Para tareas que abarcan múltiples sesiones, crea documentos de handoff que capturen el estado completo:

## Handoff: Deliberation Infrastructure PRD-7
**Status:** Hook wiring complete, 81 Python unit tests passing
**Files changed:** hooks/post-deliberation.sh, hooks/deliberation-pride-check.sh
**Decision:** Placed post-deliberation in PostToolUse:Task, pride-check in Stop
**Blocked:** Spawn budget model needs inheritance instead of depth increment
**Next:** PRD-8 integration tests in tests/test_deliberation_lib.py

La estructura Status/Files/Decision/Blocked/Next proporciona a la sesión sucesora el contexto completo con un costo mínimo de tokens. Iniciar una nueva sesión con claude -c (continuar) o leer el documento de handoff lleva directamente a la implementación.15

Estrategia 4: Iteración con contexto fresco (el Ralph Loop)

Para sesiones que superan los 60-90 minutos, genera una instancia fresca de Claude por iteración. El estado persiste a través del sistema de archivos, no de la memoria conversacional. Cada iteración obtiene el presupuesto completo de contexto:16

Iteration 1: [200K tokens] -> writes code, creates files, updates state
Iteration 2: [200K tokens] -> reads state from disk, continues
Iteration 3: [200K tokens] -> reads updated state, continues
...
Iteration N: [200K tokens] -> reads final state, verifies criteria

Compara con una sola sesión prolongada:

Minute 0:   [200K tokens available] -> productive
Minute 30:  [150K tokens available] -> somewhat productive
Minute 60:  [100K tokens available] -> degraded
Minute 90:  [50K tokens available]  -> significantly degraded
Minute 120: [compressed, lossy]     -> errors accumulate

El enfoque de contexto fresco por iteración intercambia un 15-20% de overhead en el paso de orientación (lectura de archivos de estado, escaneo del historial de git) a cambio de recursos cognitivos completos por iteración.16 El cálculo de costo-beneficio: para sesiones de menos de 60 minutos, una sola conversación es más eficiente. Más allá de 90 minutos, el contexto fresco produce resultados de mayor calidad a pesar del overhead.

Los anti-patrones

Leer archivos completos cuando necesitas 10 líneas. Una sola lectura de un archivo de 2.000 líneas consume 15.000-20.000 tokens. Usa offsets de línea: Read file.py offset=100 limit=20 ahorra la gran mayoría de ese costo.15

Mantener salida verbosa de errores en el contexto. Después de depurar un bug, tu contexto contiene más de 40 stack traces de iteraciones fallidas. Un solo /compact después de corregir el bug libera ese peso muerto.

Comenzar cada sesión leyendo todos los archivos. Deja que las herramientas glob y grep de Claude Code encuentren los archivos relevantes bajo demanda, ahorrando más de 100.000 tokens de pre-carga innecesaria.15


Patrones de Subagents

Los subagents son instancias especializadas de Claude que manejan tareas complejas de forma independiente. Comienzan con un contexto limpio (sin contaminación de la conversación principal), operan con herramientas específicas y devuelven resultados como resúmenes. Los resultados de exploración no inflan tu conversación principal; solo las conclusiones regresan.5

Tipos de Subagents Integrados

Tipo Modelo Modo Herramientas Uso recomendado
Explore Haiku (rápido) Solo lectura Glob, Grep, Read, bash seguro Exploración del código, búsqueda de archivos
General-purpose Hereda Lectura/escritura completa Todas las disponibles Investigación compleja + modificación
Plan Hereda (u Opus) Solo lectura Read, Glob, Grep, Bash Planificación antes de la ejecución

Creación de Subagents Personalizados

Define subagents en .claude/agents/ (proyecto) o ~/.claude/agents/ (personal):

---
name: security-reviewer
description: Expert security code reviewer. Use PROACTIVELY after any code
  changes to authentication, authorization, or data handling.
tools: Read, Grep, Glob, Bash
model: opus
permissionMode: plan
---

You are a senior security engineer reviewing code for vulnerabilities.

When invoked:
1. Identify the files that were recently changed
2. Analyze for OWASP Top 10 vulnerabilities
3. Check for secrets, hardcoded credentials, SQL injection
4. Report findings with severity levels and remediation steps

Focus on actionable security findings, not style issues.

Campos de Configuración de Subagents

Campo Requerido Propósito
name Identificador único (minúsculas + guiones)
description Cuándo invocarlo (incluye “PROACTIVELY” para fomentar la delegación automática)
tools No Separadas por comas. Hereda todas las herramientas si se omite. Soporta Agent(agent_type) para restringir los agentes que puede generar
disallowedTools No Herramientas denegadas, eliminadas de la lista heredada o especificada
model No sonnet, opus, haiku, inherit (por defecto: inherit)
permissionMode No default, acceptEdits, delegate, dontAsk, bypassPermissions, plan
maxTurns No Máximo de turnos agénticos antes de que el subagent se detenga
memory No Alcance de memoria persistente: user, project, local
skills No Carga automática de contenido de skills en el contexto del subagent al inicio
hooks No Hooks del ciclo de vida con alcance limitado a la ejecución de este subagent
background No Ejecutar siempre como tarea en segundo plano
isolation No Establecer en worktree para una copia aislada en git worktree

Aislamiento con Worktree

Los subagents pueden operar en git worktrees temporales, proporcionando una copia aislada completa del repositorio:5

---
name: experimental-refactor
description: Attempt risky refactoring in isolation
isolation: worktree
tools: Read, Write, Edit, Bash, Grep, Glob
---

You have an isolated copy of the repository. Make changes freely.
If the refactoring succeeds, the changes can be merged back.
If it fails, the worktree is discarded with no impact on the main branch.

El aislamiento con worktree es esencial para trabajo experimental que podría romper la base de código.

Subagents en Paralelo

Claude Code soporta hasta 10 subagents en paralelo.5 Usa la ejecución paralela para tareas de investigación independientes:

> Have three explore agents search in parallel:
> 1. Authentication code
> 2. Database models
> 3. API routes

Cada agente se ejecuta en su propia ventana de contexto, encuentra el código relevante y devuelve un resumen. El contexto principal se mantiene limpio.

El Recursion Guard

Sin límites de generación, los agentes delegan a agentes que delegan a otros agentes, donde cada uno pierde contexto y consume tokens. El patrón de recursion guard impone presupuestos:16

#!/bin/bash
# recursion-guard.sh — enforce spawn budget
CONFIG_FILE="${HOME}/.claude/configs/recursion-limits.json"
STATE_FILE="${HOME}/.claude/state/recursion-depth.json"

MAX_DEPTH=2
MAX_CHILDREN=5
DELIB_SPAWN_BUDGET=2
DELIB_MAX_AGENTS=12

# Read current depth
current_depth=$(jq -r '.depth // 0' "$STATE_FILE" 2>/dev/null)

if [[ "$current_depth" -ge "$MAX_DEPTH" ]]; then
    echo "BLOCKED: Maximum recursion depth ($MAX_DEPTH) reached" >&2
    exit 2
fi

# Increment depth using safe arithmetic (not ((VAR++)) with set -e)
new_depth=$((current_depth + 1))
jq --argjson d "$new_depth" '.depth = $d' "$STATE_FILE" > "${STATE_FILE}.tmp"
mv "${STATE_FILE}.tmp" "$STATE_FILE"

Lección crítica: Usa presupuestos de generación, no solo límites de profundidad. Los límites basados en profundidad rastrean cadenas padre-hijo (bloqueados en profundidad 3), pero no detectan la amplitud: 23 agentes en profundidad 1 sigue siendo “profundidad 1”. Un presupuesto de generación rastrea el total de hijos activos por padre, con un máximo configurable. El modelo de presupuesto se mapea al modo de fallo real (demasiados agentes en total) en lugar de una métrica indirecta (demasiados niveles de anidamiento).7

Agent Teams (Vista Previa de Investigación)

Los Agent Teams coordinan múltiples instancias de Claude Code que trabajan de forma independiente, se comunican mediante un buzón compartido y una lista de tareas, y pueden cuestionar los hallazgos de los demás:5

Componente Rol
Team lead Sesión principal que crea el equipo, genera compañeros y coordina el trabajo
Teammates Instancias separadas de Claude Code trabajando en tareas asignadas
Task list Elementos de trabajo compartidos que los compañeros reclaman y completan (bloqueados por archivo)
Mailbox Sistema de mensajería para comunicación entre agentes

Habilitar con: export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1

Cuándo usar Agent Teams en lugar de subagents:

Subagents Agent Teams
Comunicación Solo reportan resultados Los compañeros se envían mensajes directamente entre sí
Coordinación El agente principal gestiona todo el trabajo Lista de tareas compartida con autocoordinación
Ideal para Tareas enfocadas donde solo importa el resultado Trabajo complejo que requiere discusión y colaboración
Costo en tokens Menor Mayor (cada compañero = ventana de contexto separada)

Orquestación Multi-Agente

Los sistemas de IA con un solo agente tienen un punto ciego estructural: no pueden cuestionar sus propias suposiciones.7 La deliberación multi-agente fuerza una evaluación independiente desde múltiples perspectivas antes de que cualquier decisión quede fijada.

Deliberación Mínima Viable

Comienza con 2 agentes y 1 regla: los agentes deben evaluar de forma independiente antes de ver el trabajo del otro.7

Decision arrives
  |
  v
Confidence check: is this risky, ambiguous, or irreversible?
  |
  +-- NO  -> Single agent decides (normal flow)
  |
  +-- YES -> Spawn 2 agents with different system prompts
             Agent A: "Argue FOR this approach"
             Agent B: "Argue AGAINST this approach"
             |
             v
             Compare findings
             |
             +-- Agreement with different reasoning -> Proceed
             +-- Genuine disagreement -> Investigate the conflict
             +-- Agreement with same reasoning -> Suspect herding

Este patrón cubre el 80% del valor. Todo lo demás añade mejoras incrementales.

El Disparador de Confianza

No todas las tareas necesitan deliberación. Un módulo de puntuación de confianza evalúa cuatro dimensiones:17

  1. Ambigüedad — ¿Tiene la consulta múltiples interpretaciones válidas?
  2. Complejidad del dominio — ¿Requiere conocimiento especializado?
  3. Riesgo — ¿Es la decisión reversible?
  4. Dependencia del contexto — ¿Requiere comprender el sistema en su conjunto?

La puntuación se mapea a tres niveles:

Nivel Umbral Acción
ALTO 0,85+ Proceder sin deliberación
MEDIO 0,70-0,84 Proceder con nota de confianza registrada
BAJO Menor a 0,70 Activar deliberación multi-agente completa

El umbral se adapta según el tipo de tarea. Las decisiones de seguridad requieren un consenso de 0,85. Los cambios de documentación solo necesitan 0,50. Esto evita sobre-ingeniería en tareas simples mientras asegura que las decisiones riesgosas reciban el escrutinio adecuado.7

La Máquina de Estados

Siete fases, cada una condicionada por la anterior:7

IDLE -> RESEARCH -> DELIBERATION -> RANKING -> PRD_GENERATION -> COMPLETE
                                                                    |
                                                              (or FAILED)

RESEARCH: Agentes independientes investigan el tema. Cada agente recibe una persona diferente (Arquitecto Técnico, Analista de Seguridad, Ingeniero de Rendimiento, entre otros). El aislamiento de contexto garantiza que los agentes no puedan ver los hallazgos de los demás durante la investigación.

DELIBERATION: Los agentes ven todos los hallazgos de investigación y generan alternativas. El agente de Debate identifica conflictos. El agente de Síntesis combina hallazgos no contradictorios.

RANKING: Cada agente puntúa cada enfoque propuesto en 5 dimensiones ponderadas:

Dimensión Peso
Impacto 0,25
Calidad 0,25
Viabilidad 0,20
Reutilización 0,15
Riesgo 0,15

La Arquitectura de Validación de Dos Puertas

Dos puertas de validación detectan problemas en diferentes etapas:7

Puerta 1: Validación de Consenso (hook PostToolUse). Se ejecuta inmediatamente después de que cada agente de deliberación completa: 1. La fase debe haber alcanzado al menos RANKING 2. Mínimo 2 agentes completados (configurable) 3. La puntuación de consenso cumple el umbral adaptativo por tarea 4. Si algún agente disintió, las preocupaciones deben estar documentadas

Puerta 2: Pride Check (hook Stop). Se ejecuta antes de que la sesión pueda cerrarse: 1. Métodos diversos: múltiples personas únicas representadas 2. Transparencia de contradicciones: las disidencias tienen razones documentadas 3. Manejo de complejidad: al menos 2 alternativas generadas 4. Confianza de consenso: clasificada como fuerte (superior a 0,85) o moderada (0,70-0,84) 5. Evidencia de mejora: la confianza final supera la confianza inicial

Dos hooks en diferentes puntos del ciclo de vida coinciden con la forma en que realmente ocurren los fallos: algunos son instantáneos (puntuación baja) y otros son graduales (baja diversidad, documentación de disidencias faltante).7

Por Qué el Acuerdo es Peligroso

Charlan Nemeth estudió la disidencia minoritaria desde 1986 hasta su libro de 2018 In Defense of Troublemakers. Los grupos con disidentes toman mejores decisiones que los grupos que alcanzan un acuerdo rápido. El disidente no necesita tener razón. El acto de disentir obliga a la mayoría a examinar suposiciones que de otro modo pasarían por alto.18

Wu et al. probaron si los agentes de LLM pueden genuinamente debatir y descubrieron que, sin incentivos estructurales para el desacuerdo, los agentes convergen hacia la respuesta inicial que suena más segura, independientemente de su corrección.19 Liang et al. identificaron la causa raíz como “Degeneración del Pensamiento”: una vez que un LLM establece confianza en una posición, la autorreflexión no puede generar contraargumentos novedosos, lo que hace que la evaluación multi-agente sea estructuralmente necesaria.20

La independencia es la restricción de diseño crítica. Dos agentes evaluando la misma estrategia de despliegue con visibilidad de los hallazgos del otro produjeron puntuaciones de 0,45 y 0,48. Los mismos agentes sin visibilidad: 0,45 y 0,72. La brecha entre 0,48 y 0,72 es el costo del efecto manada.7

Detección de Acuerdo Falso

Un módulo de detección de conformidad rastrea patrones que sugieren que los agentes están de acuerdo sin una evaluación genuina:7

Agrupación de puntuaciones: Que todos los agentes puntúen dentro de 0,3 puntos en una escala de 10 señala contaminación de contexto compartido en lugar de evaluación independiente. Cuando cinco agentes evaluando una refactorización de autenticación puntuaron el riesgo de seguridad entre 7,1 y 7,4, al re-ejecutar con aislamiento de contexto fresco las puntuaciones se dispersaron a 5,8-8,9.

Disidencia formulaica: Agentes copiando el lenguaje de preocupaciones de los demás en lugar de generar objeciones independientes.

Ausencia de perspectivas minoritarias: Aprobación unánime de personas con prioridades en conflicto (un Analista de Seguridad y un Ingeniero de Rendimiento rara vez están de acuerdo en todo).

El detector de conformidad captura los casos obvios (aproximadamente el 10-15% de las deliberaciones donde los agentes convergen demasiado rápido). Para el 85-90% restante, las puertas de consenso y pride check proporcionan validación suficiente.

Lo Que No Funcionó en la Deliberación

Rondas de debate en formato libre. Tres rondas de intercambio de texto para una discusión sobre indexación de base de datos produjeron 7.500 tokens de debate. Ronda 1: desacuerdo genuino. Ronda 2: posiciones reiteradas. Ronda 3: argumentos idénticos con diferentes palabras. La puntuación estructurada por dimensiones reemplazó el debate en formato libre, reduciendo el costo en un 60% mientras mejoraba la calidad del ranking.7

Una sola puerta de validación. La primera implementación ejecutaba un único hook de validación al final de la sesión. Un agente completó la deliberación con una puntuación de consenso de 0,52 (por debajo del umbral), luego continuó con tareas no relacionadas durante 20 minutos antes de que el hook de fin de sesión señalara el fallo. Dividir en dos puertas (una al completar la tarea, otra al finalizar la sesión) detectó los mismos problemas en diferentes puntos del ciclo de vida.7

Costo de la Deliberación

Cada agente de investigación procesa aproximadamente 5.000 tokens de contexto y genera entre 2.000 y 3.000 tokens de hallazgos. Con 3 agentes, eso representa entre 15.000 y 24.000 tokens adicionales por decisión. Con 10 agentes, aproximadamente entre 50.000 y 80.000 tokens.7

Al precio actual de Opus, una deliberación con 3 agentes cuesta aproximadamente $0,68-0,90. Una deliberación con 10 agentes cuesta $2,25-3,00. El sistema activa la deliberación en aproximadamente el 10% de las decisiones, por lo que el costo amortizado entre todas las decisiones es de $0,23-0,30 por sesión. Si eso vale la pena depende de cuánto cuesta una mala decisión.

Cuándo Deliberar

Deliberar Omitir
Arquitectura de seguridad Errores tipográficos en documentación
Diseño de esquema de base de datos Renombrado de variables
Cambios en contratos de API Actualizaciones de mensajes de log
Estrategias de despliegue Reescritura de comentarios
Actualización de dependencias Actualizaciones de fixtures de prueba

Diseño de CLAUDE.md

CLAUDE.md es política operativa para un agente de IA, no un README para humanos.21 El agente no necesita entender por qué usas commits convencionales. Necesita saber el comando exacto a ejecutar y cómo se ve el resultado esperado.

La Jerarquía de Precedencia

Ubicación Alcance Compartido Caso de uso
Configuración gestionada por la empresa Organización Todos los usuarios Estándares de la empresa
./CLAUDE.md o ./.claude/CLAUDE.md Proyecto Vía git Contexto del equipo
~/.claude/CLAUDE.md Usuario Todos los proyectos Preferencias personales
./CLAUDE.local.md Local del proyecto Nunca Notas personales del proyecto
.claude/rules/*.md Reglas del proyecto Vía git Políticas categorizadas
~/.claude/rules/*.md Reglas del usuario Todos los proyectos Políticas personales

Los archivos de reglas se cargan automáticamente y proporcionan contexto estructurado sin saturar CLAUDE.md.6

Lo Que Se Ignora

Estos patrones de forma consistente no producen ningún cambio observable en el comportamiento del agente:21

Párrafos de prosa sin comandos. “Valoramos el código limpio y bien testeado” es documentación, no operaciones. El agente lo lee y procede a escribir código sin tests porque no hay una instrucción accionable.

Directivas ambiguas. “Ten cuidado con las migraciones de base de datos” no es una restricción. “Ejecuta alembic check antes de aplicar migraciones. Aborta si falta la ruta de downgrade.” sí lo es.

Prioridades contradictorias. “Avanza rápido y despliega pronto” más “Asegura cobertura de tests exhaustiva” más “Mantén el tiempo de ejecución por debajo de 5 minutos” más “Ejecuta tests de integración completos antes de cada commit.” El agente no puede satisfacer las cuatro simultáneamente y por defecto omite la verificación.21

Guías de estilo sin mecanismo de cumplimiento. “Sigue la guía de estilo Python de Google” sin ruff check --select D no le da al agente ningún mecanismo para verificar el cumplimiento.

Lo Que Funciona

Instrucciones orientadas a comandos:

## Build and Test Commands
- Install: `pip install -r requirements.txt`
- Lint: `ruff check . --fix`
- Format: `ruff format .`
- Test: `pytest -v --tb=short`
- Type check: `mypy app/ --strict`
- Full verify: `ruff check . && ruff format --check . && pytest -v`

Definiciones de cierre:

## Definición de terminado
Una tarea está completa cuando TODOS los siguientes criterios se cumplen:
1. `ruff check .` termina con código 0
2. `pytest -v` termina con código 0 sin fallos
3. `mypy app/ --strict` termina con código 0
4. Los archivos modificados han sido preparados y confirmados
5. El mensaje de commit sigue el formato convencional: `type(scope): description`

Secciones organizadas por tarea:

## Al escribir código
- Ejecuta `ruff check .` después de cada cambio en un archivo
- Agrega type hints a todas las funciones nuevas

## Al revisar código
- Verifica problemas de seguridad: `bandit -r app/`
- Comprueba la cobertura de pruebas: `pytest --cov=app --cov-fail-under=80`

## Al publicar una versión
- Actualiza la versión en `pyproject.toml`
- Ejecuta la suite completa: `pytest -v && ruff check . && mypy app/`

Reglas de escalamiento:

## Cuando estés bloqueado
- Si las pruebas fallan después de 3 intentos: detente y reporta la prueba fallida con la salida completa
- Si falta una dependencia: revisa `requirements.txt` primero, luego pregunta
- Nunca: elimines archivos para resolver errores, hagas force push ni omitas pruebas

Orden de escritura

Si empiezas desde cero, agrega las secciones en este orden de prioridad:21

  1. Comandos de compilación y pruebas (el agente los necesita antes de poder hacer cualquier cosa útil)
  2. Definición de terminado (previene completaciones falsas)
  3. Reglas de escalamiento (previene soluciones destructivas)
  4. Secciones organizadas por tarea (reduce el análisis de instrucciones irrelevantes)
  5. Alcance por directorio (monorepos: mantiene las instrucciones de cada servicio aisladas)

Omite las preferencias de estilo hasta que las primeras cuatro estén funcionando.

Importación de archivos

Referencia otros archivos dentro de CLAUDE.md:

See @README.md for project overview
Coding standards: @docs/STYLE_GUIDE.md
API documentation: @docs/API.md
Personal preferences: @~/.claude/preferences.md

Sintaxis de importación: relativa (@docs/file.md), absoluta (@/absolute/path.md) o directorio home (@~/.claude/file.md). Profundidad máxima: 5 niveles de importaciones.6

Compatibilidad de instrucciones entre herramientas

AGENTS.md es un estándar abierto adoptado por más de 60.000 proyectos y reconocido por todas las herramientas principales de codificación con IA.21 Si tu equipo usa múltiples herramientas, escribe AGENTS.md como la fuente canónica y replica las secciones relevantes en los archivos específicos de cada herramienta:

Herramienta Archivo nativo ¿Lee AGENTS.md?
Codex CLI AGENTS.md Sí (nativo)
Cursor .cursor/rules Sí (nativo)
GitHub Copilot .github/copilot-instructions.md Sí (nativo)
Amp AGENTS.md Sí (nativo)
Windsurf .windsurfrules Sí (nativo)
Claude Code CLAUDE.md No (formato separado)

Los patrones en AGENTS.md (comando primero, definido por clausura, organizado por tarea) funcionan en cualquier archivo de instrucciones sin importar la herramienta. No mantengas conjuntos de instrucciones paralelos que se desincronicen. Escribe una fuente autoritativa y replícala.

Probando tus instrucciones

Verifica que el agente realmente lee y sigue tus instrucciones:

# Check active instructions
claude --print "What instructions are you following for this project?"

# Verify specific rules are active
claude --print "What is your definition of done?"

La prueba de fuego: Pide al agente que explique tus comandos de compilación. Si no puede reproducirlos textualmente, las instrucciones son demasiado verbosas (el contenido fue empujado fuera del contexto), demasiado vagas (el agente no puede extraer instrucciones accionables) o no están siendo descubiertas. El análisis de GitHub sobre 2.500 repositorios encontró que la vaguedad causa la mayoría de los fallos.21


Patrones de producción

El quality loop

Un proceso de revisión obligatorio para todos los cambios no triviales:

  1. Implementar — Escribe el código
  2. Revisar — Relee cada línea. Detecta errores tipográficos, errores de lógica, secciones poco claras
  3. Evaluar — Ejecuta el evidence gate. Verifica patrones, casos extremos, cobertura de pruebas
  4. Refinar — Corrige cada problema. Nunca lo dejes para “después”
  5. Ampliar la vista — Revisa puntos de integración, importaciones, código adyacente en busca de regresiones
  6. Repetir — Si algún criterio del evidence gate falla, vuelve al paso 4
  7. Reportar — Lista qué cambió, cómo se verificó, cita evidencia específica

El evidence gate

“Creo que” y “debería funcionar” no son evidencia. Cita rutas de archivos, salida de pruebas o código específico.

Criterio Evidencia requerida
Sigue los patrones del código base Nombra el patrón y el archivo donde existe
Solución funcional más simple Explica qué alternativas más simples fueron descartadas y por qué
Casos extremos manejados Lista los casos extremos específicos y cómo se maneja cada uno
Pruebas pasan Pega la salida de pruebas mostrando 0 fallos
Sin regresiones Nombra los archivos/funcionalidades verificadas
Resuelve el problema real Indica la necesidad del usuario y cómo esto la aborda

Si no puedes producir evidencia para alguna fila, vuelve a Refinar.22

Patrones de manejo de errores

Escrituras atómicas de archivos. Múltiples agentes escribiendo simultáneamente al mismo archivo de estado corrompe JSON. Escribe en archivos .tmp y luego usa mv atómicamente. El sistema operativo garantiza que mv es atómico en el mismo sistema de archivos.17

# Atomic state update
jq --argjson d "$new_depth" '.depth = $d' "$STATE_FILE" > "${STATE_FILE}.tmp"
mv "${STATE_FILE}.tmp" "$STATE_FILE"

Recuperación de estado corrupto. Si el estado se corrompe, el patrón de recuperación lo recrea desde valores predeterminados seguros en lugar de fallar catastróficamente:16

if ! jq -e '.depth' "$RECURSION_STATE_FILE" &>/dev/null; then
    # Corrupted state file, recreate with safe defaults
    echo '{"depth": 0, "agent_id": "root", "parent_id": null}' > "$RECURSION_STATE_FILE"
    echo "- Recursion state recovered (was corrupted)"
fi

La trampa de ((VAR++)) en bash. ((VAR++)) devuelve código de salida 1 cuando VAR es 0 porque 0++ evalúa a 0, que bash interpreta como falso. Con set -e habilitado, esto mata el script. Usa VAR=$((VAR + 1)) en su lugar.16

Clasificación del radio de impacto

Clasifica cada acción del agente por radio de impacto y aplica la compuerta correspondiente:2

Clasificación Ejemplos Compuerta
Local Escritura de archivos, ejecución de pruebas, linting Aprobación automática
Compartido Commits de git, creación de ramas Advertencia + continuar
Externo Git push, llamadas a API, despliegues Requiere aprobación humana

Remote Control (conectarse al Claude Code local desde cualquier navegador o aplicación móvil) transforma la compuerta “Externo” de una espera bloqueante a una notificación asíncrona. El agente continúa trabajando en la siguiente tarea mientras revisas la anterior desde tu teléfono.2

Especificación de tareas para ejecuciones autónomas

Las tareas autónomas efectivas incluyen tres elementos: objetivo, criterios de completación y punteros de contexto:16

OBJECTIVE: Implement multi-agent deliberation with consensus validation.

COMPLETION CRITERIA:
- All tests in tests/test_deliberation_lib.py pass (81 tests)
- post-deliberation.sh validates consensus above 70% threshold
- recursion-guard.sh enforces spawn budget (max 12 agents)
- No Python type errors (mypy clean)

CONTEXT:
- Follow patterns in lib/deliberation/state_machine.py
- Consensus thresholds in configs/deliberation-config.json
- Spawn budget model: agents inherit budget, not increment depth

Los criterios deben ser verificables por máquina: pruebas aprobadas/fallidas, salida del linter, códigos de estado HTTP, verificaciones de existencia de archivos. Una tarea temprana que pedía al agente “escribir pruebas que pasen” produjo assert True y assert 1 == 1. Técnicamente correcto. Prácticamente inútil.16

Calidad del criterio Ejemplo Resultado
Vago “Las pruebas pasan” El agente escribe pruebas triviales
Medible pero incompleto “Las pruebas pasan Y cobertura >80%” Las pruebas cubren líneas pero no prueban nada significativo
Completo “Todas las pruebas pasan Y cobertura >80% Y sin errores de tipo Y linter limpio Y cada clase de prueba evalúa un módulo distinto” Resultado de calidad de producción

Modos de fallo a vigilar

Modo de fallo Descripción Prevención
Espiral de atajos Omitir pasos del quality loop para terminar más rápido El evidence gate requiere prueba para cada criterio
Espejismo de confianza “Estoy seguro” sin ejecutar verificación Prohibir lenguaje ambiguo en reportes de completación
Verificación fantasma Afirmar que las pruebas pasan sin ejecutarlas en esta sesión El hook Stop ejecuta pruebas independientemente
Deuda diferida TODO/FIXME/HACK en código confirmado El hook PreToolUse en git commit escanea el diff
Contaminación del sistema de archivos Artefactos abandonados de iteraciones fallidas Paso de limpieza en los criterios de completación

Traza concreta de una sesión

Traza de sesión de una ejecución autónoma procesando un PRD con 5 historias:2

  1. SessionStart se dispara. El dispatcher inyecta: fecha actual, detección de proyecto, restricciones de filosofía, inicialización del seguimiento de costos. Cinco hooks, 180ms en total.

  2. El agente lee el PRD, planifica la primera historia. UserPromptSubmit se dispara. El dispatcher inyecta: contexto del proyecto activo, línea base de desvío de sesión.

  3. El agente llama a Bash para ejecutar pruebas. PreToolUse:Bash se dispara. Verificación de credenciales, validación de sandbox, detección de proyecto. 90ms. Las pruebas se ejecutan. PostToolUse:Bash se dispara: latido de actividad registrado, verificación de desvío.

  4. El agente llama a Write para crear un archivo. PreToolUse:Write se dispara: verificación de alcance de archivo. PostToolUse:Write se dispara: verificación de lint, seguimiento de commit.

  5. El agente termina la historia. Stop se dispara. Verificaciones de la compuerta de calidad: ¿el agente citó evidencia? ¿Lenguaje ambiguo? ¿Comentarios TODO en el diff? Si alguna verificación falla, exit 2 y el agente continúa.

  6. Verificación independiente: Un agente nuevo ejecuta la suite de pruebas sin confiar en el auto-reporte del agente anterior.

  7. Tres agentes de revisión de código se generan en paralelo. Cada uno revisa el diff independientemente. Si algún revisor marca CRITICAL, la historia vuelve a la cola.

  8. La historia pasa. Se carga la siguiente. El ciclo se repite para las 5 historias.

Total de hooks disparados en las 5 historias: ~340. Tiempo total en hooks: ~12 segundos. Esa sobrecarga previno tres filtraciones de credenciales, un comando destructivo y dos implementaciones incompletas en una sola ejecución nocturna.


Consideraciones de seguridad

El sandbox

Claude Code se ejecuta en un sandbox que restringe el acceso a la red y las operaciones del sistema de archivos. El sandbox impide que el modelo realice solicitudes de red arbitrarias o acceda a archivos fuera del directorio del proyecto.13

Límites de permisos

El sistema de permisos controla las operaciones en múltiples niveles:

Nivel Controla Ejemplo
Permisos de herramientas Qué herramientas pueden usarse Restringir subagent a Read, Grep, Glob
Permisos de archivos Qué archivos pueden modificarse Bloquear escrituras a .env, credentials.json
Permisos de comandos Qué comandos bash pueden ejecutarse Bloquear rm -rf, git push --force
Permisos de red A qué dominios se puede acceder Lista permitida para conexiones de servidor MCP

Defensa contra inyección de prompts

Skills y hooks proporcionan defensa en profundidad contra la inyección de prompts:

Skills con restricciones de herramientas impiden que un prompt comprometido obtenga acceso de escritura:

allowed-tools: Read, Grep, Glob

hooks PreToolUse validan cada llamada a herramienta sin importar cómo se haya formulado el prompt al modelo:

# Block credential file access regardless of prompt
if echo "$FILE_PATH" | grep -qE "\.(env|pem|key|credentials)$"; then
    echo "BLOCKED: Sensitive file access" >&2
    exit 2
fi

El aislamiento de subagents limita el radio de impacto. Un subagent con permissionMode: plan no puede realizar cambios aunque su prompt esté comprometido.

Seguridad de hooks

Los hooks HTTP que interpolan variables de entorno en encabezados requieren una lista explícita de allowedEnvVars para prevenir la exfiltración arbitraria de variables de entorno:13

{
  "type": "http",
  "url": "https://api.example.com/notify",
  "headers": {
    "Authorization": "Bearer $MY_TOKEN"
  },
  "allowedEnvVars": ["MY_TOKEN"]
}

La división de responsabilidades humano-agente

La seguridad en arquitecturas de agentes requiere una división clara entre las responsabilidades humanas y las del agente:17

Responsabilidad humana Responsabilidad del agente
Definición del problema Ejecución del pipeline
Umbrales de confianza Ejecución dentro de los umbrales
Requisitos de consenso Cálculo del consenso
Criterios de quality gate Aplicación del quality gate
Análisis de errores Detección de errores
Decisiones de arquitectura Opciones de arquitectura
Inyección de contexto de dominio Generación de documentación

El patrón: los humanos son responsables de las decisiones que requieren contexto organizacional, juicio ético o dirección estratégica. Los agentes son responsables de las decisiones que requieren búsqueda computacional en grandes espacios de posibilidades. Los hooks hacen cumplir ese límite.

Aplicación recursiva de hooks

Los hooks se disparan también para las acciones de subagents.13 Si Claude genera un subagent a través del Agent tool, tus hooks PreToolUse y PostToolUse se ejecutan para cada herramienta que el subagent utilice. Sin la aplicación recursiva de hooks, un subagent podría evadir tus controles de seguridad. El evento SubagentStop te permite ejecutar limpieza o validación cuando un subagent finaliza.

Esto no es opcional. Un agente que genera un subagent sin tus hooks de seguridad es un agente que puede hacer force-push a main, leer archivos de credenciales o ejecutar comandos destructivos mientras tus controles observan la conversación principal sin hacer nada.

El costo como arquitectura

El costo es una decisión arquitectónica, no una consideración operativa tardía.2 Tres niveles:

Nivel de tokens. Compresión del system prompt. Elimina ejemplos de código de tutoriales (el modelo ya conoce las APIs), consolida reglas duplicadas entre archivos y reemplaza explicaciones con restricciones. “Rechazar llamadas a herramientas que coincidan con rutas sensibles” hace el mismo trabajo que una explicación de 15 líneas sobre por qué no se deben leer las credenciales.

Nivel de agente. Instancias nuevas en lugar de conversaciones largas. Cada historia en una ejecución autónoma recibe un agente nuevo con un contexto limpio. El contexto nunca se infla porque cada agente comienza desde cero. Briefing en lugar de memoria: los modelos ejecutan un briefing claro mejor de lo que navegan 30 pasos de contexto acumulado.

Nivel de arquitectura. CLI primero sobre MCP cuando la operación es sin estado. Una llamada claude --print para una evaluación puntual cuesta menos y no añade sobrecarga de conexión. MCP tiene sentido cuando la herramienta necesita estado persistente o streaming.


Marco de decisión

Cuándo usar cada mecanismo:

Problema Usa Por qué
Formatear código después de cada edición hook PostToolUse Debe ocurrir siempre, de forma determinista
Bloquear comandos bash peligrosos hook PreToolUse Debe bloquear antes de la ejecución, exit code 2
Aplicar patrones de revisión de seguridad Skill Experiencia de dominio que se activa automáticamente por contexto
Explorar el codebase sin contaminar el contexto Explore subagent Contexto aislado, devuelve solo un resumen
Ejecutar refactorización experimental de forma segura Subagent aislado en worktree Los cambios pueden descartarse si fallan
Revisar código desde múltiples perspectivas Subagents en paralelo o Agent Team La evaluación independiente previene puntos ciegos
Decidir sobre arquitectura irreversible Deliberación multi-agente Umbral de confianza + validación por consenso
Persistir decisiones entre sesiones MEMORY.md El sistema de archivos sobrevive los límites de contexto
Compartir estándares del equipo CLAUDE.md del proyecto + .claude/rules/ Distribuido por Git, se carga automáticamente
Definir comandos de build/test del proyecto CLAUDE.md Instrucciones orientadas a comandos que el agente puede verificar
Ejecutar desarrollo autónomo prolongado Bucle Ralph (iteración con contexto limpio) Presupuesto completo de contexto por iteración, estado en sistema de archivos
Notificar a Slack cuando la sesión termina hook Stop asíncrono No bloqueante, no ralentiza la sesión
Validar calidad antes del commit hook PreToolUse en git commit Bloquea el commit si lint/tests fallan
Aplicar criterios de finalización hook Stop Impide que el agente se detenga antes de completar la tarea

Skills vs hooks vs subagents

Dimensión Skills Hooks Subagents
Invocación Automática (razonamiento de LLM) Determinista (basada en eventos) Explícita o auto-delegada
Garantía Probabilística (el modelo decide) Determinista (siempre se ejecuta) Determinista (contexto aislado)
Costo de contexto Se inyecta en el contexto principal Cero (se ejecuta fuera de LLM) Ventana de contexto separada
Costo de tokens Presupuesto de descripción (2% de la ventana) Cero Contexto completo por subagent
Ideal para Experiencia de dominio Aplicación de políticas Trabajo enfocado, exploración

Preguntas frecuentes

¿Cuántos hooks son demasiados?

El rendimiento, no la cantidad, es la restricción. Cada hook se ejecuta de forma síncrona, por lo que el tiempo total de ejecución de hooks se suma a cada llamada de herramienta que coincida. 95 hooks entre configuraciones de nivel usuario y nivel proyecto se ejecutan sin latencia perceptible cuando cada hook finaliza en menos de 200 ms. El umbral a vigilar: si un hook PostToolUse añade más de 500 ms a cada edición de archivo, la sesión se siente lenta. Mide el rendimiento de tus hooks con time antes de desplegarlos.14

¿Pueden los hooks impedir que Claude Code ejecute un comando?

Sí. Los hooks PreToolUse bloquean cualquier acción de herramienta al salir con código 2. Claude Code cancela la acción pendiente y muestra la salida stderr del hook al modelo. Claude ve el motivo del rechazo y sugiere una alternativa más segura. El código de salida 1 es una advertencia no bloqueante donde la acción sigue adelante.3

¿Dónde debo colocar los archivos de configuración de hooks?

Las configuraciones de hooks van en .claude/settings.json para hooks a nivel de proyecto (commiteados en tu repositorio, compartidos con tu equipo) o en ~/.claude/settings.json para hooks a nivel de usuario (personales, aplicados a cada proyecto). Los hooks a nivel de proyecto tienen prioridad cuando existen ambos. Usa rutas absolutas para los archivos de scripts para evitar problemas con el directorio de trabajo.14

¿Todas las decisiones necesitan deliberación?

No. El módulo de confianza evalúa las decisiones en cuatro dimensiones (ambigüedad, complejidad, impacto, dependencia del contexto). Solo las decisiones con una puntuación de confianza general por debajo de 0,70 activan la deliberación, aproximadamente el 10% del total de decisiones. Correcciones de documentación, renombrar variables y ediciones rutinarias omiten la deliberación por completo. Cambios en la arquitectura de seguridad, esquemas de base de datos y despliegues irreversibles la activan de forma consistente.7

¿Cómo pruebo un sistema diseñado para producir desacuerdo?

Prueba tanto las rutas de éxito como las de fallo. Éxito: los agentes discrepan productivamente y alcanzan consenso. Fallo: los agentes convergen demasiado rápido, nunca convergen o exceden los presupuestos de generación. Las pruebas end-to-end simulan cada escenario con respuestas deterministas de agentes, verificando que ambas puertas de validación detecten cada modo de fallo documentado. Un sistema de deliberación en producción ejecuta 141 pruebas en tres capas: 48 pruebas de integración bash, 81 pruebas unitarias de Python y 12 simulaciones de pipeline end-to-end.7

¿Cuál es el impacto en latencia de la deliberación?

Una deliberación con 3 agentes añade entre 30 y 60 segundos de tiempo real (los agentes se ejecutan secuencialmente a través del Agent tool). Una deliberación con 10 agentes añade entre 2 y 4 minutos. Los hooks de consenso y pride check se ejecutan cada uno en menos de 200 ms. El cuello de botella principal es el tiempo de inferencia de LLM por agente, no la sobrecarga de orquestación.7

¿Qué tan largo debe ser un archivo CLAUDE.md?

Mantén cada sección por debajo de 50 líneas y el archivo total por debajo de 150 líneas. Los archivos largos se truncan por las ventanas de contexto, así que coloca las instrucciones más críticas al principio: comandos y definiciones de closures antes que preferencias de estilo.21

¿Puede esto funcionar con herramientas distintas a Claude Code?

Los principios arquitectónicos (hooks como puertas deterministas, skills como experiencia de dominio, subagents como contextos aislados, sistema de archivos como memoria) se aplican conceptualmente a cualquier sistema agéntico. La implementación específica utiliza los eventos del ciclo de vida de Claude Code, patrones de matcher y el Agent tool. AGENTS.md lleva los mismos patrones a Codex, Cursor, Copilot, Amp y Windsurf.21 El patrón de harness es agnóstico de herramienta aunque los detalles de implementación sean específicos de cada una.


Tarjeta de Referencia Rápida

Configuración de Hooks

{
  "hooks": {
    "PreToolUse": [{"matcher": "Bash", "hooks": [{"type": "command", "command": "script.sh"}]}],
    "PostToolUse": [{"matcher": "Write|Edit", "hooks": [{"type": "command", "command": "format.sh"}]}],
    "Stop": [{"matcher": "", "hooks": [{"type": "agent", "prompt": "Verify tests pass. $ARGUMENTS"}]}],
    "SessionStart": [{"matcher": "", "hooks": [{"type": "command", "command": "setup.sh"}]}]
  }
}

Frontmatter de Skills

---
name: my-skill
description: What it does and when to use it. Include trigger phrases.
allowed-tools: Read, Grep, Glob
---

Definición de Subagents

---
name: my-agent
description: When to invoke. Include PROACTIVELY for auto-delegation.
tools: Read, Grep, Glob, Bash
model: opus
permissionMode: plan
---

Instructions for the subagent.

Códigos de Salida

Código Significado Uso
0 Éxito Permitir la operación
2 Bloqueo Puertas de seguridad, quality gates
1 Advertencia no bloqueante Registro, mensajes informativos

Comandos Clave

Comando Propósito
/compact Comprimir contexto, preservar decisiones
/context Ver asignación de contexto y skills activos
/agents Gestionar subagents
claude -c Continuar la sesión más reciente
claude --print Invocación CLI de un solo uso (sin conversación)
# <note> Agregar nota al archivo de memoria
/memory Ver y gestionar auto-memory

Ubicación de Archivos

Ruta Propósito
~/.claude/CLAUDE.md Instrucciones globales personales
.claude/CLAUDE.md Instrucciones del proyecto (compartidas vía git)
.claude/settings.json Hooks y permisos del proyecto
~/.claude/settings.json Hooks y permisos del usuario
~/.claude/skills/<name>/SKILL.md Skills personales
.claude/skills/<name>/SKILL.md Skills del proyecto (compartidos vía git)
~/.claude/agents/<name>.md Definiciones personales de subagents
.claude/agents/<name>.md Definiciones de subagents del proyecto
.claude/rules/*.md Archivos de reglas del proyecto
~/.claude/rules/*.md Archivos de reglas del usuario
~/.claude/projects/{path}/memory/MEMORY.md Auto-memory

Registro de Cambios

Fecha Cambio
2026-03-24 Publicación inicial

Referencias


  1. Andrej Karpathy sobre “claws” como una nueva capa sobre agentes LLM. Discusión en HN (406 puntos, 917 comentarios). 

  2. Implementación del autor. 84 hooks, 48 skills, 19 agents, ~15.000 líneas de orquestación. Documentado en Claude Code como Infraestructura

  3. Anthropic, “Claude Code Hooks: Exit Codes.” docs.anthropic.com. Exit 0 permite, exit 2 bloquea, exit 1 advierte. 

  4. Anthropic, “Extender Claude con Skills.” code.claude.com/docs/en/skills. Estructura de skills, campos de frontmatter, coincidencia basada en LLM, presupuesto de contexto del 2%. 

  5. Anthropic, “Sub-agents de Claude Code.” code.claude.com/docs/en/sub-agents. Contexto aislado, soporte de worktree, equipos de agents. 

  6. Anthropic, “Documentación de Claude Code.” docs.anthropic.com/en/docs/claude-code. Archivos de memoria, CLAUDE.md, auto-memory. 

  7. Sistema de deliberación multi-agente del autor. 10 personas de investigación, máquina de estados de 7 fases, 141 pruebas. Documentado en Deliberación Multi-Agente

  8. Simon Willison, “Escribir código ahora es barato.” Patrones de Ingeniería Agéntica

  9. Laban, Philippe, et al., “Los LLM se Pierden en Conversaciones Multi-Turno,” arXiv:2505.06120, mayo 2025. Microsoft Research y Salesforce. 15 LLM, más de 200.000 conversaciones, caída promedio de rendimiento del 39%. 

  10. Mikhail Shilkov, “Dentro de los Skills de Claude Code: Estructura, Prompts, Invocación.” mikhail.io. Análisis independiente del descubrimiento de skills, inyección de contexto y la sección available_skills del prompt. 

  11. Código fuente de Claude Code, SLASH_COMMAND_TOOL_CHAR_BUDGET. github.com/anthropics/claude-code

  12. Anthropic, “Mejores Prácticas para la Creación de Skills.” platform.claude.com. Límite de 500 líneas, archivos de soporte, convenciones de nomenclatura. 

  13. Anthropic, “Hooks de Claude Code: Eventos del Ciclo de Vida.” docs.anthropic.com. 22 eventos del ciclo de vida, tipos de hooks, hooks asíncronos, hooks HTTP. 

  14. Tutorial de hooks de Claude Code del autor. 5 hooks de producción desde cero. Documentado en Tutorial de Hooks de Claude Code

  15. Gestión de la ventana de contexto del autor a lo largo de 50 sesiones. Documentado en Gestión de la Ventana de Contexto

  16. Implementación del Ralph Loop del autor. Iteración con contexto limpio y estado del sistema de archivos, presupuestos de spawn. Documentado en El Ralph Loop

  17. Arquitectura del sistema de deliberación del autor. 3.500 líneas de Python, 12 módulos, disparador de confianza, validación por consenso. Documentado en Construyendo Sistemas de IA: De RAG a Agents

  18. Nemeth, Charlan, In Defense of Troublemakers: The Power of Dissent in Life and Business, Basic Books, 2018. 

  19. Wu, H., Li, Z., y Li, L., “¿Pueden los Agentes LLM Realmente Debatir?” arXiv:2511.07784, 2025. 

  20. Liang, T. et al., “Fomentando el Pensamiento Divergente en Modelos de Lenguaje Grandes a través del Debate Multi-Agente,” EMNLP 2024

  21. Análisis de AGENTS.md del autor en repositorios del mundo real. Documentado en Patrones de AGENTS.md. Ver también: Blog de GitHub, “Cómo Escribir un Gran agents.md: Lecciones de Más de 2.500 Repositorios.” 

  22. Metodología de quality loop y evidence gate del autor. Parte del sistema de artesanía Jiro. 

NORMAL agent-architecture.md EOF