Claude Code non-interaktiv per `claude -p` aufrufen – perfekt für GitHub Actions, GitLab CI und Cron-Jobs.
Headless Mode lässt Claude Code wie jedes andere CLI-Tool laufen: einen Prompt als Argument übergeben, Output über stdout zurückbekommen. Genau das, was du brauchst, um Claude Code in GitHub Actions, GitLab CI, Jenkins oder einem Cron-Job einzusetzen.
Für Entwickler und DevOps-Teams, die Claude Code aus dem interaktiven Terminal heraus in die Automatisierung tragen wollen – von PR-Reviews über Doku-Generation bis zu Sicherheitsscans.
claude -p funktioniert und wann du es einsetzen solltest--allowedTools)-p-Flag – Das Herzstück# Einfacher Aufruf:
claude -p "Find and fix the bug in auth.py" \
--allowedTools "Read,Edit,Bash"
# JSON-Output für Pipelines:
claude -p "Review changes since main" \
--allowedTools "Read,Bash" \
--output-format json
# Stream-JSON (live-parsierbar):
claude -p "Refactor user.ts" \
--output-format stream-json
-p (für „print”) deaktiviert alle User-Interaktion: kein Tab-Complete, keine Confirmations, kein Folge-Prompt. Claude liest stdin und schreibt nach stdout – wie grep oder sed.
Ab 15. Juni 2026 zieht claude -p-Nutzung auf Subscription-Plänen aus einem neuen monatlichen Agent-SDK-Credit, getrennt von deinen interaktiven Limits. Plane CI-Pipelines mit Blick aufs Volumen – bei viel Automation lohnt sich der Wechsel zur API-Abrechnung.
Im interaktiven Modus fragt Claude vor heiklen Aktionen nach. Headless macht das nicht – du musst explizit erlauben:
# Nur Lesen + Test ausführen:
claude -p "Run tests and explain failures" \
--allowedTools "Read,Grep,Bash(npm test:*)"
# Auch Edits erlauben:
claude -p "Fix the failing test" \
--allowedTools "Read,Edit,Grep,Bash(npm test:*)"
# `--bare` ignoriert lokale Konfiguration komplett (empfohlen für CI):
claude -p "Audit dependencies" \
--allowedTools "Read,Bash(npm audit:*)" \
--bare
Bash-Befehle lassen sich mit Glob-Pattern einschränken: Bash(npm test:*) erlaubt npm test, npm test --watch, aber nicht npm run deploy.
| Format | Wofür |
|---|---|
text (default) | Lesbar für Menschen, einfach zu pipen |
json | Strukturiert – perfekt für nachgelagerte Pipeline-Schritte |
stream-json | Zeilenweise JSON, live parsierbar (z.B. für Progress-Anzeige) |
# JSON-Output direkt weiterverarbeiten:
claude -p "Summarize git log since v1.2" --output-format json \
| jq -r '.result.text' > CHANGELOG.md
PR-Auto-Review-Workflow, der auf jeden neuen PR Claude einen Kommentar mit Review-Findings posten lässt:
# .github/workflows/claude-pr-review.yml
name: Claude PR Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Claude Code
run: npm install -g @anthropic-ai/claude-code
- name: Run review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
claude -p "Review the changes in this PR. Focus on logic bugs, missing tests, and security issues. Be concise — max 5 findings." \
--allowedTools "Read,Grep,Bash(git diff:*,git log:*)" \
--bare \
--output-format json \
> review.json
- name: Post review comment
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
jq -r '.result.text' review.json \
| gh pr comment ${{ github.event.pull_request.number }} --body-file -
Lokale Claude-Code-Konfiguration (CLAUDE.md im User-Verzeichnis, persönliche Hooks, individuelle Plugins) hat in CI nichts verloren – sie würde Builds unreproduzierbar machen. --bare ignoriert alle benutzerlokalen Settings und startet Claude mit einem sauberen Slate. Das Repo-eigene CLAUDE.md und Projekt-Hooks bleiben aktiv.
Was soll dieser Run liefern? Klare Output-Form: Kommentar, JSON-Report, geänderte Datei. Headless-Tasks haben EIN Ziel.
Liste nur Tools, die für den Task zwingend nötig sind. Bash-Befehle mit Glob-Pattern (`Bash(git diff:*)`) statt unbeschränktem Bash-Zugriff.
Für Menschen: text. Für Pipeline-Steps: json oder stream-json. Bei json: das Feld `.result.text` enthält die eigentliche Antwort.
Headless hat keine Folge-Fragen – der Prompt muss alle Vorgaben enthalten: Scope, Output-Form, Längen-Limit. Bei langen Prompts → Datei mit `< prompt.md` einlesen.
Mit `--bare` lokal probieren, bevor es in die Pipeline geht. Checke: Erlaubt die Tool-Liste alles Nötige? Ist der Output stabil?
In GitHub Actions als Secret. NIEMALS commiten. `env: ANTHROPIC_API_KEY` setzt ihn für den Step.
Was passiert, wenn der Job zweimal läuft? Bei PR-Reviews: doppelter Kommentar verhindern (z.B. via Marker-String im Body).
Warum solltest du in einem CI-Lauf immer `--bare` setzen?
In CI gibt es keinen Menschen, der vor heiklen Aktionen confirmt. Die Whitelist ist deine letzte Verteidigungslinie. Niemals `*` in produktiven Pipelines.
--allowedTools "*" ist ein Sicherheitsrisiko in CI. Immer enumerieren, was wirklich gebraucht wird.--bare zu setzen: In CI lokale Settings durchzulassen, macht Builds unreproduzierbar – und manchmal unsicher (falls jemand lokal experimentelle Hooks hatte).set +x).claude -p aus einem getrennten Agent-SDK-Credit. Bei viel Volumen API-Abrechnung erwägen.Baue einen Mini-Headless-Run lokal – Doku-Aktualisierung:
claude -p "Read README.md and src/. List 3 sections of the README that are out of date." --allowedTools "Read,Grep" --bare --output-format text--output-format json → jq auf .result.textDu weißt jetzt, wie Claude Code als CLI-Tool in Pipelines läuft. Als Nächstes: Wenn Claude lokale Aktionen am Rechner ausführen soll (Browser steuern, Tabellenkalkulation öffnen), brauchst du den Guide Computer Use sicher einsetzen – eine andere Art von Headless, mit ganz eigenen Sicherheitsfragen.
Wissen testen, Entscheidungen trainieren oder den nächsten Guide starten.