tesis de apertura
Claude Code es lo segundo. Tiene shell, tiene archivos, tiene permisos. Cuando le pides un refactor, edita el código. Cuando le pides correr tests, los corre. Cuando le pides abrir un PR, lo abre. La pregunta deja de ser "¿qué te sugiere?" y pasa a ser "¿qué le permites hacer?".
qué cambia respecto a la sesión A
| capacidad | cowork (sesión a) | code (sesión b) |
|---|---|---|
| contexto persistente | project + knowledge | repo entero + CLAUDE.md jerárquico |
| leer archivos del repo | solo los que subes | cualquiera del cwd |
| editar archivos | devuelve diff | edita directamente |
| ejecutar comandos | no | shell con permisos |
| correr tests / build | no | sí |
| git operations | no | commit · push · PR |
| subagents · hooks · skills | no | sí |
| MCP servers | no en CLI | sí |
qué entrega esta sesión
No es "saber usar Claude Code". Es "saber diseñar la experiencia de Claude Code para el equipo": qué archivos guían el comportamiento, qué permisos limitan riesgo, qué hooks automatizan invariantes, qué subagents protegen el contexto.
Diez minutos de setup. Si Node 20+ y permiso de instalar paquetes globales están listos, el primer prompt corre antes del primer café.
instalación CLI
Recomendación: nunca pegues la API key en el repo, ni en .env committeable. Usa ~/.zshrc o un keychain manager.
verificación rápida
Si alguno falla, casi siempre es uno de tres problemas: Node 18- en lugar de 20+, API key mal exportada, o permisos de npm en macOS sin sudo ni nvm.
primer prompt en un repo de prueba
A diferencia de Cowork, Code ya tiene tu repo. No necesitas subir nada. La primera pregunta correcta es siempre cartográfica.
Lee este repo. Devuelve: 1. Una línea por módulo de top level con su responsabilidad 2. Tres archivos de entrada 3. Tres riesgos arquitectónicos visibles desde la estructura No edites nada todavía. Solo describe.
Tres capas de contexto que Code carga en cada sesión. Bien diseñadas, son la diferencia entre un agente que "sabe quién eres" y uno que arranca ciego cada turno. Mal diseñadas, son ruido.
las tres capas
Tus preferencias personales: idioma, estilo, herramientas que usas siempre, no-go zones tuyas.
Convenciones colectivas: stack, arquitectura, patrones, naming, tests, deploy. Versionado en git.
Notas tuyas para esta semana o branch. Gitignored. No se comparte.
orden de carga
Cuando algo "no se aplica" — casi siempre es que un nivel más específico lo está sobrescribiendo. claude /doctor muestra qué archivos cargó esta sesión.
~/.claude/CLAUDE.md
· stack del proyecto · convenciones del equipo · archivos del repo · decisiones arquitectónicas · estructura del directorio
· idioma de respuesta · estilo de commits que usas · "siempre confirma antes de borrar" · "comentarios solo cuando el porqué no es obvio" · herramientas que usas en todos tus proyectos (vitest, etc.)
.claude/CLAUDE.md del proyecto
decisor rápido
| contenido | ~/.claude/ | .claude/ proyecto | .claude.local/ |
|---|---|---|---|
| idioma de respuesta | ✓ | — | — |
| stack del proyecto | — | ✓ | — |
| convenciones del equipo | — | ✓ | — |
| notas de tu PR de la semana | — | — | ✓ |
| "no toques X mientras pruebo Y" | — | — | ✓ |
| herramientas personales | ✓ | — | — |
Lo que CLAUDE.md no puede expresar: comportamiento ejecutable. Qué modelo, qué tools, qué permisos, qué hooks, qué subagents, qué MCP. Texto plano que vive en el repo.
esqueleto mínimo
Ubicación: .claude/settings.json en la raíz del repo. Hay también .claude/settings.local.json para lo personal · gitignored.
modelo default y permissions
Lo que no está en allow ni deny cae en ask · te pregunta antes de ejecutar.
los otros campos
Eventos que disparan tu propio shell antes/después de acciones de Code. Para invariantes deterministas.
Tools tipados externos vía Model Context Protocol. Locales o remotos.
Agentes especializados que Claude Code invoca para tareas concretas con su propio contexto.
Cuatro modos que cambian el contrato de operación entre tú y el agente. Es la palanca que decide cuánta autonomía Code tiene en cada sesión.
los cuatro modos
Cada acción potencialmente lateral te pide confirmación. Conservador · más seguro.
Edita archivos sin preguntar; pide para Bash y otros. Útil para refactor con foco.
Lee, propone, no ejecuta. Devuelve plan estructurado. Ideal antes de tareas grandes.
Sin prompts. Solo en sandbox o CI con repo desechable. Nunca en producción.
decisor rápido
| tarea | modo recomendado | por qué |
|---|---|---|
| explorar repo nuevo | plan | quieres ver, no actuar |
| fix de un bug acotado | default | quieres ver cada paso |
| refactor con foco · misma feature | acceptEdits | velocidad sin perder control |
| migración con muchos archivos | plan → acceptEdits | plan primero, luego ejecutar |
| CI · GitHub Action | bypassPermissions + deny estricto | headless con guardarraíles |
| tocar auth o pagos | default · siempre | el riesgo lo justifica |
plan mode en detalle
En plan mode Code lee, piensa y devuelve un plan numerado. No edita ni ejecuta nada. Tú apruebas, ajustas o rechazas. Solo cuando dices "ejecuta" cambia de modo y aplica.
Para tareas grandes (migración, refactor multi-módulo, audit de seguridad) este es el patrón seguro: plan → revisar → ejecutar.
claude --permission-mode plan # o dentro de la sesión /permission-mode plan # cuando apruebes el plan /permission-mode acceptEdits
Atajos del prompt. Los built-in cubren operación básica. Los custom son tuyos: macros del equipo que viven en el repo. Una buena lib de comandos custom es señal de equipo maduro con Code.
built-in que vas a usar todos los días
comandos custom del equipo
Cada archivo es un prompt en markdown. Llamarlo con /audit, /ship, etc. Versionado en git · todo el equipo los usa igual.
ejemplo · /ship
Código tuyo que corre alrededor de las acciones de Code. La capa determinista de la pipeline. Aquí van invariantes — seguridad, calidad, formateo — que no deben depender de que Claude se acuerde.
los 7 eventos
| evento | cuándo dispara | uso típico |
|---|---|---|
| SessionStart | al abrir la sesión | cargar variables, verificar API key |
| UserPromptSubmit | al enviar tu prompt | validar formato, rate-limit personal |
| PreToolUse | antes de ejecutar tool | bloquear acciones · auditar |
| PostToolUse | tras ejecutar tool | lint automático · verify post-write |
| Notification | cuando Code te avisa | integrar con Slack · paging |
| SubagentStop | al terminar un subagent | logging · métricas |
| Stop | al cerrar la sesión | resumir · generar reporte · cleanup |
anatomía de un hook
El comando recibe vía stdin un JSON con la acción propuesta. Devuelve exit 0 para permitir, exit !=0 para bloquear con mensaje.
ejemplo · bloquear escritura a .env
Este hook ya no depende de que Claude "se acuerde" de no tocar .env. La regla es ejecutable y verificada por la plataforma, no por el modelo.
post · stop · notification
Después de cada escritura, corre npm run lint:fix --silent <archivo>. Mantiene formato sin pedirlo.
Cuando Code requiere tu atención, suena un beep o envía un mensaje a Slack para no perder señal.
Genera un resumen automático de la sesión: archivos tocados, tests corridos, tiempo, costo de tokens.
Agentes especializados con su propio contexto, propio system prompt, propias herramientas. Code los invoca cuando una tarea encaja con su perfil. Protegen el contexto principal de ruido y permiten paralelismo.
qué son
El agente principal carga tu contexto del repo. Cuando una tarea es exploratoria, ruidosa o paralelizable — investigación, audit, búsqueda — delega a un subagent. El subagent opera con contexto fresco. El principal recibe solo el resumen.
.claude/agents/
cuándo usar subagent vs main context
| tarea | main context | subagent |
|---|---|---|
| refactorar 1 módulo | ✓ | — |
| explorar repo de 200 archivos | — | ✓ explorer |
| audit contra ADRs | — | ✓ auditor |
| investigar 5 librerías | — | ✓ researcher (paralelo) |
| correr suite de tests | — | ✓ test-runner |
| aplicar fix puntual | ✓ | — |
Las cuatro extensiones que convierten Claude Code de "CLI agente" en "plataforma del equipo". Skills enseñan rituales del repo. MCP conecta tools tipados. IDE/SDK lo embeben donde escribes.
skills locales
Un slash command es texto. Una skill es un workflow con archivos asociados, ejemplos, plantillas, scripts. Cuando un proceso del equipo ya tiene 5+ pasos repetibles, conviene encapsularlo como skill.
MCP en claude code
Servers locales viven en tu repo. Servers remotos · npm · binarios. Code los expone como tools al modelo · auditados como cualquier otra acción.
IDE · agent SDK · github actions
Mismo Code, integrado al editor. Muestra diffs visuales, abre archivos, integra con debugger.
Construye apps que usan Code como motor. Headless. API tipada. Ideal para agents internos.
Auto-review de PRs, tests dirigidos por agente, migraciones supervisadas. Modo bypass + deny estricto.
Cada uno entrega un artefacto que vas a pegar al setup de Claude Code de tu equipo. Al final de la sesión B tu repo tiene CLAUDE.md, settings.json, 1 hook, 1 subagent, 1 skill, 1 MCP server y un slash command custom — la base que el workshop principal va a explotar.
ejercicio 01 · primer prompt en repo de prueba
Probar Code en plan mode contra un repo nuevo. Entregar un mapa inicial sin tocar nada.
Lee este repo (no edites nada). Devuelve en markdown: 1. Topología de top-level (módulos, una línea cada uno) 2. Tres entry points · ruta · función 3. Tres riesgos arquitectónicos visibles desde la estructura 4. Dos preguntas que harías al autor No inventes. Si no hay evidencia, di "sin evidencia". Sé breve.
ejercicio 02 · escribir tu CLAUDE.md de proyecto
Producir .claude/CLAUDE.md con stack, arquitectura, no-go zones, convenciones de tests. Aprobar línea por línea — la IA propone, tú decides.
Genera .claude/CLAUDE.md a partir del repo. Incluye estas secciones: ## Stack · ## Arquitectura · ## No hacer sin confirmar · ## Convenciones de tests · ## Convenciones de commits · ## Glosario de dominio (top 10) Reglas: · solo lo que veas en el código · marca [verificar] cuando dudes · ningún consejo genérico Output: markdown listo para commit.
ejercicio 03 · settings.json con permissions
Producir .claude/settings.json con allow/deny/ask explícitos. La regla: deny lo que no debería pasar nunca, ask lo que requiere consentimiento, allow solo lo trivial.
Genera .claude/settings.json con permissions explícitos. Deny (5): · escribir a .env* · rm -rf · git push --force a main · npm publish · tocar archivos en /infra/secrets/ Ask (3): · npm install nuevo paquete · cambios a config de auth · cambios a migrations Allow (5): · npm test, lint, typecheck · git status, diff, log Modelo: sonnet-4-6.
ejercicio 04 · slash command custom
Empaquetar como comando un workflow que el equipo ya hace a mano: lint + typecheck + tests + boundaries:check + reporte.
Ejecuta en este orden y detente al primer fallo: 1. npm run lint 2. npm run typecheck 3. npm test 4. npm run boundaries:check Al terminar, reporta: · checks pasados · checks fallados · tiempo total Si algún check falla, no continúes.
ejercicio 05 · hook PreToolUse · bloqueo .env
Implementar el hook de la slide 30 en tu propio repo. Probar que bloquea de verdad. Documentar el override de emergencia.
en la sesión:
"Crea un archivo .env.example
con DATABASE_URL y ANTHROPIC_API_KEY
como ejemplo."
resultado esperado:
✗ BLOQUEADO: no puedes escribir
a .env.example desde Code.
si pasa, el hook funciona.
si no pasa, revisa el matcher
en settings.json.
ejercicio 06 · hook PostToolUse · lint automático
Eliminar la pregunta "¿lo formateaste?" del review. Cada archivo que Code escribe pasa por lint:fix antes de quedar guardado.
#!/usr/bin/env bash
input=$(cat)
file=$(echo "$input" | jq -r '.tool_input.file_path')
# solo si es archivo del repo
if [[ -n "$file" && -f "$file" ]]; then
case "$file" in
*.ts|*.tsx|*.js)
npx eslint --fix --quiet "$file" 2>/dev/null
;;
*.py)
ruff format "$file" 2>/dev/null
;;
esac
fi
exit 0
ejercicio 07 · subagent auditor
Implementar el subagent auditor de la slide 34. Probarlo en una sesión real. Comparar contexto consumido contra hacer la audit en el main.
"Audita el repo contra los ADRs vigentes. Devuelve solo violaciones · severidad · remediación mínima. No edites nada." Code debería: 1. Detectar que es trabajo del auditor 2. Lanzarlo con su contexto 3. Recibir el reporte 4. Devolverlo a ti sin inflar el main Compara con hacerlo en main: /cost antes y después.
ejercicio 08 · skill local del proyecto
Convertir un workflow del equipo (crear ADR-NN.md desde plantilla, asignar número, registrar en index) en una skill versionada en el repo.
--- name: adr-new description: crea un nuevo ADR desde plantilla y registra en index --- Pasos: 1. Lee /architecture/adr/index.md 2. Calcula próximo número (ADR-NNN) 3. Copia templates/adr.md.tmpl a /architecture/adr/ADR-NNN-<slug>.md 4. Rellena con el contexto que el usuario te dio 5. Añade entrada a index.md 6. Reporta el path final
ejercicio 09 · MCP server local
Levantar un MCP server local con 1-2 tools del dominio (read-only sobre tu DB de staging, búsqueda en Linear, query a metrics). Conectarlo a Code y usarlo.
una vez conectado: "Usa la tool linear-search para listar los issues en estado In Progress asignados a mí." Code debería: 1. Reconocer la tool disponible 2. Pedir confirmación si está en ask 3. Ejecutarla con argumentos tipados 4. Devolver resultado estructurado si /mcp no muestra el server, revisa la línea command y env en settings.json.
ejercicio 10 · claude code en github actions
Configurar la action oficial para que cada PR reciba un review automático contra los ADRs y boundaries del repo. Modo bypass + deny estricto.
name: claude-review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: anthropics/claude-code-action@v1
with:
mode: review
api_key: ${{ secrets.ANTHROPIC_API_KEY }}
deny: "Bash(*) Write(*)"
El workshop de los 16 ejercicios asume todo lo que hiciste en las dos sesiones previas. Aquí el mapa: qué de lo que ya sabes activa cuál ejercicio del workshop.
lo que ya sabes hacer
mapa pre → workshop
| de la sesión pre | activa en el workshop |
|---|---|
| Project Cowork con knowledge | Ejercicios 02, 13 (mapeo dolores · memory pack mini) |
| CLAUDE.md de proyecto | Ejercicios 02, 06, 15 (Memory Pack del repo) |
| settings.json + permission rules | Ejercicios 09, 14, 16 (boundaries, fitness functions) |
| Hooks PreToolUse / PostToolUse | Ejercicios 04, 14 (deny secretos · lint pipeline) |
| Subagent auditor | Ejercicios 01, 13 (audit drift · mapeo) |
| Skill ADR-new | Ejercicio 14 (codificar ADRs + fitness) |
| MCP server local | Ejercicios 09, 11 (production readiness · flow tracing) |
El que sabe instalar la herramienta no es arquitecto de la herramienta.Pre-workshop · Sesión B · Claude Code
El arquitecto la configura para que el equipo entregue mejor sin pensar en ella.
Si terminaste estas dos sesiones, ya tienes la base. El workshop hace el resto.
acciones inmediatas
CLAUDE.md + settings.json + 1 hook + 1 subagent. PR a una rama feat/claude-code-setup. Aún sin merge.
Anota cómo desactivar el hook PreToolUse si fuera estrictamente necesario. Si el equipo no sabe cómo, el hook se vuelve un freno injusto.
Verifica que el repo donde corre el workshop principal tiene Node 20+, API key, y los hooks/agents del setup base.
Workshop principal: 16 ejercicios sobre el mismo repo, ahora con la herramienta lista. La continuidad es directa — todo lo que escribiste aquí va a usarse desde el primer ejercicio.