Files
claude-projects/limbach/memory/git-permission-scope-offen.md
T
2026-06-20 16:44:41 +02:00

25 lines
2.6 KiB
Markdown

---
name: git-permission-scope-offen
description: "Plan — Git/cd/Datei-Operationen prompt-frei, aber strukturell auf die additionalDirectories des Projekts beschränkt; via update_scripts-Command generiert"
metadata:
node_type: memory
type: project
originSessionId: 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/global/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.