Harnesses

the twenty-five it reads, and what each one supports

deja indexes twenty-five 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
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
${DEJA_CC_MIRROR_ROOT:-~/.cc-mirror}/*/.claude/${CLAUDE_CODE_PROJECT_DIR_NAME:-projects}/**/*.jsonl
${DEJA_CLAUDE_ROOT}/**/*.jsonl
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}/history.jsonl
${DEJA_CODEX_ROOT}/sessions/**/rollout-*.jsonl
Copilot CLI${DEJA_COPILOT_ROOT:-~/.copilot/session-state}/*/events.jsonl
VS Code Copilot Chat/workspaceStorage/*/chatSessions/*.{json,jsonl}
/globalStorage/emptyWindowChatSessions/*.{json,jsonl}
/workspaceStorage/no-workspace/chatSessions/*.json
${DEJA_COPILOT_CHAT_ROOTS}
paste
Cursor~/Library/Application Support/Cursor/User/{globalStorage,workspaceStorage/*}/state.vscdb
~/.config/Cursor/User/{globalStorage,workspaceStorage/*}/state.vscdb
${CURSOR_CONFIG_DIR:-~/.cursor}/projects/**/agent-transcripts/**/*.jsonl
${DEJA_CURSOR_ROOT}
${DEJA_CURSOR_CLI_ROOT}
sqlite3 (IDE chats)
DeepSeek Harness${DSH_HOME:-~/.dsh}/sessions/*/session-*/session.jsonl.zstd
${DSH_HOME:-~/.dsh}/sessions/*/session-*/session.jsonl
${DEJA_DEEPSEEK_ROOT}/*/session-*/session.jsonl.zstd
pastezstd
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
~/.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~/.hermes/profiles/*/state.db
${DEJA_HERMES_PROFILES_ROOT}/*/state.db
${DEJA_HERMES_DB}
pastesqlite3
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
paste
opencode~/.local/share/opencode/opencode.db
${XDG_DATA_HOME}/opencode/opencode.db
${DEJA_OPENCODE_DB}
sqlite3
Continue${CONTINUE_GLOBAL_DIR:-~/.continue}/sessions/*.json
${DEJA_CONTINUE_ROOT}/sessions/*.json
paste
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
Roo Code/rooveterinaryinc.roo-cline/tasks/*/api_conversation_history.json
${DEJA_ROO_ROOTS}/tasks/*/api_conversation_history.json
~/.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

✅ works · — possible, not built yet · ✕ the harness has no such mechanism · ⚠ blocked by an upstream bug · ? 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)
  • Copilot CLI auto — Copilot runs the hooks but drops their context, so recall there is MCP plus the skill
  • VS Code Copilot Chat auto — VS Code Copilot Chat has no session-start or per-prompt hook, so there is nothing to install
  • 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)
  • Roo Code auto — Roo's hooks are in flight upstream, not shipped: PR #10785 implements a Claude Code-style hooks system, #11128 is Hooks beta and #11663 Hooks phase 1, all still open, and no release names lifecycle hooks. A user's bug report about PreToolUse coverage (#10834) shows they work on a branch build. Becomes work the day one of those merges (https://github.com/RooCodeInc/Roo-Code/pull/10785)
  • 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.16.1 or extension API 0.7)

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.