Clase Magistral • Junio 2026 • Basado en documentación oficial y análisis de código fuente
¿Cómo hacer que un agente de IA delegue trabajo a otro agente especializado? Este es el problema arquitectónico central de la programación agentica moderna. Cada plataforma lo aborda de forma radicalmente diferente:
Sistema de permisos whitelist + routing autoritativo. Filosofía: control granular de quién puede hacer qué.
Sandboxing OS-level + spawn explícito. Filosofía: aísla al agente, no a la herramienta.
Aislamiento físico + memoria persistente. Filosofía: cada subagente es un mini-entorno autocontenido.
Tres modelos mentales distintos, tres implementaciones diferentes, y un mismo objetivo: permitir que múltiples agentes de IA colaboren de forma segura y eficiente en un mismo proyecto. Analicemos cada uno en profundidad.
OpenCode implementa un sistema de delegación basado en control granular de permisos. Los subagentes se definen como archivos Markdown con YAML frontmatter y se invocan mediante la herramienta task. La filosofía es clara: cada subagente tiene exactamente los permisos que necesita y nada más.
Los subagentes se definen en .opencode/agents/<name>.md con YAML frontmatter:
---
name: git-expert
description: "AUTORIDAD EN GIT. Toda operacion git DEBE ser delegada."
mode: subagent
permission:
"*": deny
bash:
"git *": allow
"gh *": allow
read: allow
---
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
name | Sí | string | Identificador único del agente |
description | Sí | string | Propósito del agente; usado por autodiscovery en task tool |
mode | No | primary / subagent / all | primary (interactúa con usuario), subagent (solo via task), all (ambos) |
model | No | string | Modelo LLM específico para este agente |
temperature | No | number | Temperatura del modelo (0-2) |
top_p | No | number | Top-p sampling |
color | No | string | Color del agente en la UI |
hidden | No | boolean | Ocultar del autodiscovery en task tool |
steps | No | number | Límite de pasos del agente |
load_skills | No | string[] | Skills a cargar (forzado para reglas obligatorias) |
permission | No | dict (nunca lista) | Sistema whitelist/blacklist de permisos |
disable | No | boolean | Deshabilitar el agente sin borrar su definición |
El sistema de permisos de OpenCode es el más granular de las tres plataformas. Se basa en un diccionario whitelist con la regla "*": deny como primera línea de defensa, seguida de excepciones explícitas.
permission:
"*": deny # Denegar todo por defecto
read: allow # Leer archivos (siempre seguro)
edit: allow # Edit cubre write/patch/multiedit
bash:
"npm run *": allow # Glob patterns en bash
"node *": deny # Excepción específica
task:
"git-*": allow # Solo delegar a agentes git-*
edit: allow ya cubre write, patch y multiedit. NO añadirlos como keys separadas. Last match wins: el orden de las reglas importa.
| Tipo | Tools | Acción recomendada |
|---|---|---|
| Query (solo lectura) | read, glob, grep, webfetch, websearch, codesearch | allow — seguros, no modifican estado |
| Command (modifican estado) | bash, edit, write | deny o ask — requieren control |
taskEl mecanismo de delegación en OpenCode es la herramienta task. Parámetros principales:
| Parámetro | Tipo | Descripción |
|---|---|---|
subagent_type | string | Nombre del agente destino (para subagentes explícitos) |
prompt | string | Instrucciones detalladas para el subagente |
description | string | Descripción corta usada por autodiscovery |
task_id | string | ID opcional para continuation-passing en tareas largas |
Autodiscovery: Si se omite subagent_type, OpenCode selecciona automáticamente el agente más adecuado basado en la descripción del agente y el prompt. El continuation-passing protocol permite que tareas largas retomen desde checkpoints.
OpenCode introduce el concepto único de agente autoritativo: ciertos dominios tienen un agente designado como autoridad exclusiva. La delegación forzosa se implementa mediante una combinación de:
| Agente | Dominio | Regla |
|---|---|---|
git-expert | Toda operación git/gh (commit, push, tag, branch, merge, rebase, PR) | Delegar siempre |
dag-planner | Creación y gestión de planes DAG multi-nivel en .dag-plans/ | Delegar siempre |
dag-validator | Validación de estructura DAG, ciclos, consistencia | Delegar para verificar integridad |
lecciones-aprendidas-expert | Detección, clasificación y acción de lecciones aprendidas | Delegar vía /lecciones-aprendidas o task |
| Patrón | Uso | Permisos típicos |
|---|---|---|
| Orchestrator | Agente que orquesta a otros | Whitelist estricta: solo task + read. Sin bash, sin edit. |
| Worker | Ejecuta tareas específicas | edit: allow, bash limitado a comandos específicos |
| Explorer | Analiza código sin modificar | Solo read, glob, grep. Bash solo para git status/git diff. |
| Scout | Busca información externa | webfetch, websearch, codesearch. Sin bash, sin edit. |
| Modo | Descripción |
|---|---|
primary | Interactúa directamente con el usuario. Visible en la UI. |
subagent | Solo invocable vía task. No interactúa con el usuario directamente. |
all | Puede ser tanto primary como subagent. Ambos roles simultáneamente. |
OpenCode incluye agentes predefinidos que cubren necesidades comunes:
| Agente | Propósito |
|---|---|
build | Compilar, ejecutar tests, lintear, analizar código. Herencia de permisos del proyecto. |
plan | Diseñar planes de implementación multi-paso con análisis de impacto. |
general | Agente de propósito general con todas las herramientas disponibles. |
explore | Navegar y comprender codebases desconocidos. Solo lectura. |
scout | Investigación externa: web search, documentación, APIs. |
compaction | Gestión de contexto: comprimir historial de conversación. |
title | Generar títulos descriptivos para sesiones. |
summary | Resumir sesiones y conversaciones. |
OpenCode incluye una API experimental de workspaces y worktrees descubierta en el SDK de plugins, aunque sin documentación oficial estable:
| Componente | Tipo | Métodos / Eventos |
|---|---|---|
WorkspaceAdapter | Plugin API | experimental_workspace en PluginInput — register, configure, create, remove, target |
Worktree | Project API | project.worktree — create, list, remove, reset |
Eventos | Lifecycle | workspace.ready / workspace.failed / workspace.status, worktree.ready / worktree.failed |
experimental_ (ej. experimental_workspace), no hay documentación en opencode.ai/docs/, y puede cambiar sin aviso. No es equivalente al aislamiento maduro de Claude Code.
Codex CLI de OpenAI implementa un sistema de subagentes basado en sandboxing a nivel de sistema operativo. En lugar de controlar qué tools puede usar cada agente, controla qué partes del filesystem puede tocar. La filosofía: "aísla al agente, no a la herramienta".
Los subagentes se definen en .codex/agents/<name>.toml con formato TOML:
name = "reviewer"
description = "PR reviewer focused on correctness"
developer_instructions = """
Review code like an owner.
"""
model = "gpt-5.4-mini"
model_reasoning_effort = "medium"
sandbox_mode = "read-only"
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
name | Sí | string | Identificador único del subagente |
description | Sí | string | Propósito del subagente |
developer_instructions | Sí | string | Instrucciones del desarrollador (reemplaza system prompt) |
nickname_candidates | No | string[] | Apodos alternativos para matching |
model | No | string | Modelo LLM específico |
model_reasoning_effort | No | low / medium / high | Esfuerzo de razonamiento del modelo |
sandbox_mode | No | string | Nivel de sandboxing (default: read-only) |
mcp_servers | No | table[] | Servidores MCP scoped al subagente |
skills.config | No | table | Ruta + enabled para skills |
config_file | No | string | Archivo de configuración adicional |
Codex CLI es la única plataforma con sandboxing real a nivel OS. Tres niveles de creciente permisividad:
| Modo | Acceso | Útil para | Riesgo |
|---|---|---|---|
read-only |
Solo lectura en todo el filesystem. Sin escritura, sin ejecución. | Code review, análisis de seguridad, auditoría | Mínimo |
workspace-write |
Escritura solo en CWD + $TMPDIR. .git/ protegido. |
Desarrollo normal, edición de código en el proyecto | Medio |
danger-full-access |
Sin restricciones. Acceso completo al sistema. | Instalación de paquetes, sysadmin, operaciones privilegiadas | Alto |
read-only es un true read-only filesystem mount. workspace-write protege .git/ de modificaciones accidentales. Es el enfoque más seguro de las tres plataformas para código no confiable.
La primera versión del sistema multi-agente de Codex CLI se activaba con features.multi_agent = true y exponía tools específicas:
| Tool | Propósito |
|---|---|
spawn_agent | Crear un nuevo subagente con un mensaje |
send_input | Enviar entrada a un subagente existente |
resume_agent | Reanudar un subagente pausado |
wait | Esperar a que un subagente termine |
close_agent | Cerrar un subagente explícitamente |
La versión más reciente simplifica el modelo. Una sola tool spawn_agent con:
Task-path routing: los subagentes se organizan en un árbol jerárquico (/root/parent/child/task). A diferencia de v1, ignora agents.max_depth, permitiendo anidamiento sin límite predefinido (aunque controlado por max_concurrent_threads_per_session, default 4).
Codex CLI tiene una capacidad única: fan-out sobre CSV para procesamiento batch. Requiere features.enable_fanout = true y soporta timeout via max_runtime_seconds.
# Un agente por fila del CSV, procesamiento paralelo
features:
enable_fanout = true
En config.toml, sección [agents]:
| Parámetro | Default | Descripción |
|---|---|---|
max_threads | 6 | Máximo de hilos concurrentes global |
max_depth | 1 | Profundidad máxima de anidamiento (v1; ignorado en v2) |
job_max_runtime_seconds | — | Timeout máximo para trabajos |
Codex CLI implementa herencia de configuración padre → hijo:
Codex CLI incluye un built-in explorer que puede ser overriden por un custom. Es el equivalente funcional al explore de OpenCode.
max_depth de v1.
Claude Code de Anthropic implementa el sistema de subagentes más completo y maduro de las tres plataformas. Su filosofía: cada subagente es un mini-entorno autocontenido con su propio filesystem aislado, su propia memoria persistente, y la capacidad de ejecutarse en background concurrentemente.
Los subagentes se definen en .claude/agents/<name>.md con YAML frontmatter:
---
name: code-reviewer
description: "Expert code reviewer. Use proactively after code changes."
tools: Read, Glob, Grep
disallowedTools: Write, Edit
model: sonnet
permissionMode: acceptEdits
maxTurns: 20
memory: project
effort: high
isolation: worktree
---
| Campo | Req | Tipo | Descripción |
|---|---|---|---|
name | Sí | string | Identificador único del subagente |
description | Sí | string | Propósito; usado para matching automático y @-mention |
tools | No | string[] | Tools permitidas (lista blanca). Vacío = todas. |
disallowedTools | No | string[] | Tools explícitamente prohibidas (lista negra) |
model | No | sonnet / haiku / opus | Modelo LLM específico para este agente |
permissionMode | No | 6 modos (ver tabla) | Control de permisos del subagente |
maxTurns | No | number | Límite de turnos del subagente |
skills | No | string[] | Skills a cargar (por nombre, contenido completo) |
mcpServers | No | inline o referencia | Servidores MCP scoped al subagente |
hooks | No | object | Lifecycle hooks: SubagentStart/Stop, Pre/PostToolUse |
memory | No | user / project / local | Nivel de memoria persistente |
background | No | boolean | Ejecutar en background (concurrente, Ctrl+B) |
effort | No | low / medium / high | Esfuerzo de procesamiento |
isolation | No | worktree | Aislamiento físico via git worktree |
initialPrompt | No | string | Prompt inicial adicional al system prompt |
color | No | string | Color del agente en la UI |
Claude Code tiene el sistema de control de permisos más matizado de las tres plataformas:
| Modo | Comportamiento | Riesgo |
|---|---|---|
default | Permisos estándar. El agente pregunta antes de operaciones destructivas. | Medio |
acceptEdits | Auto-aprueba ediciones en el working directory. Sin preguntar. | Medio |
auto | Un classifier revisa cada operación y decide si aprueba automáticamente. | Variable |
dontAsk | Auto-denia todo lo que no esté pre-aprobado por tools. | Bajo |
bypassPermissions | Salta todos los controles de permisos. Solo en contenedores. | Alto |
plan | Read-only total. Solo analiza, nunca ejecuta ni escribe. | Mínimo |
Claude Code ofrece la implementación más madura de aislamiento físico mediante git worktrees, aunque OpenCode tiene una API experimental similar:
# En la definición del subagente:
isolation: worktree
# Crea un git worktree temporal en .claude/worktrees/<name>/
# Rama default desde origin/HEAD
# Auto-limpieza al terminar
# .worktreeinclude para archivos gitignored
A pesar de ser la solución más madura, el sistema de worktree isolation de Claude Code tiene bugs documentados por la comunidad:
isolation: worktree no se aplica correctamente, anulando la protección.Claude Code es la única plataforma con memoria persistente para subagentes:
| Nivel | Alcance | Persistencia |
|---|---|---|
user | Entre proyectos del mismo usuario | Cross-project, permanente |
project | Dentro del mismo proyecto | Cross-session, por proyecto |
local | Solo la sesión actual | Sin persistencia entre sesiones |
La memoria se almacena en un directorio dedicado con archivo MEMORY.md. Las primeras 200 líneas o 25KB se cargan al contexto automáticamente. Esto permite que un subagente aprenda y recuerde entre sesiones — único entre las tres plataformas.
| Agente | Modelo | Tools | Propósito |
|---|---|---|---|
| Explore | Haiku | Read-only (sin Write, Edit, Bash) | Análisis de codebase. No carga CLAUDE.md ni git status. |
| Plan | Hereda el modelo padre | Read-only (sin Write, Edit, Bash) | Diseño de planes. No carga CLAUDE.md ni git status. |
| General-purpose | Hereda el modelo padre | Todas las tools | Propósito general, editable por el usuario |
| statusline-setup | — | — | Setup de statusline en la UI |
| claude-code-guide | — | — | Guía de uso de Claude Code |
La resolución de definiciones de subagentes sigue este orden de precedencia:
--agents flag al iniciar la sesión.claude/agents/ en el proyecto actual~/.claude/agents/ global del usuarioLos directorios se escanean recursivamente, permitiendo organización por subdirectorios.
| Mecanismo | Descripción |
|---|---|
| Automático | Matching por descripción vs tarea actual. El agente decide qué subagente invocar. |
| @-mention | Explícito: @"code-reviewer (agent)" en el mensaje. |
| Session-wide | claude --agent code-reviewer para toda la sesión. |
| Fork | Hereda la conversación del padre. El subagente ve el historial completo. |
| Background | Concurrente con background: true. Ctrl+B para enviar a background. Auto-deny en prompts. |
| Skills | Skills con context: fork lanzan subagente fork automáticamente. |
Claude Code es la única plataforma con un Agent SDK oficial para integración programática:
claude-agent-sdk pip package. query(), AgentDefinition, ClaudeAgentOptions.@anthropic-ai/agent-sdk npm package. Misma API.Esta es la tabla más completa que existe comparando los sistemas de delegación de las tres plataformas. Cada fila es una dimensión arquitectónica clave.
| Dimensión | OpenCode | Codex CLI | Claude Code |
|---|---|---|---|
| Formato de definición | YAML frontmatter en .md | TOML standalone | YAML frontmatter en .md |
| Archivo | .opencode/agents/<name>.md |
.codex/agents/<name>.toml |
.claude/agents/<name>.md |
| Campos requeridos | name, description | name, description, developer_instructions | name, description |
| Número total de campos | ~12 | ~9 | ~17 |
| Mode/role | primary / subagent / all | (solo subagent) | (solo subagent) |
| Mecanismo de delegación | task tool con permisos glob |
spawn_agent tool |
Matching automático + @-mention |
| Control de delegación | permission.task dict whitelist |
agents.max_threads, agents.max_depth |
maxTurns, sin anidamiento |
| Permisos granular | Whitelist *: deny + excepciones |
sandbox_mode (3 niveles OS) |
tools + disallowedTools + permissionMode (6 modos) |
| Aislamiento físico / Workspace | ⚠️ Experimental (experimental_workspace API) |
❌ No en CLI (solo Desktop App) | ✅ isolation: worktree⚠️ Bugs conocidos |
| Memoria persistente | ❌ No tiene | ❌ No tiene | ✅ memory: user/project/local |
| Background tasks | ❌ No tiene | ❌ No tiene | ✅ background: true + Ctrl+B |
| MCP scoped a subagente | ⚠️ Parcial | ✅ mcp_servers table |
✅ mcpServers field (inline/referencia) |
| Hooks lifecycle | ❌ No tiene | ❌ No tiene | ✅ SubagentStart/Stop + Pre/PostToolUse |
| Skills precargados | ✅ load_skills (forzado) |
skills.config (ruta + enabled) |
✅ skills (por nombre, contenido completo) |
| Agent SDK | ❌ No tiene | ❌ No tiene | ✅ Python + TypeScript oficial |
| Built-in agents | build, plan, general, explore, scout, compaction, title, summary | explorer | Explore, Plan, general-purpose + statusline-setup + claude-code-guide |
| Subagent anidamiento | ✅ Posible (sin límite explícito) | max_depth (default 1); v2 ignora límite |
❌ No permitido |
| CSV fan-out | ❌ No tiene | ✅ spawn_agents_on_csv |
❌ No tiene |
| Continuation-passing | ✅ task_id + checkpoints | ✅ task-path routing (v2) | ❌ No tiene equivalente |
| Plugin distribution | ❌ No tiene | ❌ No tiene | ✅ Plugins con agents empaquetados |
| Modelo por subagente | ✅ Sí, cualquier provider | ✅ Sí, solo OpenAI | ✅ Sí, solo Anthropic |
| Open Source | ✅ MIT License | Código disponible | Código cerrado |
"*": deny es el estándar más seguro. Ninguna otra plataforma ofrece este nivel de granularidad.experimental_workspace existe pero no es estable ni está documentada oficialmente. En producción, los subagentes comparten el filesystem.memory: project. Cada sesión empieza desde cero.query(), AgentDefinition, session management."*": deny + patrones glob en bash.isolation: worktree. Bugs reconocidos pero sin fix en versiones estables.El mapa conceptual para portar subagentes entre las tres plataformas. Cada fila responde: "¿cómo hago X en cada plataforma?"
| Concepto | OpenCode | Codex CLI | Claude Code |
|---|---|---|---|
| Definir subagente | .opencode/agents/<name>.md |
.codex/agents/<name>.toml |
.claude/agents/<name>.md |
| Invocar subagente | task(subagent_type="name") |
spawn_agent("message") |
@-mention o automático |
| Restringir tools | permission: {bash: deny} |
sandbox_mode = "read-only" |
tools + disallowedTools |
| Aislar agente | No disponible | sandbox_mode filesystem | isolation: worktree |
| Memoria del agente | No disponible | No disponible | memory: project |
| Background | No disponible | No disponible | background: true |
| Modelo específico | model en frontmatter |
model en TOML |
model en frontmatter |
| MCP servers | Parcial | mcp_servers table |
mcpServers field |
| Skills/plugins | load_skills (forzado) |
skills.config |
skills (por nombre) |
| Límite de turnos | steps |
— | maxTurns |
| Esfuerzo de procesamiento | — | model_reasoning_effort |
effort |
| Machine-readable | task tool devuelve string | wait tool | Agent SDK |
| Ocultar subagente | hidden: true |
— | — |
| Deshabilitar sin borrar | disable: true |
— | — |
| Hooks lifecycle | No disponible | No disponible | SubagentStart/Stop hooks |
| Color en UI | color |
— | color |
task (OpenCode) ≈ spawn_agent (Codex) ≈ @-mention (Claude). permission (OpenCode) ≈ sandbox_mode + tools/disallowedTools (Codex/Claude). mode: subagent (OpenCode) es la norma en Codex y Claude — ambas asumen que todo agente es subagent por defecto.
No se trata de cuál es "mejor" — se trata de cuál se adapta a cada caso de uso. Esta guía te ayuda a elegir según tus necesidades específicas.
| Necesidad | Mejor plataforma | Por qué |
|---|---|---|
| Seguridad máxima (código no confiable) | Codex CLI | Sandboxing OS-level real con 3 niveles de aislamiento. True read-only filesystem. |
| Control granular de qué tools usa cada agente | OpenCode | Whitelist "*": deny + patrones glob en bash. El más expresivo y seguro. |
| Trabajo concurrente no bloqueante | Claude Code | Background tasks + Ctrl+B + worktree isolation. Único con concurrencia real. |
| Procesamiento batch de datos (CSV) | Codex CLI | spawn_agents_on_csv con fan-out. Los otros no tienen equivalente. |
| Agente que persiste aprendizaje entre sesiones | Claude Code | memory: project con MEMORY.md. Único con memoria cross-session. |
| Routing forzoso a especialistas | OpenCode | Agentes autoritativos + task permissions. Único con routing obligatorio. |
| Múltiples subagentes modificando el mismo repo | Claude Code | Worktree isolation evita colisiones. Los otros comparten filesystem. |
| Subagentes que crean subagentes (árbol profundo) | OpenCode | Sin límite de anidamiento. Codex tiene límite configurable. Claude no permite. |
| Integración programática (SDK) | Claude Code | Agent SDK Python + TypeScript. Los otros no tienen SDK. |
| Ecosistema Open Source | OpenCode | MIT License, 100% TypeScript. Código abierto auditabile. |
| Tareas largas con checkpoint/reanudación | OpenCode | Continuation-passing protocol con task_id. Único con checkpoints. |
| Multi-provider LLM (no vendor lock-in) | OpenCode | OpenAI, Anthropic, Google, OpenRouter, Ollama, providers locales. |
| Distribución de subagentes como plugins | Claude Code | Plugins con agents empaquetados. Los otros no tienen distribución. |
| MCP servers específicos por subagente | Claude Code / Codex CLI | Claude Code y Codex CLI soportan MCP scoped con definiciones inline propias. OpenCode tiene soporte parcial (solo on/off de servers globales). |
Para equipos que necesitan lo mejor de cada mundo:
experimental_workspace.La interoperabilidad no es un sueño: el Core-First pattern (lógica portable en un núcleo independiente, adapters específicos por plataforma) permite que ~80% del código de un subagente viaje entre plataformas sin cambios.
Todas las afirmaciones en esta clase están respaldadas por documentación oficial y código fuente verificable.
Última verificación: Junio 2026. Las especificaciones y documentación pueden cambiar; consulte las fuentes oficiales para información actualizada.