TypeScript
Construye agentes de IA personalizados con el SDK de TypeScript de Claude Code
Prerrequisitos
- Node.js 18+
Instalación
Instala @anthropic-ai/claude-code
desde NPM:
Para ver el código fuente del SDK de TypeScript, visita la página de @anthropic-ai/claude-code
en NPM.
Uso básico
La interfaz principal a través del SDK de TypeScript es la función query
, que devuelve un iterador asíncrono que transmite mensajes a medida que llegan:
Opciones de configuración
Argumento | Tipo | Descripción | Por defecto |
---|---|---|---|
abortController | AbortController | Controlador de aborto para cancelar operaciones | new AbortController() |
additionalDirectories | string[] | Directorios adicionales para incluir en la sesión | undefined |
allowedTools | string[] | Lista de herramientas que Claude puede usar | Todas las herramientas habilitadas por defecto |
appendSystemPrompt | string | Texto para agregar al prompt del sistema por defecto | undefined |
canUseTool | (toolName: string, input: any) => Promise<ToolPermissionResult> | Función de permisos personalizada para el uso de herramientas | undefined |
continue | boolean | Continuar la sesión más reciente | false |
customSystemPrompt | string | Reemplazar completamente el prompt del sistema por defecto | undefined |
cwd | string | Directorio de trabajo actual | process.cwd() |
disallowedTools | string[] | Lista de herramientas que Claude no puede usar | undefined |
env | Dict<string> | Variables de entorno para establecer | undefined |
executable | 'bun' | 'deno' | 'node' | Qué runtime de JavaScript usar | node cuando se ejecuta con Node.js, bun cuando se ejecuta con Bun |
executableArgs | string[] | Argumentos para pasar al ejecutable | [] |
fallbackModel | string | Modelo a usar si el modelo principal falla | undefined |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | Hooks del ciclo de vida para personalización | undefined |
includePartialMessages | boolean | Incluir eventos de transmisión parcial en el flujo de mensajes | false |
maxThinkingTokens | number | Tokens máximos para el proceso de pensamiento de Claude | undefined |
maxTurns | number | Número máximo de turnos de conversación | undefined |
mcpServers | Record<string, McpServerConfig> | Configuraciones del servidor MCP | undefined |
model | string | Modelo de Claude a usar | Usa el predeterminado de la configuración CLI |
pathToClaudeCodeExecutable | string | Ruta al ejecutable de Claude Code | Ejecutable que viene con @anthropic-ai/claude-code |
permissionMode | PermissionMode | Modo de permisos para la sesión | "default" (opciones: "default" , "acceptEdits" , "bypassPermissions" , "plan" ) |
resume | string | ID de sesión para reanudar | undefined |
stderr | (data: string) => void | Callback para la salida stderr | undefined |
strictMcpConfig | boolean | Aplicar validación estricta de configuración MCP | undefined |
Transmisión de mensajes parciales
Cuando includePartialMessages
está habilitado, el SDK emitirá mensajes stream_event
que contienen eventos de transmisión en bruto de la API de Claude. Esto te permite acceder al contenido parcial mientras se está generando, útil para implementar actualizaciones de UI en tiempo real o indicadores de progreso.
Cada mensaje stream_event
incluye:
event
: El evento de transmisión en bruto de la APIsession_id
: El identificador de sesión actualparent_tool_use_id
: El ID de la herramienta que se está ejecutando (si aplica)uuid
: Un identificador único para este evento
La transmisión de mensajes parciales es principalmente útil para casos de uso avanzados donde necesitas control granular sobre la respuesta de transmisión. Para la mayoría de aplicaciones, el comportamiento predeterminado (esperar mensajes completos) es suficiente.
Conversaciones de múltiples turnos
Para conversaciones de múltiples turnos, tienes dos opciones.
Puedes generar respuestas y reanudarlas, o puedes usar el modo de entrada de transmisión que acepta un async/generador para un array de mensajes. Por ahora, el modo de entrada de transmisión es la única forma de adjuntar imágenes a través de mensajes.
Reanudar con gestión de sesiones
Modo de entrada de transmisión
El modo de entrada de transmisión te permite proporcionar mensajes como un iterable asíncrono en lugar de una sola cadena. Esto habilita conversaciones de múltiples turnos, adjuntos de imágenes y generación dinámica de mensajes:
Entrada de transmisión con imágenes
El modo de entrada de transmisión es la única forma de adjuntar imágenes a través de mensajes:
Prompts del sistema personalizados
Los prompts del sistema definen el rol, experiencia y comportamiento de tu agente:
Integración de servidor MCP
El Protocolo de Contexto de Modelo (MCP) te permite dar a tus agentes herramientas y capacidades personalizadas:
Herramientas personalizadas con servidores MCP en proceso
Los servidores MCP del SDK te permiten crear herramientas personalizadas que se ejecutan directamente en el proceso de tu aplicación, proporcionando ejecución de herramientas con seguridad de tipos sin la sobrecarga de procesos separados o comunicación de red.
Creando herramientas personalizadas
Usa las funciones auxiliares createSdkMcpServer
y tool
para definir herramientas personalizadas con seguridad de tipos:
Seguridad de tipos con Zod
El auxiliar tool
proporciona inferencia completa de tipos de TypeScript desde tus esquemas Zod:
Hooks
Los hooks te permiten personalizar y extender el comportamiento de Claude Code ejecutando callbacks personalizados en varios puntos del ciclo de vida del agente. A diferencia de los hooks de CLI que ejecutan comandos bash, los hooks del SDK son funciones JavaScript/TypeScript que se ejecutan en proceso.
Definiendo hooks
Los hooks están organizados por tipo de evento, con matchers opcionales para filtrar cuándo se ejecutan:
Eventos de hook disponibles
- PreToolUse: Se ejecuta antes de la ejecución de herramientas. Puede bloquear herramientas o proporcionar retroalimentación.
- PostToolUse: Se ejecuta después de la ejecución exitosa de herramientas.
- UserPromptSubmit: Se ejecuta cuando el usuario envía un prompt.
- SessionStart: Se ejecuta cuando una sesión comienza.
- SessionEnd: Se ejecuta cuando una sesión termina.
- Stop: Se ejecuta cuando Claude está a punto de dejar de responder.
- SubagentStop: Se ejecuta cuando un subagente está a punto de detenerse.
- PreCompact: Se ejecuta antes de la compactación de conversación.
- Notification: Se ejecuta cuando se envían notificaciones.
Tipos de entrada de hook
Cada hook recibe entrada tipada basada en el evento:
Salida de hook
Los hooks devuelven salida que controla el flujo de ejecución:
Ejemplos prácticos
Registro y monitoreo
Validación de operaciones de archivo
Auto-formateo de código
Mejora de prompts
Instrucciones de compactación personalizadas
Comportamiento de ejecución de hooks
- Paralelización: Todos los hooks coincidentes se ejecutan en paralelo
- Timeout: Los hooks respetan la señal de aborto de las opciones
- Manejo de errores: Los errores de hooks se registran pero no detienen la ejecución
- Matchers: Soportan patrones regex (ej.,
"Write|Edit"
)
Combinando hooks con canUseTool
Mientras que canUseTool
proporciona control de permisos, los hooks ofrecen integración más amplia del ciclo de vida:
Control de permisos con canUseTool
El callback canUseTool
proporciona control de grano fino sobre la ejecución de herramientas. Se llama antes de cada uso de herramienta y puede permitir, denegar o modificar las entradas de herramientas:
Casos de uso para canUseTool
- Gestión de permisos: Verificar permisos de usuario antes de permitir la ejecución de herramientas
- Validación de entrada: Validar o sanear entradas de herramientas antes de la ejecución
- Limitación de tasa: Implementar límites de tasa para operaciones costosas
- Registro de auditoría: Registrar el uso de herramientas para cumplimiento o depuración
- Permisos dinámicos: Habilitar/deshabilitar herramientas basado en condiciones de tiempo de ejecución
Formatos de salida
Salida de texto (por defecto)
Salida JSON
Formatos de entrada
Ejemplos de integración de agentes
Agente de respuesta a incidentes SRE
Revisión de seguridad automatizada
Asistente legal de múltiples turnos
Esquema de mensajes
Los mensajes devueltos por la API JSON están estrictamente tipados según el siguiente esquema:
Tipos de soporte adicionales:
Los tipos Message
, MessageParam
y Usage
están disponibles en el SDK de TypeScript de Anthropic.
Recursos relacionados
- Uso y controles de CLI - Documentación completa de CLI
- Integración con GitHub Actions - Automatiza tu flujo de trabajo de GitHub con Claude
- Flujos de trabajo comunes - Guías paso a paso para casos de uso comunes