PTENES
MÓDULO 2.3 · Ruta 2 · Creación práctica

🧠 El cuerpo es el cerebro

El frontmatter configura el agente, pero el cuerpo del .md es quien decide cómo piensa, cómo actúa y qué entrega. Un cuerpo bien escrito convierte una herramienta genérica en un especialista confiable.

7
Temas
~35
Minutos
Medio
Nivel
Práctica
Tipo

Todo subagente bien construido sube la misma escalera: empieza con un rol claro, avanza por los pasos numerados y llega hasta un formato de salida que cualquier orquestador puede leer. Lo que distingue a un agente débil de un especialista confiable está en esta progresión.

PAPEL you are a senior… CONTEXTO when invoked… PASOS 1. analiza · 2. revisa… SALIDA + NO HACER formato estructurado Escalera del cuerpo del subagente: cada peldaño amplifica el siguiente
1

🎭 Función: "you are a senior…"

La primera línea del cuerpo define el identidad del agente. No es vanidad: es una señal de especialización. El modelo ajusta el vocabulario, la profundidad y el tono según esa declaración. Una frase de rol bien escrita vale más que diez párrafos de instrucciones vagas.

Anatomía de una función efectiva

Un rol completo tiene tres partes: nivel (senior / staff / principal), dominio (ingeniero de seguridad / revisor de código / redactor técnico) y contexto operativo (trabajar en una base de código de producción / revisar PRs / escribir para desarrolladores).

Nivel
senior · staff · principal · lead
Dominio
security engineer · reviewer · writer
Contexto
en producción · revisando PR · escribiendo documentación

✓ Papel efectivo

  • ✓ "You are a senior security engineer reviewing production Python code for OWASP vulnerabilities."
  • ✓ "You are a staff technical writer creating developer documentation for a REST API."
  • ✓ Incluye un dominio específico + contexto de uso

✗ Papel débil

  • ✗ "You are a helpful assistant." — demasiado genérico, sin ninguna señal del dominio
  • ✗ "You are an expert." — sin especificar en qué
  • ✗ Omitir el rol por completo

Consejo: prueba su función preguntando "¿qué vocabulario usaría un [tu rol]?" — si la respuesta cambia entre "asistente útil" e "ingeniero sénior de seguridad", el rol está haciendo un trabajo real.

2

🔢 Pasos numerados: "when invoked: 1…"

Después del rol vienen las pasos de ejecución — la secuencia exacta que el agente debe seguir cada vez que se lo activa. Los pasos numerados transforman el comportamiento emergente (impredecible) en un comportamiento reproducible.

1
Lee toda la entrada antes de actuar
Primer paso casi universal. Evita que el agente responda a la primera frase e ignore el contexto que viene después.
2
Clasifica / identifica el tipo de elemento
Segundo paso típico en revisores y clasificadores. Define la ruta de procesamiento antes de ejecutar.
3
Ejecuta el análisis principal
El trabajo de dominio propiamente dicho. Sé específico: "check for SQL injection, XSS, insecure deserialization" es mejor que "look for bugs".
4
Da formato y entrega la salida
Último paso: aplica el formato de salida definido. Mantiene la consistencia aunque cambie el orquestador.

¿Por qué numerar?

El modelo tiende a seguir listas numeradas con más fidelidad que párrafos de instrucciones. La numeración crea un contrato explícito de ejecución — saltarse un paso se vuelve visible para quien revisa el resultado.

3

📄 Formato de salida

El orquestador leerá lo que devuelva el subagente. Si el formato varía, el orquestador necesita lógica adicional para analizarlo. Un formato de salida declarado en el cuerpo del agente elimina esa variación y hace que la integración sea trivial.

Sección ## Output Format en el cuerpo

Declara el formato explícitamente en una sección separada del cuerpo. Usa Markdown para la estructura y code fences para mostrar el esquema exacto esperado.

## Formato de salida
Respond with a Markdown document containing:
- **Resumen**: 1-2 oraciones
- **Findings**: lista numerada, cada uno con su nivel de gravedad (HIGH/MED/LOW)
- **Recomendación**: una solución práctica por hallazgo
No incluyas ninguna otra sección.

