Deepseek ArtifactsDeepseek Artifacts
Guía de automatización

Modo headless de Claude Code: -p, CI y la GitHub Action

Scripte Claude Code como una herramienta Unix: prompts de un disparo con claude -p, archivos por pipe, JSON parseable, sesiones que se reanudan por id, modo --bare para CI y la GitHub Action @claude construyendo features desde un issue — directo del walkthrough del propio Anthropic.

TL;DR

  • claude -p "prompt" ejecuta un disparo e imprime el resultado — sin sesión interactiva. Se combina como cualquier herramienta Unix: entra por pipe, sale por pipe, se encadena en scripts y pasos de CI.
  • --output-format json devuelve el resultado más session_id, costes y metadatos; stream-json emite eventos delimitados por saltos de línea para consumidores en tiempo real. Parsee con jq y construya encima.
  • Headless arranca sin permisos de edición ni destructivos. Conceda justo lo necesario con --allowedTools "Bash(git diff *),Edit" — sintaxis de reglas de permisos, coincidencia por prefijo.
  • La GitHub Action @claude es modo headless con interfaz: etiquete a @claude en un issue o PR y lee código, crea PRs y commits, responde preguntas y revisa código — sobre sus propios runners de GitHub.

Building headless automation with Claude Code | Code w/ Claude

Canal: Anthropic20:59

Ver

Headless mode — official documentation

Documentación oficial: code.claude.com/docs

Ver

Claude Code GitHub Action — official docs

Documentación oficial: code.claude.com/docs

Ver

Los flags, límites y comportamientos de esta página están verificados contra la documentación oficial de headless; la charla de arriba es el walkthrough del propio Anthropic y la fuente visual de las capturas.

Las capturas se atribuyen a sus creadores con enlaces profundos a los minutos exactos. No se usan tomas del ponente ni del público.

Ejecutar Claude Code en modo headless, paso a paso

Parte 1 — Bases del modo headless

  1. 1

    Qué es el modo headless

    El modo headless es Claude Code sin la interfaz interactiva: el mismo agente, pilotado por programa. Anthropic lo presenta como un bloque de construcción simple para aplicaciones agénticas — úselo como una herramienta Unix en scripts y pipelines, para automatización de CI, entornos remotos o como motor detrás de una interfaz de chat web.

    Claude Code SDK slide describing programmatic access to Claude Code in headless environments as a building block for scripts, CI tools and remote environments
    El encuadre del propio Anthropic: el SDK es acceso programático a Claude Code en entornos headless.Ver en 2:10
  2. 2

    Prompts de un disparo con claude -p

    El flag -p (o --print) ejecuta un único prompt y sale: claude -p "Write me a function that calculates the Fibonacci sequence". Nada queda abierto — obtiene la salida por stdout y un código de salida que sus scripts pueden comprobar. Combínelo con --allowedTools para conceder acceso de escritura por adelantado.

    Claude Code headless one-shot command claude -p writing a Fibonacci function with the allowedTools flag in a terminal
    Una pregunta de un disparo: claude -p genera la función de Fibonacci y sale — sin TUI ni continuación.Ver en 3:30
  3. 3

    Inyectar archivos directamente en Claude

    El stdin funciona como en cualquier herramienta CLI: cat app.log | claude -p "summarize the most common error logs". En la demo de Anthropic entran 2000 líneas de log y sale un resumen de errores en lenguaje llano — el mismo truco sirve para fallos de build, stack traces y exportaciones. El stdin por pipe tiene un tope de 10 MB.

    Piping app log files into Claude Code headless mode with cat and claude -p to summarize the most common error logs
    cat más el símbolo pipe más claude -p: dos mil líneas de log se vuelven un diagnóstico de tres frases.Ver en 3:55
  4. 4

    Decodificar salidas que odia leer

    El mismo patrón convierte salidas hostiles en respuestas: ifconfig | claude -p "what interfaces do I have configured? don't include lo". Cualquier cosa que imprima un comando — estado de red, errores del compilador, planes de terraform — puede pasar por Claude para un resumen humano.

    Claude Code headless mode explaining the output of ifconfig after piping the command result into claude -p
    ifconfig pasado por claude -p: cada interfaz explicada, loopback excluida a petición.Ver en 4:15
  5. 5

    Obtener JSON estructurado

    Añada --output-format json y la respuesta se vuelve un objeto parseable: el texto del resultado, la session_id, la duración y total_cost_usd. Para consumidores en vivo, --output-format stream-json emite eventos delimitados por líneas a medida que ocurren — la última línea es el resultado final.

    Claude Code headless JSON output showing the result field, session id and total cost from the output-format json flag
    Modo JSON: un solo bloque con el resultado, un id de sesión para reanudar después y el coste de la ejecución.Ver en 4:35

