Claude Code unbeaufsichtigt laufen lassen, ohne es zu bereuen
Ein Coding-Agent, der vor jedem Befehl fragt, ist sicher und über Nacht nutzlos. Er hält beim ersten Prompt an und wartet bis zum Morgen. Die Lösung ist nicht, jede Prüfung abzuschalten. Sie besteht darin, vorher festzulegen, was der Agent allein tun darf, was er nie tun darf und wann er fragen soll. Diese Seite ist diese Festlegung, mit den Einstellungen, die sie durchsetzen.
Beginnen Sie bei der Maschine, nicht bei den Flags
Jede Leitplanke unten ist einfacher, wenn der Agent auf einer Maschine läuft, auf der sonst nichts liegt. Auf Ihrem Laptop bedeutet “alles erlauben” Ihre E-Mails, Ihren Passwortmanager, Ihre Produktions-Zugangsdaten und Ihre Fotos. Auf einer dedizierten Maschine mit einem Repository und einem eng begrenzten Token bedeutet “alles erlauben” genau dieses Repository und diesen Token. Anthropics eigene Empfehlung lautet: Der Bypass-Modus gehört in eine isolierte Umgebung. Stellen Sie den Agent in eine, und der Rest dieser Seite wird einfacher.
Die Berechtigungsmodi von Claude Code
Claude Code hat vier Modi. Wählen Sie einen pro Aufgabe, nicht einen für immer.
- default. Fragt vor Dateiänderungen und Shell-Befehlen. Richtig für interaktive Arbeit. Falsch für die Nacht.
- acceptEdits. Bearbeitet Dateien im Arbeitsverzeichnis ohne Nachfrage. Fragt weiter vor Shell-Befehlen. Ein guter Mittelweg für Refactorings, bei denen die Tests entscheiden.
- plan. Liest und denkt nach, ändert aber nichts. Nutzen Sie ihn für einen Plan, den Sie vor dem echten Lauf prüfen.
- bypassPermissions. Gar keine Nachfragen. Das ist der Modus für unbeaufsichtigte Läufe. Nutzen Sie ihn nur auf einer isolierten Maschine und nur mit den Deny-Regeln von unten.
Legen Sie den Modus beim Start fest.
claude --permission-mode acceptEdits
Oder machen Sie einen Modus in der Einstellungsdatei eines Projekts zum Standard. Diese Datei können Sie committen, damit das ganze Team sie teilt.
// .claude/settings.json
{
"permissions": {
"defaultMode": "acceptEdits"
}
}Deny-Regeln wirken in jedem Modus
Diesen Teil übersehen die meisten. Berechtigungsregeln liegen über dem Modus. Eine Deny-Regel blockiert die Aktion sogar im Bypass-Modus. Deshalb sind Deny-Regeln das eigentliche Sicherheitsnetz für unbeaufsichtigte Läufe. Allow-Regeln genehmigen vorab, wozu Sie ohnehin jedes Mal ja sagen würden. So bleibt der Agent dort nicht hängen.
// .claude/settings.json
{
"permissions": {
"allow": [
"Bash(npm test:*)",
"Bash(npm run lint:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git push origin HEAD:*)"
],
"deny": [
"Bash(git push:*--force*)",
"Bash(git push origin main:*)",
"Bash(rm -rf:*)",
"Bash(curl:*)",
"Read(./.env)",
"Read(./.env.*)",
"Read(~/.ssh/**)"
]
}
}Lesen Sie die Deny-Liste als Richtlinie, denn genau das ist sie. Keine Force-Pushes. Kein Push auf main. Kein rekursives Löschen. Keine ausgehenden Anfragen, die sich der Agent selbst ausdenkt. Kein Lesen von Dateien mit Secrets. Passen Sie die Liste an Ihr Projekt an. Aber führen Sie auf jeder unbeaufsichtigten Maschine eine Deny-Liste.
Hooks für Regeln, die kein Muster ausdrücken kann
Manche Regeln hängen vom Kontext ab. Ein Hook führt vor einem Tool-Aufruf ein Skript aus. Er kann den Aufruf genehmigen, blockieren oder ändern. Ein häufiger Hook blockiert jeden Befehl, der einen Hostnamen aus der Produktion enthält, egal welcher Befehl es ist.
// .claude/settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "./scripts/block-prod.sh" }
]
}
]
}
}Das Skript liest den Tool-Aufruf von der Standardeingabe. Mit einem Exit-Code ungleich null blockiert es ihn. Halten Sie Hooks klein und langweilig. Ein Hook, der unbemerkt fehlschlagen kann, ist schlimmer als gar keiner.
Git ist Ihre beste Leitplanke
Einstellungen im Agent sind eine Ebene. Das Repository ist eine zweite Ebene, der es egal ist, welcher Agent läuft.
- Schützen Sie main. Verlangen Sie für einen Merge einen Pull Request und einen grünen CI-Lauf. Dann kann ein fehlgeleiteter Push nichts einspielen.
- Ein Branch pro Aufgabe. Der Agent beginnt auf einem frischen Branch und pusht nur diesen Branch.
- Geben Sie dem Agent einen Token, der Branches pushen und Pull Requests öffnen kann, sonst nichts. Kein Admin-Scope. Kein Delete-Scope. Ein fine-grained GitHub-Token für ein einziges Repository leistet genau das.
- Die Tests entscheiden. Wenn die Suite fehlschlägt, bleibt der Pull Request rot, und Sie sehen es am Morgen.
Zugangsdaten: minimal und getrennt
Legen Sie nie persönliche Zugangsdaten auf eine unbeaufsichtigte Maschine. Erstellen Sie für den Agent ein eigenes Konto oder einen eigenen Token, mit dem kleinsten Scope, der für die Aufgabe reicht. Staging, nicht Produktion. Nur Lesezugriff, wo Lesen genügt. Wenn sich der Agent über einen Browser bei einem Dienst anmelden muss, nutzen Sie ein Testkonto. Tauschen Sie den Token aus, wenn das Projekt endet.
Headless-Läufe mit Obergrenze
Für eine Aufgabe per Skript führt der Print-Modus einen Prompt aus und beendet sich. Geben Sie ihm ein Limit für die Züge. Dann kann ein verwirrter Agent nicht die ganze Nacht im Kreis laufen.
claude -p "Fix the failing tests in packages/api and open a PR" \ --permission-mode acceptEdits \ --max-turns 60
Schreiben Sie die Ausgabe in eine Logdatei. Am Morgen wollen Sie nachlesen, was er getan hat, und nicht raten.
Dieselben Regeln für Codex
Codex CLI trennt zwei Fragen. Wann fragt es nach einer Freigabe? Und was darf es anfassen? Für eine unbeaufsichtigte Aufgabe in einem Repository lautet die Kombination: nie fragen und nur im Workspace schreiben.
codex -a never -s workspace-write exec "Fix the failing tests and commit"
Codex hat außerdem ein Flag, das sowohl die Freigaben als auch die Sandbox entfernt. Behandeln Sie es genau wie den Bypass-Modus von Claude Code. Nur auf einer isolierten Maschine oder gar nicht.
Die Nie-Liste
Egal welches Tool Sie nutzen: Ein unbeaufsichtigter Agent sollte nichts davon tun können. Wenn Ihr Setup eines davon erlaubt, beheben Sie das vor dem ersten Lauf über Nacht.
- Auf einen geschützten Branch pushen oder irgendwo einen Force-Push machen.
- Ein Secret lesen oder versenden, das er für die Aufgabe nicht brauchte.
- Produktionsdaten anfassen, auch nicht lesend.
- Geld ausgeben. Keine Cloud-Konsolen, keine Zahlungsseiten, keine Werbekonten.
- Nachrichten an Menschen schicken. Keine E-Mail, kein Chat, keine sozialen Netzwerke.
- Irgendetwas außerhalb des Arbeitsverzeichnisses löschen.
Häufige Fragen
Ist --dangerously-skip-permissions dasselbe wie bypassPermissions?
+
Ja. Das Flag und der Name des Berechtigungsmodus bewirken dasselbe: keine Nachfragen. Ein Administrator kann diesen Modus über verwaltete Einstellungen komplett abschalten. Dann funktionieren weder das Flag noch die Einstellung.
Gelten Deny-Regeln wirklich im Bypass-Modus?
+
Ja. Deny-Regeln blockieren in jedem Modus, auch in bypassPermissions. Genau deshalb sind sie das richtige Sicherheitsnetz für unbeaufsichtigte Läufe.
Was ist der sicherste sinnvolle Modus für die Nacht?
+
acceptEdits mit einer Deny-Liste und einem geschützten main-Branch. Der Agent bearbeitet frei, die Tests entscheiden. Alles, was einen nicht vorab genehmigten Shell-Befehl braucht, wartet auf Sie. Fügen Sie Allow-Regeln für die Befehle hinzu, bei denen er wartet.
Sollte der Agent als Admin-Benutzer laufen?
+
Unter macOS muss er das meist, weil Homebrew und Xcode es erwarten. Auch das spricht für eine dedizierte Maschine. Admin auf einer Kiste mit einem einzigen Repository richtet wenig Schaden an. Admin auf Ihrem Laptop schon.