✓ Formato estructurado

  • ✓ Sección dedicada ## Output Format
  • ✓ Campos con nombre y tipo (string, número, lista)
  • ✓ Esquema JSON cuando el orquestador va a analizarlo automáticamente

✗ Formato libre

  • ✗ Sin declaración de formato: la salida varía en cada invocación
  • ✗ "Responda en prosa" para integraciones automatizadas
  • ✗ Campos opcionales sin valor predeterminado declarado

Consejo: cuando el subagente vaya a devolver datos para que otro agente los procese, prefiere JSON a Markdown: es más fácil de analizar mediante programación. Usa Markdown cuando la salida sea para lectura humana directa.

4

🚫 Qué NO hacer

Declarar restricciones explícitas es tan importante como decir qué hacer. El modelo sabe más de lo que quieres que use; la sección de no hacer delimita el alcance y evita que el agente «ayude demasiado» fuera de su función.

Sección ## Constraints

Usa una sección ## Constraints o ## Do not para enumerar comportamientos prohibidos. Cada restricción debe poder ponerse en práctica; no debe ser vaga.

## Restricciones
- Do not fix code — only report findings
- Do not comment on style — enfócate solo en seguridad
- Do not escalate to the user — devolver los resultados al orquestador
- Do not hallucinate CVE numbers — di "sin verificar" si no estás seguro

⚠️ Las restricciones vacías no funcionan

"No hagas nada dañino" no es una restricción accionable: el modelo ya tiene guardrails para eso. Las restricciones útiles son específicas del dominio del agente: "no sugieras cambios arquitectónicos" (para un revisor de código), "no traduzcas el contenido" (para un verificador de calidad).

🎯
Específico
Evita decir «no hagas cosas malas»
🔒
Límite de alcance
Define dónde se detiene el agente
📡
Escalamiento
Especifica si debe escalar o no
🔕
Silencio
Cuándo no devolver nada
5

⚡ Un agente, una tarea

El mayor error en el cuerpo de un agente no es lo que está ahí, sino lo que está más. Los agentes que hacen varias cosas no hacen bien ninguna. La prueba es sencilla: si puedes poner un "y también" en el rol del agente, debe dividirse.

La prueba del "y también"

✗ Agente todoterreno
You are a senior engineer.
Review the code for bugs,
and also suggest improvements,
and also update the docs,
and also check security.
✓ Agentes especializados
bug-finder: revisar la corrección
security-reviewer: comprobaciones de OWASP
doc-writer: actualizar la documentación
refactor-advisor: sugerir mejoras

Consejo práctico: cuando un agente tarda mucho, produce resultados grandes y difíciles de analizar, o se queda "confundido" entre modos de operación, es señal de que está intentando hacer demasiadas cosas. Divide en el punto del "y también".

🔬
Especialización
Un rol → una responsabilidad
🧩
Composición
El orquestador combina especialistas
🔄
Facilidad de prueba
Agente único = punto de falla aislado
6

🔧 El cuerpo invoca skills

Un subagente puede usar skills registradas en el sistema: las invoca por nombre, con un comando en el cuerpo. Esto permite que el agente delegue partes del trabajo en skills especializadas sin tener que volver a implementar comportamientos que ya existen.

Cómo declararlo en el cuerpo

## Cuándo se invoca
1. Lee por completo los archivos de destino.
2. Use the `impeccable` skill to check prose quality.
3. Aplica los hallazgos al resultado.
4. Devuelve un resumen al estilo diff.

La instrucción de uso de la skill va en los pasos numerados, no en el rol. El rol define quién es el agente; los pasos definen qué usa.

✓ Delegación correcta

  • ✓ Skill invocada en un paso específico y numerado
  • ✓ Resultado de la skill integrado en el resultado final
  • ✓ La skill hace una cosa; el agente orquesta el flujo

✗ Problemas comunes

  • ✗ Invocar una skill sin usar el resultado (desperdicio de tokens)
  • ✗ Llamar a una skill que hace exactamente lo mismo que el agente
  • ✗ Invocar múltiples skills sin un criterio de orden
🎓
Skill
Comportamiento reutilizable
📋
Invocación
Por nombre, en los pasos
🔗
Composición
Agente + skills = sistema
♻️
Reutilización
La skill sirve a N agentes
7

