SpyBara
Go Premium

headless.md 2026-05-02 18:14 UTC to 2026-05-04 22:58 UTC

225 added, 0 removed.

2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19

Ejecutar Claude Code mediante programación

Utilice el Agent SDK para ejecutar Claude Code mediante programación desde la CLI, Python o TypeScript.

El Agent SDK le proporciona las mismas herramientas, bucle de agente y gestión de contexto que potencian Claude Code. Está disponible como CLI para scripts e CI/CD, o como paquetes de Python y TypeScript para control programático completo.

Para ejecutar Claude Code mediante programación desde la CLI, pase -p con su indicación y cualquier opción de CLI:

claude -p "Find and fix the bug in auth.py" --allowedTools "Read,Edit,Bash"

Esta página cubre el uso del Agent SDK a través de la CLI (claude -p). Para los paquetes SDK de Python y TypeScript con salidas estructuradas, devoluciones de llamada de aprobación de herramientas y objetos de mensaje nativos, consulte la documentación completa del Agent SDK.

Uso básico

Agregue la bandera -p (o --print) a cualquier comando claude para ejecutarlo de forma no interactiva. Todas las opciones de CLI funcionan con -p, incluyendo:

Este ejemplo le pregunta a Claude sobre su base de código e imprime la respuesta:

claude -p "What does the auth module do?"

Comenzar más rápido con modo bare

Agregue --bare para reducir el tiempo de inicio omitiendo el descubrimiento automático de hooks, skills, plugins, servidores MCP, memoria automática y CLAUDE.md. Sin él, claude -p carga el mismo contexto que una sesión interactiva, incluyendo cualquier cosa configurada en el directorio de trabajo o ~/.claude.

El modo bare es útil para CI y scripts donde necesita el mismo resultado en cada máquina. Un hook en el ~/.claude de un compañero de equipo o un servidor MCP en el .mcp.json del proyecto no se ejecutarán, porque el modo bare nunca los lee. Solo las banderas que pasa explícitamente tienen efecto.

Este ejemplo ejecuta una tarea de resumen única en modo bare y aprueba previamente la herramienta Read para que la llamada se complete sin una solicitud de permiso:

claude --bare -p "Summarize this file" --allowedTools "Read"

En modo bare Claude tiene acceso a las herramientas Bash, lectura de archivos y edición de archivos. Pase cualquier contexto que necesite con una bandera:

Para cargar Utilice
Adiciones de indicación del sistema --append-system-prompt, --append-system-prompt-file
Configuración --settings <file-or-json>
Servidores MCP --mcp-config <file-or-json>
Agentes personalizados --agents <json>
Un directorio de plugin --plugin-dir <path>

El modo bare omite lecturas de OAuth y llavero. La autenticación de Anthropic debe provenir de ANTHROPIC_API_KEY o un apiKeyHelper en el JSON pasado a --settings. Bedrock, Vertex y Foundry utilizan sus credenciales de proveedor habituales.

Ejemplos

Estos ejemplos destacan patrones comunes de CLI. Para CI y otras llamadas con scripts, agregue --bare para que no recojan lo que esté configurado localmente.

Obtener salida estructurada

Utilice --output-format para controlar cómo se devuelven las respuestas:

  • text (predeterminado): salida de texto sin formato
  • json: JSON estructurado con resultado, ID de sesión y metadatos
  • stream-json: JSON delimitado por saltos de línea para transmisión en tiempo real

Este ejemplo devuelve un resumen del proyecto como JSON con metadatos de sesión, con el resultado de texto en el campo result:

claude -p "Summarize this project" --output-format json

Para obtener una salida que se ajuste a un esquema específico, utilice --output-format json con --json-schema y una definición de JSON Schema. La respuesta incluye metadatos sobre la solicitud (ID de sesión, uso, etc.) con la salida estructurada en el campo structured_output.

Este ejemplo extrae nombres de funciones y los devuelve como una matriz de cadenas:

claude -p "Extract the main function names from auth.py" \
  --output-format json \
  --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'

Transmitir respuestas

Utilice --output-format stream-json con --verbose e --include-partial-messages para recibir tokens a medida que se generan. Cada línea es un objeto JSON que representa un evento:

claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages

El siguiente ejemplo utiliza jq para filtrar deltas de texto y mostrar solo el texto transmitido. La bandera -r genera cadenas sin formato (sin comillas) y -j se une sin saltos de línea para que los tokens se transmitan continuamente:

claude -p "Write a poem" --output-format stream-json --verbose --include-partial-messages | \
  jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'

Cuando una solicitud de API falla con un error reintentable, Claude Code emite un evento system/api_retry antes de reintentar. Puede usar esto para mostrar el progreso del reintento o implementar lógica de retroceso personalizada.

