Cómo Funciona una Instancia de Claude Code

15 min de lectura
Claude CodeArchitectureAI Tools

Documento de referencia sobre la arquitectura interna de Claude Code: el loop agente, gestión de contexto, herramientas, permisos, subagentes, memoria y más.

Tip: Al final del artículo encontrarás un prompt listo para copiar y pegar en Claude Code que configura una barra de estado con info de proyecto, branch, modelo, contexto y duración de sesión.

1. Inicio de Sesión (Bootstrap)

Cuando ejecutas claude en un directorio, ocurre lo siguiente:

  1. Se crea una sesión con un ID único, almacenada en ~/.claude/projects/<project>/<session-id>.jsonl
  2. Se construye el system prompt dinámicamente ensamblando 110+ componentes
  3. Se evalúan permisos según el modo configurado

El system prompt se compone de múltiples piezas:

ComponenteDescripciónTokens aprox.
Instrucciones coreReglas de comportamiento base, integración git95 - 1,067
Tool schemas (23+)Definiciones JSON de todas las herramientas12 - 2,167 c/u
CLAUDE.md filesInstrucciones del proyecto (recursivo hasta raíz)Variable
MEMORY.mdAuto-memoria persistente (primeras 200 líneas)Variable
Git status snapshotBranch actual, archivos sin trackear, commits recientes~95
Info del entornoPlataforma, OS, fecha, modeloVariable
Herramientas MCPSchemas de servidores MCP conectados100-500 por servidor
Subagent descriptionsDescripciones de subagentes disponibles294 - 633
Rules condicionalesArchivos de .claude/rules/ con YAML frontmatterVariable
El system prompt total antes de cualquier input del usuario suele ser de 2-5K tokens. Con MCP servers y CLAUDE.md extensos puede crecer significativamente.

2. El Loop Agente (Core del Sistema)

El corazón de Claude Code es un loop recursivo de tres fases que se repite hasta completar la tarea:

Fase 1 - Gather Context: Claude lee archivos, busca código, ejecuta comandos para entender el estado actual.

Fase 2 - Take Action: Claude hace edits, ejecuta tests, crea commits.

Fase 3 - Verify Results: Claude revisa output, confirma cambios, valida resultados.

Estas fases se mezclan continuamente — no son estrictamente secuenciales. Claude decide qué necesita cada fase basado en los aprendizajes de pasos anteriores.

  • Puede encadenar docenas de acciones sin intervención manual
  • El usuario puede interrumpir en cualquier punto para cambiar la dirección
  • El loop es single-threaded en la conversación principal (subagentes corren independientemente)
  • No hay secuencia fija de pasos — el loop es adaptativo y auto-correctivo

3. Ventana de Contexto

La ventana de contexto es de 200K tokens (expandible a 1M con Opus 4.6). Contiene todo lo que Claude "ve" en cada request.

ComponenteDescripción
System promptInstrucciones core + tool schemas + CLAUDE.md + MEMORY.md + git status
Historial de conversaciónTodos los mensajes del usuario y respuestas de Claude
Tool resultsContenido de archivos leídos, outputs de comandos, resultados de búsquedas
MCP tool definitionsSchemas de cada servidor MCP conectado
Response bufferEspacio reservado para la respuesta del modelo

Cuando el contexto alcanza ~95% de capacidad (~190K de 200K tokens), se activa la compactación:

  1. Se limpian outputs antiguos de herramientas
  2. Se sumariza el historial de conversación
  3. Se preservan: requests recientes, snippets de código clave, decisiones de implementación
  4. Se pierde: detalles de conversaciones tempranas, intentos de debugging históricos
  5. Se crea un bloque de compactación con metadata (preTokens, timestamp)
Pérdida de información: Las sumarizaciones pierden precisión — nombres de variables, mensajes de error exactos y decisiones matizadas se comprimen. Es un tradeoff fundamental: contexto extendido vs. precisión preservada.

Comandos útiles:

ComandoDescripción
/compact focus on <tema>Compactación manual con foco específico
/contextVer qué está consumiendo espacio en el contexto
/costVer uso de tokens de la sesión actual
/mcpVer costo por servidor MCP

4. Sistema de Herramientas

Claude Code tiene acceso a herramientas que le permiten interactuar con el sistema.

CategoríaHerramientasPropósito
ArchivosRead, Write, EditLeer, crear, modificar archivos
BúsquedaGlob, GrepBuscar archivos por patrón, buscar contenido con regex
EjecuciónBashComandos de terminal
WebWebFetch, WebSearchBuscar y traer contenido de internet
OrquestaciónAgent, AskUserQuestionLanzar subagentes, preguntar al usuario
MCPHerramientas externasNeon, Playwright, Figma, Notion, Vercel, etc.

