Bare deja at a terminal now opens a search screen over every agent's
history: type to search, read a session at the hit, resume it, or carry it
into another agent. It opens on the sessions behind your uncommitted change.
Junie and JetBrains AI Assistant are read, deja rules sync writes to 42
agents instead of 8, and recall called by an agent puts the project it works
in first, which took a planted answer from 20 to 43 of 56 real queries. A
transcript its agent deleted no longer makes every search answer stale. The
index version is now 69, so the store rebuilds once on the first run after
upgrading.
Added
- Bare
dejaat a terminal opens a search screen over every agent's history. Type to search, read a session at the hit, resume it, or carry it into another agent withctrl-o. It opens on the sessions behind your uncommitted change, and on a first run it builds the index behind the screen instead of before it. Pipes,TERM=dumbandDEJA_TUI=0keep the text summary. - The first run of a new version says once what it brings: the top three changes in the terminal, one line in the session-start note.
- An empty search in a terminal shows the surprised cat, and the first search that finds something shows the ready one, once per index.
- An interactive command says, at most once a day, when a newer deja release is out, with the upgrade command for whatever installed it (
deja update, brew, npm, scoop). The look at GitHub runs in a detached process and the next interactive command prints what it found, so no command waits on the network. Hooks, the MCP server, pipes, dev builds,deja update,deja doctoranddeja versionnever start it, andDEJA_OFFLINE=1orDEJA_NO_UPDATE_NOTICE=1turns it off with no request made (#4622). - After a search that finds something, in a terminal, deja shows one short tip at most once a day, naming a command you may not have met:
blame,fix,howorview, in rotation. It goes to stderr and never appears in a pipe, a script, a hook or--json(#4629). - Kimi Code and Kiro get the line about a file before an edit, and CodeWhale the fix pair for a failed command. None of them shows the model what that hook prints, so the line waits for the next hook that does: the next prompt on Kimi and Kiro, the next tool call or message on CodeWhale. CodeWhale also hands over the pre-tool line of a call that failed to run, which it sends back without it.
deja resume <id> --write-backputs a session the agent deleted back where the agent can reopen it, rebuilt from deja's index in the agent's own format. The file holds the user and assistant turns; tool calls and their output stay in deja, which keeps them and reads only what the agent appends later. Works for Claude Code, Codex, Gemini CLI, Qwen Code, pi, omp, gjc, Kimchi, Senpi, Kimi, Copilot CLI, CodeBuddy, Command Code, CodeWhale, Cline, OpenClaw, Continue, Grok Build and Kiro CLI, each checked by resuming the written file in the real CLI. For agents that keep sessions in a database, or whose format needs something the index lacks, it says what is missing. It never replaces a file and writes only inside the agent's store (#4617).- aider edits record both sides, read from the SEARCH/REPLACE block, unified diff or patch in the reply once aider says it applied them, so
deja restoreand line-leveldeja blameanswer for aider sessions (#595). - VS Code Copilot Chat edits record the replaced text, read from the edit call's arguments, so
deja restoreand line-leveldeja blameanswer for them. On one machine's store that is 638 spans where there were none. The extension's agent transcripts record both sides of an edit and its file (#595). - Junie and JetBrains AI Assistant are read. Junie gets
junieandjunie-auto(hooks, MCP, skill,/deja, rules, resume); AI Assistant getsjetbrains, the MCP server in~/.ai/mcp/mcp.json. Agent chats that run Junie, Claude, Codex or another agent with its own store are left to that store (#3104). deja rules syncwrites to 42 agents, up from 8. The new ones are Copilot CLI and Chat, Cline, Roo, Continue, Kilo, Zed, Crush, Junie, Kiro, CodeBuddy, WorkBuddy, Cherry Studio, CodeWhale, Command Code, ZCode, Amp, TRAE CLI, TRAE IDE (~/.trae/user_rules), Hermes, aider, Antigravity, pi, omp, Senpi, gjc, prime-agent, Kimchi, dsh, Reasonix, Muse, Devin (~/.config/devin/AGENTS.md), OpenClaw (its workspaceAGENTS.md) and Cursor CLI (~/.cursor/rules, which it reads only for projects under the home directory). A stand or the host's source showed each file reaching the model. Where a host loads only the first of several files, the block goes into the one already loaded, so opencode and Kilo no longer lose a~/.claude/CLAUDE.mdthey were reading (#4805).- The harnesses page has a table of every hook surface per harness (digest, per-prompt, pre-tool, after-failure, compaction, MCP, handoff, session end, rules, statusline, reader), each with how it was checked and why a missing one is missing. A test installs every target and fails when the table and the wiring disagree (#4801).
deja recall <words>prints the page the MCP recall tool answers, for a skill or script that runs deja through the shell.deja search --jsonwas the only option there and ran to 1-2 MB, which harnesses truncate to nothing (#4781).- New targets
kimchi-auto,codewhale,codewhale-autoandcherrystudio-auto.kiro-autoalso writes~/.kiro/hooks/deja.json, which the IDE andkiro-cli --v3run in every chat, anddeja install kirothe skill. ZCode gets the shared skill and/deja(#4802). - A hook whose answer the host drops now hands it to the next hook of that session that reaches the model, once: Grok's session start and prompt ride its next tool hook, and Kimi's and Kiro's fix pair for a failed command rides the next prompt. goose gets the fix pair through a
Stophook that blocks once, the one hook answer it shows the model. - Antigravity, Crush and goose, which have no compaction event, get the compaction packet on the next hook that reaches the model, read from the turns their stores keep before the summary. Antigravity also gets the pre-edit line for the file a planner step edited.
- Command Code, ZCode, CodeWhale and Amp get the compaction packet. None of them has a compaction hook; each keeps the turns before the summary (the transcript, the CLI database, a saved history, the full thread), and the next hook that reaches the model catches it up.
commandcode-autowrites a mod: the question's recall goes into its model calls, the session's end clears its live stamp, and the footer showsdeja statusline. Amp's plugin writes each thread it runs to the thread store so deja can read it, and shows a status item.deja aiderrecalls on every message on macOS and Linux. aider has no hooks, but it reads its read-only files right after it logs a message, so the wrapper serves one of them from a named pipe and answers with the recall for that message (#4801).- Crush's one hook carries the per-prompt recall and the previous command's fix pair, and Command Code's tool hook answers the newest question, since neither host fires a per-prompt hook.
deja statuslinein the status line of Cursor CLI, Copilot CLI, Qwen Code, CodeBuddy Code, Grok Build, Kimi Code (0.30 and later) and TRAE CLI, from their-autotargets. opencode and Kilo CLI get it through a TUI plugin, VS Code through a local extensionvscode-autoadds to the status bar, dsh under the web composer, and OpenClaw as a deja tab in the Control UI. A status line already set up there is left alone and install prints the line that runs both. The line finds the session from asession_idorsessionIdwhen the host sends no transcript path.- goose's
Stopblock also carries the pre-edit line for each file the turn edited, and itsSessionStarthook prints deja's status line as the banner goose shows when an interactive session opens.antigravity-autoputsdeja statuslinein agy'sstatusLine, stacked under agy's own line; the line finds an agy session bysession_id, since every agy transcript is namedtranscript.jsonl.
Changed
deja doctorfolds the stores that are simply not on this machine into one line, so the agents you use are not lost among thirty-oddmissingrows. A store that was found, cannot be read, is excluded or unplugged, holds indexed sessions or carries advice (aider's) keeps its row.deja doctor --alllists every store (#4625).deja indexsays how long the build took: the summary after a rebuild readsdeja: indexed 3 sessions, 5 messages in 0.04s, and the first-index greeting endsin 0.05stoo, whichever command built the index:deja index,deja search,deja warmupor baredeja(#4630).- Agents look up past decisions before the first edit in a task and before calling a change done, not only when asked about history. The skill, the MCP server instructions and the other agent-facing texts now say what deja holds: rules, banned or already-tried tools, checks required before merge, preferred values, owners. On a stand with ~1800 real sessions and 30 other skills, Claude Code applied the planted decision in 28-30 of 33 tasks, up from 14-15. opencode stayed at 15-17 (#4791).
- The agent-facing
blameanswers in the same framed text as recall,fixandhowinstead of a JSON array: a numbered row per session in the[harness] project · idform, its title, the files it also worked on and its excerpts. The same 8 KB answer now carries all ten sessions where it carried five to seven, and a decision that was later taken back says so, which the JSON had no field for.deja blame --jsonis unchanged (#4634).
Fixed
- One transcript its agent deleted made every search after it answer from the index as it was and start a background pass with nothing to do, and
deja handoffprinted the kept notice twice. A kept transcript is now marked in the index and no longer reads as a change. deja logno longer says a compaction "stored nothing" when it stored the packet and only the edit count after it could not be measured. Every compaction on a host whose transcript deja reads through its own parser, such as TRAE CLI and Qwen Code, showed as lost.- CodeWhale's TUI got no fix pair for a failed command: its bash tool sends no receipt and reports the failure as "Failed to execute tool: …", and that prefix kept the error from matching. The pair now arrives with the next message.
- The summary a harness writes when it compacts is indexed under the
summaryrole for Codex, Copilot CLI, VS Code Copilot Chat, Antigravity, Kimi, pi, omp, prime-agent, Senpi, gjc, Kimchi, OpenClaw, Crush, Qwen Code, ZCode, Kilo Code, Roo Code and CodeWhale. Before, it was dropped, or filed as something the person or the agent said. Roo and Kilo's sliding-window note is no longer read as the person's words (#4801). - OpenClaw 2026.9.9 stores an event of 1 KiB or more zstd-compressed, and deja skipped those events; it decompresses them now, when
zstdis installed. - A Cline CLI session removed with
cline history deletestays searchable; deja took its deleted directory for a store that went away and dropped it. - A session with one hit reads
1 match, not1 matches, indeja searchand in the MCP recall listing (#4627). deja searchprinted its results without colour even in a terminal: the output went through a counter fordeja log, and the colour check only recognised a bare terminal, so the coloured header and highlighted matches never showed. It looks through the counter now; pipes,NO_COLORandTERM=dumbstay plain (#4620).- An OpenClaw gateway session got the project digest twice on its first turn, once from the hook pack and once from the plugin, and the hook pack repeated it on every later turn. Both now ask under the session's id, once. The plugin's digest moved to an
agent:bootstraphook of its own, which also runs underopenclaw agent --localand withoutallowConversationAccess; the ClawHub package does the same. - One session made of megabytes of tool output no longer tops recall's relevance tier for questions it never discussed. A match inside a tool record now counts half of one in what someone said, and a JSON dump is quoted as an excerpt only when nothing else in the session matched. On a real store of 1705 sessions the session that came first, third and third on three questions now ranks 8th, 14th and 10th; LongMemEval and LoCoMo do not move (#4780).
- OpenClaw 2026.8.1 and later dropped the deja plugin's digest and per-prompt recall, and with them the packet after a compaction: the gateway runs a non-bundled plugin's
agent_turn_prepareandbefore_prompt_buildonly withplugins.entries.deja.hooks.allowConversationAccess: true.deja install openclaw-autonow sets it and uninstall takes it out; it is left off for OpenClaw 2026.4.23 and older, which refuse to start on the key, anddeja doctorsays when it is missing. The ClawHub package cannot grant it to itself: its README gives theopenclaw config setcommand, and the plugin names it in the gateway log and in/dejawhile the key is missing. - dsh 0.2.0-rc.2 failed every model request once
deja install deepseekwas in: its plugin inventory refuses a package.json without aversion, and deja's had none. - A project
.aider.conf.ymlwith its ownread:list hid the home one, and with it deja's context file and rules: aider takes the first list it finds, andAIDER_READreplaces lists too.deja aidernow passes the list aider would have taken plus deja's file on the command line. - The command install suggests for running your status line beside deja's kept deja's half on a second row when your script ended in a newline, and hosts that show only the first row dropped it.
- The kimi, grok, openclaw, dsh, hermes, opencode and pi packages run every hook their
deja install <x>-autocounterpart wires; a test installs each target and fails when its package misses one. The Hermes provider, Cline's plugin, the opencode 2.x plugin and the pi family now name the session they stamp live, so it is cleared at the end and kept out of its own recall. omp and pi give a new session its digest after/new. dsh ended sessions undersession-<uuid>while stamping the bare uuid, so the stamp stayed; Cline under--yolorecalled its own[SYSTEM]reminder instead of the prompt. Shown on live stands for dsh, Cline, OpenClaw, Hermes and Kimi. - Two goose sessions no longer read each other's recall. Every
deja gooseshared one MOIM file, and plain goose wrote per-prompt recall into the global AGENTS.md every session reads; the wrapper now gives each process its own file and removes it on exit, and plain goose keeps the session-start digest only (#4795). - opencode 2.x: the turn after a compaction is recalled on what the person last said, not on the whole
<conversation-checkpoint>summary (#4795). - opencode 1.x and Kilo no longer put the session digest into the title-generation request (#4795).
- Compaction summaries from Zed, Cline (
<id>.compaction.json) and Continue are indexed under the summary role. Continue rewrites its session file to the summary alone, so the index now keeps the turns it already held for that file, through a rebuild too (#4795). - The Reasonix extension no longer scans the 1.x
sessions-v4store for its session; 2.x names it insession.startbefore the first turn (#4795). - A
kiro-cli --v3session no longer carries a...assistant turn for each time the model thought: V3 writes its thinking as an assistant record with the text encrypted. - After a Reasonix compaction the next turn gets deja's packet, as on the other hosts. It went only into the summarizer's guidance, and a summary that dropped it lost the commands and their outcomes.
deja resume --write-backfor a Codex session whose thread is gone from Codex's state database writes the directory the session ran in, read from the files it worked on or from Codex's other threads in the same project. It wrote an emptycwd; with no directory anywhere it now says so instead.- Kilo Code's VS Code extension is marked auto-capable: it runs
kilo serve, which loads the plugindeja install kilocode-autowrites (#4795). - A word whose last consonant English doubles finds its other forms:
loggingandloggedreachlog, andcommitreachescommitting. Asked about "structured logging", recall missed the session that only says "log". On the bench's 56 agent queries the answer reached the page in 48, up from 44. LongMemEval-S unchanged (#4785). - Kimchi's directory is always
~/.config/kimchi/harness; deja followedKIMCHI_CODING_AGENT_DIRandXDG_CONFIG_HOME, which Kimchi itself ignores. CodeWhale's<turn_meta>block is no longer indexed as the person's words (#4802). - recall asked inside a project no longer drops the project's own answer when the question also carries words only other projects use. Those words counted as typos under the project scope, so the project pass found nothing and the machine-wide answer stood. On the bench's 56 agent queries the project's session now comes first in 55, up from 51 (#4789).
- recall called by an agent puts the sessions of the project it works in first, the way the prompt hook ranks, then the rest of the machine. On a stand with ~1800 real sessions behind one project, the planted answer reached the recall page for 43 of 56 real agent queries, up from 20 (#4778). A
projectpassed to recall now filters it; it was accepted and ignored (#4779). Aprojectgiven as a directory path, a git worktree included, scopes to that repository; a worktree path used to answer with nothing (#4784). - opencode keeps the per-prompt recall for the rest of the session. It reached the model only on the first call of a turn: opencode rebuilds every call from its store, and deja does not send a block twice, so after the agent's first tool call the recall was gone. Fixed in the generated plugin for 1.x and 2.x and in the
opencode-dejapackage (#4786). deja blameno longer quotes a JSON dump or a long file listing from tool output as a session's excerpt, or counts each path in it as a mention. deja's own--jsonoutput and web search results were the usual source (#4776).deja doctoron Windows says when the CodeBuddy plugin is on but CodeBuddy finds no Git Bash to run its shell scripts, and points atdeja install codebuddy-auto(#4753).- A word with ä, ö, ü or ß is found by its ASCII spelling and the other way round:
muellerfindsMüller,strassefindsStraße. Onlymullerdid before (#4690).
Changelog
Features
- feat(cli): deja recall prints the MCP recall page for skills and scripts (#4783)
- feat(copilot): every hook surface in ~/.copilot/hooks/deja.json, VS Code Copilot Chat included (#4796)
- feat(doctor): fold stores that are simply absent into one line; --all lists them (#4625) (#4837) (@vaibhav8a)
- feat(mcp): blame answers the agent in recall's framed text, ten sessions where JSON fit five to seven (#4775)
- feat(registry): record every hook surface per harness and test it against install (#4803)
- feat: /deja for kiro, codewhale, trae and muse; hermes compaction without the memory provider (#4851)
- feat: add Devin CLI harness (#4819) (@jijiamoer)
- feat: agents look up past decisions before the first edit and before calling a change done (#4792)
- feat: compaction packet, rules and status for Command Code, ZCode, CodeWhale and Amp (#4830)
- feat: deja resume --write-back puts a deleted session back where the agent reopens it (#4848)
- feat: deja statusline in the status line of eight more hosts (#4813)
- feat: dropped hook answers and compaction packets ride the next hook that reaches the model (#4815)
- feat: edit spans for Copilot Chat and aider (#4847)
- feat: end the session in every host that has an end event (#4798)
- feat: file and failure lines reach hosts that read context after the tool (#4808)
- feat: goose edit line and status banner, agy status line, registry catches up for goose, crush and antigravity (#4826)
- feat: handoff --exec opens 16 more hosts with the packet as their first prompt (#4817)
- feat: interactive screen for bare deja at a terminal (#4880)
- feat: kimchi-auto, codewhale, cherrystudio-auto and Kiro global hooks (#4809)
- feat: mention a newer release at most once a day in an interactive command (#4622) (#4858) (@vaibhav8a)
- feat: one tip a day after a search, in a terminal (#4629) (#4839) (@vaibhav8a)
- feat: park kimi and kiro pre-edit lines and codewhale fix pairs for the next hook (#4853)
- feat: per-message recall in deja aider, and keep a project's read: list (#4828)
- feat: read Junie and JetBrains AI Assistant (#4849)
- feat: rules and status line for the remaining hosts (#4832)
- feat: rules sync reaches 32 agents, writing where each one already loads (#4805) (#4807)
- feat: say how long indexing took (#4630) (#4836) (@vaibhav8a)
Fixes
- fix(blame): skip JSON dumps and file listings in tool output as excerpts and mentions (#4777)
- fix(cli): suggest mistyped commands before searching (#4820) (@Mar-garet)
- fix(doctor): say when the CodeBuddy plugin cannot run on Windows without Git Bash (#4774)
- fix(index): a kept transcript no longer makes the index stale forever (#4886)
- fix(install): print paths under home as ~ in non-banner output (#4752) (@cestercian)
- fix(mcp): recall says 1 match and 3 matches, not match(es) (#4846)
- fix(opencode): per-prompt recall stays with its message after the agent's first tool call (#4788)
- fix(recall): a project keeps its own answer when the question has words only other projects use (#4790)
- fix(recall): a project named by its directory path, worktree included, scopes recall to that repository (#4787)
- fix(recall): this project's sessions come first when an agent asks, and a named project filters (#4782)
- fix(recall): tool-output matches count half on the relevance tier, and JSON dumps stop taking the excerpts (#4780) (#4840)
- fix(search): logging and logged find log, and commit finds committing (#4804)
- fix(search): mueller finds Müller and strasse finds Straße (#4773)
- fix(tui): slow pastes, wide runes under boxes, tiny terminals, late searches (#4884)
- fix(windows): two deferred lines in the same clock tick no longer overwrite each other (#4824)
- fix: TRAE IDE rules sync and one OpenClaw digest per session (#4842)
- fix: close five harness debts (codex cwd, rules count, openclaw access, kiro V3 reader, reasonix packet) (#4872)
- fix: codewhale fix pair for a failed bash call; stand proof for deferred cells (#4857)
- fix: compaction packet reaches every host with a compaction event (#4793) (#4799)
- fix: doctor's Cherry Studio row, HERMES_HOME in source tests, manifest rename on Windows (#4844)
- fix: goose shared recall, opencode checkpoint and title digest, dropped compaction summaries (#4800)
- fix: grant OpenClaw conversation access so the plugin's digest and prompt recall run on 2026.8+ (#4834)
- fix: index each host's compaction summary under the summary role (#4855)
- fix: kiro and trae surfaces proven on stands; log no longer calls a stored compaction lost (#4860)
- fix: one hit reads "1 match", not "1 matches" (#4627) (#4835) (@vaibhav8a)
- fix: packages run every hook their installer wires, and every host names the session it stamps (#4811)
- fix: search results are coloured in a terminal again (#4620) (#4838) (@vaibhav8a)
- fix: show the daily tip only when stderr is a terminal too (#4870)
- fix: what a new version brings shows with DEJA_OFFLINE=1 (#4890)
Documentation
- docs: changelog for 0.22.0 (#4892)
- docs: changelog for the interactive screen and what shipped with it (#4888)
- docs: kiro mcp and V3 hooks proven on a logged-in stand; 2.22 maps SessionEnd to Stop (#4864)
Other
- Say once what a new version brings on its first run (#4619) (#4882) (@theluckystrike)
- Show a short welcome for a bare deja instead of the full usage block (#4878) (@theluckystrike)
- Show the cat on an empty search and on the first recall (#4881) (@theluckystrike)
- chore: pin the manifests to 0.21.7 (#4772)
- ci(release): publish the deja-search skill to ClawHub with a stored token (#4862)
- ci(release): read the ClawHub package version from package.latestVersion (#4868)
- ci(release): skip ClawHub versions already live, check the token on every run (#4866)
- ci: build and scan on Go 1.26.x, 1.25 gets no more stdlib fixes (#4877)
- polish: CLI screens laid out for a terminal, plus fixes found on the snapshot pass (#4875)
Install
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
go install github.com/vshulcz/deja-vu/cmd/deja@v0.22.0
brew install deja-vu