OpenClaw
- ID:
openclaw - Store:
${OPENCLAW_STATE_DIR:-~/.openclaw}/agents/<agentId>/sessions/<sessionId>.jsonl— one append-only pi-format transcript per session, per agent - Read override:
DEJA_OPENCLAW_ROOT(agents root),OPENCLAW_STATE_DIR(OpenClaw's own state override, also honored) - Format: JSONL, append-cheap incremental parse from offset
OpenClaw's agent runtime is pi-lineage, so transcripts share pi's line shape:
a {"type":"session"} header (id, timestamp, optional cwd) followed by
{"type":"message"} entries whose message.content is a block array. The
shared pi parser handles both; when the header carries a cwd, it becomes
the project key, otherwise sessions attribute to openclaw-<agentId>.
Skipped in the sessions directory: sessions.json (store metadata),
compaction checkpoints (<id>.checkpoint.<uuid>.jsonl), and archived
transcripts (.deleted/.reset/.bak suffixes). Newer OpenClaw builds can
keep session *metadata* in SQLite; transcripts stay JSONL files, which is all
deja reads. Format verified against openclaw source
(src/config/sessions/paths.ts, artifacts.ts, src/transcripts/store.ts).
- MCP:
deja install openclawwires deja intoopenclaw.jsonunder
mcp.servers (OpenClaw's own layout, not the common mcpServers root).
Live-verified: openclaw mcp probe deja reports the tools and the agent
calls recall mid-turn.
- Resume:
openclaw chat --session <key>. OpenClaw addresses a
conversation by key (agent:<id>:<name>); the uuid its transcript is named
after opens nothing, and the mapping lives in sessions.json beside the
transcripts. deja reads the key from there. Live-verified: the terminal UI
came up on agent:main:main with that session's history, and a run through
openclaw agent --session-id answered from it.
- Handoff: paste.
Last verified: 2026-07-23
deja reads this format and nineteen others, and turns what it finds into memory your agents can search. See the harness matrix for what is wired where, or install it and search your own history.