Harnesses

the forty-three it reads, and what each one supports

deja indexes forty-three coding-agent histories into one retroactive index. A fix found in one agent is recalled inside another.

HarnessStoreMCP recallAuto-recallSkillCommandResumeHandoffNeeds
aider~/.aider.chat.history.md
${AIDER_CHAT_HISTORY_FILE}
${DEJA_AIDER_ROOTS}/**/.aider.chat.history.md
⚠✅✕⚠✕✅deja aider
Amp~/.local/share/amp/threads/*.json
${XDG_DATA_HOME}/amp/threads/*.json
${DEJA_AMP_ROOT}/*.json
✅✅✅✅✅✅threads from 0.0.1774963753 on live on ampcode.com; deja reads those its plugin has written out, and older local ones
Antigravity~/.gemini/antigravity*/brain/*/.system_generated/logs/transcript.jsonl
${DEJA_ANTIGRAVITY_ROOT}/brain/*/.system_generated/logs/transcript.jsonl
✅✅✅✅✅✅—
Claude Code${CLAUDE_CONFIG_DIR:-~/.claude}/${CLAUDE_CODE_PROJECT_DIR_NAME:-projects}/**/*.jsonl
${CLAUDE_CONFIG_DIR:-~/.claude}/transcripts/**/*.jsonl
${HOME}/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/${CLAUDE_CODE_PROJECT_DIR_NAME:-projects}/**/*.jsonl
${DEJA_XCODE_CLAUDE_ROOT}/**/*.jsonl
${DEJA_CC_MIRROR_ROOT:-~/.cc-mirror}/*/.claude/${CLAUDE_CODE_PROJECT_DIR_NAME:-projects}/**/*.jsonl
${DEJA_CLAUDE_ROOT}/**/*.jsonl
${CLAUDE_CONFIG_DIR:-~/.claude}/history.jsonl
${DEJA_CLAUDE_HISTORY_FILE}
✅✅✅✅✅✅—
Cline${CLINE_SESSION_DATA_DIR:-${CLINE_DATA_DIR:-${CLINE_DIR:-~/.cline}/data}/sessions}/*/*.messages.json
/saoudrizwan.claude-dev/tasks/*/api_conversation_history.json
${DEJA_CLINE_ROOT}/*/*.messages.json
${DEJA_CLINE_ROOTS}/tasks/*/api_conversation_history.json
✅✅✅✅✅✅—
Codex CLI${CODEX_HOME:-~/.codex}/sessions/**/rollout-*.jsonl
${CODEX_HOME:-~/.codex}/sessions/**/rollout-*.jsonl.zst
${CODEX_HOME:-~/.codex}/archived_sessions/**/rollout-*.jsonl
${CODEX_HOME:-~/.codex}/archived_sessions/**/rollout-*.jsonl.zst
${CODEX_HOME:-~/.codex}/history.jsonl
${DEJA_CODEX_ROOT}/sessions/**/rollout-*.jsonl
${HOME}/Library/Developer/Xcode/CodingAssistant/codex/sessions/**/rollout-*.jsonl
${HOME}/Library/Developer/Xcode/CodingAssistant/codex/archived_sessions/**/rollout-*.jsonl
${DEJA_XCODE_CODEX_ROOT}/sessions/**/rollout-*.jsonl
✅✅✅✅✅✅—
Copilot CLI${DEJA_COPILOT_ROOT:-${COPILOT_HOME:-~/.copilot}/session-state}/*/events.jsonl✅✅✅✅✅✅—
VS Code Copilot Chat/workspaceStorage/*/chatSessions/*.{json,jsonl}
/workspaceStorage/*/GitHub.copilot-chat/transcripts/*.jsonl
/globalStorage/emptyWindowChatSessions/*.{json,jsonl}
/workspaceStorage/no-workspace/chatSessions/*.json
${DEJA_COPILOT_CHAT_ROOTS}
✅✅✅✅✕✅—
Cursor~/Library/Application Support/Cursor/User/{globalStorage,workspaceStorage/*}/state.vscdb
~/.config/Cursor/User/{globalStorage,workspaceStorage/*}/state.vscdb
${XDG_CONFIG_HOME}/Cursor/User/{globalStorage,workspaceStorage/*}/state.vscdb
%APPDATA%/Cursor/User/{globalStorage,workspaceStorage/*}/state.vscdb
${CURSOR_CONFIG_DIR:-~/.cursor}/projects/**/agent-transcripts/**/*.jsonl
${CURSOR_CONFIG_DIR:-~/.cursor}/chats/*/*/store.db
${DEJA_CURSOR_ROOT}
${DEJA_CURSOR_CLI_ROOT}
✅✅✅✅✅✅sqlite3 (IDE chats, CLI tool output)
DeepSeek Harness${DSH_HOME:-~/.dsh}/sessions/*/session-*/session.v4.jsonl.zstd
${DSH_HOME:-~/.dsh}/sessions/*/session-*/session.v3.jsonl.zstd
${DSH_HOME:-~/.dsh}/sessions/*/session-*/session.jsonl.zstd
${DSH_HOME:-~/.dsh}/sessions/*/session-*/session.jsonl
${DEJA_DEEPSEEK_ROOT}/*/session-*/session.v4.jsonl.zstd
✅✅✅✅✕✅zstd
Gemini CLI${GEMINI_CLI_HOME:-~}/.gemini/tmp/*/chats/**/*.{json,jsonl}
${DEJA_GEMINI_ROOT}/tmp/*/chats/**/*.{json,jsonl}
✅✅✅✅✅✅—
Goose${GOOSE_PATH_ROOT}/data/sessions/sessions.db
%APPDATA%/Block/goose/data/sessions/*.jsonl
%APPDATA%/Block/goose/data/sessions/sessions.db
~/Library/Application Support/Block/goose/sessions/*.jsonl
~/Library/Application Support/Block/goose/sessions/sessions.db
~/Library/Application Support/goose/sessions/sessions.db
~/.local/share/Block/goose/sessions/sessions.db
~/.local/share/goose/sessions/*.jsonl
~/.local/share/goose/sessions/sessions.db
${XDG_DATA_HOME}/goose/sessions/*.jsonl
${XDG_DATA_HOME}/goose/sessions/sessions.db
${DEJA_GOOSE_ROOT}/sessions/*.jsonl
${DEJA_GOOSE_ROOT}/sessions/sessions.db
${DEJA_GOOSE_DB}
✅✅✅✅✅✅deja goose
Grok Build${GROK_HOME:-~/.grok}/sessions/**/updates.jsonl
${DEJA_GROK_ROOT}/sessions/**/updates.jsonl
${GROK_HOME:-~/.grok}/grok.db
✅✅✅✅✅✅sqlite3 (grok-dev store)
Hermes${DEJA_HERMES_HOME:-${HERMES_HOME:-~/.hermes}}/state.db
${DEJA_HERMES_HOME:-${HERMES_HOME:-~/.hermes}}/profiles/*/state.db
${DEJA_HERMES_PROFILES_ROOT}/*/state.db
${DEJA_HERMES_DB}
✅✅✅✅✅✅sqlite3
Kimi Code${KIMI_CODE_HOME:-~/.kimi-code}/sessions/*/*/agents/main/wire.jsonl
${DEJA_KIMI_ROOT}/sessions/*/*/agents/main/wire.jsonl
✅✅✅✅✅✅—
omp (Oh My Pi)${DEJA_OMP_ROOT:-~/.omp/agent/sessions}/**/*.jsonl
~/.omp/profiles/*/agent/sessions/**/*.jsonl
${XDG_DATA_HOME}/omp/sessions/**/*.jsonl
${XDG_DATA_HOME}/omp/profiles/*/sessions/**/*.jsonl
✅✅✅✅✅✅—
OpenClaw${OPENCLAW_STATE_DIR:-~/.openclaw}/agents/*/agent/openclaw-agent.sqlite
${OPENCLAW_STATE_DIR:-~/.openclaw}/agents/*/sessions/*.jsonl
${DEJA_OPENCLAW_ROOT}/*/agent/openclaw-agent.sqlite
${DEJA_OPENCLAW_ROOT}/*/sessions/*.jsonl
✅✅✅✅✅✅sqlite3 (2026.8+ store); zstd for .zst archives and compressed events (2026.9.9+)
opencode~/.local/share/opencode/opencode.db
~/.local/share/opencode/storage/session_diff/ses_*.json
${XDG_DATA_HOME}/opencode/opencode.db
${DEJA_OPENCODE_DB}
${DEJA_OPENCODE_DIFFS}/ses_*.json
✅✅✅✅✅✅sqlite3
Continue${CONTINUE_GLOBAL_DIR:-~/.continue}/sessions/*.json
${DEJA_CONTINUE_ROOT}/sessions/*.json
✅⚠✅✅✅✅—
Crush/.crush/crush.db
~/.local/share/crush/projects.json
${XDG_DATA_HOME}/crush/projects.json
${DEJA_CRUSH_ROOT}/projects.json
✅✅✅✅✅✅sqlite3
pi${DEJA_PI_ROOT:-~/.pi/agent/sessions}/**/*.jsonl✅✅✅✅✅✅—
prime-agent (PrimeIntellect)${DEJA_PRIME_ROOT:-~/.prime/agent/sessions}/**/*.jsonl
${PRIME_AGENT_SESSION_DIR}/**/*.jsonl
${PRIME_AGENT_CODING_AGENT_SESSION_DIR}/**/*.jsonl
✅✅✅✅✅✅—
Qwen Code${DEJA_QWEN_ROOT:-~/.qwen}/projects/*/chats/*.jsonl✅✅✅✅✅✅—
Cherry Studio~/Library/Application Support/CherryStudio/Data/Agents/.claude/projects/*/*.jsonl
%APPDATA%/CherryStudio/Data/Agents/.claude/projects/*/*.jsonl
${XDG_CONFIG_HOME}/CherryStudio/Data/Agents/.claude/projects/*/*.jsonl
/CherryStudio/.claude/projects/*/*.jsonl
/CherryStudio/Data/Agents/.pi/sessions/*.jsonl
/CherryStudio/Data/Agents/.dsh/sessions/*/session-*/session*.jsonl*
/Data/Agents/…
${DEJA_CHERRYSTUDIO_ROOTS}/*/*.jsonl
✅✅✅✕✕pasteimport the server once in Settings -> MCP; enable the skill for the agent
Senpi${SENPI_CODING_AGENT_DIR:-~/.senpi/agent}/sessions/*/*.jsonl
${DEJA_SENPI_ROOT}/*/*.jsonl
✅✅✅✅✅✅none
gajae-code${GJC_CODING_AGENT_DIR:-~/.gjc/agent}/sessions/*/*.jsonl
${DEJA_GJC_ROOT}/*/*.jsonl
✅✅✅✅✅✅none
Kimchi Coding~/.config/kimchi/harness/sessions/----/*.jsonl
${DEJA_KIMCHI_ROOT}/**/*.jsonl
✅✅✅✅✅✅none
Command Code~/.commandcode/projects/*/*.jsonl
${DEJA_COMMANDCODE_ROOT}/*/*.jsonl
✅✅✅✅✅✅none
ZCode~/.zcode/projects/*/*.jsonl
${DEJA_ZCODE_ROOT}/*/*.jsonl
~/.zcode/cli/db/db.sqlite
${DEJA_ZCODE_DB}
~/.zcode/v2/sessions/*/*.json
${DEJA_ZCODE_LEGACY_ROOT}/*/*.json
✅✅✅✅✅✅sqlite3 for the CLI database
Kiro~/.kiro/sessions/cli/*.jsonl
~/.kiro/sessions/*/sess_*/messages.jsonl
${DEJA_KIRO_ROOT}/cli/*.jsonl
${DEJA_KIRO_ROOT}/*/sess_*/messages.jsonl
~/Library/Application Support/kiro-cli/data.sqlite3
~/.local/share/kiro-cli/data.sqlite3
${DEJA_KIRO_DB}
✅✅✅✅✅✅sqlite3 for the CLI database
Kilo Code/kilocode.kilo-code/tasks/*/api_conversation_history.json
${DEJA_KILO_ROOTS}/tasks/*/api_conversation_history.json
~/.local/share/kilo/kilo.db
${XDG_DATA_HOME}/kilo/kilo.db
${DEJA_KILO_DB}
✅✅✅✅✅✅sqlite3 for the CLI store
Roo Code/rooveterinaryinc.roo-cline/tasks/*/api_conversation_history.json
${DEJA_ROO_ROOTS}/tasks/*/api_conversation_history.json
${DEJA_ROO_CLI_ROOT:-~/.vscode-mock/global-storage}/tasks/*/api_conversation_history.json
✅✕✅✅✅pasteroo CLI (editor tasks reopen in the editor)
Zed~/Library/Application Support/Zed/threads/threads.db
${XDG_DATA_HOME}/zed/threads/threads.db
%LOCALAPPDATA%/Zed/threads/threads.db
${DEJA_ZED_ROOT}/threads/threads.db
${DEJA_ZED_DB}
✅✕✅✅✕pastesqlite3 + zstd
Devin CLI~/.local/share/devin/cli/sessions.db
${XDG_DATA_HOME}/devin/cli/sessions.db
%LOCALAPPDATA%/devin/cli/sessions.db
cli_sessions.db beside sessions.db (the legacy name)
${DEJA_DEVIN_DB}
✅✅✅✕✅✅sqlite3
CodeWhale${CODEWHALE_HOME:-~/.codewhale}/sessions/.json
~/.deepseek/sessions/.json
${DEJA_CODEWHALE_ROOT}/.json
✅✅✅✅✅✅none
Junie${JUNIE_HOME:-~/.junie}/sessions//events.jsonl
${JUNIE_HOME:-~/.junie}/sessions/index.jsonl
${DEJA_JUNIE_ROOT}//events.jsonl
✅✅✅✅✅✅none
JetBrains AI Assistant~/Library/Application Support/JetBrains//workspace/.xml
%APPDATA%\JetBrains\\workspace\.xml
${XDG_CONFIG_HOME:-~/.config}/JetBrains//workspace/.xml
//aia-task-history/.events
${DEJA_JETBRAINS_ROOT}//workspace/.xml
✅⚠⚠⚠✕pastenone
Windsurf / Devin Desktop~/.codeium/windsurf/cascade/.pb
%USERPROFILE%\.codeium\windsurf\cascade\.pb
${DEJA_WINDSURF_ROOT}/cascade/.pb
✅⚠✅✅✕pastenone
CodeBuddy Code${CODEBUDDY_CONFIG_DIR:-~/.codebuddy}/projects//.jsonl
${CODEBUDDY_CONFIG_DIR:-~/.codebuddy}/projects///subagents/agent-.jsonl
${WORKBUDDY_CONFIG_DIR:-~/.workbuddy}/projects//.jsonl
~/.workbuddy-ai/projects//.jsonl
${DEJA_CODEBUDDY_ROOTS}//.jsonl
✅✅✅✅✅✅none
Reasonix${REASONIX_STATE_HOME:-~/.reasonix}/sessions/.jsonl
${REASONIX_STATE_HOME:-~/.reasonix}/projects//sessions/.jsonl
%APPDATA%\reasonix\sessions\.jsonl
%APPDATA%\reasonix\projects\\sessions\.jsonl
${DEJA_REASONIX_ROOT}/sessions/.jsonl
${REASONIX_STATE_HOME:-~/.reasonix}/projects//sessions-v4//events.frames
${REASONIX_STATE_HOME:-~/.reasonix}/sessions-v4//events.frames
${REASONIX_STATE_HOME:-~/.reasonix}/desktop-sessions-v5/by-id//events.frames
✅✅✅✅✅✅zstd for 1.x sessions
TRAE CLI${TRAE_HOME:-~/.trae}/cli/sessions/**/rollout-*.jsonl
${TRAE_HOME:-~/.trae}/cli/sessions/**/rollout-*.jsonl.zst
${TRAE_HOME:-~/.trae}/cli/archived_sessions/**/rollout-*.jsonl
${TRAE_HOME:-~/.trae}/cli/history.jsonl
${DEJA_TRAE_ROOT}/sessions/**/rollout-*.jsonl
✅✅✅✅✅✅none
Muse Code${XDG_DATA_HOME:-~/.local/share}/muse/sessions/YYYY/MM/DD//session.jsonl
${XDG_DATA_HOME:-~/.local/share}/muse/sessions/YYYY/MM/DD//subagent//session.jsonl
${DEJA_MUSE_ROOTS}/YYYY/MM/DD//session.jsonl
✅✅✅✅✅✅none
MiniMax Code~/.minimax/v2/sessions/YYYY/MM/DD//messages.jsonl
${DEJA_MCODE_ROOT}/YYYY/MM/DD//messages.jsonl
✅✅✅✕✅✅the MiniMax Code CLI (`mcode`) for `deja resume` and `deja handoff --to mcode --exec`; `sqlite3` for the session's workspace

