CLAUDE CODE MASTER CLASS
De la primera sesión a usuario avanzado · 12 módulos · ~60 minutos de punta a punta.
Para quién es esto
Ya usaste un asistente de código, pero Claude Code se siente más profundo que una caja de chat y sospechas que hay un sistema debajo. Lo hay. Esta Master Class recorre las 12 superficies de ese sistema, desde el binario claude hasta CI/CD headless, con un diagrama por concepto y una receta copy-paste por módulo.
Cómo usar esta página
- De arriba a abajo es el camino canónico. Cada módulo amplía al anterior.
- Si solo tienes 10 minutos — lee §1 Modelo Mental, §3 CLAUDE.md, §8 Hooks. Esos tres son el núcleo conceptual.
- Cada módulo termina con un enlace Profundizar → al cheatsheet de referencia (tabla completa de flags / diagrama completo / schema entero).
- Construido contra Claude Code
v2.1.143. Flags de CLI y nombres de hook event siguen esa versión.
Modelo Mental
fundamentosTL;DR — Claude Code no es "Claude en una terminal." Es un agent harness: un loop que lee tu repo, ejecuta herramientas, observa resultados, itera. El modelo es un nodo; el harness es el sistema.
▸ Tres cosas que Anthropic ofrece (elige la correcta)
- claude.ai (chat) — conversación, sin herramientas, sin repo. Lo mejor para pensar en voz alta.
- Claude Code — agente nativo de terminal que lee tu codebase, edita archivos, corre comandos, arregla errores. Lo mejor para entregar código.
- Anthropic API — Claude programable dentro de tu app. Lo mejor cuando TÚ eres el harness.
▸ El loop del agente, en 5 pasos
▸ Qué hace diferente a Claude Code
- Tiene workspace propio. Puede `Read`, `Edit`, `Write`, `Bash` sobre tus archivos — no solo hablar de ellos.
- Tiene contrato. Permisos, hooks, y CLAUDE.md son los rieles. Configuras intención; Claude trabaja dentro de ella.
- Compone. Skills, agents, servidores MCP, hooks — cada uno es una primitiva. Esta Master Class enseña cada una.
▸ Pruébalo ahora
cd ~/tu-proyecto
claude
> ¿qué hace este codebase? Profundizar → cheatsheet PARTE I (superficie CLI) Tu Primera Sesión
fundamentosTL;DR — Cuatro formas de entrada cubren el 95% del uso real: claude (interactivo), claude -p (one-shot), claude -c (continuar), claude -r (retomar por id). El resto son flags encima.
▸ Las cuatro formas
claude— REPL interactivo. El 90% de los casos. Tipeas, responde, iteras.claude -p "tarea"— one-shot. Imprime el resultado y sale. Para pipes, scripts, CI.claude -c— retoma la última conversación en este dir. Sigue desde donde lo dejaste.claude -r [id|búsqueda]— elige una sesión específica. Picker interactivo si no hay arg.
▸ Tres flags que valen desde el día 1
--model haiku|sonnet|opus— elige el cerebro. Default es sonnet. (§9 cubre cuándo usar cuál.)--add-dir <path>— deja a Claude ver archivos fuera del cwd. Workflow multi-repo.--max-budget-usd 0.50— techo duro. La sesión se detiene cuando el cap de costo se alcanza.
▸ El grafo de sesión
▸ Pruébalo ahora
# one-shot scripteable, salida estructurada, con budget
claude -p --output-format json --max-budget-usd 0.50 \
"resume los últimos 3 commits" Profundizar → cheatsheet PARTE I (modos · modelo · I/O · subcomandos) CLAUDE.md, el manual de instrucciones
fundamentosTL;DR — CLAUDE.md es lo primero que Claude lee. Pon las convenciones del proyecto aquí y dejas de repetirte cada sesión. Los archivos hacen merge en un ancestor walk; los anidados pueden ser path-scoped.
▸ La jerarquía (todos hacen merge en el prompt)
▸ Las cuatro cosas que vale poner
- Stack. Lenguaje, framework, test runner. Evita que Claude adivine.
- Build & test. Comandos exactos.
bun test,pnpm run lint, etc. - Convenciones. Estilo, patrones, naming. Lo que un reviewer corregiría.
- Trampas. Comportamiento no-obvio. Lo que te mordió una vez.
▸ Frontmatter path-scoped
---
paths: ["src/**", "tests/**"]
---
# Solo se carga cuando se tocan archivos en src/ o tests/.
# Úsalo para mantener CLAUDE.md enfocado. ▸ Imports (compone, no duplica)
@./conventions.md # relativo
@~/.claude/snippet.md # user-home
@/abs/path.md # absoluto Profundizar → cheatsheet PARTE II (card CLAUDE.md · imports · reload triggers) Permisos & Seguridad
fundamentosTL;DR — Claude pregunta antes de hacer cosas destructivas, pero tú decides la política. Cuatro modos van de "pregunta todo" a "confía en el agente", más una allow/deny list con glob patterns.
▸ Los cuatro modos (del menos al más confiado)
- default — prompt en cada tool call. Más seguro, más lento.
- acceptEdits — acepta edits automáticamente, sigue preguntando para Bash. Bueno para refactor.
- plan — modo read-only; Claude propone un plan, apruebas antes de cualquier escritura.
- bypassPermissions — agente corre libre. Úsalo en sandbox descartable o en CI con cap duro de budget.
▸ Allow / deny con glob patterns
// .claude/settings.json
{ "permissions": {
"defaultMode": "default",
"allow": ["Bash(git *)", "Read", "Edit"],
"deny": ["Bash(rm -rf *)", "Bash(curl *)"]
} } ▸ La regla de seguridad
- La mayoría de patterns es
ToolName(arg-pattern). El arg pattern es un shell-glob. - Deny gana a allow para la misma herramienta. Construye tu red de seguridad con deny.
- Nunca pegues
--dangerously-skip-permissionsen un repo real. La flag existe para sandbox — desactiva TODO check de permisos, incluida la deny list. - Combina modos de alta confianza con
--max-budget-usdpara que un agente desbocado queme dinero en vez de archivos.
El Universo MCP
capacidadesTL;DR — MCP (Model Context Protocol) es cómo Claude habla con el mundo más allá de tu filesystem. Un .mcp.json declara servidores; cada servidor expone herramientas con nombre mcp__<srv>__<tool>.
▸ Cinco servidores maduros que vale conocer
- playwright — automatización de browser. Click, type, screenshot, evaluate JS. Default para workflow autenticado.
- chrome-devtools — observabilidad de red, performance, runtime. Solo para debug.
- dbhub — SQL multi-DB (Postgres, MySQL, SQLite). Read-only por default.
- nextjs-devtools — build logs, routes, server actions, diagnostics de cache.
- github — issues / PRs / repos / workflows estructurados (más rico que el CLI
gh).
▸ Agregando un servidor
// .mcp.json en la raíz del repo
{ "mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-playwright"]
}
} } ▸ Trust gate
Por default Claude pregunta antes de habilitar servidores MCP declarados en un proyecto. Pon enableAllProjectMcpServers: true en settings para saltar el prompt — solo en repos que confías.
▸ Modelo mental
Skills — embotellando tus prompts
capacidadesTL;DR — una skill es una carpeta con un SKILL.md adentro. Su cuerpo ES el prompt. La invocas como /<nombre>. Dejas de pegar las mismas instrucciones cada sesión.
▸ Anatomía
▸ El frontmatter que importa
---
description: Pista de descubrimiento en una línea (Claude la lee para saber cuándo sugerirte)
argument-hint: <new <slug> | list>
allowed-tools: [Read, Grep, Bash]
paths: ["docs/specs/**"] # path-scoped: solo cargable en dirs que matcheen
context: fork # turn aislado (no contamina la conversación principal)
---
# /nombre — el cuerpo debajo de esta línea es el prompt ▸ Dos features que mueven la aguja
$ARGUMENTS— lo que el usuario tipeó después del slash command. Deja que una skill maneje varias formas de llamar.!`shell-cmd`— corre al cargar la skill; stdout se inyecta como contexto. Ideal para estado vivo ("fecha de hoy", "branch actual", "lista de PRs abiertos").
▸ Skills bundled (ya en tu máquina)
/simplify · /batch · /debug · /loop · /claude-api — todas vienen con Claude Code. /help lista las que están en tu instalación.
Agents — delegación hecha bien
capacidadesTL;DR — un agent corre en un contexto aislado y devuelve un único mensaje. Delega cuando (a) el trabajo necesita muchas tool calls, (b) el resultado cabe en un resumen, o (c) quieres mantener ruido fuera de la conversación principal.
▸ Los cinco agents built-in
- general-purpose — research y ejecución multi-step. El default.
- Explore — búsqueda read-only rápida. "¿Dónde está X definido? ¿Qué archivos usan Y?"
- Plan — modo arquitecto. Produce un plan de implementación, no escribe código.
- claude-code-guide — Q&A sobre el propio Claude Code (esta Master Class es un ejemplo real).
- statusline-setup — configura tu status line. Nicho pero viene incluido.
▸ Una buena delegación tiene cinco partes
TASK: una frase — qué hacer
CONTEXT: archivos/paths que el agent debe leer primero
CONSTRAINTS: qué NO hacer · budgets · guardrails de estilo
DELIVERABLE: artefacto concreto (path de archivo, PR, forma del resumen)
DONE_WHEN: condición verificable (tests pasan, archivo existe) O DELIVERABLE o DONE_WHEN es requerido (o ambos). El agent no hereda contexto del padre — entrégale todo lo que necesita por adelantado.
▸ Dispatch desde un tool call
Agent({
subagent_type: "Explore",
prompt: "TASK: localizar todos los callers de getUser() en src/.\n..." ,
model: "sonnet", // opcional · sobrescribe el default
isolation: "worktree", // opcional · corre en worktree git temporal
}) ▸ Model-fit cheatsheet
Implementación mecánica → sonnet. Lookup rápido de schema/protocolo → haiku. Revisión de arquitectura o debug exploratorio → opus. Research comparativa multi-fuente → opus si ≥2 señales, si no sonnet.
Hooks — guardián de cada acción
capacidadesTL;DR — los hooks son shell scripts que corren en eventos de ciclo de vida. 29 eventos en total. Cada uno recibe JSON por stdin y decide vía exit code: 0 = permite, 2 en PreToolUse = BLOQUEA (stderr mostrado al agent), cualquier otro = solo log.
▸ Las siete familias de eventos
- Session lifecycle — SessionStart · SessionEnd · Setup · Stop · StopFailure
- Prompts & instructions — UserPromptSubmit · UserPromptExpansion · InstructionsLoaded
- Tool gates — PreToolUse · PostToolUse · PostToolUseFailure · PostToolBatch
- Permission — PermissionRequest · PermissionDenied
- Sub-agents & tasks — SubagentStart · SubagentStop · TaskCreated · TaskCompleted
- Compaction — PreCompact · PostCompact
- System — Notification · TeammateIdle · ConfigChange · CwdChanged · FileChanged · WorktreeCreate · WorktreeRemove · Elicitation · ElicitationResult
▸ Hook mínimo viable
// .claude/settings.json
{ "hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "bash .claude/hooks/check-bash.sh"
}]
}]
} } #!/usr/bin/env bash
# .claude/hooks/check-bash.sh — lee JSON de stdin, decide por exit
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command')
if [[ "$cmd" =~ rm\ -rf ]]; then
echo "bloqueado: rm -rf está negado en este proyecto" >&2
exit 2
fi
exit 0 ▸ Una trampa que vale señalar
PostToolUse(Bash) dispara solo en éxito. Para capturar fallas, parea con PostToolUseFailure(Bash). El payload de falla usa .error y no tiene tool_response.
▸ Tres tipos de handler
type: command— shell script. El default.type: prompt— single-turn Claude eval sobre$ARGUMENTS.type: agent— spawnea un sub-agent con herramientas para verificación profunda.
Costo & Fit del Modelo
avanzadoTL;DR — la misma tarea corriendo en Opus puede costar 60× más que en Haiku. La diagonal es óptima; fuera de ella es gasto excesivo o subdimensionado. Elegir bien una vez puede cortar 70% de la cuenta.
▸ Los tres modelos · por millón de tokens
▸ Knob de effort (solo Opus)
--effort low|medium|high intercambia latencia por profundidad. low para loops apretados, high para revisión one-shot de arquitectura.
▸ Cache es tu segunda mayor palanca
- Anthropic cachea prompts por 5 minutos (tier free) o 1 hora (con
cache_controlexplícito). - System prompts + CLAUDE.md + reads largos son candidatos a cache. Repetir dentro del TTL es ~90% más barato.
- Sleeps largos (≥5 min) rompen el cache. Planifica intervalos de loop con esto en mente.
▸ El techo duro
claude -p --max-budget-usd 1.00 --max-turns 12 \
"correr tests, arreglar fallas, repetir hasta verde" Budget cap y turn cap son la red de seguridad — cuando un loop no converge, deja de quemar dinero en vez de ponerse creativo.
Profundizar → matriz Atlas Cost × Model fitPatrones de Workflow
avanzadoTL;DR — la mayoría del trabajo real en Claude Code encaja en una de cinco formas. Elegir la forma correcta importa más que elegir el modelo correcto.
▸ Los cinco patrones
- Sequential — un Claude, una tarea, de arriba a abajo. El default. Úsalo para cualquier cosa donde el paso N depende del N−1.
- Operator — te quedas en el loop, Claude propone diffs, aceptas/rechazas. Úsalo para code review y edits quirúrgicos.
- Split-merge — un parent dispara N agents delegados (uno por archivo, uno por módulo), parent fusiona los retornos. Úsalo para refactors estilo codemod.
- Agent teams — cadena Plan → Implement → Review, cada uno un sub-agent diferente con contexto propio. Úsalo para features no-triviales.
- Headless —
claude -pen CI/CD con salida estructurada. Sin humano en el loop. Úsalo para PR review bots, test-fix loops, audit de dependencias.
▸ Eligiendo la forma
▸ El trade-off oculto
Los patrones paralelos (split-merge, agent teams) son rápidos pero cuestan más en tokens totales porque cada agent delegado carga su propio contexto. Sequential es más lento pero más barato. Elige paralelo solo cuando latencia de wall-clock importa de verdad.
Profundizar → cheatsheet card WORKFLOW PATTERNSCompaction & Memoria
avanzadoTL;DR — Claude Code resume sesiones largas automáticamente. El resumen es lossy. El puente PreCompact → SessionStart(compact) es cómo preservas la señal cruda que importa.
▸ Tres capas de memoria
- CLAUDE.md — siempre en contexto. La capa "cómo funciona este proyecto".
- Auto-memory — Claude escribe hechos sobre tu proyecto en
~/.claude/projects/<slug>/memory/conforme aprende. Indexado porMEMORY.md, cargado al inicio de sesión. - Transcript — la conversación misma. Cuando crece más allá del budget, compaction entra en acción.
▸ El flujo de compaction
▸ Por qué importa el puente de hook
- El summarizer es lo único que cruza la frontera por default — y la summarización pierde citas verbatim, paths de archivo, palabras exactas.
- Solo
PreCompactpuede escribir antes de la truncación; soloSessionStartpuede inyectar después. Ningún otro hook cierra ese gap. - Guarda raw turns en disco en PreCompact, léelas de vuelta en SessionStart-con-source-compact. Es el patrón canónico.
▸ Pruébalo ahora
# compaction manual
/compact
# revisa qué se preservó
/memory Profundizar → flujo Atlas Compaction interrupt CI/CD & Headless
avanzadoTL;DR — claude -p es la puerta al uso no-interactivo. Combínalo con --output-format json, --max-budget-usd, y --max-turns para tener un agent determinístico, presupuestado y parseable en tu pipeline.
▸ Las cinco flags que hacen funcionar headless
-p, --print— imprime resultado y sale. Sin REPL.--output-format json|text|stream-json— JSON es el default correcto para máquinas.--max-turns N— cap duro de iteraciones del agent. Detiene runaway.--max-budget-usd X— cap duro de costo. Detiene overrun de costo.--permission-mode bypassPermissions— requerido en CI donde no hay humano para aprobar. Parea con los dos caps de arriba.
▸ Un step real de GitHub Actions
- name: PR review bot
run: |
claude -p \
--permission-mode bypassPermissions \
--output-format json \
--max-turns 6 \
--max-budget-usd 0.50 \
"review del PR #${{ github.event.number }} por issues de seguridad,
retorna findings como JSON: {findings: [{file, line, severity, why}]}"
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} ▸ Tres patrones que entregan
- PR review bot — corre en
pull_request, postea findings como review comment. - Test-fix loop — corre en
workflow_dispatch, intenta arreglar tests fallando, abre PR con el fix. - Audit de dependencias — corre cada noche, lee
package.json+ advisories, abre issues por deps vulnerables.
▸ La disciplina
- Siempre setear cap de turn Y cap de budget. Los dos. CI loops es donde el dinero desaparece.
- Usa el modelo más barato que dé la talla. La mayoría del trabajo de CI es
sonnetcomo máximo. - Trata el JSON de salida como contrato — haz que el step de CI falle si el JSON está malformado, en vez de dejarlo cascadear.