Campo Tipo Descripción
type "system" tipo de mensaje
subtype "api_retry" identifica esto como un evento de reintento
attempt entero número de intento actual, comenzando en 1
max_retries entero reintentos totales permitidos
retry_delay_ms entero milisegundos hasta el siguiente intento
error_status entero o nulo código de estado HTTP, o null para errores de conexión sin respuesta HTTP
error cadena categoría de error: authentication_failed, oauth_org_not_allowed, billing_error, rate_limit, invalid_request, server_error, max_output_tokens, o unknown
uuid cadena identificador único del evento
session_id cadena sesión a la que pertenece el evento

El evento system/init informa metadatos de sesión incluyendo el modelo, herramientas, servidores MCP y plugins cargados. Es el primer evento en la transmisión a menos que CLAUDE_CODE_SYNC_PLUGIN_INSTALL esté configurado, en cuyo caso los eventos plugin_install lo preceden. Use los campos de plugin para fallar CI cuando un plugin no se cargó:

Campo Tipo Descripción
plugins matriz plugins que se cargaron exitosamente, cada uno con name y path
plugin_errors matriz errores de tiempo de carga de plugin como una versión de dependencia insatisfecha, cada uno con plugin, type y message. Los plugins afectados se degradan y están ausentes de plugins. La clave se omite cuando no hay errores

Cuando CLAUDE_CODE_SYNC_PLUGIN_INSTALL está configurado, Claude Code emite eventos system/plugin_install mientras los plugins del marketplace se instalan antes del primer turno. Use estos para mostrar el progreso de instalación en su propia interfaz de usuario.

Campo Tipo Descripción
type "system" tipo de mensaje
subtype "plugin_install" identifica esto como un evento de instalación de plugin
status "started", "installed", "failed", o "completed" started y completed enmarcan la instalación general; installed y failed reportan mercados individuales
name cadena, opcional nombre del marketplace, presente en installed y failed
error cadena, opcional mensaje de fallo, presente en failed
uuid cadena identificador único del evento
session_id cadena sesión a la que pertenece el evento

Para transmisión programática con devoluciones de llamada y objetos de mensaje, consulte Transmitir respuestas en tiempo real en la documentación del Agent SDK.

Aprobar herramientas automáticamente

Utilice --allowedTools para permitir que Claude use ciertas herramientas sin solicitar confirmación. Este ejemplo ejecuta un conjunto de pruebas y corrige fallos, permitiendo que Claude ejecute comandos Bash y lea/edite archivos sin pedir permiso:

claude -p "Run the test suite and fix any failures" \
  --allowedTools "Bash,Read,Edit"

Para establecer una línea base para toda la sesión en lugar de enumerar herramientas individuales, pase un modo de permiso. dontAsk deniega cualquier cosa que no esté en sus reglas permissions.allow o el conjunto de comandos de solo lectura, que es útil para ejecuciones de CI bloqueadas. acceptEdits permite que Claude escriba archivos sin solicitar y también aprueba automáticamente comandos comunes del sistema de archivos como mkdir, touch, mv y cp. Otros comandos de shell y solicitudes de red aún necesitan una entrada --allowedTools o una regla permissions.allow, de lo contrario la ejecución se aborta cuando se intenta uno:

claude -p "Apply the lint fixes" --permission-mode acceptEdits

Crear una confirmación

Este ejemplo revisa los cambios preparados y crea una confirmación con un mensaje apropiado:

claude -p "Look at my staged changes and create an appropriate commit" \
  --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

La bandera --allowedTools utiliza sintaxis de regla de permiso. El * final habilita la coincidencia de prefijo, por lo que Bash(git diff *) permite cualquier comando que comience con git diff. El espacio antes de * es importante: sin él, Bash(git diff*) también coincidiría con git diff-index.

Personalizar el indicador del sistema

Utilice --append-system-prompt para agregar instrucciones mientras mantiene el comportamiento predeterminado de Claude Code. Este ejemplo canaliza un diff de PR a Claude e le indica que revise las vulnerabilidades de seguridad:

gh pr diff "$1" | claude -p \
  --append-system-prompt "You are a security engineer. Review for vulnerabilities." \
  --output-format json

Consulte banderas de indicador del sistema para más opciones, incluyendo --system-prompt para reemplazar completamente el indicador predeterminado.

Continuar conversaciones

Utilice --continue para continuar la conversación más reciente, o --resume con un ID de sesión para continuar una conversación específica. Este ejemplo ejecuta una revisión y luego envía indicaciones de seguimiento:

# First request
claude -p "Review this codebase for performance issues"

# Continue the most recent conversation
claude -p "Now focus on the database queries" --continue
claude -p "Generate a summary of all issues found" --continue

Si está ejecutando múltiples conversaciones, capture el ID de sesión para reanudar una específica:

session_id=$(claude -p "Start a review" --output-format json | jq -r '.session_id')
claude -p "Continue that review" --resume "$session_id"

Próximos pasos