Reads the session files thirty-three other coding agents on this machine already wrote — Claude Code, Codex, Cursor, VS Code Copilot Chat, opencode, OpenClaw, Hermes, Kimi, Cline, Zed and more — including sessions from before it was installed: six tools (deja_recall, deja_session, deja_blame, deja_fix, deja_how, deja_remember), a /deja command, and optional automatic recall added to the runtime context. Local BM25 index, no LLM, no embeddings, no network (dsh plugin --profile web add dsh-deja).
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-deja
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:vshulcz/deja-vu#path:/extensions/dsh
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
English | 中文
Part of deja-vu. Found it useful? Star deja-vu on GitHub.
DeepSeek Harness can already search its own sessions — that is what the built-in
session-query subsystem does. This plugin answers the other question: what you
did in the other agents on this machine.
deja indexes the session files that thirty-seven other coding agents — Claude Code, Codex, Cursor, opencode, Antigravity, Grok Build, Kimi, Cline and Zed among them — already write to disk. Nothing has to have been recorded ahead of time: the history is already there, including the months before deja was installed. If you moved to dsh last week, everything you did before last week is still reachable from inside it.
Install
dsh plugin --profile web add dsh-deja
From the repository instead of npm — the root manifest re-exports this directory, so either form works:
dsh plugin --profile web add github:vshulcz/deja-vu#path:extensions/dsh
The plugin runs the deja binary. It is pulled in as a dependency, so npm
installs it with the plugin; a deja already on PATH is used as-is, and
DEJA_BIN overrides both.
If you have the CLI, deja install --auto wires dsh too — it adds deja's MCP
server and a /deja command to your profile — and that is the shorter path.
Having both is fine: this plugin looks for what the installer wrote in
$DSH_HOME/plugins/deja/ and contributes only what is missing, so the tools and
the command are never registered twice.
What it adds
Six tools the model can call:
| Tool | Answers |
|---|---|
deja_recall |
Sessions matching an error string, function name, file path or flag. |
deja_session |
The full digest of one past session, when the reasoning behind it matters. |
deja_blame |
The sessions that discussed a file, before you edit or delete it. |
deja_fix |
What this machine ran after that same error before. |
deja_how |
The real invocation for a build, test or deploy, from what ran here. |
deja_remember |
Stores one settled decision for later recall. |
One command: /deja <what to look for>.
And, unless you turn it off, automatic recall: once per session the plugin adds what past sessions settled in this project, and before each step it asks deja whether this machine's history answers the prompt and adds the answer to the runtime context. Silence is the common case — it speaks only when there is something to say.
- insert:
- id: deja
name: dsh-deja
config:
autoRecall: false # tools and /deja only
How it is wired
Recall arrives through ctx.systemPrompt.context, evaluated on every assembly.
The obvious alternative — a middleware on agent/pre-step that splices a
message into the step — loads fine, completes the turn, and never reaches the
model: a later listener in that waterfall rebuilds its answer from the payload
and the added message is dropped with nothing reported. This was settled by
reading the requests dsh 0.1.1-rc.2 actually sent.
What it does not do
No LLM, no embeddings. The index is a local BM25 store over files that already exist, so a query answers in about a millisecond, with no network path unless you ask for one. Secrets are redacted at index time.
Part of deja-vu. MIT.
Links
More in this category
vectorize-io/hindsight#coding-agents★ 46361
Hindsight, agent memory that learns: long-term project memory with auto recall and retain, knowledge pages, deep reflection, and per-repo memory banks.
volcengine/OpenViking#examples/dsh-memory-plugin★ 39324
OpenViking memory and context bundle for DeepSeek Harness: pre-step auto-recall and profile injection, session capture, `viking://` URI guarding, and recall/write memory tools backed by an OpenViking server.
agentscope-ai/ReMe#dsh★ 3555
Connects DeepSeek Harness to ReMe's local-first, self-evolving personal knowledge base: automatically captures completed main-agent conversations as user-owned Markdown memory, searches conversations and source material through reme_search with BM25, optional embeddings, and wikilink expansion, and schedules daily memory consolidation.
zilliztech/memsearch#MemSearch★ 2722
Shared Markdown memory for DSH and other coding agents, with automatic capture, pre-step context injection, searchable recall, and memory-to-skill self-evolution through a review panel.
adoresever/graph-memory★ 637
Traceable, searchable cross-session memory for DeepSeek Harness — conversation knowledge as typed graph nodes (TASK/SKILL/EVENT) and typed edges.
Ikalus1988/MisakaNet★ 524
Failure-recovery memory: search and record failure-recovery lessons from real engineering sessions, with BM25 + semantic RAG retrieval and a lessons knowledge base.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.