← Docs hub

Multi-Agent Setup

llmwiki reads sessions from multiple coding agents. Every shipped source is configured under adapters.<name> in config.json. Bare llmwiki sync runs all enabled coding-agent sources when their store is present; notes intake (Obsidian, ChatGPT export) needs enabled: true. Run llmwiki configure-sources after install to probe stores and write settings, or use --adapter <name> for a one-off limit.

Which agents are supported

Agent Registry name Session store How to enable Status
Claude Code claude_code ~/.claude/projects/ Auto when store present (adapters.claude_code) Production
Codex CLI codex_cli ~/.codex/sessions/ (and ~/.codex/projects/) Auto when store present Production
Cursor Agent CLI cursor_cli ~/.cursor/chats/ Auto when store present Production
Cursor IDE cursor_ide globalStorage/state.vscdb (Composer) bare sync after configure-sources Enable (or --adapter cursor_ide) Production
OpenClaw openclaw ~/.openclaw/agents/ or <vault>/.openclaw-sessions-inbox Auto when store present; set adapters.openclaw.roots for vault inbox Production
OpenCode opencode OpenCode / OpenClaw app-config sessions dirs Auto when store present Production
GitHub Copilot Chat copilot_chat VS Code workspaceStorage Auto when store present Production
GitHub Copilot CLI copilot_cli ~/.copilot/session-state/ Auto when store present Production
Gemini CLI gemini_cli ~/.gemini/ (and related paths) Auto when store present Scaffold — store detection only
ChatGPT export chatgpt conversations.json export enabled: true + export_dirs (opt-in) Production (export ingest)
Obsidian obsidian Configurable vault paths enabled: true + vault_paths (opt-in notes intake) Production

Per-adapter detail: Claude Code · Codex CLI · Cursor Agent CLI · Cursor IDE · OpenClaw · OpenCode · Copilot · Gemini CLI · ChatGPT · Obsidian.

Cursor Agent CLI vs Cursor IDE

What “automated” (headless) means

filters.exclude_headless defaults to true. It applies at ingest (sync never converts those sessions) and at synthesis / --estimate (already-converted raw files marked headless are skipped and not counted as backlog). Set "exclude_headless": false in config.json to keep automated launches.

Source Counts as automated (skipped when filter is on)
Claude Code entrypoint starts with sdk- (e.g. sdk-cli) or promptSource is sdk — headless claude -p / Agent SDK runs
Cursor Agent CLI Store meta has subagentInfo or approvalMode is auto-review. Interactive top-level Agent chats stay eligible. Nested Task/subagent runs are classified under exclude_headless (not include_subagents)
Cursor IDE composerHeaders.isSubagent — agents spawned from a parent Composer stay skipped; user-facing Composer chats stay eligible
Codex CLI, OpenCode, Copilot CLI, Copilot Chat No verified automation markers in the store yet — sessions are treated as not headless
OpenClaw All OpenClaw sessions are treated as not headless
Gemini CLI Scaffold — N/A until launch detection exists — never classified headless today
ChatGPT export, Obsidian Not applicable — export / notes intake, not agent launches

Legacy raw files with no is_headless marker stay eligible until you re-sync (re-convert) them. Sync still reports skipped automated sessions as one aggregate headless count in the filter summary.

How default sync chooses adapters

  1. Loads every shipped adapter from the registry.
  2. For each adapter, checks whether its store path exists (present) and whether it is enabled for the next bare sync (yes/no). Cursor IDE is production and is selected on bare sync when Enabled in configure-sources (or auto when the store is present and not explicitly off) — set a lookback first so a large Composer DB stays bounded.
  3. Includes every coding-agent source that is present, ingest-ready, and not explicitly disabled (enabled: false in adapters.<name>). Notes/export intake (Obsidian, ChatGPT) requires enabled: true.
# All enabled coding-agent sources with stores on disk
python3 -m llmwiki sync

# Limit to specific sources this run
python3 -m llmwiki sync --adapter cursor_cli openclaw

Run llmwiki configure-sources after install to probe paths (including <vault>/.openclaw-sessions-inbox when vault.default_path is set) and write config.json. The interview asks shared start date first (default today−30), then per source Sessions · Earliest · In last 30 days before Enable. Unset filters.since (skip the interview) still means unlimited. See configuration-reference.md — Sync lookback.

Checking detected agents

python3 -m llmwiki adapters
llmwiki adapters --wide

Per-agent setup

Claude Code

Sessions live at ~/.claude/projects/<project-dir-slug>/<session-uuid>.jsonl. Sub-agent runs are under subagents/agent-*.jsonl. No configuration needed for a default sync.

Codex CLI

Sessions under ~/.codex/sessions/ (date-bucketed) and optionally ~/.codex/projects/. The adapter reads session_meta.cwd for the project slug and normalizes Codex JSONL into the shared format. Core adapter — production.

Cursor Agent CLI

Runs on bare sync when ~/.cursor/chats/ exists. See Cursor Agent CLI adapter.

Cursor IDE

python3 -m llmwiki sync --adapter cursor

Composer threads from global state.vscdb; spawned subagents skipped under default exclude_headless. Enable via configure-sources for bare sync (or --adapter cursor_ide). See Cursor IDE adapter.

OpenClaw

Runs on bare sync when configured roots exist. Default native store: ~/.openclaw/agents/. Vault mirror: <vault>/.openclaw-sessions-inbox/<agent>/*.jsonl. See OpenClaw adapter.

OpenCode

Runs on bare sync when its store paths exist.

GitHub Copilot Chat / CLI

Runs on bare sync when stores exist.

python3 -m llmwiki sync --adapter copilot_chat   # optional one-run limit

Copilot CLI: set COPILOT_HOME to override ~/.copilot.

Gemini CLI

Runs on bare sync when ~/.gemini/ exists. Automation markers are not detected yet.

ChatGPT / Obsidian

Export and notes intake. Set enabled: true (and paths) in config; they are outside automated-launch detection.

Per-adapter configuration

Override roots in config.json:

{
  "adapters": {
    "codex_cli": {
      "roots": ["~/custom/codex/sessions"]
    },
    "cursor_cli": {
      "roots": ["~/.cursor/chats"]
    },
    "openclaw": {
      "roots": ["~/.openclaw/agents", "<vault>/.openclaw-sessions-inbox"]
    },
    "obsidian": {
      "vault_paths": ["~/Documents/My Vault"],
      "exclude_folders": [".obsidian", "Templates"],
      "min_content_chars": 50
    }
  }
}

Tips

  1. Use --adapter to limit sync to one or more sources for a single run.
  2. Each agent gets its own project slug from its store layout — sessions do not collide across agents.
  3. The wiki layer is agent-agnostic once files are in raw/.
  4. Schedule with llmwiki install-automation (or cron / Task Scheduler) rather than a hand-rolled loop.
  5. Combine with .llmwikiignore to skip noisy projects from any adapter.

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date