Agentes Personalizados
Los agentes personalizados son personas de IA especializadas definidas como archivos markdown con frontmatter YAML. Cada agente tiene su propio prompt de sistema, lista de herramientas permitidas, modelo, modo de permisos, servidores MCP, hooks, memoria persistente e identidad de color.
.md en .claude/agents/
y se convierte inmediatamente en un agente disponible. El frontmatter YAML configura todo — herramientas, modelo,
memoria, hooks, MCP — y el cuerpo markdown es el prompt de sistema. No se requiere código.
Tipos de Definición y Prioridad
4 tipos de definición
| Tipo | Fuente | Prompt |
|---|---|---|
| Built-in | builtInAgents.ts | Dinámico (función) |
| Personalizado | .claude/agents/*.md | Estático (cuerpo markdown) |
| Plugin | plugin/agents/*.md | Estático + sustitución de variables |
| Flag | --agents CLI flag | JSON (estático) |
Prioridad de descubrimiento (mayor gana)
Un agente de proyecto con el mismo nombre que uno built-in lo sobreescribe. CLAUDE_CODE_SIMPLE=true omite todos los agentes personalizados.
Formato del Archivo de Agente
Ubicación: .claude/agents/my-agent.md
---
name: my-agent
description: Usa este agente para revisiones de código.
Verifica seguridad, rendimiento y buenas prácticas.
tools:
- Read
- Grep
- Glob
- Bash
disallowedTools:
- Write
- Edit
model: opus
color: red
memory: project
maxTurns: 20
---
Eres un revisor de código especializado. Tu trabajo es
revisar cambios de código en busca de vulnerabilidades
de seguridad, problemas de rendimiento y buenas prácticas.
## Directrices
1. Siempre verifica el OWASP top 10
2. Busca patrones N+1 en queries
3. Verifica el manejo de errores Construcción del prompt de sistema
Prompt de respaldo por defecto
Si no se define cuerpo, el agente usa DEFAULT_AGENT_PROMPT: un prompt de uso general que instruye al agente a usar las herramientas disponibles, completar la tarea completamente y devolver un informe conciso.
Esquema Completo de Frontmatter
Campos obligatorios
| Campo | Descripción |
|---|---|
| name | Identificador único → agentType. Usado para selección por subagent_type. |
| description | Texto whenToUse mostrado al modelo. Soporta \n para saltos de línea. |
Campos opcionales
| Campo | Por defecto | Valores / Notas |
|---|---|---|
| tools | Todas | String o array. []=ninguna, *=todas |
| disallowedTools | Ninguna | Lista de denegación aplicada sobre la lista de permisos |
| model | Heredar | sonnet, opus, haiku, inherit, o ID completo |
| effort | Heredar | low, medium, high, max |
| permissionMode | Heredar | default, acceptEdits, bypassPermissions, dontAsk, plan, auto |
| color | Ninguno | red, blue, green, yellow, purple, orange, pink, cyan |
| maxTurns | Sin límite | Entero positivo |
| background | false | Siempre ejecutar como tarea en segundo plano |
| initialPrompt | Ninguno | Antepuesto al primer turno del usuario (uso en hilo principal) |
| memory | Ninguno | user, project, local |
| isolation | Mismo CWD | worktree — worktree git aislado, limpiado automáticamente |
| hooks | Ninguno | Con ámbito de sesión, soporta los 27 eventos |
| mcpServers | Ninguno | Referencias a strings o definiciones de servidores inline |
| skills | Ninguno | Nombres de skills a precargar (contenido inyectado antes del primer turno) |
Configuración de herramientas
Flujo de resolución
tools indefinido → todas las herramientastools: [] → sin herramientastools: ["*"] → todas las herramientasdisallowedTools aplicado como denylist encima# Agente de solo lectura
tools:
- Read
- Grep
- Glob
disallowedTools:
- Agent
- Write
- Edit
- Bash
# Herramientas MCP (nombre completo requerido)
tools:
- Bash
- Read
- mcp__github__create_issue
- mcp__slack__search_public Servidores MCP y Memoria
Configuración de servidores MCP
Referenciar servidores existentes
mcpServers:
- slack # Usa "slack" de configuración user/project
- github # Comparte conexión, NO se limpia al terminar Definición inline
mcpServers:
- my-api:
type: http
url: https://api.example.com/mcp
headers:
Authorization: Bearer `${API_TOKEN}`
# Creado para el agente, se limpia al terminar Mixto
mcpServers:
- slack # referencia
- custom: # inline
command: node
args: ["`${plugin_root}`/server.js"] 3 alcances de memoria
| Alcance | Directorio | VCS |
|---|---|---|
| user | ~/.claude/agent-memory/<name>/ | No |
| project | <cwd>/.claude/agent-memory/<name>/ | Sí |
| local | <cwd>/.claude/agent-memory-local/<name>/ | No |
Cómo funciona la memoria
loadAgentMemoryPrompt() carga el índice MEMORY.md → añadido al prompt de sistemauser)Snapshots de memoria (distribución VCS)
Almacenados en <cwd>/.claude/agent-memory-snapshots/<agentType>/. Al cargar: si no hay memoria local pero existe snapshot, copia el snapshot a local. Los equipos pueden hacer commit de snapshots para compartir conocimiento base del agente.
Hooks por Agente
Ejemplo de hooks en frontmatter
---
name: formatter
hooks:
PostToolUse:
- matcher: "Write|Edit"
hooks:
- type: command
command: "prettier --write \"$(cat | jq -r '.tool_input.file_path')\""
timeout: 10
statusMessage: "Formateando..."
Stop:
- hooks:
- type: command
command: "npm test"
--- Comportamiento
Stop del agente se convierten automáticamente a SubagentStopstrictPluginOnlyCustomization, solo fuentes de confianza admin pueden registrar hooksLos 27 eventos de hook están soportados en el frontmatter del agente.
Invocación de Agentes
Esquema de entrada AgentTool
{
description: string // 3-5 palabras (REQUERIDO)
prompt: string // Prompt completo de tarea (REQUERIDO)
subagent_type?: string // Nombre del agente (default: general-purpose)
model?: 'sonnet'|'opus'|'haiku'
run_in_background?: boolean
name?: string // Para equipos multi-agente
team_name?: string
mode?: PermissionMode // Override para teammate
isolation?: 'worktree'
cwd?: string // Dir. de trabajo (solo KAIROS)
} Flujo de ejecución (10 pasos)
Fork vs agente nuevo
| Aspecto | Fork (sin subagent_type) | Nuevo (con subagent_type) |
|---|---|---|
| Historial | Hereda contexto del padre | Empieza vacío |
| Herramientas | Conjunto exacto del padre | Definidas por el agente |
| Prompt de sistema | Prompt del padre | Markdown del agente |
| Ventana de contexto | Compartida con padre | Nueva |
| Propósito | Trabajo en segundo plano sin saturar al padre | Ejecución especializada |
Modos de aislamiento
Restricciones de Plugin y Agentes Integrados
Restricciones de seguridad en agentes plugin
| Campo | Estado |
|---|---|
| permissionMode | IGNORADO — no puede escalar más allá de la confianza en la instalación |
| hooks | IGNORADO — no puede registrar hooks personalizados |
| mcpServers | IGNORADO — no puede definir servidores MCP |
| Todos los demás campos | Permitidos (name, tools, model, color, etc.) |
Los nombres de agentes plugin llevan namespace: pluginName:agentName (ej. my-plugin:test-runner).
Definiciones JSON de agentes (flag --agents)
Todos los campos de frontmatter disponibles como claves JSON. Múltiples agentes por objeto JSON.
Los agentes NO se pueden definir en settings.json — no existe clave agents en el esquema de settings.
Agentes integrados (6)
| Agente | Modelo | Características clave |
|---|---|---|
| general-purpose | Heredar | Todas las herramientas, investigación y tareas multi-paso |
| Explore | Haiku | Solo lectura, búsqueda rápida en código, omite CLAUDE.md |
| Plan | Heredar | Solo lectura, planificación de arquitectura, omite CLAUDE.md |
| claude-code-guide | Haiku | Búsqueda en docs, modo de permisos dontAsk |
| statusline-setup | Sonnet | Solo Read + Edit, color naranja |
| verification | Heredar | Segundo plano, salida VERDICT, con feature flag, rojo |
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=true deshabilita todos los agentes integrados (solo no interactivo).
Ejemplos Prácticos
Revisor de seguridad (solo lectura, opus)
---
name: security-review
description: Usar para revisiones de seguridad.
Verifica OWASP top 10, inyección, auth, exposición.
tools: [Read, Grep, Glob, Bash]
disallowedTools: [Write, Edit, Agent]
color: red
model: opus
---
Eres un revisor de código de seguridad... Agente de despliegue (MCP + maxTurns)
---
name: deployer
description: Usar para desplegar código a staging o prod.
Requiere deploy-server MCP conectado.
tools: [Bash, Read, Grep]
mcpServers:
- deploy-server
color: orange
permissionMode: default
maxTurns: 20
---
Eres un especialista en despliegues... Agente de aprendizaje (memoria user)
---
name: tutor
description: Usar para aprender sobre el código.
Recuerda lo que el usuario ya ha aprendido.
tools: [Read, Grep, Glob]
memory: user
color: green
effort: high
---
Eres un tutor de código paciente... Auto-formateador (hooks por agente)
---
name: formatter
description: Usar cuando escribir código que necesita
auto-formateo después de cada edición.
hooks:
PostToolUse:
- matcher: "Write|Edit"
hooks:
- type: command
command: "prettier --write \"$(cat | jq -r '.tool_input.file_path')\""
timeout: 10
---
Escribes código limpio. Prettier formatea automáticamente. Comando /agents
Interfaz de gestión interactiva
Los agentes built-in y plugin se muestran pero están marcados como no editables.
Asistente de creación de agentes (7 pasos)
description es la única señal que usa el modelo para decidir
qué agente elegir. Escríbelo como "Usa este agente cuando..." seguido de escenarios específicos y concretos.
Las descripciones vagas llevan a una mala selección de agentes. Soporta \n para
formato multi-línea en la lista de agentes mostrada al modelo.