Instalación
El SDK incluye un binario nativo de Claude Code para su plataforma como una dependencia opcional como
@anthropic-ai/claude-agent-sdk-darwin-arm64. La mayoría de las instalaciones no necesitan una instalación separada de Claude Code. La versión del SDK rastrea la versión del Claude Code incluida. SDK v0.3.191 incluye Claude Code v2.1.191, por lo que una característica en esta página que requiere una versión de Claude Code necesita la versión del SDK con el mismo número de parche o posterior. Si su gestor de paquetes omite las dependencias opcionales, el SDK lanza Native CLI binary for <platform>-<arch> not found; en su lugar, establezca pathToClaudeCodeExecutable en un binario claude instalado por separado.Si su gestor de paquetes no aplica el campo libc de npm, como Yarn 1.x no lo hace, obtiene tanto los paquetes de plataforma glibc como musl en Linux, aproximadamente duplicando el tamaño de instalación. En Agent SDK v0.2.141 o posterior, el SDK aún lanza la variante correcta. Para recuperar el espacio en una imagen de contenedor, elimine el paquete de plataforma que no coincida con el libc donde se ejecuta su aplicación; para un tiempo de ejecución glibc en x64, eso es rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl. En una máquina de desarrollo la eliminación es temporal, ya que Yarn reinstala el paquete en el siguiente cambio de dependencia.Compilar a un ejecutable único
Cuando compila su aplicación en un ejecutable de un solo archivo conbun build --compile, el SDK no puede resolver el binario CLI incluido en tiempo de ejecución. require.resolve no funciona dentro del sistema de archivos virtual $bunfs del ejecutable compilado, por lo que el SDK lanza Native CLI binary for <platform>-<arch> not found.
Para solucionar esto, incruste el binario de plataforma como un activo de archivo, extráigalo a una ruta real al inicio con extractFromBunfs(), y pase esa ruta a pathToClaudeCodeExecutable.
El asistente extractFromBunfs() requiere @anthropic-ai/claude-agent-sdk v0.3.144 o posterior. El ejemplo a continuación se compila para macOS en Apple Silicon:
extractFromBunfs() copia el binario incrustado fuera del sistema de archivos virtual del ejecutable compilado a un directorio temporal por usuario y devuelve la ruta real. Fuera de un ejecutable compilado, devuelve la ruta de entrada sin cambios, por lo que el mismo código se ejecuta en desarrollo sin modificación.
Cada ejecutable compilado incrusta el binario de una única plataforma. Haga coincidir el paquete de plataforma en la importación con su --target:
- Para compilación cruzada, instale el paquete de plataforma que no coincida, por ejemplo
npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force. - En Windows, la subruta del binario es
claude.exe, por ejemplo@anthropic-ai/claude-agent-sdk-win32-x64/claude.exe.
Importe la entrada /core cuando agrupe el Agent SDK
Si su aplicación agrupa el Agent SDK junto con sus propias dependencias, importe desde @anthropic-ai/claude-agent-sdk/core en lugar de la raíz del paquete. La entrada /core requiere Agent SDK de TypeScript v0.3.282 o posterior, y sus tipos requieren TypeScript 5.0 o posterior.
La entrada /core exporta el mismo query(), startup(), tool(), createSdkMcpServer(), y resolveSettings() que la entrada raíz, junto con las funciones que renombran, etiquetan y eliminan sesiones, AbortError, las constantes de tiempo de ejecución, y cada tipo. No añade nombres propios. Para mantener pequeño el código que carga su aplicación, /core omite algunas exportaciones raíz, incluyendo prewarm(), la clase InMemorySessionStore, y los asistentes que listan, leen, bifurcan, importan y resumen sesiones. Si necesita uno de ellos, use la entrada raíz en su lugar.
La entrada raíz inserta sus propias copias de zod y @modelcontextprotocol/sdk. La entrada /core las importa desde su node_modules en los rangos que las peerDependencies del Agent SDK declaran, por lo que un paquete que ya las incluye no lleva una segunda copia. Importe desde la raíz o /core en un proceso dado, no ambas: son paquetes separados, y cargar ambas le da dos copias de las clases y el estado del Agent SDK.
Funciones
query()
La función principal para interactuar con Claude Code. Crea un generador asincrónico que transmite mensajes en streaming a medida que llegan.
Parámetros
Devuelve
Devuelve un objetoQuery que extiende AsyncGenerator<SDKMessage, void> con métodos adicionales.
startup()
Precalienta el subproceso de la CLI iniciándolo y completando el protocolo de inicialización antes de que haya un prompt disponible. El identificador WarmQuery devuelto acepta un prompt más tarde y lo escribe en un proceso ya listo, por lo que la primera llamada a query() se resuelve sin pagar en línea el costo de generación e inicialización del subproceso. Si aún no conoces el directorio de trabajo de la sesión, usa prewarm() en su lugar.
Parámetros
Devuelve
Devuelve unaPromise<WarmQuery> que se resuelve una vez que el subproceso se ha generado y ha completado su protocolo de inicialización.
Ejemplo
Llama astartup() temprano, por ejemplo al inicio de la aplicación, y luego llama a .query() en el identificador devuelto una vez que un prompt esté listo. Esto saca la generación e inicialización del subproceso de la ruta crítica.
prewarm()
Alfa. Inicia un proceso de Claude Code como repuesto antes de saber qué sesión servirá, para que puedas vincularlo a una sesión más tarde con claim(). Úsalo en una aplicación que se inicia antes de que el usuario elija una carpeta. Requiere TypeScript Agent SDK v0.3.282 o posterior.
prewarm() completa el mismo protocolo de inicialización que startup(), con el proceso esperando en options.cwd cuando lo estableces y, de lo contrario, en un directorio temporal privado dentro de tu directorio de configuración de Claude Code. El directorio de trabajo de la sesión, sus hooks SessionStart, sus servidores MCP de stdio, y su contexto de CLAUDE.md y git esperan a la reclamación. Un repuesto ocupa aproximadamente de 230 a 260 MB de memoria mientras espera. Si tu spawnClaudeCodeProcess ejecuta Claude Code en otra máquina o en un contenedor, establece options.cwd en un directorio que exista allí para que el repuesto espere en él.
options e initializeTimeoutMs significan lo mismo que para startup(), excepto que options.cwd establece solo el directorio en el que el repuesto espera. La promesa se resuelve con un SpareProcess una vez que el proceso ha completado su protocolo de inicialización. prewarm() lanza una excepción si options establece resume, continue o forkSession, porque un repuesto aún no tiene sesión. Todo lo que una reclamación no puede establecer, como mcpServers, hooks, canUseTool, settingSources, systemPrompt y plugins, queda fijo durante la vida útil del repuesto, así que mantén un repuesto por cada conjunto distinto de esas opciones y precalienta de nuevo cuando cambien.
Ejemplo
Precalienta al inicio de la aplicación y luego reclama el repuesto cuando el usuario inicie una sesión:tool()
Crea una definición de herramienta MCP con seguridad de tipos para usar con servidores MCP del SDK.
Parámetros
ToolAnnotations
Definido en @modelcontextprotocol/sdk/types.js. Todos los campos son sugerencias opcionales; los clientes no deben confiar en ellos para decisiones de seguridad.
createSdkMcpServer()
Crea una instancia de servidor MCP que se ejecuta en el mismo proceso que tu aplicación.
Parámetros
listSessions()
Descubre y enumera sesiones pasadas con metadatos ligeros. Filtra por directorio de proyecto o enumera sesiones en todos los proyectos.
Parámetros
Tipo de retorno: SDKSessionInfo
Ejemplo
Imprime las 10 sesiones más recientes de un proyecto. Los resultados se ordenan porlastModified en orden descendente, por lo que el primer elemento es el más nuevo. Omite dir para buscar en todos los proyectos.
getSessionMessages()
Lee mensajes de usuario y asistente de la transcripción de una sesión pasada.
Parámetros
Tipo de retorno: SessionMessage
Ejemplo
getSessionInfo()
Lee los metadatos de una única sesión por ID sin escanear el directorio de proyecto completo.
Parámetros
Devuelve
SDKSessionInfo, o undefined si no se encuentra la sesión.
renameSession()
Cambia el nombre de una sesión añadiendo una entrada de título personalizado. Las llamadas repetidas son seguras; prevalece el título más reciente.
Parámetros
tagSession()
Etiqueta una sesión. Pasa null para borrar la etiqueta. Las llamadas repetidas son seguras; prevalece la etiqueta más reciente.
Parámetros
forkSession()
Copia la transcripción de una sesión en una nueva sesión para que puedas llevar la conversación en otra dirección mientras la original permanece sin cambios. Para crear una rama desde un punto anterior de la conversación, pasa upToMessageId.
Parámetros
Devuelve
{ sessionId }, el UUID de la nueva sesión. Pásalo como resume para continuar la bifurcación. La bifurcación no incluye los checkpoints de archivos de la sesión original, por lo que no puedes rebobinarla a un checkpoint capturado antes de la bifurcación.
forkSession() lanza una excepción cuando:
sessionIdno es un UUID- no se puede encontrar la sesión, o no tiene mensajes
upToMessageIdno coincide con ningún mensaje de la transcripción
resolveSettings()
Resuelve la configuración efectiva de Claude Code para un directorio determinado utilizando el mismo motor de combinación que la CLI, sin generar la CLI de Claude. Úsalo para inspeccionar qué configuración vería una llamada a query() antes de invocar una.
Esta función es alfa y su API puede cambiar antes de la estabilización.
query() activa:
policyHelper:resolveSettings()lee fuentes MDM, incluidas plist de macOS y HKLM/HKCU de Windows, pero no ejecuta el subprocesopolicyHelperconfigurado por el administrador.- Configuración administrada por servidor:
resolveSettings()no obtiene la configuración administrada por servidor. Pásala comooptions.serverManagedSettingspara incluirla. defaultMode: la instantánea devuelvepermissions.defaultModetal como está de todos los niveles, por lo que puede incluir los valores'auto'y'bypassPermissions'de la configuración del proyecto y local, que una sesión activa ignora.
Parámetros
resolveSettings() acepta un único objeto de opciones. Todos los campos son opcionales.
Tipo de retorno: ResolvedSettings
resolveSettings() devuelve un objeto que describe la configuración combinada y la fuente que aportó cada clave.
Ejemplo
El siguiente ejemplo resuelve la configuración para un directorio de proyecto e imprime la fuente que controla el período de limpieza. En una máquina donde ningún archivo de configuración establececleanupPeriodDays, ambas líneas impresas muestran undefined como valor, que es la salida esperada y no un error.
Tipos
Options
Objeto de configuración para la función query().
Manejar respuestas de la API lentas o detenidas
El subproceso de la CLI lee varias variables de entorno que controlan los tiempos de espera de la API y la detección de bloqueos. Pásalas mediante la opciónenv:
-
API_TIMEOUT_MS: tiempo de espera por solicitud en el cliente de Anthropic, en milisegundos. Valor predeterminado600000. Se aplica al bucle principal y a todos los subagentes. -
CLAUDE_CODE_MAX_RETRIES: máximo de reintentos de la API. Predeterminado:10, con un límite de15. Cada reintento obtiene su propio intervalo deAPI_TIMEOUT_MS. Para ejecuciones desatendidas que necesitan esperar durante interrupciones más largas, estableceCLAUDE_CODE_RETRY_WATCHDOG=1: reintenta indefinidamente los errores transitorios de capacidad y, en Claude Code v2.1.199 o posterior, eleva a300el valor predeterminado para otros errores transitorios y elimina el límite de esta variable. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog de bloqueos para subagentes. Mientras el watchdog del stream está activado, el valor predeterminado esCLAUDE_STREAM_IDLE_TIMEOUT_MSmás 5 minutos, lo que da600000a menos que aumentes esa variable. Con el watchdog del stream desactivado, el valor predeterminado es600000. Antes de v2.1.257, el valor predeterminado siempre era600000. El temporizador se reinicia con cada evento del stream. Ante un bloqueo, Claude Code aborta el subagente e informa el bloqueo al padre. Para un subagente en segundo plano, también marca la tarea como fallida y adjunta cualquier resultado parcial. -
CLAUDE_ENABLE_STREAM_WATCHDOGconCLAUDE_STREAM_IDLE_TIMEOUT_MS: watchdog del stream que aborta la solicitud cuando los encabezados ya llegaron pero el cuerpo de la respuesta deja de transmitirse. El watchdog está activado de forma predeterminada para todos los proveedores; estableceCLAUDE_ENABLE_STREAM_WATCHDOG=0para desactivarlo.CLAUDE_STREAM_IDLE_TIMEOUT_MStiene como valor predeterminado300000y se limita a ese mínimo. Después de abortar, Reintentos automáticos explica lo que hace Claude Code según cuánto había avanzado la respuesta. Mientras el watchdog espera una respuesta que un gateway detrás deANTHROPIC_BASE_URLmantiene abierta con pings de keep-alive, un host que estableceincludePartialMessagessigue recibiendo eventos de streamping, así que interpreta esos frames como señal de actividad en lugar de agotar el tiempo de espera de la sesión por falta de datos. Antes de v2.1.257, los frames se detenían 5 minutos después del último evento real del stream.
Objeto Query
Interfaz que devuelve la función query().
Métodos
applyFlagSettings()
Cambia la configuración de una sesión en ejecución sin reiniciar la consulta. Úsalo cuando un ajuste que no tiene un setter dedicado necesite cambiar durante la sesión, como endurecer permissions después de que el agente lea una entrada no confiable. setModel() y setPermissionMode() son setters dedicados para esas dos claves; applyFlagSettings() es la forma general que acepta cualquier subconjunto de las claves de configuración, y pasar model aquí se comporta igual que setModel().
Solo algunas claves surten efecto durante la sesión:
- Se aplican en el siguiente turno:
effortLevel,ultracode,permissions,hooks,skillOverrides,fastMode,agent. Cambiaragenttambién aplica la sobrescritura de modelo y los hooks de ese agente en el siguiente turno. Su prompt del sistema se aplica en el siguiente turno o, en una sesión que reutiliza un prompt del sistema registrado, una vez que la sesión se compacta. - Se aplican durante el turno actual:
model. Si cambiasmodelmientras Claude está trabajando en un turno, la respuesta que Claude ya está generando termina con el modelo anterior, y el resto del turno, a partir de la siguiente llamada que Claude Code hace al modelo, usa el nuevo. Los subagentes conservan su propio modelo. Antes de v2.1.212, un cambio a mitad de turno esperaba al siguiente turno. - Sin efecto durante la sesión: las opciones del prompt del sistema. Se resuelven una sola vez al inicio, por lo que la sesión en ejecución conserva el valor original aunque la llamada tenga éxito. Para cambiarlas, inicia una nueva sesión.
effortLevel acepta el nombre de un nivel de esfuerzo. También acepta "ultracode", que solicita el esfuerzo xhigh con ultracode activado. applyFlagSettings() declara effortLevel sin ese valor, así que en TypeScript pasa { ultracode: true, effortLevel: "xhigh" } para obtener el mismo resultado, o solo la clave ultracode para activar ultracode con el nivel de esfuerzo actual de la sesión. El valor ultracode requiere Claude Code v2.1.203 o posterior y solo lo acepta applyFlagSettings(), no la clave effortLevel en un archivo de configuración. Antes de v2.1.284, la clave ultracode por sí sola también establecía el nivel en xhigh.
Los valores se escriben en la capa de configuración de flags y se combinan sobre lo que la opción settings en línea de query() estableció al inicio. Es el mismo nivel que la sección de precedencia de esta página llama opciones programáticas.
Las llamadas sucesivas combinan superficialmente las claves de nivel superior. Una segunda llamada con { permissions: {...} } reemplaza todo el objeto permissions de la llamada anterior en lugar de combinarse en profundidad con él.
Para borrar una clave que estableciste con applyFlagSettings(), pasa null para esa clave. La mayoría de las claves recurren entonces primero a un valor que la opción settings de query() estableció al inicio y luego a fuentes de menor precedencia. Un model borrado se restablece al modelo predeterminado de Claude Code, incluso cuando un archivo de configuración establece model. Pasar undefined no tiene efecto porque la serialización JSON lo descarta.
Además de model, tres claves restablecen el estado de la sesión en lugar de recurrir a otros valores:
effortLevel: nulldevuelve la sesión al nivel de esfuerzo predeterminado del modelo, no a la opcióneffortdequery()ni a uneffortLevelde un archivo de configuración.agent: nullejecuta el hilo principal sin agente a partir del siguiente turno, en lugar de restaurar la opciónagentdequery()o unagentde un archivo de configuración. Si el agente borrado había aplicado su propio modelo, la sesión vuelve al modelo que resolvió al inicio.ultracode: nulldesactiva ultracode, igual quefalse, en lugar de restaurar un valor deultracodede un archivo de configuración. La sesión conserva su nivel de esfuerzo actual, así que pasaeffortLevelen la misma llamada para cambiarlo.
setModel() y setPermissionMode().
El siguiente ejemplo cambia el modelo activo durante la sesión y luego borra la sobrescritura para que el modelo se restablezca al modelo predeterminado de Claude Code.
applyFlagSettings() es exclusivo de TypeScript. El SDK de Python no expone un método equivalente.updateSettings()
Escribe una clave de la lista permitida en un archivo de configuración en disco, para que el valor persista en sesiones posteriores que carguen esa fuente. Cada fuente acepta una clave, con un valor de tipo cadena:
"localSettings": aceptaoutputStyley lo combina en el archivo de configuración local del proyecto,.claude/settings.local.json. El nuevo estilo surte efecto en la siguiente solicitud de la sesión."userSettings": aceptaeffortLevely lo guarda como el nivel de esfuerzo predeterminado para el modelo actual de la sesión, bajomodelSettingsen tu archivo de configuración de usuario. Pasarmaxno escribe nada, porquemaxes solo para la sesión. En cualquier caso, la sesión en ejecución conserva su nivel de esfuerzo actual, así que llama aapplyFlagSettings()cuando también quieras cambiarlo. Esta fuente requiere TypeScript SDK v0.3.277 o posterior, que incluye Claude Code v2.1.277.
settingSources de la sesión excluyen la fuente que indicas. No se admite eliminar una clave.
toggleMcpServer()
Deshabilitar un servidor lo desconecta y elimina sus herramientas de la sesión. Para los servidores que agregaste durante la sesión y para los servidores en proceso, esto depende de tu versión de Claude Code:
- Un servidor stdio, SSE o HTTP que agregaste durante la sesión con
setMcpServers(): eliminar sus herramientas requiere Claude Code v2.1.285 o posterior. - Un servidor en proceso que creaste con
createSdkMcpServer(), ya sea que lo hayas pasado enmcpServerso consetMcpServers(): desconectarlo y eliminar sus herramientas requiere Claude Code v2.1.286 o posterior. Deshabilitarlo también hace fallar sus llamadas a herramientas que aún están en ejecución, por lo que Claude recibe un resultado de error para cada una de ellas de inmediato, sin esperar a que tu handler retorne.
WarmQuery
Handle que devuelve startup(). El subproceso ya está generado e inicializado, por lo que llamar a query() en este handle escribe el prompt directamente en un proceso listo, sin latencia de inicio.
Métodos
WarmQuery implementa AsyncDisposable, por lo que se puede usar con await using para una limpieza automática.
SpareProcess
Alfa. Handle que devuelve prewarm(): un proceso de Claude Code iniciado que aún no está vinculado a una sesión y que se puede reclamar una vez. Requiere TypeScript Agent SDK v0.3.282 o posterior.
Miembros
options.cwd es obligatorio. Una reclamación también puede establecer additionalDirectories, model, permissionMode, maxThinkingTokens, una capa de configuración de flags en settings, appendSystemPrompt, title, agents y tokens por sesión en env.
Claude Code puede rechazar una reclamación, por ejemplo para una carpeta que no existe o una cuya configuración de proyecto establece env, agent o model. Después de un rechazo, un prompt que claim() ya envió recibe un resultado de error cuyo texto empieza por not_claimed, y la consulta devuelta lanza una excepción. Envuelve el bucle de la consulta en un bloque try para continuar después de la excepción. Cuando claimed se rechaza con un mensaje que empieza por option_not_applied, la sesión se está ejecutando sin el model o el maxThinkingTokens que pediste. Después de cualquier otro rechazo, tu prompt no se ha ejecutado, así que inicia la sesión con query() en su lugar.
SDKControlInitializeResponse
Tipo de retorno de initializationResult(). Contiene los datos de inicialización de la sesión.
hooks_applied informa si Claude Code registró los hooks que llevaba la solicitud initialize. El SDK envía esa solicitud una vez cuando se inicia la sesión y de nuevo en cada llamada a reinitialize(). El campo requiere Agent SDK v0.3.238 o posterior.
Claude Code omite el campo cuando la solicitud no llevaba hooks. Cuando la solicitud llevaba hooks, el valor depende de si la solicitud es el primer initialize de la sesión y, en el caso de uno repetido, de cómo llegó a la sesión:
true: Claude Code registró los hooks. El primer initialize de una sesión devuelve este valor. Un initialize repetido enviado por el stdin de la CLI también devuelvetrue. En ese caso, los hooks de la nueva solicitud reemplazan a los hooks registrados anteriormente.false: Claude Code ignoró los hooks. Un initialize repetido enviado a una sesión remota devuelve este valor, de modo que un segundo cliente que se une a una sesión no puede reemplazar los hooks que registró el primer cliente.
hooks en cada initialize repetido.
El campo sdkMcpServerManifests de la solicitud y el campo sdk_mcp_manifests_parked de la respuesta son para los servidores MCP del SDK en proceso que creaste con createSdkMcpServer(). Tu aplicación no establece ni lee ninguno de los dos campos.
claude_code_version es la versión de Claude Code del proceso que ejecuta los turnos de la sesión. Es el mismo valor que incluye el mensaje init SDKSystemMessage, por lo que puedes leer la versión de la CLI antes del primer turno.
- El campo requiere Agent SDK v0.3.296 o posterior, que incluye Claude Code v2.1.296.
- Si el campo es
undefinedy establecistepathToClaudeCodeExecutable, apúntalo a Claude Code v2.1.296 o posterior.
fast_mode_state y, cuando algo bloquea el modo rápido, fast_mode_disabled_reason lleva junto a él el código del motivo, para que puedas explicar el estado bloqueado en lugar de volver a deducir la disponibilidad. Ambos comportamientos requieren Claude Code v2.1.219 o posterior. Antes de v2.1.219, la respuesta omitía fast_mode_state cuando el modo rápido no estaba disponible y nunca incluía un motivo. Para conocer los códigos de motivo y sus significados, consulta fast_mode_disabled_reason en el mensaje de resultado.
El contenedor de la respuesta de control para un initialize exitoso también lleva un array pending_permission_requests. El campo está en el propio contenedor de la respuesta, no en el payload SDKControlInitializeResponse anterior. Cada entrada es un mensaje control_request completo con la misma forma { type: "control_request", request_id, request } que la sesión transmite en streaming para las solicitudes de permiso mientras se ejecuta.
El array enumera las solicitudes de permiso que este proceso de Claude Code emitió y que aún no se han resuelto. El SDK lee el array por ti y despacha cada entrada a tu callback canUseTool, la misma reentrega que reinitialize() desencadena después de una interrupción del transporte. Maneja los IDs de solicitud repetidos de forma idempotente, porque una entrada puede repetir una solicitud que el callback ya recibió antes de que se cayera la conexión.
El array siempre está presente en una respuesta initialize exitosa y está vacío cuando este proceso no tiene ninguna solicitud de permiso sin resolver. Requiere Claude Code v2.1.268 o posterior. Las versiones anteriores podían omitir el campo, así que si analizas el protocolo de comunicación por tu cuenta, trata un campo ausente como señal de una CLI más antigua y no como prueba de que no hay nada pendiente.
SDKControlInterruptResponse
El recibo de interrupción: el valor con el que se resuelve interrupt() en una CLI que anuncia la capacidad interrupt_receipt_v1 en SDKSystemMessage.capabilities. Requiere Claude Code v2.1.205 o posterior. Las CLI anteriores responden a la interrupción con un payload de éxito vacío, por lo que interrupt() se resuelve con undefined.
still_queued enumera los UUID de los mensajes de usuario que estaban pendientes cuando llegó la interrupción: los mensajes que aún están en la cola, más cualquier mensaje que Claude Code ya había sacado de la cola para el siguiente turno. Una vez que el primer turno de la sesión ha comenzado, Claude Code procesa los mensajes listados después de la interrupción a menos que los canceles antes, y puede combinar varios en un solo turno. Si interrumpes antes de que comience el primer turno, Claude Code aborta ese turno en cuanto comienza, y los mensajes listados en ese turno no reciben respuesta.
Usa el recibo para decidir si debes reenviar algo. Un mensaje listado que no canceles entra en la conversación reciba o no una respuesta, por lo que reenviarlo lo entrega a Claude dos veces.
Interpreta la lista teniendo en cuenta estas advertencias:
- Solo aparecen los mensajes que se pusieron en cola con un UUID. Un array vacío no significa que no se vaya a ejecutar nada más.
- Solo se listan los mensajes del hilo principal. Los mensajes dirigidos a un subagente quedan fuera del alcance.
- La lista puede incluir UUID que tu cliente nunca envió, como los disparadores de tareas programadas. Ignora los UUID que no reconozcas en lugar de tratarlos como un error.
interrupt(), puede establecer cancel_queued: true en la solicitud de control interrupt. Claude Code v2.1.219 y posteriores anuncian la compatibilidad con la capacidad interrupt_cancel_queued_v1 en SDKSystemMessage.capabilities; las CLI más antiguas ignoran el campo y dejan que los mensajes en cola se ejecuten como de costumbre. Una interrupción de este tipo también cancela todos los mensajes que de otro modo aparecerían en still_queued: el recibo los enumera en cancelled, still_queued queda vacío y ninguno de ellos se ejecuta.
La lista cancelled tiene las mismas advertencias que still_queued. El método interrupt() nunca envía cancel_queued, por lo que los recibos con los que se resuelve no llevan cancelled.
El recibo es una instantánea tomada en el momento en que se procesa la interrupción y, en una interrupción limpia, llega antes del SDKResultMessage del turno interrumpido. Lee el recibo en lugar de inspeccionar la cola después de ese resultado: el bucle inicia de inmediato el siguiente turno en cola, por lo que la cola que inspeccionas después del resultado ya ha cambiado.
SDKControlGetContextUsageResponse
Tipo de retorno de getContextUsage(). Con el detail predeterminado, es el mismo payload que Claude Code renderiza para el comando /context en una sesión interactiva, por lo que, junto con los conteos de tokens, lleva campos de visualización como color y gridRows que Claude Code usa para dibujar la cuadrícula de uso de /context.
El argumento opcional detail del método elige cómo cuenta Claude Code cada categoría. El argumento detail requiere Agent SDK v0.3.257 o posterior.
'full': el valor predeterminado. Claude Code cuenta cada categoría con solicitudes a la API de conteo de tokens. Estas solicitudes no aparecen en el stream de mensajes, por lo que el seguimiento de costos que lee el stream no las verá. En la API de Anthropic, el conteo de tokens no se factura.'summary': pasa{ detail: 'summary' }para obtener en su lugar una respuesta basada en el uso de la última respuesta y en estimaciones locales. No se envía ninguna solicitud de conteo de tokens, y los números por categoría son aproximados.
/context como prompt en lugar de llamar al método, Claude Code adjunta un payload SDKContextUsage al campo context_usage del mensaje de assistant que entrega el resultado. Ese campo requiere Agent SDK v0.3.232 o posterior.
categoriescontiene los totales por categoría. Elkindde cada entrada clasifica la fila con los mismos valores queSDKContextUsageCategory. Clasifica las filas según este campo y no según elnamede visualización. El campo requiere Agent SDK v0.3.268 o posterior.mcpToolsyagentsatribuyen tokens a herramientas MCP y subagentes individuales.memoryFilesenumera cada archivo de memoria cargado con su costo.skills.skillFrontmatteratribuye los tokens del listado de skills a cada skill incluido. Los conteos por skill miden la entrada de cada skill en el listado tal como Claude Code la envía realmente, que puede ser más corta que el frontmatter completo del skill. Comparaskills.totalSkillsconskills.includedSkillspara ver si todos los skills descubiertos llegaron al listado.
totalTokens es el uso de contexto actual de la sesión, y maxTokens es la ventana con la que se mide ese uso. Esa ventana es la ventana de contexto del modelo, o la ventana de compactación automática más baja cuando corresponde. rawMaxTokens tiene el mismo valor que maxTokens, y percentage es totalTokens expresado como porcentaje redondeado de esa ventana. apiUsage contiene el uso de la respuesta de API más reciente, no un total acumulado de la sesión.
Claude Code deja sin establecer los diagnósticos opcionales deferredBuiltinTools, systemTools y systemPromptSections, así que espera que estén ausentes aunque el tipo los declare.
SDKControlReadFileResponse
Tipo de retorno de readFile().
contents contiene el texto del archivo, o datos en base64 cuando solicitaste encoding: 'base64'; en ese caso, el campo encoding de la respuesta se establece en 'base64'. absPath es la ruta absoluta resuelta. truncated se establece cuando el archivo era más largo que el límite maxBytes y el contenido se cortó en ese límite.
Qué puede leer readFile()
readFile() sirve un conjunto de archivos más limitado que la herramienta Read:
- Un archivo normal dentro de uno de los directorios de trabajo de la sesión, como
cwdyadditionalDirectories - Algunos de los propios archivos de Claude Code para la sesión, como los resultados de herramientas
Read siguen bloqueando una ruta coincidente, y una regla de permiso amplia de Read no abre el resto del sistema de archivos a readFile(). Para cualquier otra cosa, la llamada se resuelve con null.
SDKControlReloadPluginsResponse
Tipo de retorno de reloadPlugins().
commands,agentsymcpServers: los comandos, los subagentes y el estado de los servidores MCP de la sesión, con las mismas formas que devuelvensupportedCommands(),supportedAgents()ymcpServerStatus().supportedAgents()sigue devolviendo la lista capturada en la inicialización, así que leeagentsaquí para obtener el conjunto después de una recargaplugins: cada plugin cargado con sunamey supathde instalación.versionrepite lo que declara el manifiesto del plugin y lo controla el autor del plugin, así que valídalo antes de confiar en él. Se omite cuando el manifiesto no declara ningunaerror_count: el número de errores al cargar los plugins
{ holdOnCacheImpact: true } a reloadPlugins() para retener una recarga que invalidaría la caché de prompts de la conversación en lugar de aplicarla. Claude Code ejecuta la comprobación que hace el comando interactivo /reload-plugins antes de advertir sobre el costo para la caché. La opción requiere Agent SDK v0.3.268 o posterior. Un ejecutable de Claude Code anterior a v2.1.268, como uno al que apuntes con pathToClaudeCodeExecutable, ignora la opción y aplica la recarga.
Cuando pasas la opción, lee held para saber qué ocurrió:
true: la recarga no se aplicó, y los campos de colección describen la sesión tal como sigue estando.cache_impactindica qué cambiaría al aplicarla. Para aplicarla de todos modos, vuelve a llamar areloadPlugins()sin la opción.false: la comprobación no encontró impacto en la caché, y la recarga se aplicó.- Ausente: no pasaste la opción, o el ejecutable de Claude Code es anterior a v2.1.268 y aplicó la recarga.
cache_impact solo está presente junto con held: true. mcp_servers_added y mcp_servers_removed nombran los servidores MCP de plugins que la recarga registraría o eliminaría, como nombres con alcance plugin:<plugin>:<server>. Los nombres los define el autor del plugin, así que valídalos antes de mostrarlos. lsp_tool_change indica si aplicar la recarga agregaría o eliminaría la herramienta LSP, o es null cuando no haría ninguna de las dos cosas. Las formas may- significan que la comprobación no pudo ver por completo el conjunto de plugins pendiente.
SDKControlReloadSkillsResponse
Tipo de retorno de reloadSkills().
skills enumera los skills disponibles después de la recarga, con la misma forma SlashCommand que devuelve supportedCommands().
SDKControlReloadOutputStylesResponse
Tipo de retorno de reloadOutputStyles().
available_output_styles enumera los nombres de los estilos de salida integrados y personalizados disponibles después de la recarga.
SDKControlMcpReadResourceResponse
Tipo de retorno de readMcpResource(), que lleva el resultado de resources/read del servidor MCP. Requiere TypeScript Agent SDK v0.3.280 o posterior.
readMcpResource() el nombre del servidor tal como lo informa mcpServerStatus() y una URI ui://, como el ui.resourceUri que una herramienta declara en su _meta. La llamada se rechaza para cualquier otro esquema de URI, para un servidor MCP del SDK que tu aplicación aloja por sí misma y para un servidor que no está conectado. Está disponible cuando las capabilities del mensaje de inicialización incluyen mcp_read_resource_v1.
Cada entrada de contents es un elemento de contenido tal como lo envió el servidor, sin ninguna clave _meta bajo el prefijo com.anthropic/, que está reservado para Claude Code. blob contiene datos en base64 para un elemento binario, y _meta es el propio _meta del elemento, donde un servidor de MCP Apps coloca el ui.csp y los ui.permissions del recurso.
El contenido es HTML de terceros no confiable, así que renderízalo en un sandbox.
AgentDefinition
Configuración de un subagente definido mediante programación.
AgentMcpServerSpec
Especifica los servidores MCP disponibles para un subagente. Puede ser un nombre de servidor (una cadena que hace referencia a un servidor de la configuración mcpServers del padre) o un registro de configuración de servidor en línea que asigna nombres de servidor a configuraciones.
McpServerConfigForProcessTransport es McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.
SettingSource
Controla desde qué fuentes de configuración basadas en el sistema de archivos carga el SDK la configuración.
Comportamiento predeterminado
CuandosettingSources se omite o es undefined, query() carga la misma configuración del sistema de archivos que la CLI de Claude Code: usuario, proyecto y local. Consulta Lo que settingSources no controla para ver las entradas que se leen independientemente de esta opción y cómo deshabilitarlas.
Por qué usar settingSources
Deshabilitar la configuración del sistema de archivos:"project" en settingSources. Consulta Modificar prompts del sistema para ver cómo interactúa la carga de CLAUDE.md con las opciones del prompt del sistema.
Precedencia de la configuración
Cuando se cargan varias fuentes, la configuración se combina con esta precedencia (de mayor a menor):- Configuración local (
.claude/settings.local.json) - Configuración del proyecto (
.claude/settings.json) - Configuración del usuario (
~/.claude/settings.json)
agents, allowedTools y settings sobrescriben la configuración de usuario, de proyecto y local del sistema de archivos. La configuración de políticas administradas tiene precedencia sobre las opciones programáticas.
PermissionMode
CanUseTool
Tipo de función de permisos personalizada para controlar el uso de herramientas.
La función es el reemplazo en el SDK de la solicitud de permiso interactiva: solo se invoca cuando el flujo de evaluación de permisos resuelve en una solicitud. Las llamadas a herramientas ya aprobadas por una entrada de allowedTools, una regla de permiso de la configuración o el modo de permisos, como acceptEdits o bypassPermissions, nunca la invocan. Para controlar cada llamada a herramienta, usa en su lugar un hook PreToolUse.
Una regla de permiso no aprueba previamente las acciones que ningún modo aprueba automáticamente; consulta Cómo se evalúan los permisos para saber cuáles de ellas llegan al callback y qué ocurre en los modos dontAsk y auto.
Normalmente, el callback resuelve la solicitud devolviendo un
PermissionResult, que el SDK escribe de vuelta a través de su transporte como el control_response. Devuelve null solo cuando tu aplicación ya haya enviado el control_response para esta solicitud por su propio canal, repitiendo requestId; en ese caso, el SDK omite escribir la respuesta en su transporte. Devolver null en cualquier otro caso deja la llamada a herramienta bloqueada indefinidamente, porque nunca se envía ningún control_response y las solicitudes de permiso no tienen tiempo de espera.
La opción requestId y el valor de retorno null requieren Claude Code v2.1.199 o posterior.
PermissionResult
Resultado de una verificación de permisos.
ToolConfig
Configuración del comportamiento de las herramientas integradas.
McpServerConfig
Configuración para servidores MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
McpClaudeAIProxyServerConfig
SdkPluginConfig
Configuración para cargar plugins en el SDK.
Ejemplo:
Tipos de Mensajes
SDKMessage
Tipo de unión de todos los mensajes posibles devueltos por la consulta.
SDKAssistantMessage
Mensaje de respuesta del asistente.
message es un BetaMessage del SDK de Anthropic. Incluye campos como id, content, model, stop_reason y usage.
SDKAssistantMessageError es uno de: 'authentication_failed', 'oauth_org_not_allowed', 'account_on_hold', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens', 'cloud_credential_error' o 'unknown'. Cuatro de estos valores significan más de lo que dicen sus nombres:
'model_not_found': el modelo seleccionado no existe o no está disponible para tu cuenta o despliegue'overloaded': la API devolvió un 529 porque el servidor está a plena capacidad, a diferencia de'rate_limit', que es un 429 contra tu cuota'account_on_hold': tu cuenta está en espera'cloud_credential_error': Claude Code no pudo obtener credenciales de AWS o Google Cloud utilizables en la máquina en la que se ejecuta, por lo que ninguna solicitud llegó al proveedor de nube. La causa habitual es un inicio de sesión en la nube que expiró o que nunca se completó en esa máquina, aunque un servicio de credenciales brevemente inaccesible reporta el mismo valor. Consulta No se pudieron cargar las credenciales de AWS o Google Cloud. Requiere TypeScript Agent SDK v0.3.267 o posterior, que incluye Claude Code v2.1.267
aborted es true cuando una interrupción o cancelación truncó el mensaje del asistente antes de que el stream se completara: el mensaje no tiene stop_reason y el contenido puede terminar a mitad de una palabra. El campo está ausente en los mensajes que se completaron normalmente. Requiere Agent SDK v0.3.214 o posterior.
agent_id identifica el subagente que produjo el mensaje y está ausente en los mensajes del hilo principal. El valor es igual al task_id del evento task_started de ese subagente y de sus demás eventos de tarea, y no cambia cuando el subagente se reanuda. El campo requiere Agent SDK v0.3.292 o posterior.
Asocia los mensajes de un subagente con sus eventos de tarea mediante agent_id, en lugar de emparejar el parent_tool_use_id de un mensaje con el tool_use_id de un evento de tarea. Cuando una llamada a herramienta reanuda el subagente, los eventos de tarea llevan el tool_use_id de esa llamada, mientras que los mensajes conservan el parent_tool_use_id de la llamada a herramienta que inició el subagente por primera vez, así que ambos ya no coinciden.
Claude Code establece user_message_uuid y user_message_uuids en el primer mensaje del asistente del turno, en las condiciones descritas en user_message_uuid. Cuando el turno continúa uno que un reinicio interrumpió, los mensajes del asistente que llevan esos campos también llevan resume_reason.
timestamp es la hora ISO 8601 en que el contenido del mensaje terminó de generarse en el proceso que lo produjo. El valor proviene del reloj de esa máquina, así que úsalo solo para mostrarlo y no ordenes los mensajes según él. Un turno de API puede producir varios mensajes del asistente que comparten un message.id, cada uno con su propio timestamp. Cuando el campo está ausente, recurre a la hora en que recibiste el mensaje.
context_usage es una copia estructurada del informe de /context, con el tipo SDKContextUsage, y requiere Agent SDK v0.3.232 o posterior. Cuando envías /context como prompt, Claude Code entrega el informe como un mensaje del asistente cuyo message.content contiene la tabla en markdown, y adjunta context_usage a ese mismo mensaje. Claude Code no establece el campo en ningún otro mensaje del asistente, y las versiones anteriores entregan la tabla de /context sin él, así que lee el desglose del campo cuando esté presente y recurre al texto en markdown cuando no lo esté.
usage_report es una copia estructurada del informe de /usage, con el tipo SDKUsageReport, y requiere Agent SDK v0.3.273 o posterior. Cuando envías /usage como prompt, Claude Code entrega el informe como un mensaje del asistente cuyo message.content contiene el texto. Adjunta usage_report a ese mismo mensaje solo cuando la sesión cumple todas estas condiciones:
- La sesión se autentica con una credencial de claude.ai
- La credencial muestra un tipo de plan conocido o tiene el alcance
user:profile - La cuenta no tiene facturación basada en el uso
claude setup-token pasado como CLAUDE_CODE_OAUTH_TOKEN no cumple los requisitos de forma predeterminada, porque solo tiene el alcance user:inference. Otras sesiones, como las sesiones con clave de API, entregan el texto sin el campo, y lo mismo hacen las versiones anteriores. Lee el informe desde el campo cuando esté presente y recurre al texto cuando no lo esté.
SDKUserMessage
Mensaje de entrada del usuario.
pasted_content para enviar contenido que el usuario pegó en tu interfaz de prompt en lugar de escribirlo, una entrada por pegado, cada una como una cadena o una matriz de bloques de contenido. Claude Code añade el texto de cada entrada después del texto escrito, en orden, y puede envolver cada pegado en etiquetas <pasted_content>. Los bloques que no son de texto se ignoran, así que envía imágenes y documentos en message.content. Requiere Agent SDK v0.3.277 o posterior.
Establece inline_pastes para indicarle a Claude Code qué partes de message.content pegó el usuario en lugar de escribirlas, una cadena por cada pegado. El texto del prompt permanece donde el usuario lo puso. Claude Code puede envolver cada pegado listado en etiquetas <pasted_content> en su lugar, para que Claude pueda distinguir el material pegado de las propias palabras del usuario. Solo se envuelven los pegados del último bloque de texto del prompt. Requiere TypeScript Agent SDK v0.3.280 o posterior.
Cada campo de pegado tiene un límite de tamaño:
pasted_content: si las entradas más los bloques de contenido que contienen suman más de 1,000, Claude Code ignora todo el campo.inline_pastes: Claude Code usa las primeras 100 entradas que no están en blanco e ignora el resto.
shouldQuery, client_composed o priority para cambiar cómo Claude Code maneja un mensaje que envías:
shouldQuery: establécelo enfalsepara añadir el mensaje a la transcripción sin activar un turno del asistente. El mensaje se retiene y se fusiona con el siguiente mensaje del usuario que sí activa un turno. Úsalo para inyectar contexto, como la salida de un comando que ejecutaste fuera de banda, sin gastar una llamada al modelo en él.client_composed: establécelo entruepara que Claude Code entregue el texto del mensaje tal como está escrito. Claude Code entonces no expande las menciones@pathni@server:resource, y no ejecuta como comando el texto que empieza con/. Mientras la opciónverbatimPromptsestá activada, el SDK establece el campo en cada mensaje. Requiere TypeScript Agent SDK v0.3.280 o posterior y Claude Code v2.1.248 o posterior.priority: controla cuándo llega a Claude un mensaje que envías durante un turno en curso:'next', o sin campopriority: Claude lee el mensaje en el mismo turno, en cuanto terminan las llamadas a herramientas que está ejecutando. Si el turno termina antes, el mensaje inicia el siguiente turno.'later': Claude Code retiene el mensaje hasta que termina el turno y lo envía como un turno nuevo.'now'conorigin: { kind: "human" }: en Claude Code v2.1.286 o posterior, el trabajo que puede continuar en segundo plano pasa allí, y Claude lee el mensaje en el mismo turno. El trabajo que puede pasar a segundo plano incluye comandos de shell, subagentes y llamadas a herramientas MCP. En v2.1.287 o posterior también incluye las llamadas a WebFetch y WebSearch. Cuando Claude solo está escribiendo una respuesta, o el trabajo que está ejecutando no puede pasar a segundo plano, Claude Code interrumpe el turno en su lugar y Claude lee el mensaje a continuación.'now'sin ese origen: Claude Code interrumpe el turno y Claude lee el mensaje a continuación.
tool_result de una de sus propias llamadas a herramientas, lleva agent_id. Consulta SDKAssistantMessage, que define el campo y su requisito de versión.
En un mensaje que lleva un bloque tool_result, tool_use_result es el objeto de salida estructurada de la herramienta y no el texto enviado al modelo. Su forma depende de la herramienta nombrada por el bloque tool_use correspondiente, por lo que el campo tiene el tipo unknown; las formas integradas se enumeran en Tipos de salida de herramientas. Estos resultados requieren un manejo más allá de su forma listada:
- La herramienta
Agent:tool_use_resultesAgentOutput. Renderiza a partir de él en lugar de analizar el texto detool_result. Elcontentde un resultadocompletedcontiene el informe del subagente o, para un subagente cuyo informe pasa por una llamada a la herramientaSubagentHandback, una nota breve sobre esa entrega en lugar del informe. En modo automático en Claude Code v2.1.271 o posterior, todo subagente que produce un resultadocompletedinforma de esa manera a menos que sea un fork, y Claude recibe el informe como un mensaje separado del subagente. - Una llamada a WebFetch o WebSearch que Claude Code pasó a segundo plano para entregar un mensaje
'now': el mensaje del usuario que lleva eltool_resultde esa llamada tienetool_use_resultestablecido en{ detachedToolCall: true }. La llamada sigue ejecutándose, y Claude recibe su resultado una vez que termina. No llega un segundotool_resultpara esetool_use_id, así que si tu aplicación dibuja una fila por cada llamada a herramienta, marca esta fila como movida a segundo plano cuando llegue este mensaje. Requiere Claude Code v2.1.287 o posterior. - Una herramienta MCP cuyo resultado contiene bloques
resource_link:tool_use_resultes un objeto con un arregloresourceLinksde entradasSDKMcpResourceLink. Claude recibe cada enlace como una línea de texto en el bloquetool_result, así que leeresourceLinkspara renderizar los archivos que devolvió el servidor en lugar de analizar ese texto. Claude Code omiteresourceLinkscuando el resultado no tiene enlaces y en los resultados de subagentes, conserva como máximo 50 enlaces por resultado y deja de agregar enlaces una vez que el arreglo alcanza 64 KiB de JSON serializado.resourceLinksrequiere Agent SDK v0.3.257 o posterior. - Una herramienta MCP que devuelve
structuredContent:tool_use_resultes un objeto cuyo miembrostructuredContentcontiene lo que envió el servidor y cuyo miembrocontentcontiene el valorMcpOutput. Los resultados de subagentes no llevanstructuredContent. - Una herramienta MCP cuyo
structuredContentse serializa en más de 1,048,576 caracteres de JSON: Claude Code dejastructuredContentfuera detool_use_resulty establecestructuredContentOmitted: trueen su lugar, para que tu aplicación pueda distinguir un objeto descartado de una herramienta que no envió ninguno. Los demás miembros, comocontentyresourceLinks, se mantienen, y lo que recibe Claude no cambia. Claude Code v2.1.287 o posterior aplica este límite. Dos tipos de herramienta son distintos:- Las herramientas de servidores SDK en proceso están exentas y entregan el objeto completo.
- Una herramienta cuya entrada de
tools/listdeclara un recursoui://de MCP Apps tiene un límite de 8,388,608 caracteres en Claude Code v2.1.295 o posterior, y las versiones anteriores a v2.1.295 la eximen.
SDKUserMessageReplay
Mensaje de usuario reproducido con UUID obligatorio.
origin es peer o channel, llega al stream como una reproducción, tanto si se entregó durante un turno activo como si inició un nuevo turno mientras la sesión estaba inactiva. Antes de v2.1.207, un turno inyectado que se entregaba mientras la sesión estaba inactiva no producía ningún mensaje en el stream y solo aparecía cuando volvías a leer la transcripción.
SDKResultMessage
Mensaje de resultado final.
subtype:
api_error_status: el código de estado HTTP del error de API que terminó la conversación. Ausente onullcuando el turno terminó sin un error de API.ttft_ms: tiempo hasta el primer token en milisegundos, medido cuando llega el primer mensaje completo del asistente. Presente solo en la rama de éxito.ttft_stream_ms: tiempo en milisegundos hasta el primer evento de streamingmessage_start, cuando se abre el stream de respuesta. Es menor quettft_ms; la diferencia entre ambos es el tiempo dedicado a transmitir en streaming el primer mensaje. Presente solo en la rama de éxito.user_message_uuid: eluuiddel mensaje que enviaste y que este turno respondió. Consultauser_message_uuidpara saber qué resultados lo llevan.user_message_uuids: losuuidde cada mensaje que enviaste y que Claude Code respondió en este turno. Consultauser_message_uuids.resume_reason: por qué este turno continúa uno que un reinicio interrumpió. Presente en ambas ramas. Consultaresume_reason.local_command: el nombre del comando que despachó el turno, en el resultado de éxito de un turno que un comando completó sin entrar en el bucle del agente, como/compact. El nombre se convierte a letras minúsculas y guiones bajos, así que/reload-pluginsreportareload_plugins. Un comando que proporciona un servidor MCP, y el/mcpintegrado, reportanmcp. Un comando que definiste tú mismo reportacustom. Los argumentos nunca se incluyen. Ausente en todo turno que entró en el bucle del agente y en los envíos que no ejecutaron ningún comando. Requiere Agent SDK v0.3.268 o posterior.request_sent_wall_ms: milisegundos de época en los que Claude Code despachó la solicitud de API, para cruzarlos con marcas de tiempo del lado del servidor. Presente solo junto conuser_message_uuid, en un resultado de éxito conis_erroren false cuyo turno envió una solicitud de API.first_content_frame_ms: tiempo en milisegundos hasta el primer evento de streamingcontent_block_startocontent_block_delta, contando los bloques de pensamiento como contenido. Presente solo en la rama de éxito, cuandois_errores false. Requiere Agent SDK v0.3.260 o posterior.first_stream_post_ms,first_stream_post_ack_ms,first_stream_post_wall_ms: tiempos de la carga del primer evento de streaming del turno. Claude Code los registra solo en las sesiones que transmite en streaming a claude.ai, como las sesiones en la nube, y los resultados que producequery()no los llevan. Requiere Agent SDK v0.3.260 o posterior.usage: solo el bucle del agente principal. Excluye las llamadas de subagentes y de modelos auxiliares, y es por turno en las sesiones con entrada en streaming. PrefieremodelUsagepara la contabilidad de tokens y costos.modelUsage: totales por modelo de cada llamada al modelo realizada a través del pipeline de consultas durante esta llamada aquery(), incluidos el bucle principal, los subagentes y las llamadas internas como la compactación y los agentes de Workflow. Se excluyen las llamadas auxiliares fuera de ese pipeline, como el clasificador de permisos y las solicitudes de conteo de tokens. Una llamada que reanuda una sesión también cuenta los totales por modelo restaurados de las llamadas anteriores de la sesión. En las sesiones con entrada en streaming, los totales son acumulativos entre turnos, así que lee el resultado más reciente en lugar de sumar entre resultados. Consulta Rastrear costos en modo de entrada en streaming para los reinicios y Recuperar totales después de un fallo de la sesión para los resultados puestos a cero.total_cost_usd: costo estimado acumulativo en USD, que cubre las mismas llamadas quemodelUsagey se reinicia en los mismos puntos. Una llamada que reanuda una sesión también cuenta los totales restaurados de las llamadas anteriores de la sesión. Es una estimación, no un estado de facturación. Consulta Rastrear costo y uso para conocer las salvedades sobre su precisión.queued_turn_count: el número de mensajes que enviaste conorigin: { kind: "human" }que aún están esperando cuando Claude Code produjo el resultado. Consultaqueued_turn_countpara saber qué te indican0y un campo ausente.result_index: la posición de este resultado en el orden de entrega de la ejecución, contando desde 0 entre todos los resultados que escribe el proceso. Presente en ambas ramas. Un resultado cuya escritura falla igualmente consume su número, así que un hueco en la secuencia significa que se perdió un resultado. Requiere Agent SDK v0.3.268 o posterior.startup_failure_reason: por qué Claude Code se negó a iniciar, en el resultadoerror_during_executionque escribe antes de salir ante un fallo de inicio conocido. Consultastartup_failure_reasonpara ver los valores y qué fallos lo llevan. Requiere Agent SDK v0.3.274 o posterior.terminal_reason: por qué terminó el bucle. Uno de"completed","max_turns","tool_deferred","aborted_streaming","aborted_tools","hook_stopped","stop_hook_prevented","background_requested","blocking_limit","rapid_refill_breaker","prompt_too_long","image_error","model_error","api_error","malformed_tool_use_exhausted","budget_exhausted","structured_output_retry_exhausted","tool_deferred_unavailable"o"turn_setup_failed".fast_mode_state: uno de"on","off"o"cooldown".fast_mode_disabled_reason: por qué el modo rápido no está disponible en este momento. Ausente cuando nada bloquea el modo rápido, aunque una solicitud igualmente puede ejecutarse a velocidad estándar. Durante el período de enfriamiento posterior a un rate limit del modo rápido, Claude Code reportafast_mode_state: "cooldown"sin código de razón y vuelve a habilitar el modo rápido cuando expira el enfriamiento. Requiere Claude Code v2.1.219 o posterior.
El mismo par de campos aparece en
SDKSystemMessage y en SDKControlInitializeResponse, para que puedas leer el estado del modo rápido antes del primer turno.
El campo origin reenvía el SDKMessageOrigin del mensaje del usuario que activó este resultado. Cuando el SDK inyecta un turno de seguimiento sintético, por ejemplo para una tarea en segundo plano terminada, el SDKResultMessage resultante lleva origin: { kind: "task-notification" }. Las rutinas cuyo disparador se activó y los mensajes verificados por el servidor provenientes de tus otras sesiones también llegan con este tipo, cada uno con el subkind descrito en Subtipos de notificación de tarea. Verifica kind para distinguir los resultados que responden a tu prompt de los seguimientos inyectados antes de enrutarlos o suprimirlos. Si tu aplicación declara ejecuciones programadas, sus resultados también llevan kind: "task-notification", así que no suprimas basándote solo en kind.
Cuando varias finalizaciones de tareas en segundo plano se encolan juntas, Claude Code puede responderlas en un solo turno en lugar de un turno por cada una. Cada finalización sigue produciendo su propio resultado con este origen. Todas las finalizaciones que Claude Code responde juntas, excepto la última, producen resultados vacíos con num_turns: 0, en orden, y el resultado de la última lleva el turno que las responde a todas.
El campo está ausente en los resultados emitidos antes de cualquier turno del usuario, como los errores de inicio.
Cuando un hook PreToolUse devuelve permissionDecision: "defer", el resultado tiene stop_reason: "tool_deferred" y deferred_tool_use lleva el id, el name y el input de la herramienta pendiente. Lee este campo para mostrar la solicitud en tu propia interfaz y luego reanuda con el mismo session_id para continuar. Consulta Diferir una llamada a herramienta para más tarde para ver el recorrido completo.
user_message_uuid
El uuid del SDKUserMessage al que responde el turno, devuelto como eco para que puedas asociar la respuesta de Claude Code con el mensaje que enviaste. Claude Code devuelve un uuid solo si estableciste uno en el mensaje. El campo es opcional en SDKUserMessage, y un prompt de cadena pasado a query() no lleva ninguno.
A cuál de tus mensajes responde un turno depende de cómo comenzó el turno:
- Un mensaje normal que enviaste, es decir, uno sin
isSynthetic: true: el turno responde a ese mensaje durante toda su ejecución. Cuando envías varios mensajes en poco tiempo, Claude Code puede fusionarlos en un solo turno, y el campo entonces lleva solo eluuiddel último mensaje. Para asociar la respuesta con cualquiera de los mensajes fusionados, usauser_message_uuids. - Un mensaje que enviaste con
isSynthetic: true: el turno responde a ese mensaje al principio. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, el turno responde al mensaje recogido a partir de ese momento. Devolver eluuidde un mensaje sintético requiere Agent SDK v0.3.265 o posterior; las versiones anteriores no devuelven nada en los turnos sintéticos. - El prompt que genera Claude Code para continuar un turno interrumpido con
CLAUDE_CODE_RESUME_INTERRUPTED_TURN: cuando el último prompt del turno interrumpido es un mensaje normal que enviaste, ya sea que abriera el turno o que Claude Code lo recogiera durante el turno, el turno continuado responde a ese mensaje al principio.resume_reasondistingue los frames del turno continuado de los del intento interrumpido. Cuando el último prompt no es un mensaje normal tuyo, el turno continuado no responde a ningún mensaje tuyo al principio. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, a partir de entonces el turno responde al mensaje recogido. Repetir el prompt del turno interrumpido requiere el Agent SDK v0.3.268 o posterior. - Cualquier otro prompt que Claude Code haya generado por sí mismo: el turno no responde a ningún mensaje tuyo al principio y sus frames no llevan eco. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, el turno responde a ese mensaje a partir de ese momento. El eco de la recogida requiere Agent SDK v0.3.265 o posterior; las versiones anteriores no devuelven nada en estos turnos.
uuid del mensaje respondido en tres tipos de frame:
- El resultado: todo resultado de un turno que respondió a un mensaje que enviaste. Todos esos resultados lo llevan en Agent SDK v0.3.265 o posterior. Antes de v0.3.265, el resultado de éxito de un turno iniciado por un mensaje normal no lo llevaba cuando el turno no enviaba ninguna solicitud de API o terminaba con una llamada a herramienta diferida. Antes de v0.3.246, los resultados de error tampoco lo llevaban, y antes de v0.3.216 ningún resultado lo llevaba.
- La primera respuesta del turno: el primer mensaje del asistente y, con
includePartialMessages, también el primer evento de streaming cuyoevent.typeno esping, para que puedas vincular la respuesta antes de que llegue el resultado. El eco en la primera respuesta requiere Agent SDK v0.3.246 o posterior. Antes de v0.3.269, conincludePartialMessages, Claude Code lo establecía solo en ese primer evento de streaming, o en el primer mensaje del asistente cuando el turno no transmitía nada en streaming. Cuando el mensaje al que responde el turno cambia a mitad del turno, la primera respuesta después del cambio también lleva el campo, en Agent SDK v0.3.265 o posterior; las versiones anteriores lo establecen en un solo frame de respuesta por turno. - Cada frame
thinking_tokensdel turno: para que puedas atribuir el progreso del pensamiento al mensaje que enviaste sin esperar la primera respuesta del turno. Requiere Agent SDK v0.3.260 o posterior.
- Frames de respuesta distintos de esas primeras respuestas
- Frames de subagentes
- Turnos que no responden a ningún mensaje tuyo, o que responden a un mensaje que enviaste sin
uuid - Resultados que no responden a ningún mensaje que enviaste, como el resultado puesto a cero después de que falla un proceso worker
user_message_uuids
Los uuid de cada mensaje que enviaste y que Claude Code respondió en este turno. Cuando envías varios mensajes en poco tiempo, Claude Code puede fusionarlos en un solo turno, y user_message_uuid entonces nombra solo el último de ellos. Para asociar la respuesta con cualquiera de los mensajes fusionados, busca el uuid de ese mensaje en cualquier posición de esta lista. Requiere Agent SDK v0.3.259 o posterior.
Claude Code establece la lista junto con user_message_uuid en cada frame de respuesta que lleva ese campo y en el resultado. Para ver el conjunto completo de frames del turno que devuelven el uuid del mensaje respondido, y la versión que requiere cada uno, consulta user_message_uuid. La lista siempre contiene user_message_uuid y tiene como máximo 64 entradas.
Cuando Claude Code recoge un mensaje normal que enviaste mientras se ejecutaba un turno, añade el uuid de ese mensaje a la lista del resultado.
Cuando una primera respuesta o un resultado lleva user_message_uuid sin la lista, proviene de una versión anterior de Claude Code, así que recurre al campo individual.
resume_reason
Por qué este turno continúa uno que un reinicio interrumpió. Claude Code establece este campo en un turno que continúa uno interrumpido con CLAUDE_CODE_RESUME_INTERRUPTED_TURN, para que puedas distinguir la respuesta y el resultado del turno continuado de los del intento interrumpido. Requiere el Agent SDK v0.3.268 o posterior.
Claude Code establece el campo en dos tipos de frame:
- El resultado del turno continuado: tanto en la rama de éxito como en la de error, lleve o no el resultado
user_message_uuid. - Los frames de respuesta del turno continuado: los que llevan
user_message_uuid.
interrupted_turn.
queued_turn_count
El número de mensajes que enviaste con origin: { kind: "human" } que aún están esperando en la cola de comandos cuando Claude Code produjo el resultado. Requiere Agent SDK v0.3.242 o posterior.
Qué te indican 0 y un campo ausente:
0: Claude Code no cuenta los mensajes que enviaste sin eseorigin, ni cuenta las notificaciones de tareas, así que igualmente puede seguir un turno.- Ausente: el resultado final que Claude Code emite después de un fallo o de un error fatal de inicio omite el campo, y puede llevar totales puestos a cero.
startup_failure_reason
Por qué Claude Code se negó a iniciar, para que tu aplicación pueda ofrecer la solución en lugar de un reintento. Claude Code lo establece en el resultado error_during_execution que escribe antes de salir ante un fallo de inicio conocido. Ese resultado lleva totales puestos a cero, y su matriz errors lleva el mismo texto que stderr. El campo está ausente en todos los demás resultados. Requiere Agent SDK v0.3.274 o posterior.
Establece CLAUDE_CODE_STARTUP_FAILURE_RESULTS en 1 en env para recibir este resultado con cualquier valor de SDKStartupFailureReason. Sin esa variable, Claude Code escribe el resultado solo para estos fallos, y el resto termina con salida en stderr, un código de salida distinto de cero y ningún mensaje de resultado:
- Una reanudación que Claude Code detiene porque no puede devolver la sesión a su worktree, con
worktree_unverifiedoworktree_resume_refused. Esa sección indica qué error lleva cada valor. - Un
continuerechazado de una conversación que retiene una sesión en segundo plano, consession_held_by_background. Para unresumerechazado de esa conversación, Claude Code escribe el resultado solo cuando la variable está establecida.
SDKSystemMessage
Mensaje de inicialización del sistema.
fast_mode_state reporta el estado del modo rápido de la sesión. Cuando algo bloquea el modo rápido, fast_mode_disabled_reason nombra la verificación que lo bloqueó; el campo requiere Claude Code v2.1.219 o posterior. Para ver los códigos de razón y sus significados, consulta fast_mode_disabled_reason en el mensaje de resultado.
terminal_slash_commands nombra las entradas de slash_commands cuya interfaz está vinculada a la terminal local, como exit. Puedes enviarlas como cualquier otra entrada de slash_commands; el campo existe para que un cliente remoto o móvil pueda ocultarlas de sus menús de comandos. El campo está presente solo cuando no está vacío, y requiere Agent SDK v0.3.229 o posterior.
sourceen cada entrada demcp_servers: de dónde proviene la definición del servidor, con los mismos valores que elsourcedeMcpServerStatus. Requiere Agent SDK v0.3.274 o posterior.effort: el nivel de esfuerzo que Claude Code envía en la siguiente solicitud de la sesión, onullcuando no envía ninguno. Claude Code establece el campo solo en el mensaje de inicialización que envía a los clientes de Remote Control, y lo omite del mensaje de inicialización que lee tu aplicación. Requiere Agent SDK v0.3.234 o posterior.
capabilities nombra los comportamientos del protocolo que implementa esta CLI, para que puedas detectar funcionalidades en lugar de comparar cadenas de claude_code_version. Es un conjunto abierto: ignora los valores que no reconozcas y verifica la capacidad específica de cuyo comportamiento dependes. El campo requiere Claude Code v2.1.205 o posterior y está ausente en las CLI anteriores.
La matriz
plugin_errors enumera los fallos de carga de plugins. Una entrada describe o bien un plugin que no se cargó y está ausente de plugins, o bien un plugin que se cargó sin una de sus partes, como su archivo de hooks. La clave se omite cuando nada falló. SDKSystemMessage declara plugin_errors en Agent SDK v0.3.283 o posterior.
Cuando un directorio o archivo comprimido de tu opción plugins falla al cargarse por sí mismo, el campo plugin de la entrada contiene una etiqueta posicional como inline[0] en lugar de un nombre de plugin. Esto sucede, por ejemplo, cuando la ruta no existe o el manifiesto no es válido. Asocia esa entrada con tu opción mediante su campo path.
La tabla siguiente enumera los campos de cada entrada de plugin_errors.
SDKPartialAssistantMessage
Mensaje parcial en streaming (solo cuando includePartialMessages es true).
El campo parent_tool_use_id siempre es null: los eventos de stream se emiten solo para la sesión principal. Para atribuir a subagentes, usa los mensajes completos, que llevan agent_id y parent_tool_use_id, o habilita forwardSubagentText para recibir el texto y el pensamiento de los subagentes como mensajes completos.
user_message_uuid y user_message_uuids en el primer evento de stream del turno que no es ping, y de nuevo cuando cambia el mensaje al que responde el turno, en las condiciones descritas en user_message_uuid. Cuando el turno continúa uno que un reinicio interrumpió, los eventos de stream que llevan esos campos también llevan resume_reason.
SDKCompactBoundaryMessage
Mensaje que indica un límite de compactación de la conversación.
SDKInformationalMessage
Banner de texto genérico emitido por el bucle. Lleva advertencias, avisos y otras líneas de estado que no son errores y que genera Claude Code, así como retroalimentación de hooks, como el motivo de bloqueo de un hook UserPromptSubmit.
En Claude Code v2.1.227 o posterior, el systemMessage de un hook puede llegar como este mensaje, con cada línea precedida por el nombre del hook, como PostToolUse:Bash says:. La sección de cada evento en la página de hooks indica cómo se muestra la salida.
Renderiza content como texto sin formato con el level indicado.
SDKWorkerShuttingDownMessage
Se emite cuando el worker se cierra de forma ordenada, para que los clientes remotos puedan mostrar por qué salió el worker en lugar de esperar a que se agote el tiempo de espera del heartbeat. reason es una cadena breve en snake_case establecida por la CLI host, como "host_exit" o "remote_control_disabled". Actúa en consecuencia solo cuando estés recibiendo el streaming en vivo. Una sesión reanudada reproduce instancias anteriores de este mensaje, así que ignóralas en ese caso.
SDKPluginInstallMessage
Evento de progreso de la instalación de plugins. Se emite cuando CLAUDE_CODE_SYNC_PLUGIN_INSTALL está establecida, para que tu aplicación del Agent SDK pueda rastrear la instalación de plugins del marketplace antes del primer turno. Los estados started y completed delimitan la instalación completa. Los estados installed y failed reportan marketplaces individuales e incluyen name.
SDKPermissionDeniedMessage
Evento de streaming que se emite cuando el sistema de permisos deniega una llamada a herramienta sin una solicitud de permiso interactiva. Úsalo para mostrar la denegación en tu interfaz en el momento en que ocurre, en lugar de solo observar el resultado de herramienta con is_error que viene después. Qué denegaciones reporta depende de cómo maneja la ejecución las solicitudes de permiso:
- Con un callback
canUseTooly el valor predeterminadopermissionPrompts: 'host': las solicitudes de permiso van a tu callback, y este evento reporta las denegaciones que Claude Code decide por su cuenta sin llamarlo. - Sin ninguno de los dos: una ejecución
-psimple, o unquery()que no establececanUseToolnipermissionPromptToolName, deniega cualquier llamada a herramienta que habría pedido permiso, a menos que un hookPermissionRequestla permita, y este evento informa esas denegaciones así como las que Claude Code decide por sí mismo. Antes de v2.1.223, Claude Code no emitía este evento en ejecuciones sin callback. - Con una herramienta de solicitud de permisos MCP, establecida con
permissionPromptToolNameo con el flag--permission-prompt-tool, y el valor predeterminadopermissionPrompts: 'host': Claude Code no emite este evento en absoluto, ni siquiera para las denegaciones por reglas que decide por su cuenta. - Con
permissionPrompts: 'none': Claude Code deniega las llamadas que habrían requerido una solicitud de permiso, incluso cuando también está establecidocanUseToolo una herramienta de solicitud de permisos MCP, y este evento reporta esas denegaciones además de las que Claude Code decide por su cuenta. Requiere Claude Code v2.1.259 o posterior.
PreToolUse, tanto si el propio hook denegó la llamada como si una regla de denegación anuló la decisión de permitir o preguntar del hook. Además, el evento funciona con el mejor esfuerzo posible: ocasionalmente Claude Code registra una denegación sin emitir este evento, así que permission_denials en el mensaje de resultado es el registro de referencia.
SDKPermissionDenial
Información sobre un uso de herramienta denegado.
SDKContextUsage
Forma estructurada del informe de /context, que llega como context_usage en el SDKAssistantMessage que entrega un resultado de /context. Agent SDK v0.3.232 y posteriores exportan el tipo. A diferencia de SDKControlGetContextUsageResponse, lleva solo los datos necesarios para renderizar el desglose de uso, sin campos de visualización como color y gridRows. Claude Code calcula el informe con solicitudes de API de conteo de tokens que no aparecen en el stream de mensajes; consulta cómo se manejan estas solicitudes.
model hasta over_limit describen la sesión en su conjunto, y los campos de colección atribuyen tokens a elementos individuales.
over_limit.kind registra cómo resolvió Claude Code la ventana, no si la API acepta la siguiente solicitud:
hard_limit: la ventana es lo que Claude Code cree que es el límite propio del modelo, a partir del cual la API rechaza las solicitudescompaction_window: la ventana es una ventana de la política de compactación, que puede coincidir o no con el límite del modelo
SDKContextUsageCategory
Una fila del desglose de uso por categoría de /context.
Cada valor de
kind indica qué son los tokens de la fila:
used: contenido que ocupa la ventana de contextofree: la ventana restantebuffer: la reserva para la compactacióndeferred: esquemas de herramientas que Claude Code mantiene fuera de la ventana y excluye del cálculo de uso, enumerados a título informativo
SDKUsageReport
Forma estructurada del informe de /usage, que se lleva como usage_report en el SDKAssistantMessage que entrega un resultado de /usage. Agent SDK v0.3.273 y posteriores exportan el tipo. El tipo es experimental: su forma puede cambiar.
session y rate_limits:
session: los totales acumulados de costo y uso de Claude Code, leídos del mismo registro contable quetotal_cost_usdymodelUsageenSDKResultMessage. Cada entrada demodel_usagees unModelUsage.rate_limits: las filas de uso del plan enlimitsy el gasto de créditos de uso enextra_usage. Esnullcuando Claude Code no pudo obtener el uso del plan, por ejemplo cuando el token OAuth de la sesión no tiene el alcanceuser:profile.
session.total_cost_usd localmente a partir de los conteos de tokens, así que es una estimación y no lo que factura tu plan. El gasto de créditos de uso que reporta el servidor es el bloque separado extra_usage. Consulta Rastrear costos y uso para las advertencias sobre precisión.
limits contiene las filas de uso del servidor tal como las envió el servidor: qué medidores se aplican, su alcance, sus etiquetas, su severidad y su orden son los del servidor, así que renderiza las filas literalmente.
- Un array vacío significa que el servidor no reportó ningún medidor.
nullsignifica que Claude Code no tiene filas que reportar.
limits describe un medidor de uso:
Antes de Agent SDK v0.3.277, el tipo declaraba
severity e is_active como opcionales y anulables, y una fila podía llegar sin ellos.
extra_usage es el gasto y el tope de créditos de uso del período de facturación tal como los reporta el servidor, presente cuando el plan tiene créditos de uso. Los importes están en unidades menores de currency, centavos para USD.
monthly_limitesnullcuando esta cuenta no tiene un tope de gasto propio. En los planes Team y Enterprise, no muestresnullcomo ilimitado.is_enabledesfalsemientras los créditos de uso no pueden pagar las solicitudes.
SDKMessageOrigin
Procedencia de un mensaje con rol de usuario. Aparece como origin en SDKUserMessage y se reenvía al SDKResultMessage correspondiente para que puedas saber qué activó un turno determinado.
Subtipos de notificación de tarea
Cuando Claude Code entrega una notificación de tarea en una sesión, establecesubkind en el origin de la notificación si los servidores de Anthropic verificaron de dónde provino esa notificación. También establece subkind cuando tu propia aplicación declara el mensaje como ejecución programada, lo que requiere TypeScript Agent SDK v0.3.280 o posterior. subkind requiere Claude Code v2.1.213 o posterior y toma uno de dos valores:
scheduled-trigger: la notificación es el prompt almacenado de una rutina, entregado porque se activó uno de los disparadores de la rutina: su horario, su disparador de API, su disparador de GitHub o Ejecutar ahora. Un prompt que tu aplicación declara como ejecución programada también lleva este valor. Claude Code se los presenta al modelo como la tarea asignada de la sesión, con un aviso distinto del aviso que llevan las demás notificaciones de tarea.peer-send-message: la notificación es un mensaje que otra de tus sesiones envió con la herramientasend_messagedel lado del servidor que usan las sesiones en la nube para enviarse mensajes entre sí, no con la herramientaSendMessageentre sesiones, y los servidores de Anthropic verificaron que ambas sesiones pertenecen al mismo grupo privado de sesiones. Requiere Claude Code v2.1.224 o posterior. Una entrega desend_messageque los servidores no verificaron de esa forma no recibe ningún subkind.
subkind. Eso incluye la actividad de PR entregada en una sesión y los eventos en segundo plano, como una tarea terminada. Los mensajes de la herramienta SendMessage entre sesiones no son notificaciones de tarea en absoluto: tanto si provienen de una sesión en la misma máquina como si llegan a través de los servidores de Anthropic desde otra máquina, Claude Code les asigna kind: "peer" y los campos de origen de par.
fireReason indica por qué se activó una notificación scheduled-trigger, como un token breve en minúsculas, por ejemplo scheduled, manual, retry, catch_up o api. Los servidores de Anthropic lo establecen en las entregas de una rutina, y tu aplicación lo establece cuando declara una ejecución programada. Está ausente cuando ninguno de los dos envió uno. Requiere TypeScript Agent SDK v0.3.280 o posterior.
Una tarea en segundo plano puede ejecutarse más de una vez con el mismo task_id, por ejemplo cuando Claude reanuda un subagente. Cada ejecución tiene su propio run_id. Cuando la notificación de una ejecución llega a tu sesión como un mensaje de usuario, runId en el origen task-notification de ese mensaje contiene el mismo valor. Una notificación puede llegar después de que haya comenzado la siguiente ejecución de la tarea, y aun así lleva el ID de la ejecución anterior. Para saber a qué ejecución pertenece un turno, compara runId, no task_id. Requiere TypeScript Agent SDK v0.3.292 o posterior.
Declarar una ejecución programada
Si tu aplicación ejecuta prompts según su propio horario, declara cada ejecución para que Claude Code le presente el turno al modelo como una tarea programada en lugar de como entrada en vivo del usuario. Inicia la sesión conCLAUDE_CODE_HOST_SCHEDULED_RUN establecida en 1 en env y luego envía el SDKUserMessage de la ejecución con origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" } y sin isSynthetic. Claude Code ignora la declaración en un proceso iniciado sin esa variable. También la ignora en un proceso cuyo entorno contiene CLAUDECODE o CLAUDE_CODE_CHILD_SESSION. Claude Code conserva fireReason solo cuando el valor tiene de 1 a 32 letras minúsculas o guiones bajos. Requiere TypeScript Agent SDK v0.3.280 o posterior.
Campos de origen de par
Un origenpeer identifica qué agente envió el mensaje: un compañero de equipo dentro del proceso que envía a main con SendMessage, o un par entre sesiones, es decir, otra de tus sesiones de Claude Code. Los pares entre sesiones requieren Claude Code v2.1.224 o posterior en macOS y Linux; consulta disponibilidad de la mensajería entre sesiones para ver el requisito en Windows nativo. Un par entre sesiones puede ejecutarse en la misma máquina, o en otra de tus máquinas o en la nube cuando su mensaje llega a través de Remote Control. Los dos tipos de remitente rellenan los campos de forma distinta:
from: el nombre del compañero de equipo, o la dirección del remitente en el caso de un par entre sesiones. En un mensaje unidireccional entre máquinas, el remitente no tiene dirección de respuesta yfromes"unknown". El valor lo escribe el remitente;verifiedPeerPides la identidad verificada.fromMode: la clase de permisos de la sesión que envía,bypassoprompting, declarada por un host que retransmite un mensaje de par entre tus sesiones, como la aplicación de escritorio. Claude Code lo lee en la sesión receptora cuando aplica los controles de mensajes entrantes. Requiere Agent SDK v0.3.234 o posterior.senderTaskId: el ID de tarea del compañero de equipo. Ausente en el caso de un par entre sesiones.name: el nombre para mostrar del remitente, normalizado por Claude Code: elimina los puntos de código Unicode de control, de formato, sustitutos y separadores de línea o de párrafo, luego recorta el resultado y lo limita a 64 puntos de código con puntos suspensivos. Requiere Claude Code v2.1.205 o posterior.body: el cuerpo del mensaje decodificado sin el sobre peer, idéntico byte a byte a lo que ve el modelo. Presente en un único mensaje de compañero de equipo, ausente cuando se combinan varios; en el caso de un par entre sesiones, presente solo cuando el turno es exactamente un sobre peer formado por Claude Code. Muestranameybodyen lugar de volver a analizar el texto del mensaje. Antes de la v2.1.299, los mensajes combinados conservaban elbodydel primer mensaje. Requiere Claude Code v2.1.205 o posterior.fromSession: el ID de sesión del remitente que su host puede abrir, establecido por el host del remitente para que tu interfaz pueda enlazar de vuelta a la sesión que envió el mensaje. Al igual quefrom, lo afirma el remitente: úsalo solo como destino de navegación y no lo trates como prueba de la identidad del remitente. Requiere Claude Code v2.1.216 o posterior.verifiedPeerPid: el ID del proceso que se conectó al socket de mensajería entre sesiones de esta sesión, verificado por el kernel y leído de la propia conexión, nunca del payload. Úsalo, y nofrom, para identificar al remitente: cualquier proceso del mismo usuario puede falsificarfrom. El campo está ausente cuando Claude Code no puede verificarlo, como en Windows o en entradas que no llegan por socket, así que un valor ausente significa que el remitente no está verificado. En el tráfico retransmitido identifica al relay en lugar del autor del mensaje, y los ID de proceso se reutilizan, así que trátalo como procedencia y no como un token de autenticación. Requiere Claude Code v2.1.216 o posterior.
Tipos de Hook
Para una guía sobre el uso de hooks con ejemplos y patrones comunes, consulta la guía de Hooks.HookEvent
Eventos de hook disponibles.
HookCallback
Tipo de función de devolución de llamada de hook.
HookCallbackMatcher
Configuración de hook con coincidencia opcional.
HookInput
Tipo de unión de todos los tipos de entrada de hook.
BaseHookInput
Interfaz base que todos los tipos de entrada de hook extienden.
prompt_id es un UUID que identifica el mensaje del usuario que se está procesando actualmente. Coincide con el atributo prompt.id en eventos de OpenTelemetry y está ausente hasta la primera entrada del usuario. Requiere Claude Code v2.1.196 o posterior.
PreToolUseHookInput
mcp_server está presente cuando la herramienta proviene de un servidor MCP; vea McpServerProvenance. Las entradas PostToolUse, PostToolUseFailure, PermissionRequest y PermissionDenied llevan el mismo campo. El campo requiere Agent SDK v0.3.274 o posterior.
PostToolUseHookInput
PostToolUseFailureHookInput
PostToolBatchHookInput
Se activa una vez después de que cada llamada de herramienta en un lote se haya resuelto, antes de la siguiente solicitud del modelo. tool_response lleva el contenido serializado de tool_result que el modelo ve; la forma difiere del objeto Output estructurado de PostToolUseHookInput.
PermissionDeniedHookInput
NotificationHookInput
UserPromptSubmitHookInput
UserPromptExpansionHookInput
SessionStartHookInput
SessionEndHookInput
StopHookInput
StopFailureHookInput
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PostCompactHookInput
PreModelSwitchHookInput
Se activa antes de que un cambio de modelo solicitado surta efecto. context_tokens y los campos posteriores estiman lo que cuesta reenviar la conversación al nuevo modelo. Para las descripciones completas de campos y semántica de bloqueo, vea PreModelSwitch.
PostModelSwitchHookInput
Se activa después de que el modelo de la sesión cambia. Lleva los mismos campos que PreModelSwitchHookInput, con dos valores de source más. Vea PostModelSwitch.
PermissionRequestHookInput
SetupHookInput
TeammateIdleHookInput
TaskCreatedHookInput
TaskCompletedHookInput
ElicitationHookInput
ElicitationResultHookInput
ConfigChangeHookInput
InstructionsLoadedHookInput
DirectoryAddedHookInput
directory es la ruta absoluta del directorio que se agregó. source es "slash_command" cuando /add-dir lo agregó y "register_repo_root" cuando la solicitud de control del SDK lo hizo.
WorktreeCreateHookInput
WorktreeRemoveHookInput
CwdChangedHookInput
FileChangedHookInput
MessageDisplayHookInput
HookJSONOutput
Valor de retorno de hook.
AsyncHookJSONOutput
SyncHookJSONOutput
Tipos de Entrada de Herramienta
Documentación de esquemas de entrada para las herramientas integradas de Claude Code. Estos tipos se exportan desde@anthropic-ai/claude-agent-sdk/sdk-tools y se pueden usar para interacciones de herramientas seguras de tipos.
ToolInputSchemas
Unión de tipos de entrada de herramienta exportados desde @anthropic-ai/claude-agent-sdk/sdk-tools; los miembros incluyen:
Agent
Nombre de herramienta:Agent. El nombre anterior Task aún se acepta como alias, y el array tools en el mensaje de inicialización SDKSystemMessage actualmente enumera esta herramienta como Task para compatibilidad hacia atrás.
El campo
mode está obsoleto y se ignora en Claude Code v2.1.212 o posterior. Un subagente se ejecuta en el modo de permisos de la sesión padre o en el permissionMode de su definición, y las reglas de herencia de subagentes deciden cuál.AskUserQuestion
Nombre de herramienta:AskUserQuestion
Bash
Nombre de herramienta:Bash
Monitor
Nombre de herramienta:Monitor
command ejecuta un script y emite un evento por línea de stdout, y ws abre un WebSocket y emite un evento por marco de texto. Proporciona exactamente uno de command o ws. La fuente ws requiere Claude Code v2.1.195 o posterior.
timeout_ms es el plazo de la vigilancia en milisegundos. El valor predeterminado es 300000 y acepta valores hasta 3600000. El plazo efectivo es como máximo 1800000, que son 30 minutos, por lo que un valor aceptado más grande se acorta a eso. En el plazo, la vigilancia termina y Claude recibe un aviso para que pueda iniciar una nueva vigilancia si aún la necesita.
El tipo exportado marca timeout_ms como requerido porque el esquema completa el valor predeterminado; una llamada que lo omite valida.
Cuando Monitor ejecuta un comando, sigue las mismas reglas de permisos que Bash; una vigilancia de WebSocket solicita aprobación por separado. Consulta la referencia de herramienta Monitor para comportamiento y disponibilidad de proveedor.
TaskOutput
Eliminado en Claude Code v2.1.277, junto con su tipoTaskOutputInput. Anteriormente recuperaba la salida de una tarea en segundo plano en ejecución o completada; Claude lee el archivo de salida de una tarea en segundo plano con Read en su lugar.
Una entrada disallowedTools o una regla de denegación que aún nombre TaskOutput se ignora sin una advertencia.
Edit
Nombre de herramienta:Edit
Read
Nombre de herramienta:Read
- Usa
pagespara rangos de páginas PDF (por ejemplo,"1-5"). allow_largepermite que Claude lea un archivo de texto más allá de los límites de tamaño habituales cuando la ventana de contexto de la sesión tiene espacio. Requiere Agent SDK v0.3.296 o posterior, que incluye Claude Code v2.1.296.
tool_result de la llamada Read. Una lectura que devuelve la salida pdf lleva un bloque text de resumen seguido de un bloque document. Una que devuelve la salida parts lleva el bloque text de resumen seguido de un bloque por página extraída: un bloque image, o un bloque text nombrando la página cuando Claude Code no pudo renderizarla como imagen. Antes de Agent SDK v0.3.242, Claude Code entregaba el contenido del archivo como un mensaje user separado después del resultado de la herramienta.
Write
Nombre de herramienta:Write
Glob
Nombre de herramienta:Glob
Grep
Nombre de herramienta:Grep
TaskStop
Nombre de herramienta:TaskStop
task_id también acepta un compañero de un equipo de agentes o un agente en segundo plano con nombre, por ID de agente o nombre.
NotebookEdit
Nombre de herramienta:NotebookEdit
WebFetch
Nombre de herramienta:WebFetch
offset es el número de caracteres que se omiten desde el inicio de la página. Claude lo establece para seguir leyendo una página larga. El campo requiere Agent SDK v0.3.290 o posterior.
WebSearch
Nombre de herramienta:WebSearch
Workflow
Nombre de herramienta:Workflow
Workflow está disponible en Agent SDK v0.3.149 y posterior. Se requiere al menos uno de script, name o scriptPath.
TodoWrite
Nombre de herramienta:TodoWrite
Las siguientes herramientas están disponibles por defecto solo en Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 y modelos anteriores. En todos los demás modelos, incluidos los ID de modelo que Claude Code no reconoce, no están disponibles a menos que optes por incluirlas:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite en su lugar cuando establece CLAUDE_CODE_ENABLE_TASKS=0.Este conjunto predeterminado se aplica en Claude Code v2.1.268 y posterior, que el TypeScript Agent SDK agrupa desde v0.3.268.Consulta Disponibilidad de modelo para optar por participar.TaskCreate
Nombre de herramienta:TaskCreate
TaskUpdate
Nombre de herramienta:TaskUpdate
status en "deleted" para eliminarla.
TaskGet
Nombre de herramienta:TaskGet
null cuando el ID no se encuentra.
TaskList
Nombre de herramienta:TaskList
ExitPlanMode
Nombre de herramienta:ExitPlanMode
allowedPrompts está obsoleto y se ignora; Claude Code aún lo acepta para que los llamadores existentes y las transcripciones se validen. Antes de v2.1.205, solicitaba permisos de Bash basados en prompts para implementar el plan.
ListMcpResources
Nombre de herramienta:ListMcpResourcesTool
ReadMcpResource
Nombre de herramienta:ReadMcpResourceTool
EnterWorktree
Nombre de herramienta:EnterWorktree
path para cambiar a un worktree existente en lugar de crear uno nuevo. En la primera entrada, el destino debe ser un worktree registrado del repositorio actual o, en un espacio de trabajo de múltiples repositorios, de un repositorio anidado dentro de él; desde dentro de una sesión de worktree debe estar bajo .claude/worktrees/ del repositorio de la sesión. name y path son mutuamente excluyentes.
ExitWorktree
Nombre de herramienta:ExitWorktree
keep deja el worktree y la rama en disco, mientras que remove elimina ambos. discard_changes debe ser true cuando se elimina un worktree que tiene archivos sin confirmar o commits sin fusionar.
EnterPlanMode
Nombre de herramienta:EnterPlanMode
CronCreate
Nombre de herramienta:CronCreate
recurring en false para que se dispare una vez en la siguiente coincidencia. Los trabajos tienen alcance de sesión de forma predeterminada, y reanudar con --resume o --continue restaura trabajos que no han expirado. Consulta Tareas programadas.
Establecer durable en true solicita persistencia en .claude/scheduled_tasks.json para que el trabajo sobreviva a los reinicios. La programación durable no está disponible en todas las sesiones: cuando no lo está, Claude Code acepta durable: true pero crea el trabajo solo de sesión. Lee el campo durable de la salida para ver si el trabajo persistió.
CronDelete
Nombre de herramienta:CronDelete
CronCreate.
CronList
Nombre de herramienta:CronList
.claude/scheduled_tasks.json y trabajos solo de sesión desde la sesión actual.
ScheduleWakeup
Nombre de herramienta:ScheduleWakeup
/loop de ritmo propio. El tiempo de ejecución fija delaySeconds entre 60 y 3600 segundos. Los campos delaySeconds, reason, prompt y noop son requeridos a menos que stop sea true. noop: true reporta un despertar donde nada cambió. Establecer stop: true cancela el despertar pendiente y finaliza el /loop de ritmo propio. El campo stop requiere Claude Code v2.1.202 o posterior. Consulta la fila ScheduleWakeup en la referencia de herramientas.
RemoteTrigger
Nombre de herramienta:RemoteTrigger
/schedule. trigger_id es requerido para las acciones get, update, run y list_runs. body es requerido para create, update y create_webhook_trigger, y opcional para run.
create_webhook_trigger adjunta una fuente de evento a una rutina existente, como un evento de GitHub que la dispara. El body nombra la fuente, los eventos y la rutina a disparar. Requiere Claude Code v2.1.225 o posterior.
list_runs enumera las ejecuciones recientes de una rutina, y get_run_log lee el registro de una ejecución. session_id nombra la ejecución a leer, desde un resultado de list_runs, y cursor pagina a través de los resultados de cualquiera de las acciones. Ambas acciones requieren Claude Code v2.1.227 o posterior.
Esta herramienta está disponible solo cuando la sesión se autentica con una cuenta de claude.ai en un plan con rutinas habilitadas, y está ausente cuando la política de tu organización deshabilita las sesiones en la nube. En Claude Code v2.1.227 o posterior, la herramienta también está ausente cuando un Propietario ha desactivado las rutinas para la organización. Antes de v2.1.227, una sesión con solo el interruptor de rutinas desactivado aún mostraba la herramienta, y el servidor denegaba sus llamadas.
PushNotification
Nombre de herramienta:PushNotification
message por debajo de 200 caracteres porque los sistemas operativos móviles truncan texto más largo. Consulta la fila PushNotification en la referencia de herramientas para disponibilidad de proveedor; la entrega push se ejecuta a través de infraestructura alojada por Anthropic que no es accesible desde Amazon Bedrock, Claude Platform en AWS, Agent Platform de Google Cloud o Microsoft Foundry.
REPL
Eliminado en v2.1.275. Hasta v2.1.274, una herramientaREPL experimental podía activarse con CLAUDE_CODE_REPL=1 en la opción env.
ReportFindings
Nombre de herramienta:ReportFindings
level es opcional y contiene el nivel de esfuerzo que Claude reporta para la revisión. Claude Code no lo compara con el nivel en el que se ejecutó la revisión, por lo que ambos pueden diferir.
Cada hallazgo lleva estos campos:
file: ruta relativa al repositorio en la que está el hallazgo. Ellineopcional es la línea indexada en 1 a la que se ancla.summary: declaración de una oración del defecto.failure_scenariodescribe las entradas concretas y el estado que conducen a la salida incorrecta o al bloqueo.short_summary: etiqueta comprimida opcional de como máximo 60 caracteres para visualización compacta. Requiere Claude Code v2.1.212 o posterior.category: slug kebab-case corto opcional del tipo de hallazgo, comocorrectnessotest-coverage. Requiere Claude Code v2.1.199 o posterior.verdict: se establece cuando se ejecutó una pasada de verificación; ausente en revisiones solo en línea.outcome: se establece solo cuando se reporta nuevamente después de aplicar correcciones.
Artifact
Nombre de herramienta:Artifact
.html o .md local como una página de artefacto alojada, o enumera los artefactos publicados del usuario. Omite action o pasa "publish" para publicar file_path, que es requerido para la acción de publicación. Cada campo a continuación se aplica a una publicación:
icon: una palabra genérica corta para el icono de pestaña del navegador del artefacto, comochartomap. Claude lo incluye en una primera publicación y lo omite en una actualización, lo que mantiene el icono almacenado del artefacto.favicon: obsoleto, y Claude lo omite.title: nombra la página publicada en la pestaña del navegador y la galería cuando el archivo HTML no tiene etiqueta<title>.url: apunta a un artefacto existente para actualizarlo en su lugar en vez de crear uno nuevo.
force es una sobrescritura de último recurso que descarta una versión más nueva que otra sesión publicó. En un conflicto, la publicación fallida devuelve el contenido más nuevo; Claude fusiona sus cambios en ese contenido, o vuelve a leer el artefacto, y publica nuevamente. Pasa force solo cuando el usuario solicita explícitamente descartar esa versión.
Pasa "list" para enumerar los artefactos publicados del usuario; solo limit y scope pueden acompañarlo. scope tiene como valor predeterminado "mine", que enumera artefactos que el usuario posee; "shared" enumera artefactos que otras personas compartieron con el usuario, y "all" enumera ambos.
limit establece la cantidad máxima de artefactos que devuelve un listado, de 1 a 200. Un limit superior a 50 requiere Agent SDK v0.3.292 o posterior. Sin limit, un listado devuelve hasta 25.
capabilities: las capacidades de tiempo de ejecución que usa la página publicada, codificadas por nombre de capacidad, como los conectores que la página puede llamar. El servicio de artefactos valida la declaración y rechaza una publicación que nombra una capacidad que la cuenta no puede usar o le da una configuración inválida. Pasa{}para borrar una declaración almacenada, y omite el campo en un redeploy para mantenerla. Requiere Agent SDK v0.3.235 o posterior.contract: la versión de tiempo de ejecución contra la que se ejecuta la página publicada. Omítelo para mantener la versión actual del artefacto, pasa"latest"para actualizar, o pasa una versión específica para fijar o revertir. Requiere Agent SDK v0.3.235 o posterior.
Projects
Nombre de herramienta:Projects
method:
project_info: devuelve metadatos del proyecto y la lista de documentos.project_read: lee un documento porpath.project_search: consulta la base de conocimiento del proyecto conquery.nlimita los resultados y tiene como valor predeterminado5.project_write: crea o reemplaza un documento enpathdesde exactamente uno decontent, que lleva texto en línea, olocal_path, que nombra un archivo dentro del directorio de trabajo.present_to_user: truemarca el documento escrito como el entregable que el usuario necesita ver.project_delete: elimina un documento porpath.
ReadMcpResourceDir
Nombre de herramienta:ReadMcpResourceDirTool
resources vacía y el campo error reporta que el listado de directorios no está habilitado.
RefreshMcpTools
Nombre de herramienta:RefreshMcpTools
CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 en la opción env, y solo en sesiones con al menos un servidor MCP. Requiere Claude Code v2.1.211 o posterior.
ShowOnboardingRolePicker
Nombre de herramienta:ShowOnboardingRolePicker
McpInput
Nombre de herramienta: nombres de herramientas MCP dinámicas de la formamcp__<server>__<tool>
Tipos de salida de herramientas
Documentación de los esquemas de salida de las herramientas integradas de Claude Code. Estos tipos se exportan desde@anthropic-ai/claude-agent-sdk/sdk-tools y representan los datos de respuesta reales que devuelve cada herramienta.
ToolOutputSchemas
Unión de los tipos de salida de herramientas exportados desde @anthropic-ai/claude-agent-sdk/sdk-tools; sus miembros incluyen:
Agent
Nombre de la herramienta:Agent. El nombre anterior Task todavía se acepta como alias, y el array tools del mensaje de inicialización SDKSystemMessage actualmente lista esta herramienta como Task por compatibilidad con versiones anteriores.
status: "completed" para tareas finalizadas, "async_launched" para tareas en segundo plano y "remote_launched" para tareas que Claude Code envió a una sesión en la nube, donde sessionUrl enlaza a esa sesión y taskId la identifica.
En la variante completed, resolvedModel indica el modelo con el que comenzó el subagente, que puede diferir de la entrada model solicitada cuando se aplica availableModels u otra sobrescritura. Este campo requiere Claude Code v2.1.174 o posterior. En async_launched, indica el modelo en uso cuando la tarea pasó a segundo plano.
modelsUsed lista los modelos que usó el subagente, en orden. El campo solo está presente cuando hubo un cambio de modelo a mitad de la ejecución, y un modelo vuelve a aparecer cuando la ejecución regresó a él. En async_launched, la lista cubre los modelos usados antes de pasar a segundo plano. Tanto modelsUsed como el comportamiento de resolvedModel al pasar a segundo plano requieren Claude Code v2.1.212 o posterior.
Si Claude Code conservó el worktree aislado del subagente, worktreePath en el resultado completed indica dónde encontrarlo. worktreeBranch es su rama, presente cuando Claude Code creó el worktree con git.
Claude Code completa usage y totalTokens a partir de la última solicitud a la API del subagente, no de toda la ejecución, por lo que usage.service_tier es la cadena del nivel de servicio que la API informó en esa solicitud. Cuando está presente, usage.output_tokens_details.thinking_tokens es la cantidad de tokens de salida de esa solicitud que fueron tokens de pensamiento. El campo output_tokens_details requiere TypeScript SDK v0.3.228 o posterior, que incluye Claude Code v2.1.228. El campo fallback_credit requiere TypeScript SDK v0.3.285 o posterior, que incluye Claude Code v2.1.285.
usage.output_tokens_details coincide en significado con Usage.output_tokens_details, limitado a esa última solicitud, pero aquí todos sus niveles son opcionales. Protege tanto el objeto como el campo, por ejemplo usage.output_tokens_details?.thinking_tokens ?? 0, en lugar de leerlo directamente.
Antes de v2.1.207, el tipo publicado era más restringido. Omitía worktreePath, worktreeBranch, citations, toolStats.frameCount y los campos de uso inference_geo, speed e iterations, y tipaba service_tier como "standard" | "priority" | "batch". Los campos que el tipo marca como opcionales pueden estar ausentes en resultados registrados por versiones anteriores.
AskUserQuestion
Nombre de la herramienta:AskUserQuestion
response se establece cuando el usuario escribió una respuesta libre en lugar de responder las preguntas estructuradas; cuando está presente, Claude recibe “The user responded: …” en lugar de la lista de respuestas por pregunta.
Bash
Nombre de la herramienta:Bash
stdout, stderr y backgroundTaskId contienen:
timedOutAfterMs es el tiempo de espera en milisegundos, establecido cuando el comando alcanzó su tiempo de espera y pasó a segundo plano en lugar de iniciarse allí explícitamente. backgroundCwdHint se establece cuando el comando enviado a segundo plano contenía un builtin de cambio de directorio como cd, pushd, popd o chdir, e indica que el directorio de trabajo de la sesión no cambió. Ambos campos requieren Claude Code v2.1.210 o posterior.
Cuando un subagente que se ejecuta en primer plano es dueño de un comando en segundo plano, el comando termina cuando termina la ejecución de ese subagente. Claude Code establece backgroundEndsWithFinalResponse en true en esos comandos y omite el campo cuando el comando sobrevive al turno, como ocurre con los comandos iniciados por la conversación principal o por subagentes en segundo plano. El campo requiere Claude Code v2.1.227 o posterior.
Claude Code establece gitOperation.commit.branch en la rama indicada en la línea de resumen del commit de git, y lo omite para un commit hecho sobre un HEAD desacoplado. El campo requiere Agent SDK v0.3.227 o posterior. Claude Code informa un comando gh pr reopen como la acción de PR reopened, lo que requiere Agent SDK v0.3.234 o posterior.
Monitor
Nombre de la herramienta:Monitor
TaskStop para cancelar la vigilancia antes de tiempo.
Edit
Nombre de la herramienta:Edit
Read
Nombre de la herramienta:Read
type.
Write
Nombre de la herramienta:Write
originalFile y structuredPatch depende de la escritura:
- Para un archivo recién creado,
originalFilees null ystructuredPatchestá vacío - Al sobrescribir,
originalFilecontiene el contenido anterior, excepto cuando ese contenido supera aproximadamente 10 MB: en ese caso Claude Code omite el diff y devuelveoriginalFilenull ystructuredPatchvacío structuredPatchtambién está vacío cuando la escritura no cambió nada o se agotó el tiempo de espera del diff
Glob
Nombre de la herramienta:Glob
totalMatches y countIsComplete requieren Claude Code v2.1.191 o posterior. totalMatches informa la cantidad de archivos coincidentes antes del truncamiento. Cuando countIsComplete es false, totalMatches es un límite inferior porque la búsqueda subyacente truncó su propia salida.
Grep
Nombre de la herramienta:Grep
mode: lista de archivos, contenido con coincidencias o recuento de coincidencias. En el modo count, numFiles y numMatches son totales sobre el conjunto completo de resultados, no sobre la porción paginada. Antes de v2.1.208, un head_limit u offset que truncaba las entradas listadas también truncaba esos totales.
totalFiles requiere Claude Code v2.1.208 o posterior e informa la cantidad total de resultados antes de la paginación con head_limit y offset en el modo files_with_matches. totalLines requiere Claude Code v2.1.210 o posterior e informa la cantidad total de líneas antes de la paginación en el modo content.
TaskStop
Nombre de la herramienta:TaskStop
NotebookEdit
Nombre de la herramienta:NotebookEdit
WebFetch
Nombre de la herramienta:WebFetch
artifactRead es el registro propio de Claude Code de una lectura de artefacto, presente solo cuando Claude obtuvo un artefacto en el que la sesión puede publicar. Claude Code lo vuelve a leer cuando se reanuda una sesión para que una publicación posterior se base en la versión correcta; tu código no necesita actuar en consecuencia. slug nombra el artefacto, ver es la versión que la lectura dejó registrada y está ausente cuando no registró ninguna, y seeded: false marca una lectura cuyo código fuente completo no llegó a Claude. El campo seeded requiere Agent SDK v0.3.239 o posterior.
WebSearch
Nombre de la herramienta:WebSearch
Workflow
Nombre de la herramienta:Workflow
error antes de considerar que la ejecución comenzó: un script que no supera su verificación de sintaxis devuelve status: "async_launched" con error establecido, y nunca se ejecuta.
TodoWrite
Nombre de la herramienta:TodoWrite
Las siguientes herramientas están disponibles por defecto solo en Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 y modelos anteriores. En todos los demás modelos, incluidos los ID de modelo que Claude Code no reconoce, no están disponibles a menos que optes por incluirlas:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite en su lugar cuando establece CLAUDE_CODE_ENABLE_TASKS=0.Este conjunto predeterminado se aplica en Claude Code v2.1.268 y posterior, que el TypeScript Agent SDK agrupa desde v0.3.268.Consulta Disponibilidad de modelos para activarlo.TaskCreate
Nombre de la herramienta:TaskCreate
TaskUpdate
Nombre de la herramienta:TaskUpdate
TaskGet
Nombre de la herramienta:TaskGet
null cuando no se encuentra el ID.
TaskList
Nombre de la herramienta:TaskList
ExitPlanMode
Nombre de la herramienta:ExitPlanMode
ListMcpResources
Nombre de la herramienta:ListMcpResourcesTool
ReadMcpResource
Nombre de la herramienta:ReadMcpResourceTool
EnterWorktree
Nombre de la herramienta:EnterWorktree
ExitWorktree
Nombre de la herramienta:ExitWorktree
EnterPlanMode
Nombre de la herramienta:EnterPlanMode
CronCreate
Nombre de la herramienta:CronCreate
CronDelete
Nombre de la herramienta:CronDelete
CronList
Nombre de la herramienta:CronList
.claude/scheduled_tasks.json y los trabajos exclusivos de la sesión actual. Un trabajo exclusivo de la sesión incluye durable: false; los trabajos leídos del disco omiten el campo.
ScheduleWakeup
Nombre de la herramienta:ScheduleWakeup
stopped es true cuando la llamada finalizó el bucle con stop: true. Requiere Claude Code v2.1.202 o posterior. El campo cancelledWakeups cuenta cuántos despertares pendientes canceló una llamada con stop: true. Un valor de 0 significa que no había nada pendiente, y un cron recurrente de /loop no se cancela con stop: true. Requiere Claude Code v2.1.206 o posterior.
RemoteTrigger
Nombre de la herramienta:RemoteTrigger
PushNotification
Nombre de la herramienta:PushNotification
ReportFindings
Nombre de la herramienta:ReportFindings
level que pasó Claude y los hallazgos devueltos para el cuerpo del resultado. Requiere Claude Code v2.1.196 o posterior. El campo devuelto short_summary requiere Claude Code v2.1.212 o posterior.
Artifact
Nombre de la herramienta:Artifact
url de la página publicada y la path local que se publicó, con updated establecido en true cuando la publicación volvió a desplegar un artefacto existente, y warnings con cualquier advertencia del momento de la publicación. La acción de listado devuelve en cambio las filas de artifacts, con truncated establecido cuando existen más artefactos que el límite solicitado. En los listados cuyo alcance no es "mine", cada fila incluye rel, que indica si el usuario es dueño del artefacto o si se compartió con él, y el scope de la salida registra qué alcance no predeterminado produjo el listado; ambos están ausentes en los listados predeterminados.
Un resultado de listado también informa total, la cantidad de artefactos que coinciden con el alcance listado, incluidos los que superan limit. Cuando total_at_least está establecido, ese número es un límite inferior y puede haber más artefactos. Ambos campos requieren Agent SDK v0.3.292 o posterior.
Projects
Nombre de la herramienta:Projects
method, reflejando la entrada. project_read devuelve los documentos de texto pequeños en línea en content y, en cambio, escribe los documentos más grandes en una ruta local_file; project_search devuelve hits de RAG con rag: true cuando el índice del proyecto está disponible y, en caso contrario, recurre a una lista de rutas docs.
ReadMcpResourceDir
Nombre de la herramienta:ReadMcpResourceDirTool
"inode/directory"; error contiene un mensaje legible cuando el servidor no pudo listar el directorio.
RefreshMcpTools
Nombre de la herramienta:RefreshMcpTools
refreshed significa que se aplicó la lista de herramientas consultada de nuevo, error significa que la nueva consulta falló y se conservó el conjunto de herramientas anterior, y not_connected significa que el servidor no tiene una conexión activa para consultar.
ShowOnboardingRolePicker
Nombre de la herramienta:ShowOnboardingRolePicker
role cuando eligió un chip de rol o escribió uno, y dismissed: true cuando cerró el selector. Un objeto vacío significa que el usuario aprobó la llamada sin elegir un rol.
McpOutput
Nombre de la herramienta: nombres dinámicos de herramientas MCP con la formamcp__<server>__<tool>
structuredContent o enlaces a recursos, consulta tool_use_result, que contiene este valor en su miembro content. En tiempo de ejecución, el valor también puede ser undefined, aunque el tipo exportado no lo modela.
Tipos de Permiso
PermissionUpdate
Operaciones para actualizar permisos.
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
Otros tipos
ApiKeySource
De dónde provino la clave de API para las solicitudes de la sesión, reportada como apiKeySource en el mensaje de inicialización SDKSystemMessage.
Agent SDK v0.3.234 y posterior enumeran estos cuatro valores en el tipo. El tipo también mantiene
user, project, org, temporary y oauth para que el código más antiguo siga compilándose, y Claude Code no los reporta.
SdkBeta
Características beta disponibles que se pueden habilitar a través de la opción betas. Consulta Encabezados beta para más información.
SlashCommand
Información sobre un comando disponible.
builtin es true en una fila cuando el comando es propio de Claude Code y escribir /name lo ejecuta. Está ausente para un comando definido por un usuario, proyecto, plugin o servidor MCP, y para un comando incluido que uno de esos reemplaza por nombre. Requiere Agent SDK v0.3.277 o posterior.
ModelInfo
Información sobre un modelo disponible.
AgentInfo
Información sobre un subagente disponible que se puede invocar a través de la herramienta Agent.
McpServerProvenance
El servidor MCP que sirve una herramienta mcp__*, y de dónde provino la definición de ese servidor. Las entradas de hook PreToolUse, PostToolUse, PostToolUseFailure, PermissionRequest y PermissionDenied la llevan como mcp_server, y las opciones CanUseTool la llevan como mcpServer. Ambas la omiten para herramientas que no provienen de un servidor MCP.
source toma uno de los siguientes valores. El conjunto está abierto, así que trata un valor que no reconozcas como una fuente configurada, nunca como sdk:
sdk: un servidor en proceso que tu aplicación registró. Solo la aplicación host del SDK puede registrar uno, así que un servidor configurado nunca reportasdk, sea cual sea su nombre.plugin: un servidor que proporciona un plugin. Sunamees la forma con alcanceplugin:<plugin-name>:<server-name>descrita en servidores MCP proporcionados por plugins.- Un alcance de configuración:
user,project,local,dynamic,managed,enterprise,claudeaioagent. Un servidor de.mcp.jsonreportaproject, y alcances de instalación de MCP definelocal,projectyuser. Los servidores que tu aplicación pasa en la opciónmcpServers, salvo los servidores SDK en proceso, reportandynamic.
source, no en name ni en el prefijo de nombre de herramienta mcp__<server>__. Para cualquier fuente que no sea sdk, name es texto no confiable: escápalo antes de mostrarlo.
McpServerProvenance y los campos que la llevan requieren Agent SDK v0.3.274 o posterior.
McpServerStatus
Estado de un servidor MCP conectado.
source indica de dónde provino la definición del servidor, con los mismos valores y regla de confianza que el source de McpServerProvenance. El campo requiere Agent SDK v0.3.274 o posterior y está ausente en versiones anteriores.
_meta en una entrada de tools lleva los miembros de MCP Apps del _meta de esa herramienta, para que tu aplicación pueda encontrar el recurso ui:// que debe renderizar con readMcpResource(). Claude Code transmite el objeto ui y la cadena plana obsoleta ui/resourceUri, y retiene todas las demás claves. Dentro de ui, resourceUri es una cadena ui:// y visibility un array de "model" y "app" cuando el servidor los establece, y cualquier otro miembro pasa sin cambios. Claude Code descarta cualquiera de las dos claves cuando el valor está mal formado, y omite _meta de una herramienta que no declara ninguna. El campo está presente solo cuando las capabilities del mensaje de inicialización incluyen mcp_tool_ui_meta_v1, y requiere TypeScript Agent SDK v0.3.280 o posterior.
McpServerStatusConfig
La configuración de un servidor MCP tal como la reporta mcpServerStatus(). Esta es la unión de todos los tipos de transporte de servidor MCP.
McpServerConfig para ver detalles sobre cada tipo de transporte.
AccountInfo
Información de cuenta del usuario autenticado.
ModelUsage
Estadísticas de uso por modelo devueltas en mensajes de resultado. El valor costUSD es una estimación del lado del cliente. Consulta Rastrear costo y uso para ver advertencias sobre facturación.
thinkingTokens cuenta los tokens de pensamiento que generó este modelo. outputTokens ya los incluye, así que no sumes los dos. El campo está ausente hasta que un turno se ejecuta en una versión de Claude Code que lo registra, por lo que una sesión reanudada que comenzó en una versión anterior reporta un recuento parcial. thinkingTokens requiere Agent SDK v0.3.257 o posterior.
Los campos canonicalModel y provider requieren Claude Code v2.1.218 o posterior. canonicalModel es el ID de modelo canónico que usa la búsqueda de precios; puede diferir de la cadena de modelo sin procesar que sirve de clave a la entrada, por ejemplo cuando esa cadena es un ID específico del proveedor o un alias.
provider nombra el backend de API que sirvió el modelo, como firstParty, bedrock, vertex, foundry, anthropicAws, mantle o gateway.
costBasis nombra la tabla de precios que fijó el precio de la solicitud más reciente del modelo: list para precio de lista, managed para una tabla modelPricing, o unknown cuando ninguna coincidió con el ID del modelo. El campo requiere Claude Code v2.1.246 o posterior.
ConfigScope
NonNullableUsage
Una versión de Usage con todos los campos anulables convertidos en no anulables, excepto fallback_credit, que todavía puede ser null.
Usage
Estadísticas de uso de tokens. Este es el tipo BetaUsage de @anthropic-ai/sdk.
BetaServerToolUsage, BetaIterationsUsage, BetaOutputTokensDetails y BetaFallbackCreditUsage se definen en @anthropic-ai/sdk.
output_tokens_details desglosa la salida facturada por categoría. Actualmente lleva un campo, thinking_tokens: number, que cuenta los tokens de salida que el modelo generó como razonamiento interno, incluidos los delimitadores de bloque de pensamiento. El campo output_tokens_details requiere TypeScript SDK v0.3.228 o posterior, que incluye Claude Code v2.1.228.
- Facturación: lee el desglose para observabilidad, no para facturación.
output_tokenssigue siendo el total de referencia, youtput_tokens - thinking_tokensaproxima la salida sin razonamiento. - Qué cubre el recuento: el razonamiento sin procesar que produjo el modelo, que puede ser más largo que el texto de pensamiento devuelto en el cuerpo de la respuesta. La API lo calcula volviendo a tokenizar ese texto sin procesar, por lo que puede diferir en algunos tokens del recuento exacto de generación del modelo.
- Streaming: en los mensajes de asistente enviados en streaming, este desglose, al igual que
output_tokens, es un marcador de posición demessage_starty no lleva un recuento real, así que léelo delusagedel mensaje de resultado como se describe en Leer tokens de salida del mensaje de resultado. En el mensaje de resultado,thinking_tokensvale0cuando el modelo o el proveedor no reporta desglose. - Casos
null:output_tokens_detailsen sí esnullen mensajes de asistente que Claude Code sintetiza, como los mensajes de error de la API.
Usage lleve fallback_credit depende de tu @anthropic-ai/sdk instalado, que lo agregó en 0.115.0.
CallToolResult
Tipo de resultado de herramienta MCP (de @modelcontextprotocol/sdk/types.js). structuredContent es un objeto JSON que se puede devolver junto con content, incluidos bloques de imagen. Consulta Devolver datos estructurados.
SDKMcpResourceLink
Un archivo que una herramienta MCP devolvió por referencia. Claude Code crea cada entrada a partir de un bloque resource_link en el resultado de la herramienta y entrega la lista como resourceLinks en SDKUserMessage.tool_use_result, o como resource_links en SDKTaskNotificationMessage cuando la llamada terminó en segundo plano. Requiere Agent SDK v0.3.257 o posterior.
uri o name no sea una cadena, y omite un campo opcional cuyo valor no sea del tipo indicado.
ThinkingConfig
Controla el comportamiento de pensamiento/razonamiento de Claude. Tiene precedencia sobre el obsoleto maxThinkingTokens.
display controla si el texto de pensamiento se devuelve "summarized" u "omitted". En Claude Opus 4.7 y posterior, el valor predeterminado de la API es "omitted", así que establece "summarized" para recibir contenido de pensamiento en bloques thinking. Claude Code no pasa tu valor de display a algunos proveedores, como Amazon Bedrock y Agent Platform de Google Cloud. En esos proveedores, Opus 4.7 y posterior devuelven bloques thinking vacíos incluso cuando estableces display en "summarized".
SpawnedProcess
Interfaz para la creación personalizada de procesos (se usa con la opción spawnClaudeCodeProcess). ChildProcess ya satisface esta interfaz.
SpawnOptions
Opciones que se pasan a la función de creación personalizada.
El campo
signal le indica a tu función de creación cuándo desmontar el proceso. Pásalo como la opción signal al spawn() de Node, o pásalo a tu controlador de desmontaje de VM o contenedor.Esta señal no se activa en el instante en que Options.abortController aborta. El SDK primero cierra el stdin del proceso y espera unos dos segundos para que la CLI se cierre limpiamente, y luego aborta esta señal. Para reaccionar en cambio en el momento en que el llamador aborta, escucha tu propio Options.abortController.signal, al que tu función de creación puede hacer referencia desde su alcance envolvente.McpSetServersResult
Resultado de una operación setMcpServers().
setMcpServers(), Claude Code aplica estas reglas:
- Servidores que la llamada no nombra: fuera de una sesión en la nube, Claude Code desconecta los servidores que agregó una llamada anterior a
setMcpServers()y los servidores SDK en proceso, y los enumera enremoved. Los demás servidores siguen en ejecución y no se enumeran enremoved, entre ellos los servidores stdio, HTTP y SSE de la opciónmcpServers, los servidores de los archivos de configuración y los servidores proporcionados por plugins. - Servidores que la llamada nombra: Claude Code reemplaza un servidor stdio, HTTP o SSE que agregó una llamada anterior a
setMcpServers()solo cuando su configuración difiere de la que pasaste. Un servidor SDK en proceso ya registrado con ese nombre se queda como está, así que para cambiarlo, déjalo fuera de una llamada y agrégalo en la siguiente. - Servidores integrados que la CLI inició al arrancar: si la llamada nombra uno, Claude Code descarta esa entrada y la reporta en
errors.
added enumera los servidores que Claude Code agregó o reemplazó, se hayan conectado o no. Un servidor que no logró conectarse aparece tanto en added como en errors, con el texto del error en errors y una fila failed en mcpServerStatus(). Antes de Claude Code v2.1.257, un servidor cuyo intento de conexión lanzó una excepción se reportaba solo en errors.
RewindFilesResult
Resultado de una operación rewindFiles().
skippedLinks cuenta las rutas rastreadas que el rebobinado se negó a restaurar o eliminar por seguridad de enlaces: un enlace simbólico, un enlace duro u otro archivo no regular en la ruta rastreada, un directorio padre que ya no se resuelve a donde apuntaba cuando se tomó el checkpoint, o una copia de seguridad que no se pudo leer de forma segura. El campo requiere Claude Code v2.1.216 o posterior. Una llamada de vista previa con rewindFiles(userMessageId, { dryRun: true }) nunca lo establece.
SDKStatusMessage
Mensaje de actualización de estado (por ejemplo, compactación).
SDKTaskNotificationMessage
Notificación cuando una tarea en segundo plano se completa, falla o se detiene. Las tareas en segundo plano incluyen comandos Bash con run_in_background, vigilancias de Monitor y subagentes en segundo plano. Para los campos run_id y ambient, consulta SDKTaskStartedMessage, que los define junto con sus requisitos de versión.
reason se establece cuando una tarea termina por una causa distinta de su propia finalización, fallo o detención, y requiere Agent SDK v0.3.273 o posterior. Claude Code lo establece solo en sesiones que se conectan a través de claude.ai: sesiones en la nube, incluidas las que se ejecutan en runners autohospedados, y sesiones de Remote Control. Una llamada local a query() nunca lo establece. Su único valor, worker_restart, significa que el proceso de Claude Code que ejecutaba la tarea se reinició. La notificación lleva el estado "stopped", así que trata la tarea como ni completada ni fallida.
Cuando Claude Code mueve una llamada a herramienta MCP larga a segundo plano, el bloque tool_result de esa llamada contiene solo un marcador de posición y el resultado real de la llamada llega en esta notificación. Asocia la notificación con la llamada mediante tool_use_id. En una notificación completed, resource_links enumera los archivos que la herramienta devolvió por referencia como entradas SDKMcpResourceLink, con los mismos límites de 50 enlaces y 64 KiB que tool_use_result.resourceLinks. Claude Code omite resource_links cuando el resultado no tenía enlaces y en notificaciones de tareas que no son llamadas a herramientas MCP. resource_links requiere Agent SDK v0.3.257 o posterior.
Claude Code antepone un aviso a cada notificación de tarea que envía al modelo, excepto en las entregas marcadas con el subtipo scheduled-trigger, que en su lugar llevan un encuadre de tarea asignada. El aviso indica que no ha habido ninguna entrada humana, para que el modelo no trate la notificación como una instrucción o aprobación del usuario.
Para detectar un turno de notificación de tarea, comprueba origin.kind === "task-notification" en el SDKUserMessage o el SDKResultMessage en lugar de buscar coincidencias con el texto del aviso. Lee subkind del mismo campo si necesitas saber qué lo originó. Antes de v2.1.205, Claude Code no incluía el aviso en las notificaciones que llegaban mientras la sesión estaba inactiva.
SDKToolUseSummaryMessage
Resumen del uso de herramientas en una conversación.
SDKHookStartedMessage
Se emite cuando un hook comienza a ejecutarse.
Claude Code entrega este mensaje, SDKHookProgressMessage y SDKHookResponseMessage al flujo de mensajes de inmediato, incluso mientras un hook SessionStart o Setup todavía se está ejecutando durante el inicio de la sesión. Claude Code v2.1.169 a v2.1.203 entregaba estos mensajes en un solo lote después de que un hook SessionStart o Setup se completaba; v2.1.204 restauró la entrega en vivo.
SDKHookProgressMessage
Se emite mientras un hook se está ejecutando, con la salida de stdout/stderr.
SDKHookResponseMessage
Se emite cuando un hook termina de ejecutarse.
SDKToolProgressMessage
Se emite periódicamente mientras se ejecuta una herramienta para indicar el progreso.
tool_progress cada 30 segundos con heartbeat: true. Cada latido lleva el nombre de la herramienta y los segundos transcurridos, para que puedas distinguir una llamada de larga duración de una sesión estancada. Claude Code no emite latidos para llamadas a herramientas dentro de un subagente. El campo heartbeat requiere Agent SDK v0.3.214 o posterior. Antes de v2.1.257, Claude Code tampoco emitía latidos para una llamada a la herramienta Agent en primer plano.
En los mensajes tool_progress de la herramienta Agent que no son latidos, subagent_type nombra el tipo de subagente en ejecución, como general-purpose. subagent_retry está presente mientras ese subagente espera el retroceso tras un error de API, como un rate limit o una sobrecarga, con un mensaje por intento de reintento. Ambos campos requieren Agent SDK v0.3.214 o posterior.
Para renderizar un indicador de reintento a partir de subagent_retry:
- Rastrea el indicador por
parent_tool_use_id, que es único por subagente.tool_use_idlo comparten los subagentes paralelos de un mismo turno de asistente, así que rastrear por él permitiría que la actualización de un subagente borre el indicador de otro. - Borra el indicador cuando llegue un
tool_progressposterior para el mismoparent_tool_use_idsinsubagent_retryniheartbeat: true, o cuando llegue el mensaje de resultado de la herramienta. Los frames conheartbeat: truesolo informan que el proceso sigue activo, así que conserva el indicador cuando llegue uno.attemptpuede superarmax_retriescon reintento persistente, así que no determines el borrado a partir de los contadores. - Trata
error_categorycomo un token para elegir tu propio texto de mensaje, no como texto para mostrar. Los valores sonrate_limit,overloaded,authentication_failed,server_error,cloud_credential_erroryunknown. Maneja un valor que no reconozcas igual queunknown, porque versiones posteriores pueden agregar valores.
SDKAuthStatusMessage
Se emite durante los flujos de autenticación.
SDKTaskStartedMessage
Se emite cuando comienza una tarea. El campo task_type es "local_bash" para comandos Bash y vigilancias de Monitor, "local_agent" para subagentes, o "remote_agent".
run_id identifica una ejecución de la tarea. Cuando una tarea se ejecuta de nuevo con el mismo task_id, como un subagente que Claude reanuda, la nueva ejecución obtiene un nuevo run_id. El campo requiere Agent SDK v0.3.292 o posterior. Úsalo para distinguir las ejecuciones de una misma tarea:
- Asociar mensajes a una ejecución: los mensajes
task_started,task_progress,task_updatedytask_notificationde una ejecución llevan el mismorun_id. La entrada de la ejecución en cadaSDKBackgroundTasksChangedMessagetambién lo lleva, al igual que elrunIden el origen del mensaje de usuario que entrega la notificación de la ejecución. - Detectar un mensaje tardío: comparados como cadenas simples, los ID de ejecución de una tarea se ordenan en el orden en que comenzaron las ejecuciones, así que un mensaje cuyo
run_idse ordena antes de la ejecución que estás mostrando proviene de una ejecución anterior. Trata el valor como opaco fuera de esa comparación. - Recurrir a
task_id: cuando un mensaje no llevarun_id, como eltask_notificationque emite una sesión reanudada para cerrar una tarea que inició el proceso anterior, atribúyelo portask_id.
task_started comparten un task_id, y la notificación que terminó la primera ejecución lleva el ID de la primera ejecución:
ambient es true para tareas que no forman parte del trabajo de la sesión, como las tareas que Claude Code ejecuta para su propio funcionamiento. Los vigilantes de actualización en vivo también son ambientales, incluidos los que pidió el usuario. Excluye las tareas ambientales de los indicadores de actividad. El campo requiere Agent SDK v0.3.247 o posterior.
ambient también aparece en SDKTaskNotificationMessage y en las entradas de SDKBackgroundTasksChangedMessage.
is_backgrounded y spawn_depth describen cómo Claude Code inició la tarea. Ambos campos requieren Agent SDK v0.3.238 o posterior.
is_backgrounded: Claude Code lo establece en tareas"local_agent"y"local_bash".truesignifica que la tarea se ejecuta en segundo plano.falsesignifica que la tarea se ejecuta en primer plano, y la llamada a herramienta que la inició permanece bloqueada hasta que la tarea termine o pase a segundo plano.spawn_depth: Claude Code lo establece solo en tareas"local_agent". Un subagente creado por el hilo principal tiene profundidad1. Un subagente creado por un subagente de profundidad1tiene profundidad2, y así sucesivamente.
is_backgrounded: true, porque Claude Code ejecuta todos los subagentes reanudados en segundo plano. Cuando una tarea en primer plano pasa más tarde a segundo plano, Claude Code reporta el nuevo valor de is_backgrounded en un mensaje task_updated en lugar de enviar un segundo task_started.
parent_task_id contiene el task_id del subagente que lanzó esta tarea. Úsalo para agrupar cada tarea bajo el subagente que la inició. Claude Code lo establece en tareas de subagente, Bash y Monitor. El campo requiere Agent SDK v0.3.292 o posterior. Está ausente cuando:
- El hilo principal lanzó la tarea
- Claude Code ya no rastrea la tarea padre
- Un compañero de equipo o un agente dentro de un flujo de trabajo lanzó la tarea
SDKTaskProgressMessage
Se emite periódicamente mientras se ejecuta un subagente o una tarea en segundo plano. Para el campo run_id, consulta SDKTaskStartedMessage, que lo define junto con su requisito de versión.
Para una tarea de subagente, el campo summary lleva un resumen de progreso generado por el modelo y solo se completa cuando agentProgressSummaries está habilitado. Para una llamada a herramienta MCP en segundo plano, summary lleva el progreso más reciente reportado por el servidor MCP y no depende de esa opción.
SDKTaskUpdatedMessage
Se emite cuando cambia el estado de una tarea en segundo plano, por ejemplo cuando pasa de running a completed. Combina patch en tu mapa local de tareas indexado por task_id. El campo end_time es una marca de tiempo de época Unix en milisegundos, comparable con Date.now(). Para el campo run_id, consulta SDKTaskStartedMessage, que lo define junto con su requisito de versión.
SDKBackgroundTasksChangedMessage
Se emite siempre que cambia el conjunto de tareas en segundo plano activas: una tarea comienza, se completa o se termina, un agente en primer plano pasa a segundo plano, o cambia el campo description, ambient o parent_task_id de una tarea. Para los campos run_id y parent_task_id de cada entrada, consulta SDKTaskStartedMessage, que los define junto con sus requisitos de versión.
El array tasks es el conjunto activo completo. Reemplaza cualquier conjunto en caché con cada payload en lugar de emparejar eventos task_started y task_notification, para que el siguiente cambio de membresía corrija cualquier evento que te hayas perdido.
Cuando una tarea termina, sus mensajes task_updated y task_notification llegan antes del background_tasks_changed que la quita de la lista. Fuera de eso, el orden relativo a los eventos por tarea no está especificado.
No se emite nada al inicio. Restablece a un conjunto vacío cada vez que el proceso de CLI de la sesión se inicie o reinicie, y deja que el siguiente cambio de membresía lo vuelva a llenar.
Cuando envías una solicitud de control initialize repetida a una sesión en ejecución, como con reinitialize() después de una interrupción del transporte, Claude Code envía tras la respuesta una instantánea del conjunto activo actual, incluso cuando está vacío. Así, un host que se reconecta sabe qué se está ejecutando sin esperar al siguiente cambio de membresía. Antes de Agent SDK v0.3.239, Claude Code no enviaba ninguna instantánea después de un initialize repetido.
Requiere Claude Code v2.1.203 o posterior.
subagent_type nombra el tipo de subagente en las entradas cuyo task_type es "local_agent", como general-purpose o el nombre de un subagente personalizado. El campo requiere Agent SDK v0.3.293 o posterior.
SDKThinkingTokensMessage
Se emite mientras Claude produce un bloque de pensamiento, incluido uno redactado. estimated_tokens es una estimación acumulada de los tokens de pensamiento generados hasta el momento en el bloque actual, y estimated_tokens_delta es el incremento que lleva este frame. Usa estas estimaciones para mostrar el progreso.
Cuando el modelo o el proveedor reporta un desglose, el recuento final del bucle de agente de nivel superior es el usage.output_tokens_details.thinking_tokens del mensaje de resultado, que no incluye tokens de subagentes.
Requiere Claude Code v2.1.153 o posterior.
SDKSessionStateChangedMessage
Se emite cuando Claude Code reporta el estado de la sesión. Para recibir estos mensajes, establece CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1. Claude Code puede reportar el mismo estado más de una vez, así que interpreta un mensaje como el estado actual de la sesión y no como una transición.
El campo state lleva uno de estos valores:
running: la sesión está trabajando.idle: Claude Code está esperando tu siguiente prompt.requires_action: la sesión está bloqueada a la espera de una respuesta a una solicitud que envió a tu host, como una solicitud de permiso.
idle de un turno y su mensaje result pueden llegar en cualquier orden. Para cambiar si idle espera el trabajo en segundo plano, como un subagente en segundo plano o una ejecución de un flujo de trabajo, consulta CLAUDE_CODE_BG_TASKS_REPORT_RUNNING.
SDKFilesPersistedEvent
Se emite cuando los checkpoints de archivos se guardan en el disco.
SDKRateLimitEvent
Se emite cuando la sesión encuentra un rate limit.
errorCode es "credits_required", el rechazo proviene de una suscripción de claude.ai cuyo uso incluido se ha agotado, y la sesión no puede continuar hasta que el usuario compre créditos de uso. canUserPurchaseCredits indica si el usuario autenticado puede comprar créditos para la cuenta, y hasChargeableSavedPaymentMethod indica si hay un método de pago guardado registrado. Los tres campos están ausentes en los eventos de rate limit que no son rechazos por créditos requeridos. Requiere Claude Code v2.1.181 o posterior.
SDKLocalCommandOutputMessage
Claude Code no emite este tipo de mensaje. Cuando envías un comando como /context o /usage como prompt, su salida llega como un SDKAssistantMessage.
SDKCommandsChangedMessage
Se emite cuando el conjunto de comandos disponibles cambia a mitad de la sesión, por ejemplo cuando Claude Code descubre skills a medida que el agente entra en un subdirectorio. El array commands es la lista completa actualizada, así que reemplaza cualquier lista de comandos en caché con este payload. Llamar a supportedCommands() después de este mensaje devuelve la misma lista actualizada, porque el método sigue el envío más reciente; esto requiere Agent SDK v0.3.216 o posterior. En versiones anteriores del SDK, supportedCommands() devuelve la instantánea capturada en la inicialización y nunca refleja los cambios a mitad de la sesión.
Claude Code también emite este mensaje cuando los prompts de un servidor MCP entran o salen de la lista, por ejemplo cuando un servidor termina de conectarse después de que comienza la sesión. Esto requiere Claude Code v2.1.281 o posterior.
SDKPromptSuggestionMessage
Se emite después de un turno cuando promptSuggestions está habilitado y Claude Code generó una sugerencia para ese turno. Contiene el siguiente prompt del usuario previsto. Para los turnos que no reciben ninguna, consulta Cuándo Claude Code omite sugerencias.
SDKConversationResetMessage
Se emite cuando la conversación de la sesión se reemplaza sin terminar la sesión. En una llamada a query(), solo /clear y sus alias producen este mensaje. Monta una transcripción vacía bajo new_conversation_id y descarta cualquier título de sesión en caché.
trigger: qué descartó la conversación. Reinicia tu transcripción en cada mensajeconversation_reset, incluido uno en el que este campo esté ausente o lleve un valor que no reconozcas.user_message_uuid: eluuiddel mensaje de usuario que llevaba el/clear. Úsalo para asociar el reinicio con ese mensaje.timestamp: cuándo ocurrió el reinicio, como una cadena ISO 8601 en UTC. Úsalo para mostrarlo, no para ordenar mensajes.
trigger, user_message_uuid y timestamp requieren Claude Code v2.1.281 o posterior.
Las definiciones de tipos publicadas del SDK declaran SDKConversationResetMessage en Claude Code v2.1.203 y posterior. Antes de v2.1.203, SDKMessage hacía referencia al tipo sin declararlo, por lo que el estrechamiento con type === "conversation_reset" no pasaba la verificación de tipos cuando skipLibCheck estaba deshabilitado.
AbortError
Clase de error personalizada para operaciones de aborto.
AbortError es la única clase de error en la API tipada del SDK. Otros fallos, como que el proceso de Claude Code termine o no logre iniciarse, rechazan la iteración de mensajes con errores que no tienen ninguna clase del SDK con la que comparar. Solución de problemas organiza esos errores por mensaje, con la causa y la solución de cada uno.
Configuración de Sandbox
SandboxSettings
Configuración para el comportamiento de sandbox. Use esto para habilitar el sandboxing de comandos y configurar restricciones de red mediante programación.
El sandbox depende de la compatibilidad de la plataforma y, en Linux, de herramientas como
bubblewrap y socat. Cuando enabled es true y el sandbox no puede iniciarse, query() reporta un mensaje result con subtype: "error_during_execution" y la razón en errors. Para una única llamada a query(), el SDK lanza después de ceder ese resultado de error, así que envuelva el bucle en un bloque try para continuar más allá. Consulte Manejar el resultado para el contrato de error.Para ejecutar sin sandbox en su lugar, establezca failIfUnavailable: false.Ejemplo de uso
SandboxNetworkConfig
Configuración específica de red para el modo sandbox. Estas configuraciones se aplican a comandos Bash en sandbox cuando enabled es true en la SandboxSettings principal. No restringen la herramienta WebFetch, que utiliza reglas de permisos en su lugar.
El proxy de sandbox integrado aplica
allowedDomains basándose en el nombre de host solicitado y no termina ni inspecciona el tráfico TLS, por lo que técnicas como domain fronting potencialmente pueden omitirlo. Consulte Limitaciones de seguridad de sandboxing para obtener detalles y Implementación segura para configurar un proxy que termine TLS.SandboxFilesystemConfig
Configuración específica del sistema de archivos para el modo sandbox.
Fallback de Permisos para Comandos Sin Sandbox
CuandoallowUnsandboxedCommands está habilitado, el modelo puede solicitar ejecutar comandos fuera del sandbox estableciendo dangerouslyDisableSandbox: true en la entrada de herramienta. Estas solicitudes se vuelven al sistema de permisos existente, lo que significa que se invoca su controlador canUseTool, permitiéndole implementar lógica de autorización personalizada.
Sus entradas excludedCommands en su lugar omiten el sandbox sin participación del modelo; sandbox.excludedCommands cubre cuándo se aplica una entrada.
En el ejemplo siguiente, isCommandAuthorized representa una verificación de autorización que usted define.
Ver también
- Descripción general del SDK - Conceptos generales del SDK
- Referencia del SDK de Python - Documentación del SDK de Python
- Referencia de CLI - Interfaz de línea de comandos
- Flujos de trabajo comunes - Guías paso a paso