Claude hat ein Home-Verzeichnis gelöscht. Danke dafür.
This article is also available in English.
Ich hab darauf gewartet.
Nicht gehofft, aber gewartet. Claude Code wird von Millionen genutzt. Irgendwann musste es passieren.
rm -rf tests/ patches/ plan/ ~/
Zwei Zeichen am Ende. ~/. Home-Verzeichnis weg.
Ich hab die Geschichte auf Reddit gefunden, dann auf GitHub. Überall dieselbe Reaktion: Häme. „Hab ich’s doch gesagt." Dumm.
Dabei ist der Vorfall interessant. Er hat mich zu einer Recherche gebracht, die ich sonst nie gemacht hätte. Und zu einer Lösung, die tatsächlich funktioniert.
Was mich stutzig gemacht hat
Das Interessante: Claude lief angeblich nicht im YOLO-Mode. Mehrere Quellen bestätigen das. Wie kann es sein, dass rm -rf dennoch ausgeführt wurde?
Der Nutzer hatte in seiner Config explizit geschrieben: Niemals löschen. Claude löschte trotzdem.
Ich bin tiefer gegraben. Und was ich gefunden habe, hat mich aufhorchen lassen.
Die deny Permissions in settings.json funktionieren für Read/Write Tools nicht zuverlässig. Eine Config ist ein Hinweis an Claude. Kein Gesetz. Keine Garantie.
Ich dachte, ich wäre sicher mit meinen deny Rules. Ich hab sie sorgfältig gepflegt, alle gefährlichen Befehle aufgelistet, mich in Sicherheit gewogen.
War ich nicht.
Das zu wissen, bevor es mein Home-Verzeichnis trifft – unbezahlbar.
Mein Setup jetzt
Erste Schicht: /sandbox
Bubblewrap auf Linux, Seatbelt auf macOS. Alle Child-Prozesse laufen isoliert. Das ist gut. Das ist wichtig. Aber für destruktive Befehle reicht es nicht.
Zweite Schicht: PreToolUse Hook
Der einzig zuverlässige Weg, Befehle wirklich zu blockieren:
.claude/settings.json:
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "python3 $CLAUDE_PROJECT_DIR/.claude/hooks/block_dangerous.py"
}]
}]
}
}
.claude/hooks/block_dangerous.py:
import sys, json
data = json.load(sys.stdin)
if data.get("tool_name") == "Bash":
cmd = data.get("tool_input", {}).get("command", "")
if any(d in cmd for d in ["rm -rf", "rm -rf ~", "rm -rf /", "> /dev/"]):
print(f"BLOCKED: {cmd}", file=sys.stderr)
sys.exit(2)
sys.exit(0)
Exit 2 blockiert den Befehl. stderr geht zurück an Claude, damit es versteht warum.
Dritte Schicht: Snapshots
ZFS, Btrfs, Time Machine – egal was. Hauptsache automatisiert, Hauptsache vor jeder Session. Wenn alles andere versagt, hast du einen Checkpoint.
RIP Home-Verzeichnis
An den Reddit-User, dessen Daten sterben mussten, damit ich aufwache: Es war nicht umsonst.
Ich arbeite jetzt mit 84% weniger Permission-Prompts. Schneller und sicherer als vorher. Volle Autonomie, echte Guardrails.
Dein Home-Verzeichnis ist nicht umsonst gestorben.
Danke.