🔁 Iterar con feedback

El cuerpo de un agente no nace listo. La primera versión funciona el 70% del tiempo — el otro 30% revela lo que falta o lo que está mal. Iterar con comentarios reales es lo que separa un agente que «funciona a veces» de uno «confiable en producción».

1
Borrador inicial
Papel + pasos básicos + formato. No tiene que ser perfecto: tiene que ser comprobable.
2
Ejecuta con 3-5 entradas reales
Elige casos representativos del uso real, no entradas fáciles. El agente debe rendir bien en los casos difíciles.
3
Identifica el patrón de falla
¿Dónde el resultado se desvía de lo esperado? ¿Formato incorrecto, ampliación del alcance, paso omitido? Cada falla se vincula con una corrección en el cuerpo.
4
Corrige en el cuerpo y vuelve a probar
Una corrección a la vez. Si cambias tres cosas juntas, no sabes cuál de ellas lo resolvió. Versionado simple: v1, v2, v3.

Regla práctica: si tuviste que explicárselo al orquestador "el agente devolvió X, pero debes ignorar la parte Y", esto es una señal de que la corrección debería estar en el cuerpo del agente, no en la lógica del orquestador.

📎

Ejemplo real: security-reviewer.md

Abajo tienes un subagente completo de revisión de seguridad. Cada sección muestra uno de los conceptos de este módulo aplicados en conjunto.

~/.claude/agents/security-reviewer.md
--- name: security-reviewer description: Reviews code for security vulnerabilities. Invoke when a file or diff needs OWASP/CVE analysis before merge. model: claude-sonnet-4-5 tools: - Read - Bash --- You are a senior security engineer specializing in application security for Python and TypeScript production codebases. Your sole responsibility is identifying security vulnerabilities — not fixing code, not commenting on style. ## Cuándo se invoca 1. Lee completos todos los archivos o diff proporcionados antes de hacer cualquier evaluación. 2. Identifica el lenguaje y el framework utilizados (Django, FastAPI, Next.js, etc.). 3. Revisa sistemáticamente las siguientes clases de vulnerabilidades: - Inyección (SQL, comandos, LDAP) - Fallas de autenticación y gestión de sesiones - Exposición de datos sensibles (secretos en el código, datos personales en los logs) - Deserialización insegura - Versiones vulnerables conocidas de dependencias (revisa package.json / requirements.txt) 4. Asigna una gravedad a cada hallazgo: HIGH / MEDIUM / LOW. 5. Da formato y entrega el informe según se especifica a continuación. ## Formato de salida Return a Markdown document with exactly these sections: **Summary**: 1-2 sentences on overall security posture. **Findings**: numbered list. Each entry: - Severity: HIGH / MEDIUM / LOW - Location: filename:line - Description: what the vulnerability is - Evidence: the relevant code snippet (max 3 lines) **Verdict**: PASS (no HIGH/MEDIUM), REVIEW (has MEDIUM), or BLOCK (has HIGH) ## Restricciones - Do not suggest code fixes — report only - Do not comment on code quality, style, or architecture - Do not escalate directly to the user — return results to orchestrator - If a CVE number is uncertain, write "potential CVE — unverified" instead of a CVE ID - Do not analyze files outside the provided scope

Por qué funciona este cuerpo

  • → Papel específico: seniority + dominio + alcance (Python/TS, producción)
  • → Pasos del checklist: 5 pasos que cubren todo el flujo sin ambigüedad
  • → Formato declarado: 3 secciones con nombre y estructura exacta
  • → Restricciones accionables: 5 prohibiciones específicas del dominio de seguridad

Contenido detallado

PROMPT 1 Convertir la lista de verificación en el cuerpo del agente
Lee esta checklist de revisión de PR: [pega la checklist aquí] Conviértela en un cuerpo completo de subagente para un archivo .md: - Rol (senior + dominio extraído de la checklist) - Pasos numerados (mapeados a los elementos de la checklist) - Formato de salida (estructurado, parseable) - Constraints (lo que el agente NO debe hacer además de lo indicado en la checklist)

Úsalo cuando ya tienes un proceso documentado y quieres transformarlo en un agente.

