Inicio de CLI
CLINotFoundError: Claude Code no encontrado
El SDK de Python inicia la CLI de Claude Code como un subproceso. Cuando no puede encontrar un ejecutableclaude, la conexión falla con un CLINotFoundError:
ClaudeAgentOptions(cli_path=...) y apunta a un archivo faltante. Sin cli_path, el SDK busca en su PATH y ubicaciones de instalación comunes, e incluye instrucciones de instalación para su plataforma.
Para corregirlo:
- Instale Claude Code si no está instalado. Consulte Install Claude Code para el comando en su plataforma.
- Si establece
cli_path, confirme que el archivo existe y es el ejecutableclaude. - Si confía en la resolución de
PATH, confirme queclaude --versionfunciona en el mismo entorno en el que se ejecuta su aplicación. Los procesos que inicia fuera de su shell, como desde un IDE o un administrador de servicios, a menudo se ejecutan con unPATHdiferente.
pathToClaudeCodeExecutable. Haga coincidir el mensaje que ve:
Native CLI binary for <platform>-<arch> not found: el paquete de plataforma incluido falta, la mayoría de las veces porque la instalación omitió dependencias opcionales. Reinstale@anthropic-ai/claude-agent-sdksin omitir dependencias opcionales, o apuntepathToClaudeCodeExecutablea una instalación nativa. En un ejecutable de archivo único compilado conbun build --compile, el mismo mensaje tiene una causa y solución diferentes. Consulte Compile to a single executable.Claude Code native binary not found at <path>oClaude Code executable not found at <path>. Is options.pathToClaudeCodeExecutable set?: el archivo en la ruta resuelta falta, o el proceso no puede acceder a él. Confirme que el archivo existe en esa ruta y que el proceso puede acceder a él.
CLIConnectionError: Refusing to execute batch script
En Windows, la conexión falla con unCLIConnectionError cuando la ruta de CLI que usa el SDK de Python es un script por lotes .bat o .cmd, incluido el shim claude.cmd que crea una instalación npm:
cmd.exe /c, y cmd.exe reanaliza toda la línea de comandos en tiempo de ejecución, por lo que un valor de argumento puede ejecutar comandos inyectados.
La mayoría de las instalaciones de Windows nunca alcanzan este error. La rueda x64 de Windows de claude-agent-sdk incluye un claude.exe, y el SDK prefiere la CLI incluida, luego cualquier claude.exe nativo que pueda descubrir, antes de recurrir a un shim por lotes. Ve la negativa en dos casos:
- Establece
ClaudeAgentOptions(cli_path=...)en un archivo.bato.cmd, como el shimclaude.cmdde npm. - Su instalación no tiene un
claude.exeincluido o nativo, por ejemplo una instalación de fuente en ARM64 Windows donde el únicoclaudeen suPATHes el shim npm.
- Si establece
ClaudeAgentOptions(cli_path=...), apúntelo a unclaude.exeo elimine la opción. El SDK omite el descubrimiento mientrascli_pathestá establecido, por lo que una instalación nativa sola no puede tener efecto. - Instale Claude Code de forma nativa en PowerShell:
irm https://claude.ai/install.ps1 | iex - En Windows x64, instale la rueda
claude-agent-sdk, que incluyeclaude.exe.
claude-agent-sdk 0.2.124, el SDK de Python generaba scripts por lotes a través de cmd.exe sin esta verificación.
CLIConnectionError: Failed to start Claude Code
El SDK encontró un archivo en la ruta resuelta pero no pudo iniciarlo. Python genera estos errores como unCLIConnectionError. TypeScript rechaza la iteración del mensaje con un error sin clase SDK. La tabla a continuación asigna cada mensaje a lo que le dice. Haga coincidir el mensaje que ve:
En ambos SDK, la causa habitual es una ruta resuelta que apunta a algo que no puede ejecutarse, como un archivo de texto, un directorio o un archivo sin permiso de ejecución. Lea la sugerencia de libc del mensaje de binario nativo como una posible causa.
Para corregirlo en cualquier SDK:
- Confirme que la ruta configurada apunta al ejecutable
claudeen sí y que el archivo tiene permiso de ejecución. - Si no necesita una ruta personalizada, elimine
cli_pathen Python opathToClaudeCodeExecutableen TypeScript para que el SDK encuentre una CLI por su cuenta, prefiriendo su copia incluida. - Cuando el binario que falla es la copia incluida del SDK en una imagen de contenedor, reinstale el SDK durante la compilación de la imagen para que el binario incluido coincida con la plataforma del contenedor, o reconstruya la imagen para la arquitectura en la que se ejecuta. La causa habitual es un binario que no coincide con la arquitectura o libc del contenedor, o uno que perdió su permiso de ejecución en la compilación de la imagen.
CLIConnectionError: Not connected
Llamar a un métodoClaudeSDKClient en Python antes de que el cliente se haya conectado, o después de que se haya desconectado, genera un CLIConnectionError con este mensaje:
await client.connect() antes de cualquier otro método de cliente, o abra el cliente con async with ClaudeSDKClient() as client:, que se conecta al entrar.
Salida del proceso CLI
Las entradas en esta sección significan que el proceso de Claude Code terminó mientras su aplicación lo estaba usando. Qué error ve depende del idioma del SDK y de si la CLI reportó un resultado de error antes de salir.ProcessError: Command failed with exit code
El SDK de Python genera unProcessError cuando el proceso de Claude Code sale con un código distinto de cero:
Error output es texto fijo en lugar de la salida de error de su proceso. El mismo texto fijo llena el atributo stderr de la excepción. El atributo exit_code de la excepción lleva el código. Para capturar lo que la CLI realmente escribió en stderr, pase un callback stderr en ClaudeAgentOptions y registre lo que recibe.
Un ProcessError simple significa que la CLI salió sin reportar un resultado de error. Cuando la CLI reportó uno, el SDK genera ResultError en su lugar, cubierto en Claude Code returned an error result. ResultError subclasifica ProcessError, por lo que except ProcessError captura ambos. Para manejarlos de manera diferente, coloque la cláusula except ResultError primero.
Antes de claude-agent-sdk 0.2.140, el SDK de Python generaba salidas de resultado de error como una Exception simple en lugar de un ResultError.
Claude Code process exited with code N
Los wrappers de IDE también imprimen este mensaje, y la referencia de error la cubre para VS Code y otros lanzadores. Esta entrada cubre lo que recibe su código del SDK de TypeScript. El SDK presenta una salida de CLI con código distinto de cero como unError simple que rechaza el bucle for await sobre los mensajes de query(). No hay clase de error SDK para capturar, así que envuelva el bucle en try/catch y haga coincidir el mensaje:
stderr en las opciones de consulta. Un proceso eliminado por una señal reporta Claude Code process terminated by signal <name> en la misma forma.
Claude Code returned an error result
Ambos SDK reemplazan el error de salida del proceso con este mensaje cuando la CLI reportó un resultado de error antes de salir:ResultError, cuyo atributo data lleva el resultado de error completo. TypeScript rechaza el bucle de mensajes con un Error simple que lleva la misma forma de mensaje.
Salidas estructuradas
structured_output es None pero el resultado dice éxito
Un mensaje de resultado puede terminar consubtype: "success" mientras structured_output es None en Python o undefined en TypeScript. La ejecución se completa, pero no existe una salida validada. Una forma de alcanzar esto es un esquema que ninguna salida puede satisfacer, por ejemplo restricciones de longitud conflictivas. La ejecución termina sin un error de validación, y la única señal es el structured_output faltante.
Trate este resultado como un error en el código de la aplicación. Verifique tanto que subtype sea success como que structured_output esté presente antes de usarlo. La sección Error handling muestra este patrón para ambos SDK.
Si sucede repetidamente con un esquema que cree que es correcto, verifique que el esquema sea satisfacible, luego simplifíquelo hasta que las salidas se validen, e reintroduzca las restricciones una a la vez.