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 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 | ✅ Soportado | ✅ Soportado |
Interrupciones | ❌ No soportado | ✅ Soportado |
Hooks | ❌ No soportado | ✅ Soportado |
Herramientas Personalizadas | ❌ No soportado | ✅ Soportado |
Continuar Chat | ❌ Nueva sesión cada vez | ✅ Mantiene 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 previos
- Scripts de automatización simples
- 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 previas
- 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 el ciclo de vida de la conversación explícitamente
Funciones
query()
Crea una nueva sesión para cada interacción con Claude Code. Devuelve un iterador asíncrono que produce mensajes a medida que llegan. Cada llamada a query()
comienza fresco sin memoria de interacciones previas.
Parámetros
Parámetro | Tipo | Descripción |
---|---|---|
prompt | str | AsyncIterable[dict] | El prompt de entrada como cadena o iterable asíncrono para modo streaming |
options | ClaudeAgentOptions | None | Objeto de configuración opcional (por defecto ClaudeAgentOptions() si es None) |
Retorna
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 por humanos 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 de esquema JSON (para validación compleja):
Retorna
Una función decoradora que envuelve la implementación de la herramienta y devuelve una instanciaSdkMcpTool
.
Ejemplo
create_sdk_mcp_server()
Crear 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 |
Retorna
Devuelve un objetoMcpSdkServerConfig
que puede pasarse a ClaudeAgentOptions.mcp_servers
.
Ejemplo
Clases
ClaudeSDKClient
Mantiene una sesión de conversación a través de 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 a través de múltiples llamadas
query()
- Misma Conversación: Claude recuerda mensajes previos en la sesión
- Soporte de Interrupción: Puede detener a Claude a mitad de ejecución
- Ciclo de Vida Explícito: Tú controlas cuándo la sesión comienza y termina
- Flujo Impulsado por Respuestas: Puede reaccionar a respuestas y enviar seguimientos
- Herramientas y Hooks Personalizados: Soporta herramientas personalizadas (creadas con el decorador
@tool
) y hooks
Métodos
Método | Descripción |
---|---|
__init__(options) | Inicializar el cliente con configuración opcional |
connect(prompt) | Conectar a Claude con un prompt inicial opcional o flujo de mensajes |
query(prompt, session_id) | Enviar una nueva solicitud en modo streaming |
receive_messages() | Recibir todos los mensajes de Claude como un iterador asíncrono |
receive_response() | Recibir mensajes hasta e incluyendo un ResultMessage |
interrupt() | Enviar señal de interrupción (solo funciona en modo streaming) |
disconnect() | Desconectar de Claude |
Soporte de Gestor de Contexto
El cliente puede usarse como un gestor de contexto asíncrono para gestión automática de conexión:
Importante: Al iterar 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 - Continuando una conversación
Ejemplo - Entrada de streaming con ClaudeSDKClient
Ejemplo - Usando interrupciones
Ejemplo - Control avanzado de permisos
Tipos
SdkMcpTool
Definición para una herramienta SDK MCP creada con el decorador @tool
.
Propiedad | Tipo | Descripción |
---|---|---|
name | str | Identificador único para la herramienta |
description | str | Descripción legible por humanos |
input_schema | type[T] | dict[str, Any] | Esquema para validación de entrada |
handler | Callable[[T], Awaitable[dict[str, Any]]] | Función asíncrona que maneja la ejecución de la herramienta |
ClaudeAgentOptions
Dataclass de configuración para consultas de Claude Code.
Propiedad | Tipo | Por Defecto | Descripción |
---|---|---|---|
allowed_tools | list[str] | [] | Lista de nombres de herramientas permitidas |
max_thinking_tokens | int | 8000 | Tokens máximos para el proceso de pensamiento |
system_prompt | str | None | None | Configuración del prompt del sistema. Pasa una cadena para prompt personalizado, o usa formato preestablecido para el prompt del sistema de Claude Code |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Configuraciones de servidor MCP o ruta al archivo de configuración |
permission_mode | PermissionMode | None | None | Modo de permisos para uso de herramientas |
continue_conversation | bool | False | Continuar la conversación más reciente |
resume | str | None | None | ID de sesión para reanudar |
fork_session | bool | False | Al reanudar con resume , bifurcar a un nuevo ID de sesión en lugar de continuar la sesión original |
max_turns | int | None | None | Turnos máximos 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 permisos |
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 |
extra_args | dict[str, str | None] | {} | Argumentos CLI adicionales para pasar directamente al CLI |
can_use_tool | CanUseTool | None | None | Función de callback de permisos de herramientas |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Configuraciones de hook para interceptar eventos |
agents | dict[str, AgentDefinition] | None | None | Subagentes definidos programáticamente |
setting_sources | list[SettingSource] | None | None (sin configuraciones) | Controla qué configuraciones del sistema de archivos carga el SDK. Cuando se omite, no se cargan configuraciones |
SettingSource
Controla qué fuentes de configuración basadas en el sistema de archivos carga el SDK.
Valor | Descripción | Ubicación |
---|---|---|
"user" | Configuraciones globales del usuario | ~/.claude/settings.json |
"project" | Configuraciones compartidas del proyecto (controladas por versión) | .claude/settings.json |
"local" | Configuraciones locales del proyecto (ignoradas por git) | .claude/settings.local.json |
Comportamiento por defecto
Cuandosetting_sources
se omite 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 configuraciones
Cuando se cargan múltiples fuentes, las configuraciones se fusionan con esta precedencia (de mayor a menor):- Configuraciones locales (
.claude/settings.local.json
) - Configuraciones del proyecto (
.claude/settings.json
) - Configuraciones 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 permisos para controlar la ejecución de herramientas.
McpSdkServerConfig
Configuración para servidores SDK MCP creados con create_sdk_mcp_server()
.
McpServerConfig
Tipo unión para configuraciones de servidor MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
Tipos de Mensaje
Message
Tipo 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 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 lanza cuando Claude Code CLI no está instalado o no se encuentra.
CLIConnectionError
Se lanza cuando la conexión a Claude Code falla.
ProcessError
Se lanza cuando el proceso de Claude Code falla.
CLIJSONDecodeError
Se lanza cuando el análisis JSON falla.
Tipos de Hook
HookEvent
Tipos de eventos de hook soportados. Nota que debido a limitaciones de configuración, el SDK de Python no soporta hooks 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 opcional de uso de herramienta (para hooks relacionados con herramientas)context
: Contexto del hook con información adicional
decision
:"block"
para bloquear la acciónsystemMessage
: Mensaje del sistema para agregar a la transcripciónhookSpecificOutput
: Datos de salida específicos del hook
HookContext
Información de contexto pasada a los 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 Herramientas
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:
MultiEdit
Nombre de herramienta:MultiEdit
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 herrami Entrada:ListMcpResources
Nombre de herramienta:ListMcpResources
Entrada:
ReadMcpResource
Nombre de herramienta:ReadMcpResource
Entrada:
Características Avanzadas con ClaudeSDKClient
Construyendo una Interfaz de Conversación Continua
Usando Hooks para Modificación de Comportamiento
Monitoreo de Progreso en Tiempo Real
Ejemplo de Uso
Operaciones básicas de archivos (usando query)
Manejo de errores
Modo streaming con cliente
Usando herramientas personalizadas con ClaudeSDKClient
Ver también
- Guía del SDK de Python - Tutorial y ejemplos
- Resumen del SDK - Conceptos generales del SDK
- Referencia del SDK de TypeScript - Documentación del SDK de TypeScript
- Referencia del CLI - Interfaz de línea de comandos
- Flujos de trabajo comunes - Guías paso a paso