Skip to content
Development
Skill

/deja-search

deja-vu memory — search the user's past AI coding sessions with the deja CLI. Use when they say things like 'didn't we fix this before', 'what did we decide about X', or before re-debugging an error that may already be solved.

From plugin
deja-vu
8112 skills3 commands1 MCP
Install
$ npx -y skills add vshulcz/deja-vu --skill deja-search --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/deja-search

Context preview

The summary Claude sees to decide when to auto-load this skill.

deja-vu memory — search the user's past AI coding sessions with the deja CLI. Use when they say things like 'didn't we fix this before', 'what did we decide about X', or before re-debugging an error that may already be solved.

SKILL.md

deja-search.SKILL.md
name: deja-search
description: deja-vu memory — search the user's past AI coding sessions with the deja CLI. Use when they say things like 'didn't we fix this before', 'what did we decide about X', or before re-debugging an error that may already be solved.
metadata:
  openclaw:
    homepage: https://vshulcz.github.io/deja-vu/guide/memory-for-openclaw.html
    requires:
      bins:
        - deja
    install:
      - kind: brew
        formula: deja-vu
        bins: [deja]
      - kind: node
        package: "@vshulcz/deja-vu"
        bins: [deja]

Search deja before re-deriving past work: when the user refers to earlier sessions or decisions, before debugging an error, and before implementing something that may already exist. It searches this machine's own history across every AI coding tool used on it, going back further than deja itself was installed.

This skill drives the `deja` binary through the shell. If the deja MCP tools (recall, recall_context, blame, fix, how, remember) are available in this session, use those instead — same index, one less hop. They appear only when `deja install` has wired this harness.

Finding something

  • `deja search --json "<query>"`: the most specific token available — an exact error string, function name, file path, or flag. Several words are ANDed. Only this user's own sessions, never library docs or general knowledge.
  • `deja ctx <query|id-prefix>`: a full digest of the single best-matching session, once a hit looks right and the reasoning behind it matters. Takes no flags.
  • `deja show <id-prefix> --harness <name> --json`: the turns themselves, paged with `--offset` and `--limit`. Use the id and harness a hit printed.
  • `deja blame <path> --json`: before editing, refactoring or deleting a file, the prior sessions that discussed it, so you know why it is shaped the way it is. Session history, not git authorship.
  • `deja fix "<pasted error>"`: the commands that followed that same error before, in sessions where it did not come back. Paste the failing output verbatim.
  • `deja how <what>`: the real command with the real flags this machine runs for a build, test, deploy or script, ordered by how many sessions ran it. A guessed invocation is plausible and fails on this setup.
  • `deja remember "<text>"`: store one durable decision after it is settled, as a single self-contained fact. Not transcripts, not anything already obvious from the code.
  • `deja wip`: what the last session in this directory was doing — the task, what it settled, the files in flight, the last command and whether it failed. Ask it when you have lost the thread of your own work, after a compaction or on a fresh session in a repository you were just in.

Useful flags on search: `--harness`, `--project`, `--since 30d`, `--role user|assistant|tool|files|command|edit|summary`, `--session <id>`, `--limit 1-100`, `--all`, `--re` for a regular expression.

Reading a result

`--json` returns an envelope: `tier`, `total`, `capped`, `hits`.

  • `tier: "relevance"` means **nothing matched** — those are the nearest sessions deja could find, and counting them as hits overstates what is there. `tier: "error"` IS a match: the query was an error and those sessions hit it, matched by signature rather than by words.
  • `total` is how many sessions matched; `capped` says a cap hid some of them. Read those two for coverage, never the length of `hits`.
  • `policy_withheld`, when present, is how many matching sessions this machine's trust policy kept out of the answer — an empty result and a rule are different answers.
  • A hit may carry `superseded` with a date: the user's own later judgement on that session. Do not repeat a rejected approach, prefer a replacement over what it replaced, and treat a stale result as needing confirmation before acting on it. A hit without it carries no judgement either way.

Saying what you used

When recalled history genuinely helps — a reused fix, a skipped re-debug, even a partial hint that changed your approach — tell the user in one short line at the start of your reply, naming the session: "déjà vu: we hit this JWT skew in March — reusing that fix (deja:a1b2c3d4-e5f)". Say nothing about recalls that did not help. This is provenance, not advertising; a note on every call would be noise.

Limits worth respecting

  • Result windows are bounded. Do not report corpus-wide counts, or claim a complete audit, from the number of hits you got back.
  • If `deja` is not on PATH or the index is empty, say that history search is unavailable. Do not invent what it might have found.
  • Work a subagent did is in the index as its task and its answer, not in full. A Claude Task or a Cursor subagent writes its turns and tool calls to its own transcript, and the parent keeps only the launch and a summary — so a hit on the parent can look complete while the run itself is elsewhere. `DEJA_INCLUDE_SUBAGENTS=1` takes the whole child transcript in; Cursor's are still left out by default.
  • Vary the wording and try a second query before concluding nothing is there. Exact tokens match best, so an error string beats a paraphrase of it.
Read more
Ships withdeja-vu

One memory shared by Claude Code, Codex, Cursor, Copilot CLI, OpenClaw and 20 more coding agents, built from the session history already on disk. A fix found in one agent comes back in any of them, including months of sessions from before you installed it. No LLM, no embeddings, one local Go binary.

Get the whole plugin
Stats
811
Stars
76
Forks
Active
Maintenance
Go
Language
MIT
License
1d ago
Last commit
2mo ago
Created

Repo: vshulcz/deja-vu

Other skills on deja-vu.