Skip to main content

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 con bun 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 objeto Query 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 una Promise<WarmQuery> que se resuelve una vez que el subproceso se ha generado y ha completado su protocolo de inicialización.

Ejemplo

Llama a startup() 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 por lastModified 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:
  • sessionId no es un UUID
  • no se puede encontrar la sesión, o no tiene mensajes
  • upToMessageId no 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.
La instantánea difiere de lo que aplica una sesión query() activa:
  • policyHelper: resolveSettings() lee fuentes MDM, incluidas plist de macOS y HKLM/HKCU de Windows, pero no ejecuta el subproceso policyHelper configurado por el administrador.
  • Configuración administrada por servidor: resolveSettings() no obtiene la configuración administrada por servidor. Pásala como options.serverManagedSettings para incluirla.
  • defaultMode: la instantánea devuelve permissions.defaultMode tal 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 establece cleanupPeriodDays, 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ón env:
  • API_TIMEOUT_MS: tiempo de espera por solicitud en el cliente de Anthropic, en milisegundos. Valor predeterminado 600000. 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 de 15. Cada reintento obtiene su propio intervalo de API_TIMEOUT_MS. Para ejecuciones desatendidas que necesitan esperar durante interrupciones más largas, establece CLAUDE_CODE_RETRY_WATCHDOG=1: reintenta indefinidamente los errores transitorios de capacidad y, en Claude Code v2.1.199 o posterior, eleva a 300 el 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 es CLAUDE_STREAM_IDLE_TIMEOUT_MS más 5 minutos, lo que da 600000 a menos que aumentes esa variable. Con el watchdog del stream desactivado, el valor predeterminado es 600000. Antes de v2.1.257, el valor predeterminado siempre era 600000. 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_WATCHDOG con CLAUDE_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; establece CLAUDE_ENABLE_STREAM_WATCHDOG=0 para desactivarlo. CLAUDE_STREAM_IDLE_TIMEOUT_MS tiene como valor predeterminado 300000 y 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 de ANTHROPIC_BASE_URL mantiene abierta con pings de keep-alive, un host que establece includePartialMessages sigue recibiendo eventos de stream ping, 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. Cambiar agent tambié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 cambias model mientras 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: null devuelve la sesión al nivel de esfuerzo predeterminado del modelo, no a la opción effort de query() ni a un effortLevel de un archivo de configuración.
  • agent: null ejecuta el hilo principal sin agente a partir del siguiente turno, en lugar de restaurar la opción agent de query() o un agent de 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: null desactiva ultracode, igual que false, en lugar de restaurar un valor de ultracode de un archivo de configuración. La sesión conserva su nivel de esfuerzo actual, así que pasa effortLevel en la misma llamada para cambiarlo.
Solo está disponible en el modo de entrada en streaming, la misma restricción que 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": acepta outputStyle y 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": acepta effortLevel y lo guarda como el nivel de esfuerzo predeterminado para el modelo actual de la sesión, bajo modelSettings en tu archivo de configuración de usuario. Pasar max no escribe nada, porque max es solo para la sesión. En cualquier caso, la sesión en ejecución conserva su nivel de esfuerzo actual, así que llama a applyFlagSettings() cuando también quieras cambiarlo. Esta fuente requiere TypeScript SDK v0.3.277 o posterior, que incluye Claude Code v2.1.277.
La llamada se rechaza cuando la solicitud lleva cualquier otra clave, cuando la sesión se ejecuta sobre un transporte remoto y cuando las 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 en mcpServers o con setMcpServers(): 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 devuelve true. 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.
Antes de Agent SDK v0.3.238, la respuesta nunca llevaba el campo, y Claude Code ignoraba 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 undefined y estableciste pathToClaudeCodeExecutable, apúntalo a Claude Code v2.1.296 o posterior.
La respuesta siempre informa 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.
Un cliente que controla directamente el protocolo de control de la CLI, en lugar de hacerlo mediante 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.
Cuando envías /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.
Lee la atribución de tokens en los campos de colección:
  • categories contiene los totales por categoría. El kind de cada entrada clasifica la fila con los mismos valores que SDKContextUsageCategory. Clasifica las filas según este campo y no según el name de visualización. El campo requiere Agent SDK v0.3.268 o posterior.
  • mcpTools y agents atribuyen tokens a herramientas MCP y subagentes individuales.
  • memoryFiles enumera cada archivo de memoria cargado con su costo.
  • skills.skillFrontmatter atribuye 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. Compara skills.totalSkills con skills.includedSkills para 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 cwd y additionalDirectories
  • Algunos de los propios archivos de Claude Code para la sesión, como los resultados de herramientas
