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.
| Harness | Store | MCP recall | Auto-recall | Skill | Command | Resume | Handoff | Needs |
|---|---|---|---|---|---|---|---|---|
| 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${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 | ${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 | ✅ | ✅ | ✅ | ✅ | ✕ | paste | 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~/.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} | ✅ | ✅ | ✅ | ✅ | ✅ | paste | 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 | ✅ | ✅ | ✅ | ✅ | ✅ | 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 | ~/.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 | ${DEJA_ROO_ROOTS}/tasks/*/api_conversation_history.json~/.vscode-mock/global-storage/tasks/*/api_conversation_history.json | ✅ | ⚠ | ✅ | ✅ | ✅ | paste | roo 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} | ✅ | ✕ | ✅ | ✅ | ✕ | paste | sqlite3 + 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.