El ciclo de vida de una tool call:

  1. Claude genera un tool_use block en su respuesta
  2. PreToolUse hook se ejecuta (si existe) — puede modificar o bloquear
  3. Validación de permisos — según el modo configurado
  4. El usuario aprueba (si es necesario según permisos)
  5. Sandbox (OS-level) aísla la ejecución
  6. Se ejecuta la herramienta y se captura el output
  7. PostToolUse hook se ejecuta (si existe) — puede hacer lint, log, etc.
  8. tool_result se retorna a Claude como parte del siguiente mensaje
  9. Claude analiza el resultado y decide la siguiente acción

Claude puede invocar múltiples herramientas independientes en una sola respuesta. Todos los tool_use blocks aparecen en un mensaje del asistente, se ejecutan, y todos los tool_result se envían juntos en un solo mensaje de vuelta.

5. Permisos y Sandboxing (Seguridad en Dos Capas)

Capa 1: Permisos"¿Debería ejecutarse esta herramienta?"

ModoComportamiento
DefaultPregunta antes de editar archivos y ejecutar comandos
Auto-accept editsEdita archivos sin preguntar, pregunta para comandos de shell
Plan modeSolo herramientas de lectura (no escribe ni ejecuta)
bypassPermissionsTodo automático (peligroso, no recomendado)
dontAskAuto-deniega a menos que esté pre-aprobado en la configuración

Se cicla entre modos con Shift+Tab.

Capa 2: Sandbox"Si se ejecuta, ¿qué puede tocar?"

  • macOS: Framework Seatbelt (nativo del OS)
  • Linux: bubblewrap (bwrap)
  • Filesystem: Lectura de todo el sistema, escritura solo en el directorio de trabajo
  • Red: Proxy que filtra dominios permitidos — dominios nuevos generan prompts de permiso
Resultado: 84% menos prompts de permisos con sandboxing habilitado. Protección contra prompt injection, exfiltración de datos y descarga de scripts maliciosos.

6. Subagentes (Agent Tool)

Los subagentes son instancias aisladas que Claude puede lanzar para tareas específicas. Cada subagente opera en su propia ventana de contexto aislada (200K tokens independientes).

TipoHerramientasPropósito
ExploreRead-only (Glob, Grep, Read)Exploración rápida del codebase
PlanRead-onlyDiseñar planes de implementación
General-purposeTodas (read + write)Tareas complejas multi-paso
BashSolo BashEjecución de comandos de terminal
CustomConfigurados por proyectotest-runner, security-guardian, etc.
  • Foreground: Bloqueante; prompts de permisos se pasan al usuario; más lento
  • Background: Concurrente; permisos pre-autorizados; más rápido pero no puede hacer preguntas
  • Ctrl+B convierte una tarea foreground en background
  • No pueden crear otros subagentes (sin nesting)
  • Heredan permisos del padre con restricciones adicionales de herramientas

7. Sistema de Memoria (Persistencia entre Sesiones)

Claude Code implementa un sistema de memoria multi-nivel que permite persistir información entre sesiones.

