OpenClaw adapter
Reads .jsonl session transcripts written by the OpenClaw agent gateway (native store under ~/.openclaw/agents/, not the OpenCode app-config layout — that is the separate opencode adapter).
Runs on bare llmwiki sync when configured roots exist (native ~/.openclaw/agents/ or vault inbox at <vault>/.openclaw-sessions-inbox).
Session store
Default root: ~/.openclaw/agents/ (same path on Linux, macOS, and Windows via Path.home()).
Layouts accepted under each configured root:
- Native install:
<agent>/sessions/<uuid>.jsonl - Vault inbox mirror:
<agent>/<uuid>.jsonl(nosessions/segment) — used when another host copies transcripts into a Syncthing vault at e.g.<vault>/.openclaw-sessions-inbox/
Skipped (not conversation transcripts): *.trajectory.jsonl, *.checkpoint.*.jsonl, and anything under a _quarantine/ directory.
Override the search roots in config.json:
{
"adapters": {
"openclaw": {
"roots": ["~/.openclaw/agents", "<vault>/.openclaw-sessions-inbox"]
}
}
}
What it reads
Each session is a JSONL stream of typed OpenClaw records. Only type == "message" rows become conversation turns; user content lists are flattened to strings for the shared renderer.
Automated (headless) sessions
All OpenClaw sessions are treated as not headless. filters.exclude_headless does not skip them. See Multi-agent setup — What “automated” means.
Enable it
python3 -m llmwiki sync --adapter openclaw
Point roots at a vault inbox when transcripts are mirrored there instead of ~/.openclaw/agents.
Output layout
Standard raw/sessions/<YYYY-MM-DDTHH-MM>-openclaw-<agent>-<slug>.md (project slug is openclaw-<agent>).
Code
llmwiki/adapters/contrib/openclaw.py- Tests:
tests/test_openclaw_cursor_cli_adapters.py
See also
- OpenCode adapter — shared schema under OpenCode / OpenClaw app-config dirs
- Multi-agent setup
- Configuration reference —
adapters.openclaw.roots