Saltar al contenido principal

Instalación

Instale el paquete en un entorno virtual. En instalaciones recientes de Debian, Ubuntu y Homebrew Python, ejecutar pip install contra Python del sistema falla con error: externally-managed-environment.
Para uv, Windows PowerShell y configuración de claves API, consulte Comenzar en la descripción general del Agent SDK.

Elegir entre query() y ClaudeSDKClient

El SDK de Python proporciona dos formas de interactuar con Claude Code:

Comparación rápida

Cuándo usar query() (tareas puntuales)

Mejor para:
  • Preguntas puntuales donde no necesita historial de conversación
  • Tareas independientes que no requieren contexto de intercambios anteriores
  • Scripts de automatización simple
  • Cuando desea un comienzo nuevo cada vez

Cuándo usar ClaudeSDKClient (conversación continua)

Mejor para:
  • Continuar conversaciones - Cuando necesita que Claude recuerde el contexto
  • Preguntas de seguimiento - Construir sobre respuestas anteriores
  • Aplicaciones interactivas - Interfaces de chat, REPLs
  • Lógica impulsada por respuestas - Cuando la siguiente acción depende de la respuesta de Claude
  • Control de sesión - Gestionar explícitamente el ciclo de vida de la conversación

Funciones

query()

Crea una nueva sesión para cada interacción con Claude Code de forma predeterminada. Devuelve un iterador asincrónico que produce mensajes a medida que llegan. Cada llamada a query() comienza de nuevo sin memoria de interacciones anteriores a menos que pase continue_conversation=True o resume en ClaudeAgentOptions. Consulte Sessions.

Parámetros

Devuelve

Devuelve un AsyncIterator[Message] que produce mensajes de la conversación.

Ejemplo - Con opciones

tool()

Decorador para definir herramientas MCP con seguridad de tipos.

Parámetros

Opciones de esquema de entrada

  1. Mapeo de tipo simple (recomendado):
  2. Formato JSON Schema (para validación compleja):

Devuelve

Una función decoradora que envuelve la implementación de la herramienta y devuelve una instancia de SdkMcpTool.

Ejemplo

ToolAnnotations

Re-exportado desde mcp.types (también disponible como from claude_agent_sdk import ToolAnnotations). Todos los campos son sugerencias opcionales; los clientes no deben depender de ellos para decisiones de seguridad.

create_sdk_mcp_server()

Crea un servidor MCP en proceso que se ejecuta dentro de su aplicación Python.

Parámetros

Devuelve

Devuelve un objeto McpSdkServerConfig que se puede pasar a ClaudeAgentOptions.mcp_servers.

Ejemplo

list_sessions()

Lista sesiones pasadas con metadatos. Filtre por directorio de proyecto o liste sesiones en todos los proyectos. Sincrónico; devuelve inmediatamente.

Parámetros

Tipo de retorno: SDKSessionInfo

Ejemplo

Imprima las 10 sesiones más recientes para un proyecto. Los resultados se ordenan por last_modified descendente, por lo que el primer elemento es el más nuevo. Omita directory para buscar en todos los proyectos.

get_session_messages()

Recupera mensajes de una sesión pasada. Sincrónico; devuelve inmediatamente.

Parámetros

Tipo de retorno: SessionMessage

Ejemplo

get_session_info()

Lee metadatos para una única sesión por ID sin escanear el directorio del proyecto completo. Sincrónico; devuelve inmediatamente.

Parámetros

Devuelve SDKSessionInfo, o None si la sesión no se encuentra.

Ejemplo

Busque los metadatos de una única sesión sin escanear el directorio del proyecto. Útil cuando ya tiene un ID de sesión de una ejecución anterior.

rename_session()

Renombra una sesión agregando una entrada de título personalizado. Las llamadas repetidas son seguras; el título más reciente gana. Sincrónico.

Parámetros

Genera ValueError si session_id no es un UUID válido o title está vacío; FileNotFoundError si la sesión no se puede encontrar.

Ejemplo

Renombre la sesión más reciente para que sea más fácil de encontrar más tarde. El nuevo título aparece en SDKSessionInfo.custom_title en lecturas posteriores.

tag_session()

Etiqueta una sesión. Pase None para borrar la etiqueta. Las llamadas repetidas son seguras; la etiqueta más reciente gana. Sincrónico.

Parámetros

