Instalación
Elegir entre query() y ClaudeSDKClient
El SDK de Python proporciona dos formas de interactuar con Claude Code:
Comparación rápida
| Característica | query() | ClaudeSDKClient |
|---|---|---|
| Sesión | Crea una nueva sesión cada vez | Reutiliza la misma sesión |
| Conversación | Intercambio único | Múltiples intercambios en el mismo contexto |
| Conexión | Gestionada automáticamente | Control manual |
| Entrada de streaming | ✅ Compatible | ✅ Compatible |
| Interrupciones | ❌ No compatible | ✅ Compatible |
| Hooks | ❌ No compatible | ✅ Compatible |
| Herramientas personalizadas | ❌ No compatible | ✅ Compatible |
| Continuar chat | ❌ Nueva sesión cada vez | ✅ Mantiene la conversación |
| Caso de uso | Tareas puntuales | Conversaciones continuas |
Cuándo usar query() (Nueva sesión cada vez)
Mejor para:
- Preguntas puntuales donde no necesitas historial de conversación
- Tareas independientes que no requieren contexto de intercambios anteriores
- Scripts de automatización simple
- Cuando quieres un comienzo fresco cada vez
Cuándo usar ClaudeSDKClient (Conversación continua)
Mejor para:
- Continuar conversaciones - Cuando necesitas 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. Devuelve un iterador asincrónico que produce mensajes a medida que llegan. Cada llamada a query() comienza de nuevo sin memoria de interacciones anteriores.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
prompt | str | AsyncIterable[dict] | El prompt de entrada como una cadena o iterable asincrónico para modo de streaming |
options | ClaudeAgentOptions | None | Objeto de configuración opcional (por defecto ClaudeAgentOptions() si es None) |
Devuelve
Devuelve unAsyncIterator[Message] que produce mensajes de la conversación.
Ejemplo - Con opciones
tool()
Decorador para definir herramientas MCP con seguridad de tipos.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
name | str | Identificador único para la herramienta |
description | str | Descripción legible de lo que hace la herramienta |
input_schema | type | dict[str, Any] | Esquema que define los parámetros de entrada de la herramienta (ver abajo) |
Opciones de esquema de entrada
-
Mapeo de tipo simple (recomendado):
-
Formato JSON Schema (para validación compleja):
Devuelve
Una función decoradora que envuelve la implementación de la herramienta y devuelve una instancia deSdkMcpTool.
Ejemplo
create_sdk_mcp_server()
Crea un servidor MCP en proceso que se ejecuta dentro de tu aplicación Python.
Parámetros
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
name | str | - | Identificador único para el servidor |
version | str | "1.0.0" | Cadena de versión del servidor |
tools | list[SdkMcpTool[Any]] | None | None | Lista de funciones de herramientas creadas con el decorador @tool |
Devuelve
Devuelve un objetoMcpSdkServerConfig que puede pasarse a ClaudeAgentOptions.mcp_servers.
Ejemplo
Clases
ClaudeSDKClient
Mantiene una sesión de conversación en múltiples intercambios. Este es el equivalente en 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: Claude recuerda mensajes anteriores en la sesión
- Soporte de interrupciones: Puede detener a Claude a mitad de la ejecución
- Ciclo de vida explícito: Controlas 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
| Método | Descripción |
|---|---|
__init__(options) | Inicializa el cliente con configuración opcional |
connect(prompt) | Conecta a Claude con un prompt inicial opcional o flujo de mensajes |
query(prompt, session_id) | Envía una nueva solicitud en modo de streaming |
receive_messages() | Recibe todos los mensajes de Claude como un iterador asincrónico |
receive_response() | Recibe mensajes hasta e incluyendo un ResultMessage |
interrupt() | Envía señal de interrupción (solo funciona en modo de streaming) |
disconnect() | Desconecta de Claude |
Soporte de gestor de contexto
El cliente puede usarse como un gestor de contexto asincrónico para gestión automática de conexiones:
Importante: Cuando iteres sobre mensajes, evita usar break para salir temprano ya que esto puede causar problemas de limpieza de asyncio. En su lugar, deja que la iteración se complete naturalmente o usa banderas para rastrear cuándo has encontrado lo que necesitas.
Ejemplo - Continuar una conversación
Ejemplo - Entrada de streaming con ClaudeSDKClient
Ejemplo - Usar interrupciones
Ejemplo - Control de permisos avanzado
Tipos
SdkMcpTool
Definición para una herramienta MCP del SDK creada con el decorador @tool.
| Propiedad | Tipo | Descripción |
|---|---|---|
name | str | Identificador único para la herramienta |
description | str | Descripción legible |
input_schema | type[T] | dict[str, Any] | Esquema para validación de entrada |
handler | Callable[[T], Awaitable[dict[str, Any]]] | Función asincrónica que maneja la ejecución de la herramienta |
ClaudeAgentOptions
Clase de datos de configuración para consultas de Claude Code.
| Propiedad | Tipo | Por defecto | Descripción |
|---|---|---|---|
allowed_tools | list[str] | [] | Lista de nombres de herramientas permitidas |
system_prompt | str | SystemPromptPreset | None | None | Configuración del prompt del sistema. Pasa una cadena para un prompt personalizado, o usa {"type": "preset", "preset": "claude_code"} para el prompt del sistema de Claude Code. Añade "append" para extender el preset |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Configuraciones del servidor MCP o ruta al archivo de configuración |
permission_mode | PermissionMode | None | None | Modo de permiso para el uso de herramientas |
continue_conversation | bool | False | Continuar la conversación más reciente |
resume | str | None | None | ID de sesión para reanudar |
max_turns | int | None | None | Máximo de turnos de conversación |
disallowed_tools | list[str] | [] | Lista de nombres de herramientas no permitidas |
model | str | None | None | Modelo de Claude a usar |
permission_prompt_tool_name | str | None | None | Nombre de herramienta MCP para prompts de permiso |
cwd | str | Path | None | None | Directorio de trabajo actual |
settings | str | None | None | Ruta al archivo de configuración |
add_dirs | list[str | Path] | [] | Directorios adicionales a los que Claude puede acceder |
env | dict[str, str] | {} | Variables de entorno |
extra_args | dict[str, str | None] | {} | Argumentos CLI adicionales para pasar directamente a la CLI |
max_buffer_size | int | None | None | Máximo de bytes al almacenar en búfer stdout de CLI |
debug_stderr | Any | sys.stderr | Deprecated - Objeto similar a archivo para salida de depuración. Usa el callback stderr en su lugar |
stderr | Callable[[str], None] | None | None | Función de callback para salida stderr de CLI |
can_use_tool | CanUseTool | None | None | Función de callback de permiso de herramienta |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Configuraciones de hook para interceptar eventos |
user | str | None | None | Identificador de usuario |
include_partial_messages | bool | False | Incluir eventos de streaming de mensajes parciales |
fork_session | bool | False | Al reanudar con resume, bifurcar a un nuevo ID de sesión en lugar de continuar la sesión original |
agents | dict[str, AgentDefinition] | None | None | Subagentes definidos programáticamente |
plugins | list[SdkPluginConfig] | [] | Cargar plugins personalizados desde rutas locales. Ver Plugins para detalles |
setting_sources | list[SettingSource] | None | None (sin configuración) | Controlar qué configuraciones del sistema de archivos cargar. Cuando se omite, no se carga ninguna configuración. Nota: Debe incluir "project" para cargar archivos CLAUDE.md |
SystemPromptPreset
Configuración para usar el prompt del sistema preset de Claude Code con adiciones opcionales.
| Campo | Requerido | Descripción |
|---|---|---|
type | Sí | Debe ser "preset" para usar un prompt del sistema preset |
preset | Sí | Debe ser "claude_code" para usar el prompt del sistema de Claude Code |
append | No | Instrucciones adicionales para añadir al prompt del sistema preset |
SettingSource
Controla qué fuentes de configuración basadas en el sistema de archivos carga el SDK.
| Valor | Descripción | Ubicación |
|---|---|---|
"user" | Configuración global del usuario | ~/.claude/settings.json |
"project" | Configuración compartida del proyecto (controlada por versión) | .claude/settings.json |
"local" | Configuración local del proyecto (ignorada por git) | .claude/settings.local.json |
Comportamiento por defecto
Cuandosetting_sources está omitido o es None, el SDK no carga ninguna configuración del sistema de archivos. Esto proporciona aislamiento para aplicaciones SDK.
¿Por qué usar setting_sources?
Cargar todas las configuraciones del sistema de archivos (comportamiento heredado):Precedencia de configuración
Cuando se cargan múltiples fuentes, las configuraciones se fusionan con esta precedencia (mayor a menor):- Configuración local (
.claude/settings.local.json) - Configuración del proyecto (
.claude/settings.json) - Configuración del usuario (
~/.claude/settings.json)
agents, allowed_tools) siempre anulan las configuraciones del sistema de archivos.
AgentDefinition
Configuración para un subagente definido programáticamente.
| Campo | Requerido | Descripción |
|---|---|---|
description | Sí | Descripción en lenguaje natural de cuándo usar este agente |
tools | No | Array de nombres de herramientas permitidas. Si se omite, hereda todas las herramientas |
prompt | Sí | El prompt del sistema del agente |
model | No | Anulación de modelo para este agente. Si se omite, usa el modelo principal |
PermissionMode
Modos de permiso para controlar la ejecución de herramientas.
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
SdkPluginConfig
Configuración para cargar plugins en el SDK.
| Campo | Tipo | Descripción |
|---|---|---|
type | Literal["local"] | Debe ser "local" (actualmente solo se admiten plugins locales) |
path | str | Ruta absoluta o relativa al directorio del plugin |
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.
SystemMessage
Mensaje del sistema con metadatos.
ResultMessage
Mensaje de resultado final con información de costo y uso.
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
HookEvent
Tipos de eventos de hook admitidos. Tenga en cuenta que debido a limitaciones de configuración, el SDK de Python no admite hooks de SessionStart, SessionEnd y Notification.
HookCallback
Definición de tipo para funciones de callback de hook.
input_data: Datos de entrada específicos del hook (ver documentación de hooks)tool_use_id: Identificador de uso de herramienta opcional (para hooks relacionados con herramientas)context: Contexto de hook con información adicional
decision:"block"para bloquear la acciónsystemMessage: Mensaje del sistema para añadir a la transcripciónhookSpecificOutput: Datos de salida específicos del hook
HookContext
Información de contexto pasada a callbacks de hook.
HookMatcher
Configuración para hacer coincidir hooks con eventos o herramientas específicas.
Ejemplo de uso de hook
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.Task
Nombre de herramienta:Task
Entrada:
Bash
Nombre de herramienta:Bash
Entrada:
Edit
Nombre de herramienta:Edit
Entrada:
Read
Nombre de herramienta:Read
Entrada:
Write
Nombre de herramienta:Write
Entrada:
Glob
Nombre de herramienta:Glob
Entrada:
Grep
Nombre de herramienta:Grep
Entrada:
NotebookEdit
Nombre de herramienta:NotebookEdit
Entrada:
WebFetch
Nombre de herramienta:WebFetch
Entrada:
WebSearch
Nombre de herramienta:WebSearch
Entrada:
TodoWrite
Nombre de herramienta:TodoWrite
Entrada:
BashOutput
Nombre de herramienta:BashOutput
Entrada:
KillBash
Nombre de herramienta:KillBash
Entrada:
ExitPlanMode
Nombre de herramienta:ExitPlanMode
Entrada:
ListMcpResources
Nombre de herramienta:ListMcpResources
Entrada:
ReadMcpResource
Nombre de herramienta:ReadMcpResource
Entrada:
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
Ver también
- Guía del SDK de Python - Tutorial y ejemplos
- Descripción general del SDK - Conceptos generales del SDK
- Referencia del SDK de TypeScript - Documentación del SDK de TypeScript
- Referencia de CLI - Interfaz de línea de comandos
- Flujos de trabajo comunes - Guías paso a paso