PROMPT 2 Auditar el cuerpo existente
Lee el cuerpo de este subagente: [pega el .md aquí] Evalúa: 1. ¿El rol es lo suficientemente específico? (nivel + dominio + contexto operativo) 2. ¿Los pasos cubren el flujo completo sin lagunas? 3. ¿El formato de salida está declarado y es parseable? 4. ¿Las constraints son específicas del dominio o demasiado genéricas? Devuelve una lista de mejoras con ejemplos concretos.

Úsalo para revisar agentes que «casi funcionan» e identificar qué les falta.

PROMPT 3 Dividir al agente que hace de todo
Este agente hace muchas cosas: [pega aquí el cuerpo del agente] Aplica la prueba del "y también": 1. Enumera cada responsabilidad independiente que tiene el agente 2. Propón dividirlo en N agentes especializados (nombre + rol de cada uno) 3. Para el agente más importante, escribe el cuerpo completo Criterio: cada agente debe tener exactamente una responsabilidad.

Úsalo cuando un agente hace de todo, pero no hace nada bien.

🖥️

Pantalla simulada: invocando al security-reviewer

El orquestador invocó al security-reviewer en un archivo de autenticación. Mira cómo el cuerpo estructurado produce una salida consistente y parseable.

claude — subagente: security-reviewer recreación ilustrativa
# Invocando security-reviewer en auth/login.py
→ Leyendo el archivo completo (312 líneas)...
→ Framework detectado: FastAPI + SQLAlchemy
→ Verificando clases de vulnerabilidad...
## Resumen
Two HIGH-severity findings in auth/login.py. SQL injection via raw query and hardcoded secret key. Immediate action required before merge.
## Hallazgos
1. Gravedad: HIGH
Location: auth/login.py:87
Description: Raw SQL string interpolation — SQL injection
query = f"SELECT * FROM users WHERE email = '{email}'"
2. Gravedad: MEDIUM
Location: auth/login.py:12
Description: Hardcoded SECRET_KEY in source file
SECRET_KEY = "dev-secret-do-not-use"
## Veredicto
BLOCK — 1 HIGH finding requires resolution before merge.
🏋️

Ejercicio: dividir un agente que lo hace todo

Aplica lo que aprendiste en este módulo.

El agente problemático

You are a helpful senior engineer. When invoked: 1. Review the code for bugs AND style issues AND security problems. 2. Suggest architectural improvements if you see any. 3. Update the changelog. 4. If there are tests missing, write them. 5. Check documentation is up to date. 6. Respond in a friendly, conversational tone with all your thoughts.

Tu tarea

  1. 1 Lista todas las responsabilidades separadas de este agente (aplica la prueba del «y también»)
  2. 2 Propón 3 agentes especializados (nombre + una línea sobre el rol de cada uno)
  3. 3 Escribe el cuerpo completo de uno de los agentes: rol + pasos numerados + formato de salida + constraints

Criterio de finalización

  • ✓ Identificaste ≥4 responsabilidades separadas en el agente original
  • ✓ Cada agente propuesto pasa la prueba de «y también» — cero superposición de responsabilidades
  • ✓ El cuerpo que escribiste tiene un rol específico (nivel + dominio + contexto)
  • ✓ Los pasos numerados cubren el flujo completo sin «y también»
  • ✓ El formato de salida está declarado y otro agente podría procesarlo
  • ✓ Las restricciones son específicas del dominio — no genéricas

📌 Qué aprendiste

✓ Rol: nivel + dominio + contexto operativo — no "helpful assistant"
✓ Pasos numerados: convierten el comportamiento emergente en reproducible
✓ Formato de salida: declarado explícitamente, analizable por el orquestador
✓ Constraints: específicas del dominio, prácticas, no genéricas
✓ Prueba del «y también»: un agente, una responsabilidad
✓ Skills: invocadas en los pasos, no en el papel
✓ Iteración: borrador → 3-5 entradas reales → patrón de falla → corrección
Próximo módulo
2.4 → Herramientas y permisos
El cuerpo define lo que hace el agente, pero las herramientas definen lo que puede puede hacer. En el próximo módulo aprenderás a declarar y restringir el acceso a herramientas con precisión quirúrgica.
← 2.2 La descripción es el disparador 2.4 Herramientas y permisos →