Parte 2 — Scriptar como un ingeniero

  1. 6

    Conceder herramientas con intención

    Headless arranca sin permisos de edición ni destructivos. --allowedTools preaprueba lo que la tarea necesita, con sintaxis de reglas de permisos: --allowedTools "Bash(npm run build),Bash(npm test:*),Write". Las herramientas MCP se pueden poner en lista blanca igual — conceda el conjunto más estrecho que resuelva el trabajo.

    Claude Code SDK deep dive slide listing allowedTools permission rules, output-format stream-json and the system-prompt flag
    El análisis profundo del SDK: permisos de herramientas, modos de salida estructurada y system prompts personalizados en una sola diapositiva.Ver en 11:00
  2. 7

    Conservar el contexto entre ejecuciones

    El modo JSON devuelve una session_id — pásela de vuelta con --resume "$session_id" para continuar el mismo estado de conversación desde otra ejecución u otro proceso. Así se construyen productos interactivos encima: el usuario dice algo, Claude responde y usted preserva la sesión para el siguiente turno.

  3. 8

    Gestionar permisos sin un humano

    Si no puede predecir qué herramientas necesitará Claude, --permission-prompt-tool delega las decisiones de aprobación en un servidor MCP en tiempo de ejecución — la herramienta pregunta a su servicio (o a su usuario, vía su app) si permitir cada acción, en lugar de que usted lo liste todo por adelantado.

  4. 9

    Ir a --bare para CI

    --bare se salta el autodescubrimiento de hooks, skills, comandos personalizados, subagentes, plugins, servidores MCP y CLAUDE.md para el arranque más rápido posible — recomendado para scripts y CI, y llamado a ser el valor por defecto de -p. Requiere ANTHROPIC_API_KEY y recibe el contexto explícitamente vía flags.

Parte 3 — La GitHub Action @claude

  1. 10

    Conocer la GitHub Action @claude

    La GitHub Action es modo headless con una interfaz construida sobre el SDK. Etiquete a @claude en cualquier PR o issue y puede leer su código, crear PRs, añadir commits a los existentes, responder preguntas y revisar cambios — ejecutándose en sus runners de GitHub de siempre, así que no hay infraestructura que cuidar.

    Anthropic slide listing what the Claude GitHub Action does when tagged on a pull request or issue, running on existing GitHub runners
    El contrato de la Action: etiquete a @claude, describa lo que necesita y trabaja el repositorio en sus propios runners.Ver en 17:10
  2. 11

    Asignar un issue a Claude

    En la demo en directo de Anthropic, un comentario de «@claude please implement this feature and comment on it» hizo que el bot respondiera con un plan acotado — puntos de lo que iba a construir — antes de crear la rama, los commits y el pull request, todo trazable en los logs de la Action.

    GitHub issue where tagging at-claude produced a scoped implementation plan comment for a per question timer feature
    El comentario @claude en un issue real: Claude responde con un plan acotado antes de tocar código.Ver en 7:50
  3. 12

    Instalarla en su repositorio

    El resultado es un resumen de implementación con casillas marcadas en el issue — features añadidas, todos cerrados. Para llegar ahí, abra Claude Code en su repositorio y ejecute /install-github-action: un flujo interactivo abre un PR con el YAML del workflow; luego configure las claves de API como secrets del repo y haga merge.

    GitHub issue completed by the Claude Code action showing a checked implementation summary and the features added to the quiz app
    La ejecución terminada: un resumen de implementación con cada feature que la Action añadió a la app de demo.Ver en 13:30

Headless vs interactivo vs SDK vs la GitHub Action

Cuatro maneras de pilotar el mismo agente — elija según quién (o qué) pregunta:

  • 1CLI interactiva — la sesión TUI: prompts de permiso, modo plan, /commands. Para humanos que pilotan una tarea ahora mismo.
  • 2Headless con claude -p — un disparo programático: stdin y stdout, códigos de salida, sin interfaz. Para scripts, tareas de cron y preguntas rápidas desde otras herramientas.
  • 3El Agent SDK — la misma potencia headless como librería tipada: sesiones multipaso, herramientas propias, streaming. Cuando Claude es un componente dentro de su aplicación.
  • 4La GitHub Action @claude — headless sobre el modelo de eventos de GitHub: issues, PRs y reviews en sus propios runners. Para automatización acotada al repo que todo el equipo puede disparar.
  • 5--bare headless — un arranque despojado para CI: sin CLAUDE.md, hooks, skills, plugins ni autodescubrimiento de MCP, contexto explícito vía flags, el arranque en frío más rápido.

Comparten el mismo acceso al modelo y el mismo sistema de permisos — una regla de permiso concedida a headless aplica en todas partes, por eso importa la disciplina con --allowedTools.

¿El modo headless se porta mal? Primeros auxilios

Cinco tropiezos propios del modo headless, y el arreglo de cada uno:

  • 1El script termina antes de que Claude acabe. Compruebe el código de salida: 0 es éxito, cualquier otra cosa falló. SIGTERM sale con 143 y deja el turno a medias — termine las ejecuciones con SIGINT o con interrupt() del SDK si debe parar a mitad de turno.
  • 2La entrada por pipe se truncó en silencio. El stdin tiene un tope de 10 MB — escriba los payloads grandes a un archivo y referencie la ruta en el prompt.
  • 3«--bg rejected» o un error de --cloud. Los flags de solo interactivo no aplican a -p: --bg se rechaza sin más, y --cloud necesita un id de sesión para encolar un mensaje, no una descripción de tarea.
  • 4La ejecución de CI ignora su CLAUDE.md y sus hooks. Es --bare haciendo su trabajo: se salta el autodescubrimiento. Pase el contexto explícitamente con --settings, --mcp-config, --agents o --plugin-dir.
  • 5Las tareas bash en segundo plano mueren a mitad de ejecución. Los shells en segundo plano se matan unos 5 segundos después de llegar el resultado; los subagentes y workflows mantienen el proceso vivo hasta un tope de inactividad de 10 minutos. Espérelos explícitamente en CI.

Para todo lo demás, añada --verbose y lea los eventos stream-json — system/init nombra el modelo, las herramientas y los servidores MCP que se cargaron de verdad.

Preguntas frecuentes

Guías relacionadas de Claude Code