Deine Coding-Agents debuggen nicht mehr neu, was du längst behoben hast.
Claude Code, Codex, Cursor und die übrigen Agents dieser Maschine speichern jede Session ohnehin auf der Platte.
deja indiziert alles, auch Monate zurück, und gibt dem Agenten,
der gerade arbeitet, den Teil, der zählt.
```sh
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
```
Recall 97.2% R@5 auf LongMemEval-S alle 500 Fragen · MemPalace 96.6%, agentmemory 95.2% dieselben 19,195 Sessions: 19/100 auf Rang eins, der Nächstbeste 14
Tokens halb so viele Tokens wie agentmemory 53,558 gegen 104,974 bei einer schon gelösten Aufgabe 477 Tokens Tool-Definitionen, die wenigsten von sieben
Indexzeit 13.6 s für den Index über 19,195 Sessions der Nächste von sieben: 72 s 26 ms bis zur ersten Antwort, Suche im Median 97 ms
## Installation
```sh
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
```
Das Skript legt die Binärdatei in `~/.local/bin` ab. Steht dieses Verzeichnis noch nicht im `PATH`, findet dieselbe Shell den zweiten Befehl nicht: Führe die `next:`-Zeile aus, die das Skript mit vollem Pfad ausgibt, oder öffne eine neue Shell, sobald die `PATH`-Zeile eingetragen ist.
Falls `raw.githubusercontent.com` nicht erreichbar ist, gibt es einen npm-Spiegel mit derselben Version:
```sh
npm i -g @vshulcz/deja-vu --registry=https://registry.npmmirror.com
deja install --auto
```
Zehn Sekunden zum Installieren, etwa zehn zum Indizieren. Der zweite Befehl bindet MCP-Recall an jeden
gefundenen Agenten, schaltet den Recall beim Session-Start ein, wo der Agent das unterstützt, und baut den
ersten Index, damit die nächste Session auf nichts warten muss.
Öffne eine neue Agenten-Session und frag nach etwas von vor Monaten:
> hatten wir schon mal was mit jwt refresh rotation? schau in deinem Gedächtnis nach
Fragen musst du nicht einmal: mit automatischem Recall weiß der Agent schon beim Öffnen der Session, was in
diesem Projekt gelöst wurde. Um selbst nachzusehen, starte `deja`.
opencode, DeepSeek Harness, Zed, Kimi Code, Codex CLI, Grok Build, OpenClaw, pi und Hermes haben zusätzlich ein Paket
im eigenen Ökosystem, für alle, die Erweiterungen von dort installieren:
```sh
opencode plugin opencode-deja
dsh plugin --profile web add dsh-deja
# Zed: im Erweiterungs-Panel nach deja suchen
# Kimi Code: /plugins install https://github.com/vshulcz/deja-vu
# Codex CLI: codex plugin marketplace add https://github.com/vshulcz/deja-vu && codex plugin add deja-vu@deja-vu
# Grok Build: grok plugin marketplace add vshulcz/deja-vu && grok plugin install deja
openclaw plugins install clawhub:@vshulcz/openclaw-deja && openclaw config set plugins.entries.deja-vu.hooks.allowConversationAccess true
pi install npm:@vshulcz/pi-deja
hermes plugins install deja-memory
```
`deja install --auto` bindet all das ohnehin an, einer der beiden Wege genügt also. Beide zusammen stören auch
nicht: jedes Paket liest, was `deja install` geschrieben hat, und ergänzt nur das Fehlende — keine doppelt
registrierten Tools, kein zweiter Recall. Die Details stehen in [`extensions/`](../../extensions).
Dieselbe Suche gibt es als Skill, installierbar von jedem Agenten, der `SKILL.md` liest:
```sh
npx skills add https://github.com/vshulcz/deja-vu --skill deja-search # skills CLI: Claude Code, Cursor, Goose, Copilot…
openclaw skills install @vshulcz/deja-search # ClawHub
hermes skills install vshulcz/deja-vu/skills/deja-search # Hermes
```
Der Skill ruft das installierte `deja`-Binary auf und bringt kein eigenes mit.
Weitere Wege: `brew install deja-vu`,
`go install github.com/vshulcz/deja-vu/cmd/deja@latest`, oder `npx @vshulcz/deja-vu "suchbegriff"`, um es ohne
Installation auszuprobieren. Unter Windows bricht das Installationsskript mit `unsupported OS` ab, weil es ein
Shell-Skript ist. Nimm stattdessen `scoop install deja-vu` (aus dem Main-Bucket von Scoop) oder `winget install vshulcz.deja-vu`, oder nimm `deja-vu__windows_amd64.zip` aus dem
[letzten Release](https://github.com/vshulcz/deja-vu/releases/latest) und leg `deja.exe` in den `PATH`.
Das Binary allein ist bereits eine vollständige Installation: Indizieren, Suchen, `show`, `ctx`, `blame`,
`--json` und das Entfernen von Zugangsdaten brauchen nichts weiter. Was `deja install` macht, ist MCP an deine
Agents anzubinden und den Recall beim Session-Start einzuschalten — sinnvoll, aber optional.
## Selbst suchen
`deja` ohne Argumente öffnet im Terminal eine Suche über die Historie aller Agents. Sie beginnt bei den
Sessions hinter deiner noch nicht committeten Änderung, dann kommen die letzten in diesem Projekt, und die
Liste wird beim Tippen kürzer.
- `↑↓` wählt eine Session, `↵` öffnet sie am Treffer, `n` und `N` springen zwischen den Treffern, `esc` geht zurück. In einer Session sucht `/` ein Wort, `]` und `[` springen zwischen den Fragen, die du gestellt hast.
- Das Suchfeld nimmt Filter: einen Agenten mit Doppelpunkt (`codex:`), `today`, `yesterday`, `week`, `month` und `in:`.
- `r` setzt die Session in dem Agenten fort, der sie geschrieben hat. `o` setzt sie in einem beliebigen anderen Agenten fort, der mit dem beginnt, was die Session gefragt, entschieden und offen gelassen hat.
- `tab` wechselt zwischen diesem Projekt, allen Projekten und Deleted, den Sessions, die ihr Agent gelöscht hat und die deja noch hält; `R` legt eine davon zurück.
- `?` zeigt alle Tasten, `^k` hat den Rest (Session-ID oder Projektpfad kopieren, eine Session vergessen), in der Liste beendet `q`; `esc` geht einen Schritt zurück und beendet bei leerem Suchfeld.
Mit `DEJA_TUI=0` kommt stattdessen die Textübersicht, die auch `deja brief` ausgibt. In einer Pipe
zeigt es, was indiziert ist und welcher Befehl als Nächstes dran ist.
## Was du davon hast
**In Codex gelöst, von Claude erinnert.** Einundvierzig Coding-Agents schreiben jedes Gespräch in lokale
Dateien, und deja macht aus diesen Dateien eine Gedächtnisschicht, die sie alle lesen können.
| | |
| --- | --- |
| **Suche rückwärts in der Zeit** | `deja "connection pool exhausted"` durchsucht Gigabytes, auch alles von vor der Installation von deja. Eine Frage in natürlicher Sprache fällt auf den Relevanzmodus zurück. Zeit ist ein Hinweis, kein Filter. |
| **Recall über Agenten hinweg** | Das MCP-Tool `deja` im Modus `recall` antwortet aus jedem Agenten heraus „das haben wir vor drei Wochen behoben“, egal wer es damals behoben hat. |
| **Übersteht die Kompaktierung** | Gemessen an 43 Kompaktierungen: die Zusammenfassung behielt 77 % der Entscheidungen und 0.2 % der Befehle, die du ausgeführt hast. Die übrigen 99.8 % gibt deja zurück. In Claude Code und Codex notiert deja Aufgabe, Dateien und Befehle in dem Moment, in dem die Kompaktierung beginnt, und gibt sie danach einmal zurück. |
| **Recall im Moment des Handelns** | Bevor der Agent eine Datei ändert oder einen Befehl ausführt, nennt der `PreToolUse`-Hook die früheren Entscheidungen zu dieser Datei, die hier funktionierende Form dieses Befehls, oder dass das Programm auf dieser Maschine schlicht nicht existiert. Scheitert ein Befehl, zeigt der `PostToolUse`-Hook, was auf dieser Maschine nach demselben Fehler ausgeführt wurde — genau das Paar, nach dem der Agent nicht fragt. |
| **Indiziert die Arbeit, nicht nur das Gesagte** | Jede in einem Zug geöffnete Datei, jeder ausgeführte Befehl samt Exit-Code und das exakte Fragment, das eine Änderung ersetzt hat. Genau das, was jede Zusammenfassung verliert. |
Außerdem: `deja promote --state rejected` markiert eine verworfene Entscheidung, und ab dann zeigt jeder
Treffer, dass sie versucht und abgelehnt wurde; ein Treffer meldet „4 Dateien dieser Session haben sich seitdem
geändert“ und schweigt, wenn er es nicht beurteilen kann; `deja sync ssh laptop` bewegt das Gedächtnis zwischen
Maschinen rein additiv, ohne Cloud dazwischen; `deja handoff --to codex` packt den aktuellen Kontext, um in
einem anderen Agenten weiterzumachen; Schlüssel, Tokens, JWTs und private Schlüsselblöcke bekannter Form werden
beim Indizieren entfernt — Mustererkennung ist allerdings keine Secret-Erkennung, und eine unbekannte Form kann
durchrutschen.
### Zeichne deine eigene Arbeit
`deja stats --card` zeichnet direkt im Terminal; gib ihm einen Dateinamen, und es schreibt ein SVG für das
README deines Profils. Zum Veröffentlichen anderswo
[wandle es in PNG um](https://vshulcz.github.io/deja-vu/card/) — diese Seite konvertiert in deinem eigenen
Browser.
Die vollständige Referenz steht auf der [Dokumentationsseite](https://vshulcz.github.io/deja-vu/).
## Privatsphäre
Indizieren und Suchen laufen lokal. Das Netz brauchen nur `deja update`, `deja sync ssh`, die Versionsprüfung
in `deja doctor`, `deja embed`, das an den von dir konfigurierten Endpunkt geht (und, sobald der semantische Sidecar gebaut ist, jede Suche, die die Anfrage an diesen Endpunkt schickt), und ein interaktiver
Befehl, der einmal am Tag nach dem neuesten Release schaut. Dieser Blick sendet keine Session-Daten;
`DEJA_OFFLINE=1` oder `DEJA_NO_UPDATE_NOTICE=1` schaltet ihn ab.
Zugangsdaten werden beim Indizieren entfernt: AWS-Schlüssel, Zuweisungen mit `api_key=` und `token=`,
Bearer-Tokens und nackte JWTs, PEM-Blöcke privater Schlüssel, Tokens verschiedener Anbieter, URLs der Form
`scheme://user:pass@host`, hochentropische Werte, die keine Regel abdeckt, und Passwörter im Fließtext — „the
admin password is …“, wo es kein Trennzeichen gibt, an dem man sich festhalten könnte. Der Wert wird zu
`[redacted:]`, der Text ringsum bleibt durchsuchbar. `deja share` und `deja sync export` säubern beim
Export ein zweites Mal. Mustererkennung ist keine Secret-Erkennung: eine Form, die die Regeln nicht kennen,
kann unverändert durchgehen — siehe Sicherheitsmodell.
`deja forget` nimmt Sessions aus dem neu gebauten Index und hinterlässt einen Grabstein, sodass ein
anschließendes `deja index` sie nicht aus der ursprünglichen Historie zurückholen kann.
Das [Sicherheitsmodell](../../docs/SECURITY-MODEL.md) dokumentiert die Datenflüsse, die Grenzen der Bereinigung, die
Vertrauensannahmen und die Release-Verifikation.
## Kommandozeile
Ein nacktes `deja` im Terminal öffnet den [Suchbildschirm](#selbst-suchen). Mit einem Suchbegriff oder einem
der Befehle unten gibt es aus und beendet sich:
```text
$ deja "jwt refresh token"
[claude] api · Jul 8 · 8f31c0a9 — 2 matches
login started failing after refresh token rotation; jwt kid mismatch in tests
fixed by reloading jwks cache after rotateKey and adding a clock-skew test
[codex] web · Jul 1 · b77d91e2 — 1 match
refresh token cookie needed SameSite=Lax in local callback flow
```
| Befehl | Was er tut |
| --- | --- |
| `deja ` | Durchsucht die gesamte Historie. Mehrere Wörter sind UND, Anführungszeichen verlangen zusammenhängenden Text; ohne exakten Treffer werden Wortformen und ähnliche Schreibweisen probiert. |
| `deja` | Im Terminal der Suchbildschirm von oben. `deja brief` gibt stattdessen die Textübersicht aus: heutige Sessions, was deja geliefert hat, letzte Arbeit und eine Suche zum Ausprobieren. |
| `deja wip` | Woran die letzte Session in diesem Verzeichnis gearbeitet hat: die Aufgabe, was entschieden wurde, die offenen Dateien, der letzte Befehl und ob er fehlschlug. Alles aus den Aufzeichnungen abgeleitet, ohne auf Notizen angewiesen zu sein. |
| `deja blame [:zeile]` | Welche Sessions diese Datei besprochen haben, was entschieden wurde und warum. Mit Zeilennummer: der Commit, der sie zuletzt geändert hat, und die Session, die diese Zeile geschrieben hat oder den Text, den dieser Commit ersetzt hat. |
| `deja files ` | Die Gegenrichtung: welche Dateien die Arbeit an einem Thema tatsächlich angefasst hat. |
| `deja how ` | Wie das auf dieser Maschine wirklich ausgeführt wird, mit echten Argumenten, aus Befehlen, die Agents bereits ausgeführt haben. |
| `deja fix ` | Was auf dieser Maschine nach demselben Fehler ausgeführt wurde und wonach der Fehler nicht wieder auftrat. Niemals ein Merge, ein Force-Push oder eine Löschung. |
| `deja friction` | Fehler, die in drei oder mehr verschiedenen Sessions auftauchen, mit Angabe der Werkzeuge. |
| `deja ctx ` | Markdown-Zusammenfassung des besten Treffers mit dem Code, den er geändert hat, direkt in einen Prompt einsetzbar. |
| `deja resume ` | Öffnet die gefundene Session wieder in dem Werkzeug, zu dem sie gehört. |
| `deja view` | Exportiert das gesamte Gedächtnis in eine einzelne lokale HTML-Datei. Kein Server, nichts verlässt die Maschine. |
| `deja doctor [--deep]` | Selbstprüfung; mit `--deep` wird der Index gegen die Quelldateien verifiziert. |
| `deja mcp` | Der MCP-Server über stdio — genau der, den `deja install` anbindet. |
Die vollständige Referenz steht in der [Befehlsdokumentation](https://vshulcz.github.io/deja-vu/guide/commands.html).
### MCP-Tools
Der Server stellt ein einziges Tool `deja` bereit, der Parameter `mode` wählt die Fähigkeit: `recall`,
`context`, `blame`, `fix`, `how`, `orient`, `remember`, `handoff`. `deja install` bindet es selbst an, das ist also nur bei
manueller Konfiguration eines Agenten relevant. Die früheren sechs Tool-Namen funktionieren bei bereits
angebundenen Clients weiter.
Ein Tool statt sieben ist eine Kostenfrage, keine Stilfrage. Ein angebundener MCP-Server schickt die
Definitionen seiner Tools mit jeder Anfrage mit, sie werden also in jedem Zug bezahlt, ob der Agent etwas
aufgerufen hat oder nicht: 477 Tokens hier, gegenüber 8,283 beim größten der sieben gemessenen Server. dejas
eigener Wert lag bei 828, bis das Schema auf ein Tool mit Modi reduziert wurde.
## Unterstützte Werkzeuge
Mit automatischem Recall übergeben Claude Code und Codex deja die laufende Aufzeichnung, sobald die
Kompaktierung beginnt, und deja behält, was die Zusammenfassung gleich verlieren wird: die Aufgabe, die
Ergebnisse, die Dateien, was aus jedem Befehl wurde, und was noch offen ist. Der nächste Hook in derselben
Session und demselben Arbeitsverzeichnis gibt das am Stück zurück, nicht mehr als 4 KB, mit einer Zeile dazu,
ob sich das Repository seitdem geändert hat. `deja stats` zählt die Tool-Aufrufe zwischen Kompaktierung und
erster Änderung — damit wurde das gemessen.
Die Details stehen in [Wiederherstellung nach der Kompaktierung](../../docs/compaction.md).
Claude Code · Cline · Codex CLI · opencode · aider · Gemini CLI · Cursor · Antigravity ·
Grok Build · Hermes · Goose · Qwen Code · Kimi Code · pi · omp (Oh My Pi) · OpenClaw ·
Copilot CLI · VS Code Copilot Chat · Amp · prime-agent (PrimeIntellect) · Roo Code ·
Continue · Crush · DeepSeek Harness · Cherry Studio · Senpi · gajae-code · Kimchi Coding ·
Command Code · ZCode · CodeWhale · Reasonix · Kiro · Kilo Code · CodeBuddy Code ·
TRAE CLI · Muse Code · Junie · JetBrains AI Assistant · Devin CLI · Windsurf / Devin Desktop · MiniMax Code · Zed.
Was jedes einzelne unterstützt — MCP-Recall, automatischer Recall, Skills, Befehle, Resume, Handoff — steht in
der [Fähigkeitsmatrix im englischen README](../../README.md#supported-harnesses). Abweichende Speicherorte werden
über `DEJA_*_ROOT`-Variablen angegeben, und die Migrationsvariablen der Werkzeuge selbst werden ebenfalls
beachtet.
### Agents mit eigenem Paket
`deja install --auto` bindet diese genauso an wie alle anderen, und das ist immer der kürzeste Weg. Zusätzlich
hat jeder ein Paket im eigenen Ökosystem, praktisch für alle, die Erweiterungen von dort installieren:
| Agent | Paket | Installation |
| --- | --- | --- |
| opencode | npm `opencode-deja` | `opencode plugin opencode-deja` |
| DeepSeek Harness | npm `dsh-deja` | `dsh plugin --profile web add dsh-deja` |
| Zed | `deja-context-server` | Zed → Extensions → deja |
| Kimi Code | Plugin `deja` | `/plugins install https://github.com/vshulcz/deja-vu` |
| Codex CLI | Plugin `deja-vu` | `codex plugin marketplace add https://github.com/vshulcz/deja-vu`, dann `codex plugin add deja-vu@deja-vu` |
| Grok Build | Plugin `deja` | `grok plugin marketplace add vshulcz/deja-vu`, dann `grok plugin install deja` |
| OpenClaw | ClawHub und npm `@vshulcz/openclaw-deja` | `openclaw plugins install clawhub:@vshulcz/openclaw-deja` |
| pi (und omp) | npm `@vshulcz/pi-deja` | `pi install npm:@vshulcz/pi-deja` |
| Hermes | Memory-Provider `deja-memory` im Plugin-Katalog von Hermes | `hermes plugins install deja-memory`, oder von GitHub: `hermes plugins install vshulcz/deja-vu/extensions/hermes` |
Jeder der beiden Wege reicht, beide zusammen gehen auch: jedes Paket liest zuerst, was `deja install`
hinterlassen hat. opencode, dsh und OpenClaw ergänzen nur das Fehlende; Kimi, Grok, Codex und pi treten zurück,
wenn der Installer schon angebunden hat; in Zed benutzen beide Seiten dieselbe Server-ID. Die Reihenfolge der
Installation spielt also keine Rolle.
Alle benutzen das deja, das du bereits installiert hast; die Kopie im Paket ist nur der Rückfall.
## Semantischer Recall, optional
Richte `deja embed` über `DEJA_EMBED_URL` auf ein lokales Ollama, LM Studio oder einen beliebigen
OpenAI-kompatiblen Endpunkt, dann trifft auch eine anders formulierte Frage. Ohne verfügbare Runtime
funktionieren lexikalische Suche und MCP-Recall wie gewohnt.
## Belege
58 % weniger Tokens bei einer Aufgabe, die diese Maschine schon gelöst hatte · 88.9 % hit@1 auf LongMemEval-S (bereinigter Satz aus 470 Fragen) · 71.9 % auf LoCoMo · Abfragen in Millisekunden über Gigabytes an Historie Elf Läufe je Arm: 53,558 Tokens gegen 126,222 ohne angebundenes Gedächtnis, und 52,815 gegen 103,443 auf einem späteren Build, wieder elf Läufe ·
was eine Aufgabe kostet ·
beide Retrieval-Harnesses liegen in diesem Repository und laufen in Minuten auf öffentlichen Datensätzen ·
prüf die Zahlen selbst