Architecture Decision Record · 0006

Agent Memory: geteilt im Repo, nicht in den User-Pfad symlinken

TL;DR — Team-relevante Agent-Memos werden unter .claude/memory/ git-getrackt; der User-Pfad (~/.claude/projects/…/memory/) bleibt isoliert. Synchronisation ist manuell und gerichtet — Reibung ist der Review-Punkt.

Kontext

Claude Code unterhält ein file-basiertes Memory-System mit User-, Feedback-, Project- und Reference-Memos. Memory persistiert zwischen Sessions in einem deterministischen Pfad pro User und Repo: ~/.claude/projects/<encoded-cwd>/memory/. Pfad-Encoding tauscht Slashes durch Dashes — für /Users/x/Sites/solcom ergibt sich ~/.claude/projects/-Users-x-Sites-solcom/memory/.

Inhaltlich enthält Memory in diesem Repo zwei Klassen von Memos:

Ohne weitere Maßnahmen divergieren beide Klassen pro User-Maschine — neue Devs im Team starten ohne Zugriff auf die Team-relevanten Memos. Drei Constraints:

  1. Claude-Code-Pfad ist hardcoded und macht keine Repo-relative Resolution.
  2. Memos der „persönlichen" Klasse dürfen nicht ins Repo wandern.
  3. Setup-Friktion für neue Devs muss niedrig bleiben.

Entscheidung

Team-Memory wird im Repo unter .claude/memory/ git-tracked. Der globale Claude-Code-Memory-Pfad pro User bleibt eigenständig, ohne Symlink-Kopplung zum Repo. Konkret:

Onboarding: git clone + übliches Drupal-Setup — keine Symlink-Operation, keine zusätzliche Pfad-Konfiguration. Team-Memory ist sofort verfügbar über .claude/memory/.

Rejected alternatives

Symlink: globaler User-Pfad → <repo>/.claude/memory/ rejected

Technisch der einzige Weg, Repo-Memory live an Claude Code zu hängen. Verworfen, weil das die Persönlich/Team-Trennung kollabiert: persönliche Korrektiv-Memos einer Session würden ins Repo geschrieben, ohne dass der User sie reviewen kann. Außerdem unnötige Pro-Maschine-Setup-Reibung.

Repo-only Memory (kein User-Pfad, alle Memos ins Repo) rejected

Würde die zwei Klassen vermischen — persönliche Korrekturen aus Session-Verläufen wären sofort im git-Diff sichtbar. Außerdem inkompatibel mit dem Claude-Code-System, das hardcoded den User-Pfad nutzt.

Per-User-Branch im Repo (z. B. agent-memory/marc) rejected

Würde Personal-Memos versionieren, die das nicht brauchen, und blast-radius-mäßig den Repo mit User-Branches überfluten. Zusätzlich Git-Reibung (Branch-Pflege, Merge-Konflikte beim Update von MEMORY.md-Index).

Setup-Skript bin/setup-claude-memory.sh mit Symlink-Logik plus Backup rejected

Reduziert die Setup-Reibung gegenüber dem Symlink-Snippet, ändert aber nichts am fundamentalen Problem: Persönlich/Team verschmelzen, sobald der Symlink steht.

Drupal-Modul oder Hook, das Memory-Files aus dem Repo in den User-Pfad kopiert rejected

Bringt Drupal als Synchronisations-Mechanismus in einen Tooling-Kontext, der nichts mit Drupal zu tun hat — Coupling-Smell. Außerdem kein Zwei-Wege-Sync.

In CLAUDE.md anweisen, alle Schreibaktionen ins Repo statt in den User-Pfad zu lenken rejected

Scheitert: (a) Claude-Code-Behaviors-Pfad ist nicht durch CLAUDE.md änderbar; (b) selbst wenn es ginge, würde es den persönlichen Memo-Schutz aushebeln.

Consequences

FAQ

Wie kommt ein neuer Dev an die Team-Memos?
git clone genügt — .claude/memory/ ist im Repo. Kein zusätzliches Setup-Skript, kein Symlink nötig. Wer die Memos auch im Live-Memory-Pfad haben möchte, kopiert sie manuell nach ~/.claude/projects/-Users-<name>-Sites-solcom/memory/.
Was passiert, wenn Claude Code im Live-Workflow ein Memo überschreibt?
Nur der User-Pfad wird überschrieben — .claude/memory/ im Repo bleibt unberührt bis zu einem expliziten Commit. Kein automatischer Durchgriff in die andere Richtung.