Lesson 13 · 15 in the route · 3 min read · Level 3
Lab 05 — An agent with the Agent SDK, hooks and subagents
An agent that downloads, transcribes, classifies and files a batch of videos, confined to one folder by hooks and split into subagents.
Spanish only for now · Solo en español por ahora
Proyecto: archivador de videos propios (transcribir con stt_whisper, clasificar, archivar) — o orquestador.
Objetivos: D1.T1 · D1.T2 · D1.T3.a · D6.T1 · D8.T1.d
Tiempo: 5–6 h.
Requerimiento
Dado un lote de videos propios en una carpeta, un agente debe: transcribir cada uno, clasificarlo (tema, idioma, personas mencionadas → no guardar nombres de terceros), y archivarlo en la estructura de carpetas del archivador. Debe operar solo dentro de la carpeta del archivo, no ejecutar comandos destructivos, parar tras N turnos, y producir un informe final de ≤ 300 palabras. El coordinador no debe cargar en su contexto las transcripciones completas.
Decisiones (escribir primero)
- ¿Workflow o agente? Argumenta: los pasos son fijos por video (workflow), pero el manejo de fallos (video privado, transcripción vacía, formato raro) es abierto. Solución razonable: workflow externo por video + agente acotado para la clasificación/recuperación. Escríbelo con los términos de Building Effective Agents.
- ¿Agent SDK o loop propio? (Necesita filesystem, Bash acotado, permisos y hooks → Agent SDK).
- ¿Qué tools built-in permites? (
Read,Writedentro de la carpeta,Bash(yt-dlp*),Bash(python stt*); nada derm, nada de red aparte del downloader). - ¿Qué es determinístico y va en hook? (bloquear escrituras fuera del archivo; bloquear
rm; registrar cada tool call). - ¿Cómo mantienes el contexto del coordinador pequeño? (subagente
transcriptorque devuelve resumen + metadatos, no el texto completo; poda de salidas deyt-dlp).
Pasos
1. Agente simple con Agent SDK
pip install claude-agent-sdk. Script conquery(prompt, ClaudeAgentOptions(allowed_tools=[...], permission_mode="acceptEdits", max_turns=15, cwd=ARCHIVO, system_prompt=...)). Iterar mensajes e imprimir tool calls.- Observa cómo maneja un video que falla (URL inválida). ¿Se recupera? ¿Cuántos turnos gastó?
2. Hooks
PreToolUsesobreWrite|Edit|Bash: script Python que lee el JSON por stdin; si la ruta está fuera deARCHIVOo el comando contienerm/del, sale con código 2 y mensaje. Verifica que el agente recibe el rechazo y adapta.PostToolUse: appende aaudit.jsonl(tool, input resumido, ts).- Compara: la misma regla escrita solo en el system prompt. Intenta que el agente la viole (pídele “limpia los temporales”). Concluye.
3. Subagente aislado
- Define
.claude/agents/transcriptor.md:description,tools: Bash(python stt*), Read,model: haiku, prompt que exige devolver{resumen ≤ 120 palabras, idioma, temas[], duracion}. - El coordinador delega la transcripción y nunca ve el texto completo. Mide
usagedel coordinador con y sin subagente para 5 videos.
4. Memoria y compactación
- Añade structured note-taking: el coordinador mantiene
PROGRESO.md(hechos, pendientes, fallos). Corta la sesión a la mitad y reanuda: ¿retoma bien? - Fuerza compactación (
max_turnsalto, lote grande) y observa qué sobrevive. Añade compact instructions alCLAUDE.mddel proyecto.
5. Orchestrator-workers (extensión, en orquestador)
- Coordinador Sonnet descompone; workers Haiku en paralelo; síntesis. Compara tokens totales vs. una sola conversación monolítica. Anota el tradeoff (más tokens totales, menos contexto por agente, más paralelismo).
Verificación
- Hook bloquea escritura fuera de la carpeta (test con ruta
../). - Hook bloquea
rm; el system prompt solo no basta (documentado). - Coordinador nunca contiene una transcripción completa (grep en la traza).
-
max_turnsrespetado; informe final ≤ 300 palabras. - No se guardan nombres de terceros (regla D7.T1.c).
Qué aprendiste
- Define workflow vs agente y dónde está cada uno en tu diseño.
- ¿Qué hereda el subagente del coordinador? ¿Qué devuelve?
- ¿Qué garantizó el hook que el prompt no?
- Tres técnicas de context engineering que usaste.
- ¿Cuándo hubieras usado la Messages API cruda en vez del Agent SDK?
- Costo del patrón orchestrator-workers vs monolito: ¿qué ganaste y qué pagaste?