Genera ValueError si session_id no es un UUID válido o tag está vacío después de la sanitización; FileNotFoundError si la sesión no se puede encontrar.

Ejemplo

Etiquete una sesión, luego filtre por esa etiqueta en una lectura posterior. Pase None para borrar una etiqueta existente.

Clases

ClaudeSDKClient

Mantiene una sesión de conversación en múltiples intercambios. Este es el equivalente de Python de cómo funciona internamente la función query() del SDK de TypeScript - crea un objeto cliente que puede continuar conversaciones.

Características clave

  • Continuidad de sesión: Mantiene el contexto de conversación en múltiples llamadas a query()
  • Misma conversación: La sesión retiene mensajes anteriores
  • Soporte de interrupciones: Puede detener la ejecución a mitad de tarea
  • Ciclo de vida explícito: Usted controla cuándo comienza y termina la sesión
  • Flujo impulsado por respuestas: Puede reaccionar a respuestas y enviar seguimientos
  • Herramientas personalizadas y hooks: Admite herramientas personalizadas (creadas con el decorador @tool) y hooks

Métodos

Soporte de gestor de contexto

El cliente se puede usar como un gestor de contexto asincrónico para la gestión automática de conexiones:
Importante: Al iterar sobre mensajes, evite usar break para salir temprano ya que esto puede causar problemas de limpieza de asyncio. En su lugar, deje que la iteración se complete naturalmente o use banderas para rastrear cuándo ha encontrado lo que necesita.

Ejemplo - Continuar una conversación

Ejemplo - Entrada de streaming con ClaudeSDKClient

Ejemplo - Usar interrupciones

Comportamiento del búfer después de la interrupción: interrupt() envía una señal de parada pero no borra el búfer de mensajes. Los mensajes ya producidos por la tarea interrumpida, incluyendo su ResultMessage (con subtype="error_during_execution"), permanecen en el flujo. Debe drenarlos con receive_response() antes de leer la respuesta a una nueva consulta. Si envía una nueva consulta inmediatamente después de interrupt() y llama a receive_response() solo una vez, recibirá los mensajes de la tarea interrumpida, no la respuesta de la nueva consulta.

Ejemplo - Control de permisos avanzado

Tipos

@dataclass vs TypedDict: Este SDK utiliza dos tipos de tipos. Las clases decoradas con @dataclass (como ResultMessage, AgentDefinition, TextBlock) son instancias de objeto en tiempo de ejecución y admiten acceso de atributo: msg.result. Las clases definidas con TypedDict (como ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput) son dicts simples en tiempo de ejecución y requieren acceso de clave: config["budget_tokens"], no config.budget_tokens. La sintaxis de llamada ClassName(field=value) funciona para ambos, pero solo las dataclasses producen objetos con atributos.

SdkMcpTool

Definición para una herramienta MCP del SDK creada con el decorador @tool.

Transport

Clase base abstracta para implementaciones de transporte personalizado. Úsela para comunicarse con el proceso Claude a través de un canal personalizado (por ejemplo, una conexión remota en lugar de un subproceso local).
Esta es una API interna de bajo nivel. La interfaz puede cambiar en versiones futuras. Las implementaciones personalizadas deben actualizarse para coincidir con cualquier cambio de interfaz.
Importar: from claude_agent_sdk import Transport

ClaudeAgentOptions

Dataclass de configuración para consultas de Claude Code.

Manejar respuestas de API lentas o estancadas

El subproceso CLI lee varias variables de entorno que controlan los tiempos de espera de API y la detección de estancamiento. Páselas a través de ClaudeAgentOptions.env:
  • API_TIMEOUT_MS: tiempo de espera por solicitud en el cliente de Anthropic, en milisegundos. Predeterminado 600000. Se aplica al bucle principal y a todos los subagentes.
  • CLAUDE_CODE_MAX_RETRIES: máximo de reintentos de API. Predeterminado 10, limitado a 15. Cada reintento obtiene su propia ventana API_TIMEOUT_MS, por lo que el tiempo de pared en el peor caso es aproximadamente API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) más backoff. Para ejecuciones desatendidas que necesitan esperar a través de interrupciones más largas, establezca CLAUDE_CODE_RETRY_WATCHDOG=1: reintentos de errores de capacidad indefinidamente, y a partir de Claude Code v2.1.199 eleva el valor predeterminado para otros errores transitorios a 300 y elimina el límite en esta variable.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: perro guardián de estancamiento para subagentes lanzados con run_in_background. Predeterminado 600000. Se reinicia en cada evento de flujo; en caso de estancamiento, aborta el subagente, marca la tarea como fallida y expone el error al padre con cualquier resultado parcial. No se aplica a subagentes síncronos.
  • CLAUDE_ENABLE_STREAM_WATCHDOG con CLAUDE_STREAM_IDLE_TIMEOUT_MS: aborta la solicitud cuando los encabezados han llegado pero el cuerpo de la respuesta deja de transmitir. El perro guardián está activado de forma predeterminada para todos los proveedores; establezca CLAUDE_ENABLE_STREAM_WATCHDOG=0 para desactivarlo. CLAUDE_STREAM_IDLE_TIMEOUT_MS tiene un valor predeterminado de 300000 y se fija a ese mínimo. La solicitud abortada pasa por la ruta de reintento normal.