✅ works · — possible, not built yet · ✕ the harness has no such mechanism · ⚠ waiting on the harness itself · ? not investigated

  • aider mcp — aider has no MCP client. Not a design limit but an unimplemented feature: several open requests and an open PR adding it, so this becomes work the day they ship it. Until then recall reaches aider through the read: context file (https://github.com/Aider-AI/aider/pull/5539)
  • aider skill — aider loads instruction files, it does not load them by name on demand: --read (and a CONVENTIONS.md by habit) puts a file in every message, which is what deja already writes as aider's context file. There is no catalogue an agent picks from, so a skill would only be the same always-on text under another name (aider 0.86.2 --help: --read/--file/--config, no skills flag)
  • aider command — the slash command set is built in; adding custom commands is an open feature request upstream, not something a third party can wire today (https://github.com/Aider-AI/aider/issues/894)
  • Continue auto — Continue's CLI carries a Claude-shaped hooks system — Claude's own event set, additionalContext, settings read from ~/.continue/settings.json — and nothing fires it in the published release: measured on @continuedev/cli 1.5.47, hooks written for every event loaded ("Hooks loaded: 8 handler(s)" in its own log) and no handler ran, while the same run's tool call went through. Becomes work the day a release fires them (https://github.com/continuedev/continue/tree/main/extensions/cli/src/hooks)
  • Cherry Studio command — No slash-command surface for a third party: commands are the app's own and an MCP server cannot register one (#3644).
  • Roo Code auto — Roo Code is archived: RooCodeInc/Roo-Code was archived on 2026-05-15, the hooks PRs (#10785, #11128, #11663) never merged, @roo-code/cli is gone from npm, and the last extension, 3.54.0, has no hook event in its bundle. Recall arrives when the model calls the tool. (https://github.com/RooCodeInc/Roo-Code)
  • Zed auto — Zed's agent exposes no lifecycle hook: nothing runs before a prompt is sent, and the extension API covers language servers, slash commands, context servers and debuggers only, so there is no point at which recall could be injected. Becomes work the day Zed ships one (no hook API in Zed 1.22.0 (#52729 closed unmerged) or extension API 0.7)
  • Devin CLI command — Devin CLI has no user-registered slash-command file: its plugin manifest and skills directories are the only extension surfaces the docs describe, so a `/deja` command has no file to live in. (bundled docs at share/devin/docs/extensibility (3000.11.3))
  • JetBrains AI Assistant auto — AI Assistant 262.10968.170 runs no user hooks: no hook configuration or hook runner is in the plugin, so nothing can put recall in front of its chat. (https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant)
  • JetBrains AI Assistant skill — AI Assistant 262.10968.170's own chat reads no SKILL.md. Its skill folders (IdeManagedSkillsLayout, ~/.claude/skills, ~/.codex/skills) are handed only to the ACP agents it hosts (AgentSkillsAdditionalRootsProvider: junie, claude-acp, codex), and the chat's skill picker opens only for a Claude or Codex agent (AgentSkillsContextPopupContributor). Those agents already get deja's skill from their own directories. (https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant)
  • JetBrains AI Assistant command — AI Assistant 262.10968.170 reads custom chat commands only from a project's .aiassistant/commands (CustomUserCommandsService); there is no user-level directory to write one to. (https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant)
  • Windsurf / Devin Desktop auto — Cascade runs user hooks from ~/.codeium/windsurf/hooks.json, but none of their output reaches the model: exit 2 only blocks the action, and show_output is shown in the UI and is not offered for pre_user_prompt. Recall reaches Cascade through the MCP tool, the global rule and the skill. (https://docs.devin.ai/desktop/cascade/hooks)
  • MiniMax Code command — No slash-command surface for a third party: the V1 plugin package carries skills, agents, hooks and scripts, and the manifest has no field for a command, so a /deja command has nowhere to be written (MiniMax plugin reference, package structure and manifest fields).

Hook surfaces

What reaches the agent in each harness, surface by surface. A test installs every target into a temporary home and fails when a target wires a surface this table does not claim, or the other way round.

HarnessDigestPer promptPre-toolAfter failureCompaction resetCompaction captureCompaction packetMCPHandoffSession endRulesStatusReader
aider◐◐✕✕✕✕✕✕✅✕✅✕✅
Amp✅✅✅✅✅✅✅✅✅✅✅✅◐
Antigravity✅✅◐✅✅✅✅✅✅✅✅✅✅
Claude Code✅✅✅✅✅✅✅✅✅✅✅✅✅
Cline✅✅✅✅✅✅✅✅✅✅✅✕✅
Codex CLI✅✅✅✅✅✅✅✅✅✅✅✕✅
Copilot CLI✅✅✅✅✅✅✅✅✅✅✅✅✅
VS Code Copilot Chat✅✅✅✅✅✅✅✅✅✅✅✅◐
Cursor✅◐✅✅✅✅✅✅✅✅◐✅✅
DeepSeek Harness✅✅✅✅✅✅✅✅✅✅✅✅✅
Gemini CLI✅✅✅✅✅✅✅✅✅✅✅✕✅
Goose✅✅◐◐✅✅✅✅✅✅✅◐✅
Grok Build◐◐✅✅✅✅✅✅✅✅✅✅✅
Hermes✅✅✅✅✅✅✅✅✅✅✅◐✅
Kimi Code✅✅◐◐✅✅✅✅✅✅✅✅✅
omp (Oh My Pi)✅✅✅✅✅✅✅✅✅✅✅✅✅
OpenClaw✅✅✅✅✅✅✅✅✅✅✅◐✅
opencode✅✅✅✅✅✅✅✅✅✅✅✅✅
Continue✕✕✕✕✕✕✕✅✅✕✅✕✅
Crush◐◐✅◐✅✅✅✅✅✕✅✕✅
pi✅✅✅✅✅✅✅✅✅✅✅✅✅
prime-agent (PrimeIntellect)✅✅✅✅✅✅✅✅✅✅✅✅✅
Qwen Code✅✅✅✅✅✅✅✅✅◐✅✅✅
Cherry Studio✅✅✅✅✅✅✅✅◐✅✅✕✅
Senpi✅✅✅✅✅✅✅✅✅✅✅✅✅
gajae-code✅✅✅✅✅✅✅✅✅✅✅✅✅
Kimchi Coding✅✅✅✅✅✅✅✅✅✅✅✅✅
Command Code✅✅✅✅✅✅✅✅✅✅✅✅✅
ZCode✅✅✅✅✅✅✅✅✅✕✅✕✅
Kiro◐◐◐◐✕✕✕✅✅◐✅✕✅
Kilo Code✅✅✅✅✅✅✅✅✅✅✅◐✅
Roo Code✕✕✕✕✕✕✕✅◐✕✅✕✅
Zed✕✕✕✕✕✕✕✅◐✕✅✕✅
Devin CLI✅✅✅✅✅——✅✅✅✅✕✅
CodeWhale✅✅◐◐✅✅✅✅✅✅✅✕✅
Junie✅✅✅◐✅✅✅✅✅✅✅✕✅
JetBrains AI Assistant✕✕✕✕✕✕✕✅◐✕✕✕◐
Windsurf / Devin Desktop✕✕✕✕✕✕✕✅◐✕——◐
CodeBuddy Code✅✅✅✅✅✅✅✅✅✅✅✅✅
Reasonix✅✅✅✅✅✅✅✅✅✅✅✅✅
TRAE CLI✅✅✅✅✅✅✅✅✅✅✅✅✅
Muse Code✅✅✅✅✅✅✅✅✅✅✅✕✅
MiniMax Code✅✅✅✅◐◐✕✅✅✅✕✕✅

✅ works · ◐ partly, see the note · — not built yet · ✕ blocked by the harness itself. Hover a cell for how it was checked: on a live stand, or by a fixture test.

Every gap and partial cell, with its reason
  • aider digest (stand): only under the `deja aider` wrapper, which writes the read: file aider re-reads on every message (aider 0.86.2)
  • aider prompt (stand): only under `deja aider` on macOS and Linux: the wrapper serves a read-only file from a named pipe, and aider reads it after logging the message, so each read carries the recall for that message (aider 0.86.2). Windows keeps the file written at start
  • aider pre_tool (blocked): aider has no hooks: none in 0.86.2 or on main, and the hook request Aider-AI/aider#5712 is open
  • aider failure (blocked): aider has no hooks: none in 0.86.2 or on main, and the hook request Aider-AI/aider#5712 is open
  • aider compaction_reset (blocked): aider has no hooks and keeps its chat summary in memory only (0.86.2 base_coder.py)
  • aider compaction_capture (blocked): aider has no hooks and keeps its chat summary in memory only (0.86.2 base_coder.py)
  • aider compaction_packet (blocked): aider has no hooks and keeps its chat summary in memory only (0.86.2 base_coder.py)
  • aider mcp (blocked): aider has no MCP client. Not a design limit but an unimplemented feature: several open requests and an open PR adding it, so this becomes work the day they ship it. Until then recall reaches aider through the read: context file
  • aider session_end (blocked): aider has no hooks: none in 0.86.2 or on main, and the hook request Aider-AI/aider#5712 is open
  • aider statusline (blocked): aider has no status line, footer or toast a third party can write to
  • Amp reader (fixture): threads live on Amp's server since 0.0.1774963753; the plugin writes each thread it runs to the thread store on agent.end, so threads from before it was installed are not read
  • Antigravity pre_tool (fixture): what PreToolUse returns never reaches the model, so the line for an edited file rides the next PreInvocation, after the edit has run
  • Cline statusline (blocked): Cline has no status line, footer or toast a third party can write to
  • Codex CLI statusline (blocked): tui.status_line takes built-in ids only and drops a command item with a warning (stand on 0.160.1, status_line_setup.rs:56)
  • VS Code Copilot Chat reader (fixture): compaction summaries are read from result.metadata; Copilot Chat 0.68 keeps the newest 20 agent transcripts per workspace and deletes older ones (cleanupOldTranscripts), so a transcript not indexed before that is gone
  • Cursor prompt (stand): beforeSubmitPrompt does not fire in headless cursor-agent -p, which is the host's choice
  • Cursor rules (fixture): ~/.cursor/rules/deja-rules.mdc with alwaysApply; cursor-agent finds .cursor/rules only by walking up from the working directory (loadRulesFromDirAndAncestors, 2026.10.01), so projects outside the home directory miss it, and the IDE's user rules live on Cursor's server
  • Gemini CLI statusline (blocked): Gemini CLI 0.60 has no statusLine setting in its bundle
  • Goose pre_tool (fixture): goose drops what PreToolUse prints, so the line for each file the turn edited rides the turn's Stop block, after the edit
  • Goose failure (fixture): the failure event carries no output and goose drops hook stdout, so the pair is read from sessions.db and rides the turn's Stop block, not right after the failed command
  • Goose statusline (stand): goose has no status line; the SessionStart hook's banner prints deja's line once when an interactive session opens (stand on 1.46)
  • Grok Build digest (stand): grok drops SessionStart output (#4588, 1.0.41), so the digest is parked and rides the session's first PreToolUse or PostToolUse, as a system-reminder after the tool result (1.0.41 stand)
  • Grok Build prompt (stand): grok discards UserPromptSubmit additionalContext (#4588, 1.0.41), so the recall is parked and rides the turn's first PreToolUse or PostToolUse (1.0.41 stand); a turn with no tool call, or whose call fails to parse, gets none
  • Hermes statusline (fixture): the provider reports a recall count where Hermes has RecallStatus; 0.17 has none
  • Kimi Code pre_tool (stand): runPreToolUse keeps only block.reason (0.28.1), so the line for an Edit or Write is parked and arrives with the next UserPromptSubmit, after the edit (0.28.1 stand)
  • Kimi Code failure (fixture): PostToolUse is fire and forget, so the line is parked and arrives with the next UserPromptSubmit, not right after the failed step
  • OpenClaw statusline (stand): a deja tab in the Control UI sidebar shows the line (gateway-auth route, no Labs switch; 2026.9.8); the TUI footer takes nothing from plugins (formatTuiFooter), and an always-visible session header item needs the Custom plugin UI lab
  • Continue digest (blocked): cn 1.5.47 (latest on npm) loads Claude-format hooks from ~/.claude/settings.json and $CONTINUE_GLOBAL_DIR/settings.json (Q2i) and never calls fireEvent; on main (5522c6f44) the fire* helpers in hooks/fireHook.ts have no caller. Stand: 9 handlers loaded, none ran, a failing Bash call included
  • Continue prompt (blocked): cn 1.5.47 (latest on npm) loads Claude-format hooks from ~/.claude/settings.json and $CONTINUE_GLOBAL_DIR/settings.json (Q2i) and never calls fireEvent; on main (5522c6f44) the fire* helpers in hooks/fireHook.ts have no caller. Stand: 9 handlers loaded, none ran, a failing Bash call included
  • Continue pre_tool (blocked): cn 1.5.47 (latest on npm) loads Claude-format hooks from ~/.claude/settings.json and $CONTINUE_GLOBAL_DIR/settings.json (Q2i) and never calls fireEvent; on main (5522c6f44) the fire* helpers in hooks/fireHook.ts have no caller. Stand: 9 handlers loaded, none ran, a failing Bash call included
  • Continue failure (blocked): cn 1.5.47 (latest on npm) loads Claude-format hooks from ~/.claude/settings.json and $CONTINUE_GLOBAL_DIR/settings.json (Q2i) and never calls fireEvent; on main (5522c6f44) the fire* helpers in hooks/fireHook.ts have no caller. Stand: 9 handlers loaded, none ran, a failing Bash call included
  • Continue compaction_reset (blocked): cn 1.5.47 (latest on npm) loads Claude-format hooks from ~/.claude/settings.json and $CONTINUE_GLOBAL_DIR/settings.json (Q2i) and never calls fireEvent; on main (5522c6f44) the fire* helpers in hooks/fireHook.ts have no caller. Stand: 9 handlers loaded, none ran, a failing Bash call included
  • Continue compaction_capture (blocked): cn 1.5.47 (latest on npm) loads Claude-format hooks from ~/.claude/settings.json and $CONTINUE_GLOBAL_DIR/settings.json (Q2i) and never calls fireEvent; on main (5522c6f44) the fire* helpers in hooks/fireHook.ts have no caller. Stand: 9 handlers loaded, none ran, a failing Bash call included
  • Continue compaction_packet (blocked): cn 1.5.47 (latest on npm) loads Claude-format hooks from ~/.claude/settings.json and $CONTINUE_GLOBAL_DIR/settings.json (Q2i) and never calls fireEvent; on main (5522c6f44) the fire* helpers in hooks/fireHook.ts have no caller. Stand: 9 handlers loaded, none ran, a failing Bash call included
  • Continue session_end (blocked): cn 1.5.47 (latest on npm) loads Claude-format hooks from ~/.claude/settings.json and $CONTINUE_GLOBAL_DIR/settings.json (Q2i) and never calls fireEvent; on main (5522c6f44) the fire* helpers in hooks/fireHook.ts have no caller. Stand: 9 handlers loaded, none ran, a failing Bash call included
  • Continue statusline (blocked): cn has no status line, footer or toast a third party can write to
  • Crush digest (fixture): PreToolUse is Crush's only hook, so the digest rides the session's first tool call; a session with none gets no digest
  • Crush prompt (fixture): PreToolUse is Crush's only hook, so recall for the newest message is read from crush.db and rides the next tool call; a turn with none gets nothing
  • Crush failure (fixture): the failed command is read from crush.db and its pair rides the next tool call, not the failed one
  • Crush session_end (blocked): Crush v0.97.1 (latest release, checked 2026-10-08) and main at 140e8cb have only EventPreToolUse (internal/hooks/hooks.go:13-16); SessionEnd is in charmbracelet/crush#3146, still open
  • Crush statusline (blocked): Crush has no status line, footer or toast a third party can write to
  • Qwen Code session_end (stand): qwen -p never fires SessionEnd (0.20.0); interactive exits do
  • Cherry Studio handoff (fixture): paste only: deja prints the prompt to paste, no command to run it with
  • Cherry Studio statusline (blocked): Cherry Studio has no status line, footer or toast a third party can write to
  • ZCode session_end (blocked): ZCode CLI 0.16.9 has seven hook events and no session end (contracts/src/hooks/index.ts:7-15); Stop fires every turn
  • ZCode statusline (blocked): ZCode has no status line, footer or toast a third party can write to
  • Kiro digest (stand): ~/.kiro/hooks fire in the IDE and the kiro-cli --v3 TUI in any agent (logged-in 2.22.0 stand), not in --v3 --no-interactive; the default V2 engine runs them only inside the deja agent
  • Kiro prompt (stand): ~/.kiro/hooks fire in the IDE and the kiro-cli --v3 TUI in any agent (logged-in 2.22.0 stand), not in --v3 --no-interactive; the default V2 engine runs them only inside the deja agent
  • Kiro pre_tool (stand): preToolUse stdout never reaches the model (acp-server.js L5478 sendStdout:false, CLI 2.28.0), so the deja agent parks the line and it arrives with the next userPromptSubmit, after the edit (2.22.0 TUI stand)
  • Kiro failure (stand): PostToolUse output is dropped at call time, so the line is parked and arrives with the next UserPromptSubmit, not right after the failed step (2.22.0 TUI stand)
  • Kiro compaction_reset (blocked): Kiro's hook triggers have no compaction event (acp-server.js L5478 trigger list, CLI 2.28.0)
  • Kiro compaction_capture (blocked): Kiro's hook triggers have no compaction event (acp-server.js L5478 trigger list, CLI 2.28.0)
  • Kiro compaction_packet (blocked): Kiro's hook triggers have no compaction event (acp-server.js L5478 trigger list, CLI 2.28.0)
  • Kiro session_end (stand): V3 only, V2 has none. 2.28.0 fires SessionEnd on leaving the TUI; 2.22.0 maps it to Stop (acp-server.js trigger aliases), so it fires after every turn and nothing fires on /quit (logged-in stand)
  • Kiro statusline (blocked): Kiro has no status line, footer or toast a third party can write to
  • Kilo Code statusline (fixture): a toast in the CLI's TUI; the VS Code extension shows none
  • Roo Code digest (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Roo Code prompt (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Roo Code pre_tool (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Roo Code failure (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Roo Code compaction_reset (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Roo Code compaction_capture (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Roo Code compaction_packet (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Roo Code handoff (fixture): paste only: deja prints the prompt to paste, no command to run it with
  • Roo Code session_end (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Roo Code statusline (blocked): RooCodeInc/Roo-Code was archived on 15.05.2026 and 3.54.0 has no hook events (rechecked 07.10)
  • Zed digest (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Zed prompt (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Zed pre_tool (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Zed failure (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Zed compaction_reset (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Zed compaction_capture (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Zed compaction_packet (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Zed handoff (fixture): paste only: deja prints the prompt to paste, no command to run it with
  • Zed session_end (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Zed statusline (blocked): Zed 1.22.0 has no lifecycle hooks: zed#57890 and zed#52688 went to discussions and the hooks PR zed#52729 closed unmerged
  • Devin CLI compaction_capture (todo): PostCompaction fires after the context is rebuilt; the pre-compaction turns stay in sessions.db and a catch-up there is follow-up (#4801)
  • Devin CLI compaction_packet (todo): no capture to ride yet; the packet follows the sessions.db catch-up (#4801)
  • Devin CLI statusline (blocked): Devin CLI's surface is the six lifecycle hooks plus MCP and skills — no statusline channel exists in its config or plugin manifest (install_devin.go, CLI 3000.11.3)
  • CodeWhale pre_tool (stand): tool_call_before additionalContext reaches the model only on a tool that ran; a call that failed to run goes back as Error: without it, so tool_call_after parks the line and it rides the next message_submit (0.10.1 stand)
  • CodeWhale failure (stand): tool_call_after stdout is discarded and it fires after the turn's next tool_call_before, so the fix pair is parked and rides the next message_submit (0.10.1 stand)
  • CodeWhale statusline (blocked): CodeWhale 0.10.0's footer takes only built-in items (StatusItem in crates/tui/src/config.rs: mode, model, cost, git_branch and the like), and observer hook stdout is discarded
  • Junie failure (stand): no PostToolUse in 3110.7 (ExternalHookEvent); the pair for a failed command is read from events.jsonl and rides the next PreToolUse or UserPromptSubmit
  • Junie statusline (blocked): Junie 3110.7's toolbar takes only built-in items (ToolbarElement in tui/app/state: WorkingDirectory, GitBranch, Model, ContextWindow and the like), no command
  • JetBrains AI Assistant digest (blocked): AI Assistant 262.10968.170 has no hook runner or session-start event in any of its jars
  • JetBrains AI Assistant prompt (blocked): AI Assistant 262.10968.170 has no per-prompt hook in any of its jars; recall reaches the chat only as an MCP tool
  • JetBrains AI Assistant pre_tool (blocked): AI Assistant 262.10968.170 has no tool hook in any of its jars; its agent tools run without a callback deja can answer
  • JetBrains AI Assistant failure (blocked): AI Assistant 262.10968.170 has no post-tool hook in any of its jars, so a failed command reaches no deja code
  • JetBrains AI Assistant compaction_reset (blocked): AI Assistant 262.10968.170 has no compaction event or hook in any of its jars
  • JetBrains AI Assistant compaction_capture (blocked): AI Assistant 262.10968.170 has no compaction event or hook in any of its jars
  • JetBrains AI Assistant compaction_packet (blocked): AI Assistant 262.10968.170 has no hook that could carry a packet into the next turn
  • JetBrains AI Assistant handoff (fixture): the chat runs inside the IDE with no command line to take a prompt, so the packet is pasted
  • JetBrains AI Assistant session_end (blocked): AI Assistant 262.10968.170 has no session-end event or hook in any of its jars
  • JetBrains AI Assistant rules (blocked): AI Assistant 262.10968.170 reads rules only from a project's .aiassistant/rules (AiRulesService); custom instructions are a per-project setting
  • JetBrains AI Assistant statusline (blocked): AI Assistant 262.10968.170's chat has no status line a command can write to; the IDE's status bar takes plugin widgets only
  • JetBrains AI Assistant reader (fixture): messages carry no time of their own, so a chat's turns take its start time a millisecond apart; an agent chat run by Junie, Claude, Codex or another agent with its own store is left to that store
  • Windsurf / Devin Desktop digest (blocked): No Cascade hook output reaches the model: exit 2 only blocks, and show_output is shown in the UI and not offered for pre_user_prompt (docs.devin.ai/desktop/cascade/hooks)
  • Windsurf / Devin Desktop prompt (blocked): No Cascade hook output reaches the model: exit 2 only blocks, and show_output is shown in the UI and not offered for pre_user_prompt (docs.devin.ai/desktop/cascade/hooks)
  • Windsurf / Devin Desktop pre_tool (blocked): No Cascade hook output reaches the model: exit 2 only blocks, and show_output is shown in the UI and not offered for pre_user_prompt (docs.devin.ai/desktop/cascade/hooks)
  • Windsurf / Devin Desktop failure (blocked): No Cascade hook output reaches the model: exit 2 only blocks, and show_output is shown in the UI and not offered for pre_user_prompt (docs.devin.ai/desktop/cascade/hooks)
  • Windsurf / Devin Desktop compaction_reset (blocked): No Cascade hook output reaches the model: exit 2 only blocks, and show_output is shown in the UI and not offered for pre_user_prompt (docs.devin.ai/desktop/cascade/hooks)
  • Windsurf / Devin Desktop compaction_capture (blocked): No Cascade hook output reaches the model: exit 2 only blocks, and show_output is shown in the UI and not offered for pre_user_prompt (docs.devin.ai/desktop/cascade/hooks)
  • Windsurf / Devin Desktop compaction_packet (blocked): no Cascade hook output reaches the model, so nothing carries a packet into the next turn
  • Windsurf / Devin Desktop handoff (fixture): Cascade runs inside the app with no command line to take a prompt, so the packet is pasted
  • Windsurf / Devin Desktop session_end (blocked): No Cascade hook output reaches the model: exit 2 only blocks, and show_output is shown in the UI and not offered for pre_user_prompt (docs.devin.ai/desktop/cascade/hooks)
  • Windsurf / Devin Desktop rules (todo): deja install windsurf puts its guidance block in ~/.codeium/windsurf/memories/global_rules.md; deja rules does not copy into it, since Cascade caps that file at 6,000 characters shared with the user's own rules (#308)
  • Windsurf / Devin Desktop statusline (todo): no status surface for Cascade was looked for in Devin Desktop 3.5.17 (#308)
  • Windsurf / Devin Desktop reader (fixture): typed prompts and planner replies only; tools, edits and thinking are left out, and response before modified_response is unverified against a successful turn
  • Muse Code statusline (blocked): Muse 1.4.3's bottom bar (/hud, tui.hud) has a fixed item set: model, effort, path, permissions, context, branch, tokens, cost, quota; plugins add skills, commands, hooks, MCP servers and reminders, nothing in the UI
  • MiniMax Code compaction_reset (stand): the PreCompact hook runs and captures the transcript, but MiniMax Code's PreCompact output can only defer the compaction, so the reset itself is not told to the model
  • MiniMax Code compaction_capture (stand): the capture runs at PreCompact with --harness mcode and reads the session from the v2 store by its id, not the temporary transcript_path the hook is given; what the model is told about it has no surface to travel on
  • MiniMax Code compaction_packet (blocked): MiniMax Code's PreCompact handler can only answer with a decision to defer the compaction, and its post-compaction event is observation only, so the packet has no surface to travel on and rides the next prompt instead
  • MiniMax Code rules (blocked): MiniMax Code has no global rules file: it reads AGENTS.md from the workspace the session is in, so a block written into one home directory would reach no session
  • MiniMax Code statusline (blocked): MiniMax Code has no status line a plugin can write to: the plugin hook reference lists the events and their outputs, and none of them is a status surface; the desktop shows the session in its own task panel

Each format is documented in the session format registry, with synthetic fixtures and a conformance test that catches upstream drift.

Adding a harness

A new parser is one file in internal/sources/ modeled on an existing one, plus wiring at the discovery, doctor, install and registry points. See the open harness issues on GitHub if you'd like to add yours.

Found this useful? Star deja-vu on GitHub.