Files
claude-limbach/memory/git-permission-scope-offen.md
2026-07-09 09:08:11 +02:00

2.6 KiB

name, description, metadata
name description metadata
git-permission-scope-offen Plan — Git/cd/Datei-Operationen prompt-frei, aber strukturell auf die additionalDirectories des Projekts beschränkt; via update_scripts-Command generiert
node_type type originSessionId
memory project febf94f9-e40c-4832-b02b-908ec923f9ed

Geklärt (Stand 2026-06-20). Ziel: Im Projekt sollen Git, Verzeichniswechsel, Lesen und Schreiben ohne Permission-Prompt laufen — aber strukturell beschränkt auf die Verzeichnisse des jeweiligen Projekts (die permissions.additionalDirectories der Projekt-settings.json). Kein globales git, kein globales cd. Für limbach sind das ~/projects/limbach und ~/claude-projects/limbach; das Prinzip gilt projektweise für jedes Projekt.

Grundunterschied im Permission-Modell:

  • Bash-Regeln matchen den Befehls-String, nicht das Arbeitsverzeichnis — eine verzeichnis-beschränkte Bash-Regel ist nicht ausdrückbar. Lösung: Wrapper-Skripte, die das Zielverzeichnis fest verdrahten; nur der Wrapper-Aufruf wird erlaubt.
  • Datei-Tools (Read/Edit/Write) lassen sich auf Pfad-Globs beschränken — hier geht die echte Verzeichnis-Beschränkung direkt.

Plan — ein update_scripts-Command, der im aktuellen Projektordner die additionalDirectories aus der Settings liest und daraus generiert:

  1. git-Wrapper (analog git-sync, aber für interaktives git): Skript führt git -C <dir> … aus, Dirs fest aus den additionalDirectories. Permission-Regel: nur Bash(<pfad-zum-wrapper>:*). Aufruf bekommt Zielverzeichnis als Argument.
  2. cd-Aliasse cd-project-root / cd-claude-root: exakte Bash-Regeln je Pfad statt cd:*, z. B. Bash(cd ~/projects/limbach) und Bash(cd ~/claude-projects/limbach). cwd persistiert zwischen Bash-Calls, reicht zum Springen.
  3. Read/Edit/Write-Globs je Verzeichnis: Read(~/projects/limbach/**), Edit(~/projects/limbach/**), Write(~/projects/limbach/**) und analog für ~/claude-projects/limbach/**. Damit läuft Coden in genau diesen Dirs prompt-frei, außerhalb wird weiter gefragt.

Aufräumen: globales Bash(cd:*) in ~/claude-projects/pool/settings.json (Symlink-Ziel von ~/.claude/settings.json) wieder entfernen — vom User als „Mist" bewertet. Globale git-Regeln (git add/commit/push/…:*) ebenfalls raus, sobald die Wrapper stehen.

Hintergrund: git-sync ist davon getrennt (synct alle Repos batch-weise, git-sync). Ursache früherer Prompts war u. a. das Bündeln von Git mit Nicht-Git-Befehlen (cd … && ls, printf > datei) in einer Zeile — Permission-Matching prüft jedes &&-Segment einzeln; die Wrapper umgehen das.