Most of this release came from two rounds of running every supported harness
live, about 40 clients, and fixing what deja got wrong in each. Sessions it
could not read are indexed, tool calls and exit codes it dropped are kept,
deja resume prints a command that reopens the session, install and uninstall
stop breaking client configs, and a session no longer gets its own work back
from recall. copilot-auto, kilocode-auto and kiro-auto start those
clients' sessions with the project digest, and deepseek-auto gives dsh the
notes on reads, edits and failed commands other harnesses get. Kimi /btw
side questions and dsh 2.0.15's v4 logs are indexed. deja index and
deja doctor warn about sessions a harness's own cleanup will delete this
week (#4604), and an interrupted deja embed keeps what it already computed
(#4568). Release checksums are now signed as a sigstore bundle, checked with
cosign verify-blob --bundle checksums.txt.sigstore.json.
Added
deja install copilot-autoadds asessionStarthook to Copilot CLI, so a new or resumed session starts with the project digest, as in Claude Code and Gemini CLI. The hook goes underhooksin~/.copilot/settings.json(orconfig.jsonwhile your own hooks are still there, since Copilot moves them on start), and uninstall gives the file back byte for byte. It also wirespreMcpToolCallandsessionEnd, so MCP recall leaves out the session asking however long it runs (#4231, #4551).deja install kilocode-autostarts each Kilo CLI session with the project digest. Kilo kept opencode's plugin loader, so it writes opencode's plugin, in the 1.x shape Kilo loads, into~/.config/kilo/plugins(#4398).deja install kiro-autowrites adejaagent for kiro-cli whoseagentSpawnhook puts the project digest in front of the model and whoseuserPromptSubmithook adds recall for each prompt. Start it withkiro-cli chat --agent deja, or make it the default withkiro-cli agent set-default deja. deja leaves your default agent alone (#4304).deja install deepseek-autogives dsh the point-of-action notes: after aread,editorwritethe model hears what past sessions settled about that file, and after a failedbash, the fix this machine found for the same error before. It uses dsh'stools/post-executeseam, so run the install again to get it (#4293).deja install grok-autowiresPostToolUse, so a Grok Build command that fails gets the earlier fix, as Claude Code and Codex do (#4499).deja indexanddeja doctorsay how many sessions Claude Code, Gemini CLI or Hermes will delete with its own cleanup in the next 7 days, read from that harness's retention setting (cleanupPeriodDays,general.sessionRetention,sessions.retention_days). deja keeps them searchable after the files go. Nothing is printed when nothing is due (#4604).- A Kimi Code
/btwside question is indexed with its answer, from Kimi 0.28 through 2.x, as its own session naming the one it was asked in, without the copy of the session context the fork opens with.deja resumeon it points at that session, and doctor no longer counts it as a skipped sub-agent (#4484). - More of what clients keep is indexed: ZCode's older snapshots under
~/.zcode/v2/sessions(#4432), Cherry Studio agents that run on pi or dsh (#4342), prime-agentrlm.spawnchildren as sub-agents of the session that spawned them (#4407), andkiro-cli chat --no-interactiveruns kept only indata.sqlite3(#4300).DEJA_INCLUDE_SUBAGENTS=1now takes Kimi Code and Qwen Code sub-agent logs, where it did nothing (#4483).
Changed
- Releases are signed with cosign 3 and carry
checksums.txt.sigstore.jsonin place ofchecksums.txt.sigandchecksums.txt.pem. Verify withcosign verify-blob --bundle checksums.txt.sigstore.jsonas SECURITY.md shows (#4577). - One directory is one project whichever agent ran there. Codex, opencode, goose, Cursor, Gemini CLI, Grok, Amp, aider, Copilot Chat, Zed and others named a session in
/tmp/w/my-appmy-appwhere Claude Code saysw/my-app, and Cline, Roo, Continue, Kiro, Reasonix, CodeWhale and Hermes filed it undermy/app. Every reader now takes the last two segments of the recorded directory. A folder name with_,., a space or non-ASCII characters resolves back to its directory, pi and Senpi take the project from the session header, and a drive is no longer a parent (C:\projisproj). Sessions change labels on the next rebuild (#4175, #4225, #4402, #4427, #4457, #4458, #4461, #4462, #4514). - The index rebuilds once after upgrading, to pick up the new tool records, project labels and session splits below.
- Index updates are faster on big stores. One new message on a 5,000-session goose or Hermes store re-indexes in about 0.7 s, down from 3.2-4.0 s for goose (#4272). One Crush turn in a 3000-session store no longer re-reads all 3000 in 8 s (#4381). One appended run at 10,000 sessions went from 2.1 s to 0.6 s of CPU for the failed-command warnings (#4288). A rebuild with 500 Cursor CLI transcripts whose chat is gone takes 6 ms instead of 3.6 s (#4226). Resuming a recent session reads its digest from cache, 0.1-0.2 ms instead of 24-41 ms (#4224).
Fixed
- DeepSeek Harness: sessions written by dsh 2.0.15 to
session.v4.jsonl.zstdare indexed, reading the newest log in each session directory (#4600). dsh sessions keep theirbashcommands with exit status and the files, edits and written lines ofread,write,editandstr_replace_editor(#4291). A log with a torn or corrupt zstd frame keeps the frames around it, and compressed Codex rollouts and OpenClaw archives are read the same way (#4294). ADSH_HOMEstarting with~is expanded as dsh does (#4390), and doctor says whencordis.patch.ymlnames a deja plugin file dsh cannot find, which keeps dsh from starting (#4292). deja embedinterrupted partway keeps the vectors it already computed: the sidecar is written every 50 requests and the next run embeds only the rest. A local backend gets two minutes per batch instead of 30 s, and search still gives up after 30 s (#4568, contributed by @perdakovich).- In Claude Code a failing command gets the earlier fix. Claude fires
PostToolUseFailurefor a non-zero exit, whichclaude-autonever wired. Existing installs pick the hook up on upgrade. Claude Code before 2.0.56, which would reject the whole settings file over the unknown event, is left without it (#4488). - Sessions that had no record of their tool calls now have one: commands, files read and written, and edits. This covers Hermes (#4242, #4296), Kiro CLI and Kiro IDE (#4299, #4506), Continue (#4373), Amp (#4356, #4527), ZCode (#4428), grok-dev (#4498), Senpi eval cells (#4425), prime-agent
ipythonedits (#4526), omp hashline edits (#4525), Command Code 1.73, which was not read at all (#4370), aider (#4324, #4325, #4326), pre-native-tools Roo, Kilo Code and Cline tasks (#4424), Cline CLIrun_commandsresults (#4315), and pi, omp, OpenClaw, gjc, prime-agent, senpi and Kimchi (#4113). Cursor CLI sessions with tool output went from 0% to 53% on the measured machine (#4187). deja blamenames the Claude subagent that changed a file: the 1,668 subagent edits on the measured machine were never indexed, and edits inside.claude/worktrees/were skipped (#4163, #4164).- Edits that kept only the file name now keep the replaced text and written lines, so
deja restoreanddeja blamesee them: goose (#4265, #4287, unified diffs from goose 1.10-1.25), Crush (#4377, #4533), Roo Code and Kilo Code (#4419, #4531, #4535), CodeWhale (#4360, #4404, #4538), Zedwrite_file(#4339), Gemini CLI and Qwen Code (#4254, #4258, #4494), Copilot CLI and Copilot Chat (#4491, #4492), opencode and Kilo CLI (#4495, #4534), Grok Build (#4497), OpenClawapply_patch(#4500), Cline (#4503, #4504), Antigravity (#4358, #4528), Continue IDE (#4529), Command Code (#4540), Reasonix (#4541), and omp and gjc replace, patch and move edits (#4524, #4576). An edit the client refused or the user rejected is left out. - More commands are kept as commands: Claude Code and Cherry Studio PowerShell and NotebookEdit (#4489), Codex
shell_commandwith unified exec off (#4490),powershellin Kimchi, Senpi and pi (#4523), CodeWhaleterminal/runandtask_shell_start(#4538), and Command Codeargslists,powershellandmonitor_command(#4540). A command the user denied in Crush or Hermes is no longer indexed as one that ran (#4575, #4242). - A failed command keeps its exit code in Claude Code, Cherry Studio, pi, omp, gjc, prime, senpi, Kimchi, goose, Cline, Kiro CLI, Zed, Copilot Chat, Roo, Kilo Code, Continue, Amp, Antigravity, Crush, ZCode, CodeWhale, Command Code, Gemini CLI, Qwen Code and Kimi Code, also when its result lands in a later index pass than the call (#4208, #4255, #4262, #4443, #4487, #4493, #4496, #4501, #4502, #4505, #4507, #4530, #4532, #4536, #4537, #4539).
- Failed-command recall finds more fixes. Qwen Code sessions yield fix pairs, where an
Error: (none)line on every shell result made success read as failure (#4256). A Gemini CLI or Qwen Code command with more than a megabyte of output gets the earlier fix (#4314). A passing command is no longer on file as failing because the agent later read a failing log (#4309). - A session that ended is back in the next session's MCP recall right away, not 20 minutes later. Claude Code, Gemini CLI, Qwen Code, Codex and Cursor CLI get a session-end hook, and the opencode plugin and
opencode-dejaend their sessions on 1.x and 2.x (#4210, #4257, #4545, #4546, #4571). Installing hooks keeps the key order of your own entries insettings.json. - A session no longer gets its own work back from recall: the first turn of a Hermes session (#4246), gjc, pi, omp and prime-agent sessions (#4394), opencode's opening prompt and image-only turns (#4199, #4273, #4573), OpenClaw sessions and their per-prompt recall, which resent the same block every turn (#4581, #4582), the pre-edit and pre-command lines (#4380), and deja's own credit line (#4247). Run the matching
deja install <client>-autoagain to update the plugin. - Forks and sub-agents stop recalling their source as earlier work. A Claude Code session moved to the background or resumed with
--fork-session(#4251), Codex and Claude Code sub-agents (#4547), spawned agents and opencode task sessions (#4548), and Codex, Claude Code and opencode forks (#4549) leave the source out.codex resumeand Codex forks no longer get a second session-start digest (#4550). deja resumeruns the command in the directory the session ran in, where the client finds a session only from there or runs its tools wherever it was started: Gemini CLI (#4211), Kimi Code (#4274), Qwen Code (#4258, #4259), Cursor CLI with a dot, space or non-ASCII path (#4193), Cline CLI (#4318), Kiro CLI andkiro-cli --v3(#4305, #4307), gjc and Kimchi (#4395, #4400), Senpi (#4426), prime-agent (#4408), pi (#4456), CodeWhale (#4362), Continue withcn --fork(#4375), Command Code (#4372), ZCode (#4430) and Roo CLI with-w(#4422, #4455). Hermes profiles get-p <profile>(#4248, #4250). aider names--restore-chat-history(#4329), and VS Code Copilot Chat names the workspace to open,\\server\shareincluded (#4223, #4514).deja resumerefuses a session the client deleted, or whose directory is gone where the client needs it, and points atdeja show, instead of printing a command that fails: Codex (#4185), opencode and Kilo CLI (#4205), goose (#4271), Hermes (#4250) and others (#4459, #4460). opencode and Kilo sessions, which reopen from anywhere, drop thecdinstead (#4201). The printed line no longer runs part of a directory name through the shell (#4591).- Install and uninstall give config files back byte for byte: key order at every depth (#4167, #4306), comments and trailing commas in Amp's
settings.json(#4357), Roo's emptymcpServers(#4423), goose'sAGENTS.md(#4269), Gemini'shooksConfig.enabled(#4216, #4471), empty blocks and empty files you created (#4562, #4563), and CRLF configs with comments (#4553). ZCode'shooks.enabledgoes back the way it was (#4431). - Install refuses a config it would break and names the line, instead of appending something the client cannot load: TOML that sets
mcp_servers,hooksor deja inline (#4554), YAML that is{}or opens with--- {}(#4555), JSON5openclaw.json(#4557), YAML blocks opened with a comment, written twice or spelled another way (#4289), Hermesplugins:blocks it cannot edit safely (#4243, #4249), and read-only files, which it used to replace (#4558, #4560)..jsoncconfigs no longer get{,(#4399), aider'sread:list is joined instead of duplicated (#4330, #4331), and Hermes blocks go before a...document end (#4348). - A change the client saves to its config while
deja installedits it is kept. Measured on~/.claude.json, lost saves went from 31 and 116 of 200 runs to 4 and 5 (#4561). - Install keeps what you turned off off: an MCP entry you disabled in prime, Zed, ZCode, goose, Hermes, Codex, Grok or dsh (#4467), deja's plugin disabled through OpenClaw, Hermes or Reasonix (#4472), and it says when a client deny list or hooks switch keeps deja off (#4468, #4469). With deja already wired under another name it takes that entry over or says so, and a server that only has a path ending in
dejain its args is no longer taken for deja's (#4556). - Install writes where the client reads:
COPILOT_HOME(#4240),$GOOSE_PATH_ROOTand goose's XDG rules on macOS and Windows (#4267, #4285, #4286, #4569), ZCode'ssetting.jsonunderhooks.eventsinstead of a first-launch-onlyconfig.json(#4429), and MCP entries on Homebrew'sbin/dejalink instead of aCellarpath the next upgrade removes (#4189). OpenClaw starts without two[plugins]warnings (#4579), Crush loads the deja skill (#4378), Cline lists the plugin asdeja(#4316), and the Hermes provider passes memory entries that start with-todeja remember(#4385). - Codex hook trust: uninstall removes the trust pins Codex wrote for deja's hooks (#4183), a dropped duplicate moves your hooks' pins with them (#4227), install says when some hooks still need approving (#4572), and doctor reads trust by where each hook sits (#4297, #4313).
deja doctorstops sayingwiredwhen the client will not run deja: an MCP entry or plugin switched off in the client (#4301, #4302, #4303, #4359, #4409, #4466, #4468, #4469, #4470), a binary that is gone (#4177, #4197), a Copilot CLI row with no server registered (#4232), pi without pi-mcp-adapter (#4583), OpenClaw with deja's plugin missing (#4580), Cherry Studio before the server is imported (#4344), an aider config with noread:entry (#4327), and hook rows that aremissing, notstale, when the client config holds no deja hook (#4275).deja doctorstops counting a client's own files as transcripts it could not read: Kimi, Gemini, Qwen, Copilot CLI, OpenClaw, CodeWhale, gjc and grok 1.0.41 bookkeeping (#4233, #4361, #4393, #4473, #4474, #4475, #4476, #4477, #4478, #4586). It finds the Hermes 0.17 store (#4244), reports Kilo CLI's and ZCode's database in--json(#4397), counts undecodable Zed threads as skipped (#4341), names a missing hook launcher once (#4245), prints Crush's session count once (#4379), reports the Cline skill aswritten(#4317), adds a Commands row for Continue and goose (#4374), and says why the Amp row is empty on builds from 2026-03-31 on, which keep threads on ampcode.com (#4355). A brokensqlite3on PATH is reported instead of reading as empty stores (#4157).- Sessions stay searchable where they used to drop out: deleted Cursor, Copilot CLI and Kimi sessions (#4195), a resumed Gemini CLI session and the prompts recall was attached to (#4213, #4214), a project directory removed while another held the same session id (#4310), opencode, Kilo and ZCode sessions deleted from their database through a rebuild (#4447), a Copilot Chat or Cherry Studio session mid-write (#4229, #4346), and MCP recall while an index pass runs (#4266).
- An incremental
deja indexnow matches a rebuild. Sessions are no longer held twice: Kilo CLI and ZCode on every write (#4396), compressed Codex rollouts (#4252), ZCode snapshots (#4448), omp sessions indexed while running (#4406), lines written during a pass (#4442), streaming Grok, Kiro and Kimi replies (#4445). Titles and times follow the client: renames in Cursor, Cline, Kimi and side files (#4319, #4446, #4450, #4451, #4592), Codex and Gemini updated times (#4166, #4253, #4574), Kiro reply times (#4444), short harness titles (#4452), interactive Codex sessions (#4180, #4449), and opencode replies still being written (#4207). A half-written last line waits for the next pass (#4276), anddeja searchdrops staledeja howoffers (#4441). - Roo Code, Kilo Code and Cline tasks no longer index the client's "You did not use a tool" retry prompt as your words (36 of 37 user turns on one Roo task), and their turns carry their own time instead of a second apart at the end (#4420, #4421). Continue sessions indexed right after they ran are no longer stamped past the clock (#4376).
- opencode stores upgraded to 2.0 are read in both layouts, and
opencode-dejaships the server entry opencode 2.x loads (#4154). OpenClaw 2026.7 reset and delete archives are indexed (#4482). - Grok Build: hooks no longer claim memory arrived when grok drops what they return (#4588), plain
grok -psessions are not taken for sub-agents (#4585), and doctor stops suggesting agrok mcp addthat Grok Build rejects (#4587). In pi the digest points atdeja ctxinstead of arecall_contexttool pi does not have (#4584). - Copilot Chat replies keep the file and symbol names VS Code draws inline, and an agent edit shows as the file's name instead of an empty code fence (#4589, #4590).
- Kimchi sub-agent runs are skipped like Claude Code's instead of indexed as sessions (#4401), and Reasonix and Command Code hooks speak on the tools they were silent for, including Reasonix's
read_filebefore an edit (#4371, #4410, #4540, #4541). - Smaller fixes:
deja restorefinds an edit under either name of a symlinked path and-orefuses the source under its other name (#4593),deja shownotes a short-stored message only on its own session (#4340), aider session ids no longer collide when a history file is replaced (#4332), plainaiderno longer reads the lastdeja aiderproject's digest (#4328), Cherry Studio follows a moved data directory (#4347) and uninstall removes its skill (#4343, #4345), goose-auto install and uninstall report and clean up correctly (#4268, #4270), opencode's MCP entry goes above your first server's comment (#4203), anddeja indexno longer says no history was found while a deleted transcript is still held (#4221). - On Windows a DeepSeek TUI or Codex tool path such as
/tmp/proj/retry.gois kept as written instead of joined onto the session directory, pi, Senpi and omp paths relative to/tmp/projkeep forward slashes, and doctor keeps the drive of afile://C:/...dsh plugin (#4438). - Shell completion covers
rulessubcommands,syncpeers and transfers,blame,secrets, install and index options, all bench modes and--seedafterbench recall(#4140, #4141, #4145, #4146, #4147, #4148, contributed by @jbaehova, and #4153). go testno longer depends on the machine it runs on: it ignores an installed opencode, keeps out of your XDG directories, does not read scope from the worktree name, and the index swap tests count waits instead of wall time (#4155, #4160, #4383, #4405). No behaviour change.
Changelog
Features
- feat: index and doctor say which sessions a harness's own cleanup deletes this week (#4604)
- feat: kilocode-auto and kiro-auto, Kimi /btw recall, sigstore bundle signing, self-recall fixes for Hermes and Claude forks (#4601)
Fixes
- fix(completion): complete sync peers and bidirectional transfers (#4148) (@jbaehova)
- fix(completion): dispatch rules subcommands (#4145) (@jbaehova)
- fix(completion): include all benchmark modes (#4147) (@jbaehova)
- fix(completion): offer --seed after bench recall, --git-note implies --attribution (#4153)
- fix(completion): suggest blame attribution options (#4141) (@jbaehova)
- fix(completion): suggest install safety and indexing options (#4140) (@jbaehova)
- fix(completion): suggest secrets-specific options (#4146) (@jbaehova)
- fix(deepseek): index dsh 2.0.15's session.v4 logs, reading the newest log in each session (#4602)
- fix(embed): incremental checkpointing and timeout for local backends (#4568) (@perdakovich)
- fix(hermes): pass memory entries to deja remember after -- (#4385)
- fix(opencode): read stores upgraded to 2.0 and load the plugin on 2.x (#4154)
- fix(sources): probe sqlite3 once and report a broken one instead of empty stores (#4157)
- fix(test): scrub agent-store env in TestMain by rule, not a hand list (#4181)
- fix: harness hunt round 2 — incremental index matches a rebuild, project labels and resume directories, and client off switches (#4510)
- fix: harness hunt round 2 — reads, resume and wiring across goose, qwen, kimi, hermes, gemini, copilot and codex (#4412)
- fix: harness round 2 tool vocabulary and exit codes to main (#4552)
- fix: harness round 2: session identity, config writers, copilot-auto and follow-ups (#4596)
- fix: resume, read and wiring fixes from the first harness-hunt round across Claude, Codex, Cursor, opencode and Gemini (#4220)
Documentation
- docs(guide): deja-vu next to claude-mem, and claude-mem's Codex, Cursor and Windsurf support on the compare page (#4150)
- docs(guide): reading and searching Codex CLI history, and codex delete on the delete page (#4159)
- docs: explain how to delete Roo Code task history (#4142) (@jbaehova)
- docs: explain how to delete Zed agent thread history (#4143) (@jbaehova)
Other
- chore(deps): bump github/codeql-action to 4.38.2 across all steps (#4174) (@dependabot[bot])
- chore(deps): bump golang from 1.25-alpine to 1.27-alpine (#4171) (@dependabot[bot])
- chore(deps): bump hashgraph-online/ai-plugin-scanner-action (#4173) (@dependabot[bot])
- chore(deps): bump sigstore/cosign-installer from 3.9.1 to 4.1.2 (#4170) (@dependabot[bot])
- chore: the manifests and plugin versions say 0.21.4 (#4136)
- ci(release): sync the winget-pkgs fork before komac opens the pull request (#4138)
- release: 0.21.5 notes and site version (#4605)
Install
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
go install github.com/vshulcz/deja-vu/cmd/deja@v0.21.5
brew install deja-vu