El mapa de piezas: qué va en cada lugar
El CLAUDE.md del repositorio cobra-api empezó con quince líneas. Hoy tiene más de trescientas: convención de commits, procedimiento para emitir un CFDI, revisión de endpoints de pagos, cómo consultar staging y un "nunca hagas commit de .env". Daniela, la líder técnica de Cobra Fácil, nota que Claude a veces ignora reglas y que cada sesión arranca con el contexto ya cargado.
El problema no es que falten instrucciones, sino que todo está en el mismo lugar. Claude Code tiene siete piezas y cada una carga en un momento distinto, cuesta distinto y garantiza cosas distintas.
Al terminar podrás:
- explicar qué resuelve cada pieza y cuándo entra al contexto;
- distinguir lo que es una petición a Claude de lo que es una garantía;
- usar una tabla de decisión para ubicar cualquier instrucción;
- reorganizar un
CLAUDE.mdsaturado en las piezas correctas.
Las siete piezas
CLAUDE.md. Contexto persistente que Claude lee al inicio de cada sesión, completo. Sirve para hechos y reglas que importan siempre: comandos de build, estructura del proyecto, convenciones básicas. La documentación recomienda mantenerlo por debajo de 200 líneas y mover el material de referencia a otras piezas.
Skills. Instrucciones, conocimiento o flujos en un archivo SKILL.md. Al inicio Claude solo ve el nombre y la descripción; el contenido completo entra cuando tú la invocas con /nombre o cuando Claude decide que es relevante. Pueden ser material de referencia o un procedimiento.
Comandos. Los comandos de .claude/commands/ se fusionaron con las skills: .claude/commands/deploy.md y .claude/skills/deploy/SKILL.md crean el mismo /deploy. Los archivos viejos siguen funcionando; si existen ambos, gana la skill.
Subagentes. Trabajadores con su propia ventana de contexto, prompt de sistema y herramientas. Hacen el trabajo pesado aparte y devuelven solo un resumen a tu conversación.
Hooks. Comandos, peticiones HTTP, llamadas MCP, prompts o subagentes que Claude Code ejecuta en eventos del ciclo de vida, como antes de usar una herramienta (PreToolUse) o después de editar (PostToolUse). Se disparan siempre que ocurre el evento y no consumen contexto salvo que devuelvan salida.
MCP. Conexiones a sistemas externos: bases de datos, navegadores, Slack. Al inicio se cargan los nombres de las herramientas; los esquemas completos esperan hasta que Claude los necesita.
Plugins. La capa de empaquetado: skills, subagentes, hooks y servidores MCP en una unidad instalable, con nombres prefijados (como /cobra-kit:validar-cfdi). Se distribuyen desde un marketplace.
Cuándo carga cada pieza y qué garantiza
Esta tabla es la que conviene tener a la mano. Resume lo que dice la documentación oficial sobre carga y costo de contexto:
| Pieza | Cuándo entra al contexto | Costo en tu contexto | ¿Garantiza que ocurra? |
|---|---|---|---|
CLAUDE.md |
Al inicio, completo | En cada petición | No, es una instrucción |
| Skill | Descripción al inicio; contenido al usarse | Bajo hasta que se usa | No, Claude la interpreta |
Skill con disable-model-invocation: true |
Nada hasta que tú la invocas | Cero hasta invocarla | No |
| Subagente | Cuando se lanza, en su propia ventana | Solo el resumen que devuelve | No |
| Hook | Nunca, corre fuera | Cero, salvo que devuelva salida | Sí, se dispara en su evento |
| MCP | Nombres de herramientas al inicio | Bajo hasta que se usa una herramienta | No |
| Plugin | Lo que carguen sus componentes | La suma de sus descripciones | Depende de sus componentes |
La columna de la derecha es la más importante. Una frase como "nunca edites .env" en CLAUDE.md o en una skill es una petición. Un hook PreToolUse que bloquea la edición es una garantía. Si una regla debe cumplirse siempre, va en un hook.
La tabla de decisión
Cuando tengas una instrucción y no sepas dónde ponerla, recorre estas preguntas en orden. La primera respuesta "sí" te da la pieza.
| Pregunta | Si la respuesta es sí | Ejemplo en Cobra Fácil |
|---|---|---|
| ¿Debe ocurrir siempre, sin excepción y sin que Claude piense? | Hook | Bloquear commits que no sigan la convención |
| ¿Necesita datos o acciones de un sistema externo? | MCP (y quizá una skill que enseñe a usarlo) | Consultar la base de staging |
| ¿Claude debe saberlo en cada sesión? | CLAUDE.md |
"Usamos uv y pytest; montos con Decimal" |
| ¿Es un procedimiento o referencia que se usa a veces? | Skill | Validar el XML de un CFDI antes de timbrar |
| ¿Genera mucha salida o necesita herramientas restringidas? | Subagente | Revisar endpoints de pagos en modo solo lectura |
| ¿Lo necesita otro repositorio u otro equipo? | Plugin | Llevar todo lo anterior a cobra-dashboard |
Dos matices que evitan errores frecuentes:
- Skill o subagente. Una skill agrega contenido a tu ventana actual; un subagente trabaja en una ventana aparte. Si quieres que Claude sepa algo mientras trabaja contigo, es una skill. Si quieres que alguien lea cincuenta archivos y te devuelva cinco líneas, es un subagente.
- Skill o hook. Si el paso requiere criterio ("¿el mensaje describe bien el cambio?"), es una skill. Si es mecánico ("rechaza si no empieza con un tipo válido"), es un hook.
Caso práctico: desarmar el CLAUDE.md de Cobra Fácil
Este es un fragmento del CLAUDE.md actual de cobra-api:
# cobra-api
## Comandos
- Instalar: uv sync
- Pruebas: uv run pytest
- Servidor local: uv run fastapi dev app/main.py
## Reglas
- Montos siempre con Decimal, nunca float.
- Nunca hagas commit de .env ni de certificados .cer/.key del SAT.
- Commits: <tipo>(<alcance>): <resumen>. Tipos: agrega, corrige, cambia,
elimina, docs, pruebas, mant. Resumen en minúsculas, máximo 72 caracteres.
## Cómo emitir un CFDI
1. Arma el XML con app/facturacion/builder.py.
2. Revisa RFC de emisor y receptor, régimen fiscal y código postal.
3. Revisa que la suma de conceptos cuadre con SubTotal y que Total cuadre
con impuestos trasladados y retenidos.
4. Si MetodoPago es PPD, FormaPago debe ser 99.
... (60 líneas más con catálogos del SAT)
## Revisión de pagos
Antes de aprobar cambios en app/pagos/, revisa: verificación de firma
de webhooks, llaves de idempotencia, autenticación de cada ruta,
que no se registren CLABE ni datos de tarjeta en logs...
(40 líneas más)
## Consultar staging
Pide la cadena de conexión a Iván y usa psql con...
Con la tabla de decisión, cada sección encuentra su lugar:
| Sección | Pieza | Por qué |
|---|---|---|
| Comandos | CLAUDE.md |
Se usan en casi todas las sesiones y son cortos |
Montos con Decimal |
CLAUDE.md |
Regla breve que aplica siempre |
Nunca commit de .env ni certificados |
Hook | Debe cumplirse sin excepción |
| Formato de commits | Hook que valida + skill que explica | Lo mecánico se bloquea; el criterio se enseña |
| Cómo emitir un CFDI | Skill con script y referencias | Procedimiento largo que se usa a veces |
| Revisión de pagos | Subagente de solo lectura | Lee mucho código y debe tener herramientas limitadas |
| Consultar staging | Servidor MCP de base de datos | Es un sistema externo |
El resultado en disco queda así:
cobra-api/
├── CLAUDE.md # 25 líneas: comandos y reglas breves
└── .claude/
├── settings.json # hooks y permisos
├── hooks/
│ └── validar_commit.py
├── skills/
│ ├── convenciones-commits/
│ │ └── SKILL.md
│ └── validar-cfdi/
│ ├── SKILL.md
│ ├── references/
│ └── scripts/
└── agents/
└── revisor-pagos.md
Y el CLAUDE.md nuevo cabe en una pantalla:
# cobra-api
API de cobranza de Cobra Fácil. Python 3.12, FastAPI, PostgreSQL.
## Comandos
- Instalar: uv sync
- Pruebas: uv run pytest
- Servidor local: uv run fastapi dev app/main.py
## Reglas
- Montos siempre con Decimal, nunca float.
- Facturación: usa la skill validar-cfdi antes de timbrar.
- Cambios en app/pagos/: pide revisión al subagente revisor-pagos.
Las dos últimas líneas no repiten el procedimiento: solo le recuerdan a Claude que existe la pieza adecuada. A lo largo del curso construyes cada una de esas piezas.
Combinaciones que vas a usar
Las piezas se combinan. La documentación describe patrones como skill + MCP (el servidor da la conexión, la skill documenta el esquema y las consultas), skill + subagente (una skill lanza subagentes o corre en uno con context: fork) y CLAUDE.md + skills (CLAUDE.md dice "sigue nuestras convenciones", la skill tiene la guía completa). A eso suma hook + skill: el hook garantiza lo mecánico y la skill explica cómo corregir lo que el hook rechaza.
Práctica
- Abre el
CLAUDE.mdde un proyecto tuyo, cuenta sus líneas y mide con/contextcuánto ocupa la memoria en una sesión nueva. - Pasa cada sección por la tabla de decisión y arma una tabla como la del caso práctico: sección, pieza, por qué.
- Marca las reglas que Claude incumple a veces y decide si deberían ser hooks.
- Identifica el procedimiento más largo de tu
CLAUDE.md. Será tu candidato para la skill de la lección 1.2. - Identifica una tarea que llena tu contexto con salida que no vuelves a leer. Será tu candidato para el subagente del módulo 2.
- Guarda tu tabla en
notas/mapa-de-piezas.md. La vas a usar durante todo el curso.
Resumen
- Claude Code tiene siete piezas:
CLAUDE.md, skills, comandos (ya fusionados con skills), subagentes, hooks, MCP y plugins. - Cada pieza carga en un momento distinto:
CLAUDE.mdsiempre, skills al usarse, subagentes en su propia ventana, hooks fuera del contexto. - Solo los hooks garantizan que algo ocurra; lo demás son instrucciones que Claude interpreta.
- La tabla de decisión ordena las preguntas: siempre, sistema externo, cada sesión, a veces, mucha salida, otro repositorio.
- Un
CLAUDE.mdcorto que apunta a skills y subagentes funciona mejor que uno largo que lo contiene todo.