Las reglas de denegación y de consulta de 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().
Los campos de colección describen la sesión después de la llamada:
  • commands, agents y mcpServers: los comandos, los subagentes y el estado de los servidores MCP de la sesión, con las mismas formas que devuelven supportedCommands(), supportedAgents() y mcpServerStatus(). supportedAgents() sigue devolviendo la lista capturada en la inicialización, así que lee agents aquí para obtener el conjunto después de una recarga
  • plugins: cada plugin cargado con su name y su path de instalación. version repite 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 ninguna
  • error_count: el número de errores al cargar los plugins
Pasa { 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_impact indica qué cambiaría al aplicarla. Para aplicarla de todos modos, vuelve a llamar a reloadPlugins() 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.
Pasa a 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.
Donde 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

Cuando settingSources 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:
Cargar solo fuentes de configuración específicas:
Para cargar las instrucciones del proyecto de CLAUDE.md, incluye "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):
  1. Configuración local (.claude/settings.local.json)
  2. Configuración del proyecto (.claude/settings.json)
  3. Configuración del usuario (~/.claude/settings.json)
Las opciones programáticas como 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:
Para obtener información completa sobre cómo crear y usar plugins, consulta Plugins.

Tipos de Mensajes

SDKMessage

Tipo de unión de todos los mensajes posibles devueltos por la consulta.

SDKAssistantMessage

Mensaje de respuesta del asistente.
El campo 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
Un token de 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.
Establece 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.
Establece shouldQuery, client_composed o priority para cambiar cómo Claude Code maneja un mensaje que envías:
  • shouldQuery: establécelo en false para 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 en true para que Claude Code entregue el texto del mensaje tal como está escrito. Claude Code entonces no expande las menciones @path ni @server:resource, y no ejecuta como comando el texto que empieza con /. Mientras la opción verbatimPrompts está 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 campo priority: 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' con origin: { 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.
Este mensaje, enviado mientras un turno está en curso, le pide a Claude que cambie de rumbo sin perder un comando de shell que todavía se está ejecutando:
Un mensaje de usuario que produce un subagente, como el 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_result es AgentOutput. Renderiza a partir de él en lugar de analizar el texto de tool_result. El content de un resultado completed contiene el informe del subagente o, para un subagente cuyo informe pasa por una llamada a la herramienta SubagentHandback, 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 resultado completed informa 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 el tool_result de esa llamada tiene tool_use_result establecido en { detachedToolCall: true }. La llamada sigue ejecutándose, y Claude recibe su resultado una vez que termina. No llega un segundo tool_result para ese tool_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_result es un objeto con un arreglo resourceLinks de entradas SDKMcpResourceLink. Claude recibe cada enlace como una línea de texto en el bloque tool_result, así que lee resourceLinks para renderizar los archivos que devolvió el servidor en lugar de analizar ese texto. Claude Code omite resourceLinks cuando 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. resourceLinks requiere Agent SDK v0.3.257 o posterior.
  • Una herramienta MCP que devuelve structuredContent: tool_use_result es un objeto cuyo miembro structuredContent contiene lo que envió el servidor y cuyo miembro content contiene el valor McpOutput. Los resultados de subagentes no llevan structuredContent.
  • Una herramienta MCP cuyo structuredContent se serializa en más de 1,048,576 caracteres de JSON: Claude Code deja structuredContent fuera de tool_use_result y establece structuredContentOmitted: true en su lugar, para que tu aplicación pueda distinguir un objeto descartado de una herramienta que no envió ninguno. Los demás miembros, como content y resourceLinks, 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/list declara un recurso ui:// 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.
Un turno de usuario inyectado desde fuera de la sesión, es decir, uno cuyo tipo de 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.
Varios campos del resultado llevan detalles de diagnóstico más allá de subtype:
  • api_error_status: el código de estado HTTP del error de API que terminó la conversación. Ausente o null cuando 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 streaming message_start, cuando se abre el stream de respuesta. Es menor que ttft_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: el uuid del mensaje que enviaste y que este turno respondió. Consulta user_message_uuid para saber qué resultados lo llevan.
  • user_message_uuids: los uuid de cada mensaje que enviaste y que Claude Code respondió en este turno. Consulta user_message_uuids.
  • resume_reason: por qué este turno continúa uno que un reinicio interrumpió. Presente en ambas ramas. Consulta resume_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-plugins reporta reload_plugins. Un comando que proporciona un servidor MCP, y el /mcp integrado, reportan mcp. Un comando que definiste tú mismo reporta custom. 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 con user_message_uuid, en un resultado de éxito con is_error en false cuyo turno envió una solicitud de API.
  • first_content_frame_ms: tiempo en milisegundos hasta el primer evento de streaming content_block_start o content_block_delta, contando los bloques de pensamiento como contenido. Presente solo en la rama de éxito, cuando is_error es 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 produce query() 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. Prefiere modelUsage para 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 a query(), 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 que modelUsage y 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 con origin: { kind: "human" } que aún están esperando cuando Claude Code produjo el resultado. Consulta queued_turn_count para saber qué te indican 0 y 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 resultado error_during_execution que escribe antes de salir ante un fallo de inicio conocido. Consulta startup_failure_reason para 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 reporta fast_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.
Usa el código de razón para explicar en tu propia interfaz por qué el modo rápido está desactivado, en lugar de volver a deducir la disponibilidad. Cada código nombra la verificación que bloqueó el modo rápido: 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 el uuid del último mensaje. Para asociar la respuesta con cualquiera de los mensajes fusionados, usa user_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 el uuid de 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_reason distingue 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.
Claude Code devuelve el 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 cuyo event.type no es ping, 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, con includePartialMessages, 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_tokens del 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.
Claude Code omite el campo en estos casos:
  • 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.
El valor es un token corto en minúsculas, como 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 ese origin, 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_unverified o worktree_resume_refused. Esa sección indica qué error lleva cada valor.
  • Un continue rechazado de una conversación que retiene una sesión en segundo plano, con session_held_by_background. Para un resume rechazado de esa conversación, Claude Code escribe el resultado solo cuando la variable está establecida.
Cada valor nombra un rechazo:

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.
  • source en cada entrada de mcp_servers: de dónde proviene la definición del servidor, con los mismos valores que el source de McpServerStatus. 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, o null cuando 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.
La matriz 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.
Claude Code establece 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 canUseTool y el valor predeterminado permissionPrompts: '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 -p simple, o un query() que no establece canUseTool ni permissionPromptToolName, deniega cualquier llamada a herramienta que habría pedido permiso, a menos que un hook PermissionRequest la 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 permissionPromptToolName o con el flag --permission-prompt-tool, y el valor predeterminado permissionPrompts: '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á establecido canUseTool o 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.
En cualquier configuración, este evento omite toda denegación decidida en la ruta del hook 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.
La tabla enumera lo que Claude Code pone en cada campo. Los campos desde 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 solicitudes
  • compaction_window: la ventana es una ventana de la política de compactación, que puede coincidir o no con el límite del modelo
Claude Code hace evolucionar el tipo de forma aditiva, añadiendo datos nuevos como campos opcionales en lugar de reestructurar los existentes. Lee los campos que conoces e ignora los que no reconozcas.

SDKContextUsageCategory

Una fila del desglose de uso por categoría de /context.
La tabla enumera lo que Claude Code pone en cada campo de una fila. Cada valor de kind indica qué son los tokens de la fila:
  • used: contenido que ocupa la ventana de contexto
  • free: la ventana restante
  • buffer: la reserva para la compactación
  • deferred: 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.
Los campos de nivel superior son session y rate_limits:
  • session: los totales acumulados de costo y uso de Claude Code, leídos del mismo registro contable que total_cost_usd y modelUsage en SDKResultMessage. Cada entrada de model_usage es un ModelUsage.
  • rate_limits: las filas de uso del plan en limits y el gasto de créditos de uso en extra_usage. Es null cuando Claude Code no pudo obtener el uso del plan, por ejemplo cuando el token OAuth de la sesión no tiene el alcance user:profile.
Claude Code calcula 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.
  • null significa que Claude Code no tiene filas que reportar.
Cada fila de 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_limit es null cuando esta cuenta no tiene un tope de gasto propio. En los planes Team y Enterprise, no muestres null como ilimitado.
  • is_enabled es false mientras 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, establece subkind 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 herramienta send_message del lado del servidor que usan las sesiones en la nube para enviarse mensajes entre sí, no con la herramienta SendMessage entre 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 de send_message que los servidores no verificaron de esa forma no recibe ningún subkind.
Todas las demás notificaciones de tarea no tienen 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 con CLAUDE_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 origen peer 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 y from es "unknown". El valor lo escribe el remitente; verifiedPeerPid es la identidad verificada.
  • fromMode: la clase de permisos de la sesión que envía, bypass o prompting, 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. Muestra name y body en lugar de volver a analizar el texto del mensaje. Antes de la v2.1.299, los mensajes combinados conservaban el body del 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 que from, 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 no from, para identificar al remitente: cualquier proceso del mismo usuario puede falsificar from. 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.
El campo 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.
Lanza un nuevo agente para manejar tareas complejas de múltiples pasos de forma autónoma.

AskUserQuestion

Nombre de herramienta: AskUserQuestion
Hace preguntas aclaratorias al usuario durante la ejecución. Consulta Manejar aprobaciones y entrada del usuario para detalles de uso.

Bash

Nombre de herramienta: Bash
Ejecuta comandos Bash con tiempo de espera opcional y ejecución en segundo plano. El directorio de trabajo persiste entre comandos, incluyendo comandos ejecutados en turnos posteriores de una sesión de múltiples turnos; el estado del shell como variables de entorno exportadas no. Para los límites sobre qué cambios de directorio se mantienen, consulta Lo que persiste entre comandos. Para lo que establece el límite de primer plano, consulta Límites de tiempo de espera y salida. Para el límite de tiempo en segundo plano, consulta Límite de tiempo para comandos en segundo plano.

Monitor

Nombre de herramienta: Monitor
Ejecuta una fuente en segundo plano y entrega cada evento a Claude para que pueda reaccionar sin sondeo: 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 tipo TaskOutputInput. 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
Realiza reemplazos de cadena exactos en archivos.

Read

Nombre de herramienta: Read
Lee archivos del sistema de archivos local, incluyendo texto, imágenes, PDFs y cuadernos Jupyter.
  • Usa pages para rangos de páginas PDF (por ejemplo, "1-5").
  • allow_large permite 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.
Para un PDF, Claude recibe el contenido del archivo dentro del contenido 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
Escribe un archivo en el sistema de archivos local, sobrescribiendo si existe.

Glob

Nombre de herramienta: Glob
Coincidencia de patrón de archivo rápida que funciona con cualquier tamaño de base de código.

Grep

Nombre de herramienta: Grep
Herramienta de búsqueda construida sobre ripgrep con soporte de expresiones regulares.

TaskStop

Nombre de herramienta: TaskStop
Detiene una tarea en segundo plano en ejecución o un shell por ID. A partir de v2.1.198, 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
Edita celdas en archivos de cuaderno Jupyter.

WebFetch

Nombre de herramienta: WebFetch
Obtiene contenido de una URL y lo procesa con un modelo de IA. 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
Busca en la web y devuelve resultados formateados.

Workflow

Nombre de herramienta: Workflow
Ejecuta un flujo de trabajo dinámico: un script que orquesta muchos subagentes en segundo plano y devuelve un resultado consolidado. La herramienta 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
Crea y gestiona una lista de tareas estructurada para rastrear el progreso.
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:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Dondequiera que las herramientas estén disponibles, Claude Code proporciona las cuatro herramientas Task, o 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
Crea una única tarea y devuelve su ID asignado.

TaskUpdate

Nombre de herramienta: TaskUpdate
Modifica una tarea por ID. Establece status en "deleted" para eliminarla.

TaskGet

Nombre de herramienta: TaskGet
Devuelve detalles completos para una tarea, o null cuando el ID no se encuentra.

TaskList

Nombre de herramienta: TaskList
Devuelve una instantánea de todas las tareas en la lista actual.

ExitPlanMode

Nombre de herramienta: ExitPlanMode
Sale del modo plan. El campo 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
Enumera recursos MCP disponibles de servidores conectados.

ReadMcpResource

Nombre de herramienta: ReadMcpResourceTool
Lee un recurso MCP específico de un servidor.

EnterWorktree

Nombre de herramienta: EnterWorktree
Crea e ingresa a un worktree git temporal para trabajo aislado. Pasa 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
Sale del worktree git actual y regresa al directorio de trabajo original. La acción 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
Entra en modo plan, donde Claude investiga y presenta un plan antes de hacer cambios.

CronCreate

Nombre de herramienta: CronCreate
Programa un prompt para ejecutarse en un cronograma cron de 5 campos en hora local. Establece 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
Elimina un trabajo cron programado por el ID devuelto desde CronCreate.

CronList

Nombre de herramienta: CronList
Enumera los trabajos cron programados: trabajos duraderos desde .claude/scheduled_tasks.json y trabajos solo de sesión desde la sesión actual.

ScheduleWakeup

Nombre de herramienta: ScheduleWakeup
Programa un despertar de una sola vez que dispara el prompt dado después de un retraso. Esta herramienta respalda el comando /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
Gestiona Rutinas, las ejecuciones de Claude Code programadas y activadas alojadas en la nube. Esta herramienta respalda el comando /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
Envía una notificación push proactiva al usuario. Mantén 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 herramienta REPL experimental podía activarse con CLAUDE_CODE_REPL=1 en la opción env.

ReportFindings

Nombre de herramienta: ReportFindings
Reporta hallazgos de revisión de código como una lista estructurada para que Claude Code pueda renderizarlos en lugar de imprimirlos como texto. Los hallazgos se ordenan de más grave a menos grave, con un máximo de 32 por llamada, y el array está vacío cuando ninguno sobrevivió. Requiere Claude Code v2.1.196 o posterior. 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. El line opcional es la línea indexada en 1 a la que se ancla.
  • summary: declaración de una oración del defecto. failure_scenario describe 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, como correctness o test-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
Publica un archivo .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, como chart o map. 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.
Los tipos se exportan, pero la herramienta está desactivada de forma predeterminada en sesiones de Agent SDK. La publicación también requiere todas las condiciones en la tabla de disponibilidad de artefactos, que las sesiones autenticadas con una clave de API no cumplen.

Projects

Nombre de herramienta: Projects
Lee y escribe el Proyecto de claude.ai adjunto a la sesión. Distribuye según method:
  • project_info: devuelve metadatos del proyecto y la lista de documentos.
  • project_read: lee un documento por path.
  • project_search: consulta la base de conocimiento del proyecto con query. n limita los resultados y tiene como valor predeterminado 5.
  • project_write: crea o reemplaza un documento en path desde exactamente uno de content, que lleva texto en línea, o local_path, que nombra un archivo dentro del directorio de trabajo. present_to_user: true marca el documento escrito como el entregable que el usuario necesita ver.
  • project_delete: elimina un documento por path.

ReadMcpResourceDir

Nombre de herramienta: ReadMcpResourceDirTool
Enumera los hijos directos de un recurso de directorio en un servidor MCP. Solo se puede usar contra un servidor que haya declarado soporte para listado de directorios; el listado no es recursivo. El listado de directorios no está habilitado en todas las sesiones: cuando está desactivado, la llamada devuelve una lista resources vacía y el campo error reporta que el listado de directorios no está habilitado.

RefreshMcpTools

Nombre de herramienta: RefreshMcpTools
Vuelve a consultar la lista de herramientas de servidores MCP conectados y aplica cualquier cambio. Los tipos se exportan, pero Claude Code registra la herramienta solo cuando estableces 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
Renderiza una fila de chips de selección de rol en la que se puede hacer clic durante la incorporación de Cowork para que el usuario pueda elegir su rol y obtener instalado un plugin correspondiente. No toma argumentos; la lista de roles la define el cliente. La llamada se bloquea hasta que el usuario responde.

McpInput

Nombre de herramienta: nombres de herramientas MCP dinámicas de la forma mcp__<server>__<tool>
Los argumentos de herramientas MCP son un objeto abierto: cada servidor define sus propios parámetros, por lo que el tipo no coloca restricciones en nombres de campos o valores. Consulta el esquema de herramientas del propio servidor para los campos que acepta una herramienta específica.

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.
Devuelve el resultado del subagente. Se discrimina por el campo 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
Devuelve las preguntas realizadas y las respuestas del usuario. 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
Los campos 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
Devuelve el ID de la tarea en segundo plano del monitor en ejecución. Usa este ID con TaskStop para cancelar la vigilancia antes de tiempo.

Edit

Nombre de la herramienta: Edit
Devuelve el diff estructurado de la operación de edición.

Read

Nombre de la herramienta: Read
Devuelve el contenido del archivo en un formato adecuado para el tipo de archivo. Se discrimina por el campo type.

Write

Nombre de la herramienta: Write
Devuelve el resultado de la escritura con información de diff estructurado. Lo que contienen originalFile y structuredPatch depende de la escritura:
  • Para un archivo recién creado, originalFile es null y structuredPatch está vacío
  • Al sobrescribir, originalFile contiene el contenido anterior, excepto cuando ese contenido supera aproximadamente 10 MB: en ese caso Claude Code omite el diff y devuelve originalFile null y structuredPatch vacío
  • structuredPatch tambié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
Devuelve las rutas de archivo que coinciden con el patrón glob, ordenadas por fecha de modificación. 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
Devuelve los resultados de la búsqueda. La forma varía según 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
Devuelve una confirmación después de detener la tarea en segundo plano.

NotebookEdit

Nombre de la herramienta: NotebookEdit
Devuelve el resultado de la edición del notebook con el contenido original y actualizado del archivo.

WebFetch

Nombre de la herramienta: WebFetch
Devuelve el contenido obtenido con el estado HTTP y metadatos. 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
Devuelve resultados de búsqueda de la web.

Workflow

Nombre de la herramienta: Workflow
Devuelve inmediatamente después de que la herramienta acepta la invocación. El resultado final llega más tarde como la finalización de una tarea. Revisa 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
Devuelve las listas de tareas anterior y actualizada.
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:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Dondequiera que las herramientas estén disponibles, Claude Code proporciona las cuatro herramientas Task, o 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
Devuelve la tarea creada con su ID asignado.

TaskUpdate

Nombre de la herramienta: TaskUpdate
Devuelve el resultado de la actualización, incluidos los campos que cambiaron.

TaskGet

Nombre de la herramienta: TaskGet
Devuelve el registro completo de la tarea, o null cuando no se encuentra el ID.

TaskList

Nombre de la herramienta: TaskList
Devuelve una instantánea de todas las tareas de la lista actual.

ExitPlanMode

Nombre de la herramienta: ExitPlanMode
Devuelve el estado del plan después de salir del modo plan.

ListMcpResources

Nombre de la herramienta: ListMcpResourcesTool
Devuelve un array de los recursos MCP disponibles.

ReadMcpResource

Nombre de la herramienta: ReadMcpResourceTool
Devuelve el contenido del recurso MCP solicitado.

EnterWorktree

Nombre de la herramienta: EnterWorktree
Devuelve información sobre el worktree de git.

ExitWorktree

Nombre de la herramienta: ExitWorktree
Devuelve la acción realizada y los detalles del worktree del que se salió.

EnterPlanMode

Nombre de la herramienta: EnterPlanMode
Devuelve una confirmación de que se entró en modo plan.

CronCreate

Nombre de la herramienta: CronCreate
Devuelve el ID del trabajo y una descripción legible de la programación.

CronDelete

Nombre de la herramienta: CronDelete
Devuelve el ID del trabajo eliminado.

CronList

Nombre de la herramienta: CronList
Devuelve los trabajos cron programados: los trabajos duraderos de .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
Devuelve cuándo se activará el despertar como una marca de tiempo en milisegundos desde epoch, el retraso realmente usado y si el retraso solicitado se ajustó a los límites. El campo 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
Devuelve el estado y el cuerpo de la respuesta de la API para la operación del disparador.

PushNotification

Nombre de la herramienta: PushNotification
Devuelve los detalles de la entrega, incluido si se envió una notificación push o local y por qué se omitió la entrega.

ReportFindings

Nombre de la herramienta: ReportFindings
Devuelve la cantidad de hallazgos informados, el valor de 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
Para la acción de publicación, devuelve la 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
Se discrimina por el campo 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
Devuelve los hijos directos del recurso de directorio. Los subdirectorios aparecen con mimeType "inode/directory"; error contiene un mensaje legible cuando el servidor no pudo listar el directorio.

RefreshMcpTools

Nombre de la herramienta: RefreshMcpTools
Devuelve una entrada por servidor: 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
Devuelve la selección del usuario: 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 forma mcp__<server>__<tool>
Los resultados de las herramientas MCP se devuelven como una cadena o un array de bloques de contenido, según el servidor. La rama final de objeto simple en el tipo exportado es un residuo de la generación del esquema. Para un resultado que además incluye 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.
Claude Code reporta uno de cuatro valores: 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.
En la Claude API, la beta context-1m-2025-08-07 está retirada para Claude Sonnet 4.5 y Claude Sonnet 4. Si todavía la pasas con cualquiera de esos modelos, las solicitudes que excedan la ventana de contexto estándar de 200K tokens devuelven un error, así que quítala de betas. Para ejecutar una sesión con una ventana de contexto de 1M tokens, establece model en un modelo que se ejecute con la ventana de 1M de forma predeterminada, como claude-sonnet-5-5 o claude-opus-5-5. Para un modelo que alcanza 1M solo a través de su variante [1m], agrega el sufijo al ID del modelo, como en claude-opus-4-6[1m].

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 reporta sdk, sea cual sea su nombre.
  • plugin: un servidor que proporciona un plugin. Su name es la forma con alcance plugin:<plugin-name>:<server-name> descrita en servidores MCP proporcionados por plugins.
  • Un alcance de configuración: user, project, local, dynamic, managed, enterprise, claudeai o agent. Un servidor de .mcp.json reporta project, y alcances de instalación de MCP define local, project y user. Los servidores que tu aplicación pasa en la opción mcpServers, salvo los servidores SDK en proceso, reportan dynamic.
Basa las decisiones de confianza en 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.
Consulta 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_tokens sigue siendo el total de referencia, y output_tokens - thinking_tokens aproxima 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 de message_start y no lleva un recuento real, así que léelo del usage del mensaje de resultado como se describe en Leer tokens de salida del mensaje de resultado. En el mensaje de resultado, thinking_tokens vale 0 cuando el modelo o el proveedor no reporta desglose.
  • Casos null: output_tokens_details en sí es null en mensajes de asistente que Claude Code sintetiza, como los mensajes de error de la API.
Que 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.
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.
Claude Code descarta un bloque cuyo 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.
El campo opcional 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().
Cuando llamas a 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 en removed. Los demás servidores siguen en ejecución y no se enumeran en removed, entre ellos los servidores stdio, HTTP y SSE de la opción mcpServers, 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.
La promesa se resuelve después de que los servidores stdio, HTTP y SSE recién agregados se conecten o fallen, por lo que las herramientas de los servidores que se conectaron están disponibles en el siguiente turno. 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.
Mientras una llamada a herramienta se ejecuta en la conversación principal, Claude Code emite un mensaje 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_id lo 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_progress posterior para el mismo parent_tool_use_id sin subagent_retry ni heartbeat: true, o cuando llegue el mensaje de resultado de la herramienta. Los frames con heartbeat: true solo informan que el proceso sigue activo, así que conserva el indicador cuando llegue uno. attempt puede superar max_retries con reintento persistente, así que no determines el borrado a partir de los contadores.
  • Trata error_category como un token para elegir tu propio texto de mensaje, no como texto para mostrar. Los valores son rate_limit, overloaded, authentication_failed, server_error, cloud_credential_error y unknown. Maneja un valor que no reconozcas igual que unknown, 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_updated y task_notification de una ejecución llevan el mismo run_id. La entrada de la ejecución en cada SDKBackgroundTasksChangedMessage también lo lleva, al igual que el runId en 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_id se 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 lleva run_id, como el task_notification que emite una sesión reanudada para cerrar una tarea que inició el proceso anterior, atribúyelo por task_id.
Por ejemplo, estos tres mensajes, recortados a sus campos identificadores, provienen de un subagente en segundo plano que Claude reanudó una vez. Los dos mensajes 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". true significa que la tarea se ejecuta en segundo plano. false significa 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 profundidad 1. Un subagente creado por un subagente de profundidad 1 tiene profundidad 2, y así sucesivamente.
Un subagente reanudado siempre reporta 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
La tarea padre puede ser una tarea en primer plano o una que ya terminó, así que trata un ID que no reconozcas como si no hubiera padre.

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.
El mensaje 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.
Cuando 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é.
Los campos opcionales describen el reinicio:
  • trigger: qué descartó la conversación. Reinicia tu transcripción en cada mensaje conversation_reset, incluido uno en el que este campo esté ausente o lleve un valor que no reconozcas.
  • user_message_uuid: el uuid del 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.
Los campos 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

Seguridad de socket Unix: La opción allowUnixSockets puede otorgar acceso a servicios del sistema que alcanzan fuera del sandbox. Por ejemplo, permitir /var/run/docker.sock efectivamente otorga acceso completo al sistema host a través de la API de Docker, omitiendo el aislamiento de sandbox. Solo permita sockets Unix que sean estrictamente necesarios y comprenda las implicaciones de seguridad de cada uno.

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

Cuando allowUnsandboxedCommands 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.
Los comandos que se ejecutan con dangerouslyDisableSandbox: true tienen acceso completo al sistema. Asegúrese de que su controlador canUseTool valide estas solicitudes cuidadosamente.Si permissionMode se establece en bypassPermissions y allowUnsandboxedCommands está habilitado, el modelo puede ejecutar autónomamente comandos fuera del sandbox sin solicitudes de aprobación, aparte de las acciones que ningún modo auto-aprueba. Esta combinación efectivamente permite que el modelo escape del aislamiento de sandbox silenciosamente.

Ver también