OutputFormat

Configuración para validación de salida estructurada. Pase esto como un dict al campo output_format en ClaudeAgentOptions:

SystemPromptPreset

Configuración para usar el prompt del sistema preset de Claude Code con adiciones opcionales.

SystemPromptFile

Configuración para cargar un prompt del sistema personalizado desde un archivo en lugar de pasarlo como una cadena. El SDK asigna esto a la bandera CLI --system-prompt-file. Use la forma de archivo cuando el prompt es grande: el SDK pasa un system_prompt de cadena en el argv del subproceso CLI, que está sujeto a límites de longitud de línea de comandos del SO antes de que el SDK envíe cualquier solicitud de API. En Linux, un único argumento más largo que aproximadamente 128 KB falla al generar el proceso con Argument list too long. En Windows, toda la línea de comandos está limitada a aproximadamente 32 KB, por lo que la forma de cadena falla en un umbral más bajo.

SettingSource

Controla qué fuentes de configuración basadas en el sistema de archivos carga el SDK.

Comportamiento predeterminado

Cuando setting_sources se omite o es None, query() carga la misma configuración del sistema de archivos que el CLI de Claude Code: usuario, proyecto y local. La configuración de política administrada se carga en todos los casos; la configuración administrada por servidor se obtiene cuando la sesión se autentica con una credencial de organización en una configuración elegible. Ver Qué settingSources no controla para entradas que se leen independientemente de esta opción, y cómo deshabilitarlas.

Por qué usar setting_sources

Deshabilitar configuración del sistema de archivos:
En Python SDK 0.1.59 y anteriores, una lista vacía se trataba igual que omitir la opción, por lo que setting_sources=[] no deshabilitaba la configuración del sistema de archivos. Actualice a una versión más nueva si necesita que una lista vacía tenga efecto. El SDK de TypeScript no se ve afectado.
Cargar toda la configuración del sistema de archivos explícitamente:
Cargar solo fuentes de configuración específicas:
Entornos de prueba e IC:
Aplicaciones solo SDK:
Cargando instrucciones del proyecto CLAUDE.md:

Precedencia de configuración