NivelUbicaciónQuién lo escribeSe carga al inicio
Managed policy/Library/.../ClaudeCode/CLAUDE.mdAdmin de la org
User memory~/.claude/CLAUDE.md
Project memory./CLAUDE.mdEquipo (git)
Local memory./CLAUDE.local.mdTú (no git)
Auto memory~/.claude/projects/.../memory/MEMORY.mdClaudePrimeras 200 líneas
Rules.claude/rules/*.mdEquipoSí (condicional)

CLAUDE.md vs MEMORY.md:

AspectoCLAUDE.mdMEMORY.md
AutorTú escribes instruccionesClaude escribe notas para sí mismo
ContenidoConvenciones, estándares, comandosPatrones descubiertos, aprendizajes
PropósitoInstrucciones persistentesAprendizaje sesión a sesión

8. Flujo de Mensajes (Request Pipeline)

Cada mensaje del usuario pasa por un pipeline completo antes de llegar al modelo:

  1. Usuario escribe y presiona Enter
  2. UserPromptSubmit hook (si existe) puede modificar o bloquear el prompt
  3. System prompt se construye/actualiza con memoria + contexto
  4. Historial de conversación se carga desde el archivo JSONL
  5. Cálculo de contexto — si se acerca al límite, se compacta
  6. Request enviado al API de Claude vía streaming (SSE)
  7. Tokens llegan incrementalmente y se renderizan en la terminal
  8. Si hay tool_use blocks se ejecutan las herramientas
  9. tool_results se alimentan de vuelta al modelo automáticamente
  10. Loop hasta stop_reason: "end_turn"
  11. Todo se persiste al archivo JSONL de la sesión inmediatamente

Formato de persistencia: JSONL (JSON Lines) — cada línea es un evento completo. Se escribe a disco inmediatamente (no al final de la sesión). Si el programa crashea, solo se pierde el último mensaje incompleto.

Claude Code usa Server-Sent Events (SSE) con "stream": true:

  • content_block_start — inicio de un bloque
  • content_block_delta — tokens incrementales
  • content_block_stop — fin del bloque

9. Hooks (Automatización del Ciclo de Vida)

Los hooks son comandos shell o prompts LLM definidos por el usuario que se ejecutan automáticamente en puntos específicos del ciclo de vida.

HookCuándo se ejecutaCaso de uso
PreToolUseAntes de ejecutar herramientaValidación, bloqueo de ops peligrosas, modificar inputs
PostToolUseDespués de completar herramientaLogging, verificación, lint automático
UserPromptSubmitCuando usuario envía promptPre-procesamiento, validación
StopCuando la sesión terminaCleanup, generación de resumen
Estos son los hooks más comunes, entre otros. Claude Code soporta 17+ tipos de eventos de hooks incluyendo SessionStart, SubagentStart, SubagentStop, PreCompact, etc.
  • Exit 0: Éxito, continuar
  • Exit 2: Error bloqueante, detener ejecución
  • stderr se envía a Claude como mensaje de error
  • Hooks se configuran en ~/.claude/settings.json (usuario) o .claude/settings.json (proyecto)

10. Sesiones: Persistencia y Reanudación

  • Creación: Se genera un ID único y un archivo JSONL
  • Mantenimiento: Historial completo se mantiene durante toda la sesión
  • Checkpoints: Se crean automáticamente antes de edits para permitir undo
  • Terminación: La sesión persiste indefinidamente en almacenamiento local
  • Limpieza: Transcripts se retienen por 30 días (configurable vía cleanupPeriodDays)

Comandos de reanudación:

  • claude --continue — Reanuda la última sesión exacta (mismo session ID)
  • claude --resume — Selector interactivo para elegir sesión
  • claude --fork-session — Crea nueva sesión con el historial copiado pero nuevo ID

11. Costos y Tokens

ModeloCaso de usoCosto (por millón de tokens)
Opus 4.6Razonamiento complejo, decisiones arquitecturales$5 input / $25 output
Sonnet 4.6Mayoría de tareas de código, ejecución eficiente$3 input / $15 output
Haiku 4.5Tareas rápidas y ligerasMenor costo

Optimizaciones de costo:

  • Prompt caching: Contenido repetido (system prompt, CLAUDE.md) se cachea a 0.1x del precio
  • Compactación: Previene crecimiento descontrolado del contexto
  • Subagentes con Haiku: Tareas de exploración usan modelos más baratos
  • Carga on-demand de skills: Solo se cargan cuando se invocan
  • /model sonnet o /model opus para cambiar modelo en caliente

12. Arquitectura Técnica Interna

  • Runtime: Bun
  • Lenguaje: TypeScript
  • UI Terminal: React + Ink (renderizado en terminal) + Yoga (layout engine)
  • Dato curioso: 90% del código de Claude Code fue escrito por versiones anteriores de Claude
Un loop maestro single-threaded simple combinado con herramientas disciplinadas y planificación entrega autonomía controlable. Esto desafía la tendencia hacia sistemas multi-agente complejos. Se enfatiza la explicabilidad y control del usuario sobre la autonomía pura.
  • 60-100 releases internos por día
  • Ingenieros usan la versión interna continuamente
  • Feedback loop rápido del equipo usando el producto

13. Bonus: Barra de Estado para tu Claude Code

Claude Code permite configurar una barra de estado personalizada que se muestra debajo de tu instancia. Es útil para tener visibilidad permanente del contexto de tu sesión sin ejecutar ningún comando.

Así se ve:

my-project | main * +12 −3 ◙4 | Opus 4.6 | ██████████░░░░░ 62% | ⏱ 38m

Muestra: proyecto, branch git (con dirty state, líneas agregadas/eliminadas, archivos cambiados), modelo activo, barra de contexto (color amarillo < 50%, naranja 50-80%, rojo > 80%), y duración de sesión.

Copiá el siguiente prompt y pegalo directamente en Claude Code:

Prompt

Configurame un statusline para Claude Code con la siguiente información de izquierda a derecha, separada por " | " en gris: 1. Nombre del proyecto (basename del directorio actual) en cyan 2. Branch de git en cyan, con: asterisco si hay cambios sin commitear, ↑N/↓N para commits ahead/behind, +N en verde para inserciones, −N en rojo para eliminaciones, ◙N en gris para archivos cambiados 3. Nombre del modelo en naranja claro 4. Barra de contexto de 15 caracteres usando █ y ░, con colores: amarillo si < 50%, naranja si 50-80%, rojo si > 80%, seguido del porcentaje 5. Duración de la sesión en azul con ícono ⏱, formateado como Nh Nm o Nm o Ns Usá los datos disponibles en el JSON de stdin (model.display_name, context_window.used_percentage, session_id). Para la duración, guardá el timestamp de inicio en /tmp/claude-session-{session_id}. Usá --no-optional-locks en todos los comandos git.

Claude Code creará el script, lo hará ejecutable y actualizará tu settings.json automáticamente. Solo reiniciá la sesión y la barra aparece.

Fuentes

Alexis Muñoz

Alexis Muñoz

Software Engineer