GuideFortgeschrittenAutomation

Claude Code headless im CI/CD

Claude Code non-interaktiv per `claude -p` aufrufen – perfekt für GitHub Actions, GitLab CI und Cron-Jobs.

Stable Aktualisiert: Mai 2026 Plattform: Terminal / CI Plan: Pro / Max / Team / API
Für wen
Entwickler und DevOps-Teams, die Claude Code in automatisierten Pipelines einsetzen wollen.
Wann nutzen
Wenn ein Workflow regelmäßig laufen soll – PR-Auto-Review, Doku-Generation, Test-Triage, Migration-Checks – und niemand vor dem Terminal sitzt.
Wann nicht
Für explorative Arbeit oder Aufgaben, bei denen du Zwischenfragen beantworten musst – bleib im interaktiven Modus.

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 wen ist das?

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.

Was lernst du?

  • Wie claude -p funktioniert und wann du es einsetzen solltest
  • Wie du Tool-Zugriff im non-interaktiven Modus absicherst (--allowedTools)
  • Wie du JSON-Output für nachgelagerte Pipeline-Schritte nutzt
  • Wie du Claude Code in GitHub Actions integrierst (komplettes Beispiel)
  • Welche Kosten-Regelung ab Juni 2026 gilt

Wann nutzen?

  • PR-Auto-Reviews: Jeder neue PR bekommt einen Claude-Review-Kommentar
  • Doku-Aktualisierung: Nightly Job hält die README aktuell, wenn sich die API ändert
  • Test-Triage: Failed-CI-Runs werden automatisch nach Root-Cause gruppiert
  • Security-Scan: Wöchentliches Audit von Dependencies und Secrets
  • Migration-Checks: Vor jedem Deploy prüft Claude die Migrations-Diff

Wann nicht?

  • Bei explorativer Arbeit ohne klares Ziel
  • Wenn du mehrstufige Rückfragen brauchst – non-interaktiv erlaubt keine Konversation
  • Bei sicherheitskritischen Schreibaktionen ohne Review – Headless darf nur, was du explizit erlaubst

Der -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.

HINWEIS

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.

Tool-Zugriff absichern

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.

Output-Formate

FormatWofür
text (default)Lesbar für Menschen, einfach zu pipen
jsonStrukturiert – perfekt für nachgelagerte Pipeline-Schritte
stream-jsonZeilenweise 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

GitHub Actions: Komplettes Beispiel

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 -
Verstehen Warum `--bare` in CI Pflicht ist

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.

Headless-Run aufbauen – Schritt für Schritt

1

Ziel definieren

Was soll dieser Run liefern? Klare Output-Form: Kommentar, JSON-Report, geänderte Datei. Headless-Tasks haben EIN Ziel.

2

Tool-Whitelist minimal halten

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.

Tipp Ein PR-Reviewer braucht `Read,Grep,Bash(git diff:*,git log:*)` – nichts schreiben können.
3

Output-Format wählen

Für Menschen: text. Für Pipeline-Steps: json oder stream-json. Bei json: das Feld `.result.text` enthält die eigentliche Antwort.

4

Prompt knackig formulieren

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.

5

Lokal testen

Mit `--bare` lokal probieren, bevor es in die Pipeline geht. Checke: Erlaubt die Tool-Liste alles Nötige? Ist der Output stabil?

6

API-Key bereitstellen

In GitHub Actions als Secret. NIEMALS commiten. `env: ANTHROPIC_API_KEY` setzt ihn für den Step.

7

Idempotenz prüfen

Was passiert, wenn der Job zweimal läuft? Bei PR-Reviews: doppelter Kommentar verhindern (z.B. via Marker-String im Body).

Quick Check

Warum solltest du in einem CI-Lauf immer `--bare` setzen?

Gut vs. Schlecht
In CI `claude -p 'Fix issues'` mit `--allowedTools '*'` aufrufen – Claude darf alles, also auch `Bash(rm -rf)`.
Strikte Whitelist: `--allowedTools 'Read,Edit,Bash(npm test:*,npm lint:*)'` plus `--bare`. Was Claude nicht braucht, darf es nicht.

In CI gibt es keinen Menschen, der vor heiklen Aktionen confirmt. Die Whitelist ist deine letzte Verteidigungslinie. Niemals `*` in produktiven Pipelines.

Typische Fehler

  • Zu lockere Tool-Whitelist: --allowedTools "*" ist ein Sicherheitsrisiko in CI. Immer enumerieren, was wirklich gebraucht wird.
  • Vergessen, --bare zu setzen: In CI lokale Settings durchzulassen, macht Builds unreproduzierbar – und manchmal unsicher (falls jemand lokal experimentelle Hooks hatte).
  • Kein Längen-Limit im Prompt: Headless-Runs ohne Längen-Vorgabe können seitenweise produzieren. Bei PR-Kommentaren: „Be concise – max 5 findings”.
  • Idempotenz vergessen: Ohne Schutz kommentiert jeder Re-Run nochmal. Marker-String im Kommentar prüfen oder bestehenden Kommentar updaten.
  • API-Key leaken: Im Workflow als Secret, nie als Plain-Text. Echo des Keys in Logs vermeiden (set +x).
  • Kosten unterschätzen: Ab 15. Juni 2026 zieht claude -p aus einem getrennten Agent-SDK-Credit. Bei viel Volumen API-Abrechnung erwägen.

Mini-Übung

Baue einen Mini-Headless-Run lokal – Doku-Aktualisierung:

  1. In einem kleinen Repo: 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
  2. Output prüfen – bekommst du eine knappe Liste?
  3. Variante mit JSON: --output-format jsonjq auf .result.text
  4. Längen-Limit einbauen: „Max 80 words.” – wird der Output kompakter?
  5. Wenn das stabil läuft, hast du die Grundlage für jeden CI-Workflow

Nächster Schritt

Du 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.

Lerncoach regelbasiert
Sofort-Hilfe aus dem Inhalt dieser Seite.
War das hilfreich?
Guide abgeschlossen
Damit kannst du jetzt: `claude -p` für non-interaktive Runs, `--allowedTools` zur Absicherung, JSON-Output für Pipelines – Claude Code wird zum scriptbaren Bauteil.
Lernstatus 22 von 25 Guides
Neu → In Arbeit → Verstanden → Praxis

Gelesen?
Dann anwenden.

Wissen testen, Entscheidungen trainieren oder den nächsten Guide starten.

Esc

Wonach suchst du?

Begriffe wie MCP, Prompt, Desktop oder Haiku probieren.