Cuando se cargan múltiples fuentes, la configuración se fusiona con esta precedencia (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 y allowed_tools anulan la configuración del sistema de archivos de usuario, proyecto y local. La configuración de política administrada tiene precedencia sobre las opciones programáticas.

AgentDefinition

Configuración para un subagente definido programáticamente.
Los nombres de campo de AgentDefinition usan camelCase, como disallowedTools, permissionMode y maxTurns. Estos nombres se asignan directamente al formato de cable compartido con el SDK de TypeScript. Esto difiere de ClaudeAgentOptions, que usa snake_case de Python para campos de nivel superior equivalentes como disallowed_tools y permission_mode. Porque AgentDefinition es una dataclass, pasar una palabra clave snake_case genera un TypeError en el tiempo de construcción.

PermissionMode

Modos de permiso para controlar la ejecución de herramientas.

EffortLevel

Niveles de esfuerzo para guiar la profundidad del pensamiento.

CanUseTool

Alias de tipo para funciones de devolución de llamada de permiso de herramienta.
La devolución de llamada recibe:
  • tool_name: Nombre de la herramienta que se está llamando
  • input_data: Los parámetros de entrada de la herramienta
  • context: Un ToolPermissionContext con información adicional
Devuelve un PermissionResult (ya sea PermissionResultAllow o PermissionResultDeny). La devolución de llamada es el reemplazo del SDK para el prompt de permiso interactivo: se invoca solo cuando el flujo de evaluación de permiso se resuelve en un prompt. Las llamadas de herramienta ya aprobadas por una entrada allowed_tools, una regla de permiso de configuración, o el modo de permiso, como acceptEdits o bypassPermissions, nunca la invocan. Para controlar cada llamada de herramienta, use un hook PreToolUse en su lugar. AskUserQuestion, herramientas MCP marcadas requiresUserInteraction, y herramientas de conector que su organización estableció en ask la alcanzan incluso cuando una regla de permiso coincide. En modo dontAsk estas llamadas se deniegan en su lugar, sin invocar la devolución de llamada.

ToolPermissionContext

Información de contexto pasada a devoluciones de llamada de permiso de herramienta.

PermissionResult

Tipo de unión para resultados de devolución de llamada de permiso.

PermissionResultAllow

Resultado indicando que la llamada de herramienta debe permitirse.

PermissionResultDeny

Resultado indicando que la llamada de herramienta debe denegarse.

PermissionUpdate

Configuración para actualizar permisos programáticamente.

PermissionRuleValue

Una regla a agregar, reemplazar o eliminar en una actualización de permiso.

ToolsPreset

Configuración de herramientas preset para usar el conjunto de herramientas predeterminado de Claude Code.

ThinkingConfig

Controla el comportamiento de pensamiento extendido. Una unión de tres configuraciones:
El campo opcional display controla si el texto de pensamiento se devuelve "summarized" u "omitted". En Claude Opus 4.7 y posteriores, el valor predeterminado de la API es "omitted", por lo que establezca "summarized" para recibir contenido de pensamiento en salidas ThinkingBlock. Porque estas son clases TypedDict, son dicts simples en tiempo de ejecución. Construya cualquiera como literales de dict o llame a la clase como un constructor; ambos producen un dict. Acceda a campos con config["budget_tokens"], no config.budget_tokens:

SdkBeta

Tipo literal para características beta del SDK.
Use con el campo betas en ClaudeAgentOptions para habilitar características beta.
La beta context-1m-2025-08-07 se retiró a partir del 30 de abril de 2026. Pasar este encabezado con Claude Sonnet 4.5 o Sonnet 4 no tiene efecto, y las solicitudes que exceden la ventana de contexto estándar de 200k tokens devuelven un error. Para usar una ventana de contexto de 1M tokens, migre a Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.6, Claude Opus 4.7, o Claude Opus 4.8, que incluyen contexto de 1M a precios estándar sin encabezado beta requerido.

McpSdkServerConfig

Configuración para servidores MCP del SDK creados con create_sdk_mcp_server().

McpServerConfig

Tipo de unión para configuraciones de servidor MCP.

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

La configuración de un servidor MCP como se reporta por get_mcp_status(). Esta es la unión de todas las variantes de transporte McpServerConfig más una variante de salida única claudeai-proxy para servidores proxied a través de claude.ai.
McpSdkServerConfigStatus es la forma serializable de McpSdkServerConfig con solo campos type ("sdk") y name (str); la instance en proceso se omite. McpClaudeAIProxyServerConfig tiene campos type ("claudeai-proxy"), url (str), e id (str).

McpStatusResponse

Respuesta de ClaudeSDKClient.get_mcp_status(). Envuelve la lista de estados del servidor bajo la clave mcpServers.

McpServerStatus

Estado de un servidor MCP conectado, contenido en McpStatusResponse.

SdkPluginConfig

Configuración para cargar plugins en el SDK.
Ejemplo:
Para información completa sobre la creación y uso de plugins, ver Plugins.

Tipos de mensaje

Message

Tipo de unión de todos los mensajes posibles.

UserMessage

Mensaje de entrada del usuario.

AssistantMessage

Mensaje de respuesta del asistente con bloques de contenido.

AssistantMessageError

Posibles tipos de error para mensajes del asistente.

SystemMessage

Mensaje del sistema con metadatos.

ResultMessage

Mensaje de resultado final con información de costo y uso.
El campo subtype determina cuáles otros campos se rellenan. Es uno de "success", "error_during_execution", "error_max_turns", "error_max_budget_usd", o "error_max_structured_output_retries". La clase de datos de Python aplana todas las variantes en una forma, por lo que los campos que no se aplican al subtipo devuelto son None. Varios campos llevan detalle de diagnóstico cuando la conversación termina en un error:
  • is_error: True cuando la conversación terminó en un estado de error. Siempre True en los subtipos error_*. En subtype="success" es True cuando la solicitud del modelo final falló, lo que significa que el bucle del agente se completó pero la última llamada a la API devolvió un error.
  • api_error_status: el código de estado HTTP del error de API de terminación. None cuando el turno terminó sin uno. Se rellena solo en subtype="success".
  • result: texto del mensaje del asistente final en subtype="success", o None en los subtipos error_*. Cuando subtype="success" e is_error=True, esto contiene la cadena de error de API si una está disponible pero puede estar vacía, así que verifique api_error_status y el contenido anterior de AssistantMessage para obtener detalles.
  • errors: cadenas de error a nivel de bucle como el mensaje de máx-turnos. Se rellena solo en los subtipos error_*.
El dict usage contiene las siguientes claves cuando está presente: El dict model_usage asigna nombres de modelo a uso por modelo. Las claves del dict interno usan camelCase porque el valor se pasa sin modificar desde el proceso CLI subyacente, coincidiendo con el tipo ModelUsage de TypeScript:

StreamEvent

Evento de flujo para actualizaciones de mensaje parcial durante el streaming. Solo se recibe cuando include_partial_messages=True en ClaudeAgentOptions. Importar vía from claude_agent_sdk.types import StreamEvent.

RateLimitEvent

Emitido cuando el estado del límite de velocidad cambia (por ejemplo, de "allowed" a "allowed_warning"). Use esto para advertir a los usuarios antes de que alcancen un límite duro, o para retroceder cuando el estado es "rejected".

RateLimitInfo

Estado del límite de velocidad llevado por RateLimitEvent.

TaskStartedMessage

Emitido cuando comienza una tarea de fondo. Una tarea de fondo es cualquier cosa rastreada fuera del turno principal: un comando Bash en segundo plano, un reloj de Monitor, un subagente generado a través de la herramienta Agent, o un agente remoto. El campo task_type le dice cuál. Este nombre no está relacionado con el cambio de nombre de herramienta Task-a-Agent.

TaskUsage

Datos de token y tiempo para una tarea de fondo.

TaskProgressMessage

Emitido periódicamente con actualizaciones de progreso para una tarea de fondo en ejecución.

TaskNotificationMessage

Emitido cuando una tarea de fondo se completa, falla o se detiene. Las tareas de fondo incluyen comandos Bash run_in_background, relojes de Monitor y subagentes de fondo.

Tipos de bloque de contenido

ContentBlock

Tipo de unión de todos los bloques de contenido.

TextBlock

Bloque de contenido de texto.

ThinkingBlock

Bloque de contenido de pensamiento (para modelos con capacidad de pensamiento).

ToolUseBlock

Bloque de solicitud de uso de herramienta.

ToolResultBlock

Bloque de resultado de ejecución de herramienta.

Tipos de error

ClaudeSDKError

Clase de excepción base para todos los errores del SDK.

CLINotFoundError

Se genera cuando Claude Code CLI no está instalado o no se encuentra.

CLIConnectionError

Se genera cuando la conexión a Claude Code falla.

ProcessError

Se genera cuando el proceso de Claude Code falla.

CLIJSONDecodeError

Se genera cuando el análisis JSON falla.

Tipos de hook

Para una guía completa sobre el uso de hooks con ejemplos y patrones comunes, ver la Guía de Hooks.

HookEvent

Tipos de evento de hook soportados.
El SDK de TypeScript admite eventos de hook adicionales no disponibles aún en Python: SessionStart, SessionEnd, Setup, TeammateIdle, TaskCompleted, ConfigChange, WorktreeCreate, WorktreeRemove, PostToolBatch y MessageDisplay.

HookCallback

Definición de tipo para funciones de devolución de llamada de hook.
Parámetros:
  • input: Entrada de hook fuertemente tipada con uniones discriminadas basadas en hook_event_name (ver HookInput)
  • tool_use_id: Identificador de uso de herramienta opcional (para hooks relacionados con herramientas)
  • context: Contexto de hook con información adicional
Devuelve un HookJSONOutput que puede contener:
  • decision: "block" para bloquear la acción
  • systemMessage: Mensaje de advertencia mostrado al usuario
  • hookSpecificOutput: Datos de salida específicos del hook

HookContext

Información de contexto pasada a devoluciones de llamada de hook.

HookMatcher

Configuración para hacer coincidir hooks con eventos o herramientas específicas.

HookInput

Tipo de unión de todos los tipos de entrada de hook. El tipo real depende del campo hook_event_name.

BaseHookInput

Campos base presentes en todos los tipos de entrada de hook.

PreToolUseHookInput

Datos de entrada para eventos de hook PreToolUse.

PostToolUseHookInput

Datos de entrada para eventos de hook PostToolUse.

PostToolUseFailureHookInput

Datos de entrada para eventos de hook PostToolUseFailure. Se llama cuando la ejecución de una herramienta falla.

UserPromptSubmitHookInput

Datos de entrada para eventos de hook UserPromptSubmit.

StopHookInput

Datos de entrada para eventos de hook Stop.

SubagentStopHookInput

Datos de entrada para eventos de hook SubagentStop.

PreCompactHookInput

Datos de entrada para eventos de hook PreCompact.

NotificationHookInput

Datos de entrada para eventos de hook Notification.

SubagentStartHookInput

Datos de entrada para eventos de hook SubagentStart.

PermissionRequestHookInput

Datos de entrada para eventos de hook PermissionRequest. Permite que los hooks manejen decisiones de permiso programáticamente.

HookJSONOutput

Tipo de unión para valores de retorno de devolución de llamada de hook.

SyncHookJSONOutput

Salida de hook sincrónico con campos de control y decisión.
Use continue_ (con guion bajo) en código Python. Se convierte automáticamente a continue cuando se envía al CLI.

HookSpecificOutput

Un TypedDict que contiene el nombre del evento de hook y campos específicos del evento. La forma depende del valor hookEventName. Para detalles completos sobre campos disponibles por evento de hook, ver Control execution with hooks. Una unión discriminada de tipos de salida específicos del evento. El campo hookEventName determina qué campos son válidos.

AsyncHookJSONOutput

Salida de hook asincrónico que difiere la ejecución del hook.
Use async_ (con guion bajo) en código Python. Se convierte automáticamente a async cuando se envía al CLI.

Ejemplo de uso de hook

Este ejemplo registra dos hooks: uno que bloquea comandos bash peligrosos como rm -rf /, y otro que registra todo el uso de herramientas para auditoría. El hook de seguridad solo se ejecuta en comandos Bash (a través del matcher), mientras que el hook de registro se ejecuta en todas las herramientas.

Tipos de entrada/salida de herramienta

Documentación de esquemas de entrada/salida para todas las herramientas integradas de Claude Code. Aunque el SDK de Python no exporta estos como tipos, representan la estructura de entradas y salidas de herramientas en mensajes.

Agent

Nombre de herramienta: Agent (anteriormente Task, que aún se acepta como alias) Entrada:
Salida:

AskUserQuestion

Nombre de herramienta: AskUserQuestion Hace preguntas aclaratorias al usuario durante la ejecución. Ver Manejar aprobaciones e entrada del usuario para detalles de uso. Entrada:
Salida:

Bash

Nombre de herramienta: Bash Entrada:
Salida:

Monitor

Nombre de herramienta: Monitor Ejecuta una fuente de fondo y entrega cada evento a Claude para que pueda reaccionar sin sondeo: command ejecuta un script y emite un evento por línea stdout, y ws abre un WebSocket y emite un evento por marco de texto. Proporcione exactamente uno de command o ws. Cuando Monitor ejecuta un comando, sigue las mismas reglas de permiso que Bash; una vigilancia de WebSocket solicita aprobación por separado. La fuente ws requiere Claude Code v2.1.195 o posterior. Ver la referencia de herramienta Monitor para comportamiento y disponibilidad de proveedor. Entrada:
Salida:

Edit

Nombre de herramienta: Edit Entrada:
Salida:

Read

Nombre de herramienta: Read Entrada:
Salida (archivos de texto):
Salida (imágenes):

Write

Nombre de herramienta: Write Entrada:
Salida:

Glob

Nombre de herramienta: Glob Entrada:
Salida:

Grep

Nombre de herramienta: Grep Entrada:
Salida (modo content):
Salida (modo files_with_matches):

NotebookEdit

Nombre de herramienta: NotebookEdit Entrada:
Salida:

WebFetch

Nombre de herramienta: WebFetch Entrada:
Salida:

WebSearch

Nombre de herramienta: WebSearch Entrada:
Salida:

TodoWrite

Nombre de herramienta: TodoWrite
A partir de Claude Code v2.1.142, TodoWrite está deshabilitado de forma predeterminada. Use TaskCreate, TaskGet, TaskUpdate, y TaskList en su lugar. Ver Migrar a herramientas Task para actualizar su código de monitoreo, o establezca CLAUDE_CODE_ENABLE_TASKS=0 para revertir a TodoWrite.
Entrada:
Salida:

TaskCreate

Nombre de herramienta: TaskCreate Entrada:
Salida:

TaskUpdate

Nombre de herramienta: TaskUpdate Entrada:
Salida:

TaskGet

Nombre de herramienta: TaskGet Entrada:
Salida:

TaskList

Nombre de herramienta: TaskList Entrada:
Salida:

BashOutput

Nombre de herramienta: BashOutput Entrada:
Salida:

KillBash

Nombre de herramienta: KillBash Entrada:
Salida:

ExitPlanMode

Nombre de herramienta: ExitPlanMode Entrada:
Salida:

ListMcpResources

Nombre de herramienta: ListMcpResourcesTool Entrada:
Salida:

ReadMcpResource

Nombre de herramienta: ReadMcpResourceTool Entrada:
Salida:

Características avanzadas con ClaudeSDKClient

Construir una interfaz de conversación continua

Usar hooks para modificación de comportamiento

Monitoreo de progreso en tiempo real

Uso de ejemplo

Operaciones básicas de archivo (usando query)

Manejo de errores

Modo de streaming con cliente

Usar herramientas personalizadas con ClaudeSDKClient

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 programáticamente.
El sandbox depende de la compatibilidad de la plataforma y, en Linux, de herramientas como bubblewrap y socat. De forma predeterminada, cuando enabled es True pero el sandbox no puede iniciarse, los comandos se ejecutan sin sandbox con una advertencia en stderr. Este comportamiento predeterminado difiere del SDK de TypeScript, donde failIfUnavailable tiene un valor predeterminado de true.Establezca "failIfUnavailable": True en su configuración de sandbox para detener en su lugar. La clave aún no está declarada en SandboxSettings, pero el SDK la reenvía a Claude Code, que la respeta. query() luego reporta un ResultMessage con subtype="error_during_execution" y la razón en errors. Observe ese subtipo en lugar de esperar que query() lance una excepción antes de ceder mensajes.

Ejemplo de uso

Seguridad de socket Unix: La opción allowUnixSockets puede otorgar acceso a servicios del sistema poderosos. Por ejemplo, permitir /var/run/docker.sock efectivamente otorga acceso completo al sistema host a través de la API de Docker, evitando 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 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 la lista de permitidos de red basada 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 evitarlo. Consulte Limitaciones de seguridad de sandboxing para obtener detalles y Implementación segura para configurar un proxy que termine TLS.

SandboxIgnoreViolations

Configuración para ignorar violaciones de sandbox específicas.

Respaldo 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 la herramienta. Estas solicitudes vuelven al sistema de permisos existente, lo que significa que se invocará su controlador can_use_tool, permitiéndole implementar lógica de autorización personalizada.
excludedCommands vs allowUnsandboxedCommands:
  • excludedCommands: Una lista estática de comandos que siempre evitan el sandbox automáticamente (por ejemplo, ["docker"]). El modelo no tiene control sobre esto.
  • allowUnsandboxedCommands: Permite que el modelo decida en tiempo de ejecución si solicitar ejecución sin sandbox estableciendo dangerouslyDisableSandbox: True en la entrada de la herramienta.
Este patrón le permite:
  • Auditar solicitudes del modelo: Registrar cuándo el modelo solicita ejecución sin sandbox
  • Implementar listas de permitidos: Solo permitir comandos específicos para ejecutarse sin sandbox
  • Agregar flujos de trabajo de aprobación: Requerir autorización explícita para operaciones privilegiadas
Los comandos que se ejecutan con dangerouslyDisableSandbox: True tienen acceso completo al sistema. Asegúrese de que su controlador can_use_tool valide estas solicitudes cuidadosamente.Si permission_mode se establece en bypassPermissions y allow_unsandboxed_commands está habilitado, el modelo puede ejecutar autónomamente comandos fuera del sandbox sin solicitudes de aprobación. Esta combinación efectivamente permite que el modelo escape del aislamiento de sandbox silenciosamente.

Ver también