๐ฎ clustervision
Vibecoding is a clusterfuck. When it gets hazy, you need clustervision.
Your AI coding sessions are gold. Stop letting them rot in scattered folders.
Find, search, port, prune, and even resurrect every AI coding-agent session you've ever run โ across 22 harnesses, through one unified format.
claude ยท codex ยท grok ยท opencode ยท gemini ยท hermes ยท openclaw ยท cursor ยท โฆ
search by meaning ยท read behind every compaction ยท port across harnesses ยท resurrect a maxed-out session ยท pack a new task from your whole history
No database, no import, no telemetry: clustervision reads your real local session storage and turns the scattered pile of .jsonl into one searchable, lossless corpus. Full-text and semantic search across everything you've ever run; the verbatim detail behind every compaction boundary; one-command porting between harnesses; and a custom compaction that pulls a maxed-out session back from the context wall.
the desktop app reading 2,245 real local sessions across 8 harnesses โ heatmap, harness legend, and a live feed
The problem (you've felt this)
You spent three hours teaching an agent your codebase. That context โ the dead ends, the decisions, the hard-won understanding โ is some of the most valuable output you produce. And then:
- ๐ You can't find it. It's one of hundreds of
.jsonlfiles in a folder named after a path. (Yes, you keep the important session IDs in a notes app. Everyone does.) - โ๏ธ It's trapped. Most harnesses only resume a session from the exact directory it ran in. Move the project, lose the thread.
- ๐๏ธ It's stranded. Started in Claude Code but want to continue in Codex? Tough. Every tool speaks its own dialect and none of them talk.
Restarting from scratch is the most expensive thing you do all day. clustervision makes sure you never have to.
What you can actually do with it
# ๐ find that session from last week by what it was ABOUT, not where it lived
# ๐ take a Claude session and continue it in Codex. for real.
# โฆ wrote ~/.codex/sessions/2026/โฆ/rollout-โฆ.jsonl
# โณ codex resume 019e75e0-โฆ
# ๐งณ break a session out of its directory jail (brings CLAUDE.md / MEMORY.md along)
# ๐ชฆ a session hit the context wall and won't reopen? prune the bulk and revive it
# โฆ recorded context 976k โ 149k ยท resume with: claude --resume <new-id>
# ๐๏ธ watch every agent on your machine work, live, in one feed
โฆand a couple that didn't exist before:
- ๐ง An MCP server so a running agent can read other agents' sessions โ "what happened in this project before?", "what's my sibling agent doing right now?", "have I solved this before?" โ mid-task, without leaving its harness.
- ๐ A zero-install web viewer: drag a zip of any harness folder into your browser and explore it. Nothing uploaded, all WASM.
๐ช 22 harnesses, one IR
| Harness | Parse | Port to | Harness | Parse | Port to | |||
|---|---|---|---|---|---|---|---|---|
| โ | Claude Code | โ | โ | โ | Cursor | โ | โ | |
| โ | Codex CLI | โ | โ | โ | Kimi CLI | โ | โ | |
| โ | Grok CLI | โ | โ | โ | Qwen Code | โ | โ | |
| โ | OpenCode | โ | โ | โ | LM Studio | โ | โ | |
| โ | Gemini / Antigravity | โ | โ | โ | Cline | โ | โ | |
| โ | Hermes (Nous) | โ | โ | โ | Roo Code | โ | โ | |
| โ | OpenClaw | โ | โ | โ | Continue | โ | โ | |
| ๐ | Claude / ChatGPT apps | detectedยน | โ | โ | Goose (Block) | โ | โ | |
| โ | Zed (agent panel) | โ | โ |
ยน The Claude app keeps transcripts server-side; the ChatGPT app keeps them locally but encrypted at rest. We detect the install and document exactly why neither is readable โ see docs/FORMATS.md.
Conversion is N-way among the 13 emit-capable harnesses: any โ any, mediated by one unified IR. Every format reverse-engineered in docs/FORMATS.md. Bringing your own? โ ADDING_HARNESS.md ๐
โจ More than a viewer
-
๐งต Splice & loom โ compose a new session from spans of others (
cv splice A:0..12 B:6..), or fork-and-graft a branch and generate its continuation with an LLM (cv loom โฆ --generate). Works via OpenRouter / Anthropic / LM Studio (free, local, offline). Loom agent transcripts like a Janus loom, across any harness. -
๐ฎ Semantic search โ "have I solved this before?", answered by meaning rather than keywords:
cv search --semantic <query>on the CLI, and the same ranking behind the MCPsearchtool a running agent can call mid-task. -
๐งฌ Provenance โ search answers what was said; the event catalog answers what was done. Every tool call across every session is classified and queryable:
cv touched <file>lists every session that ever edited a file, andcv blame <file>ties a file's git history back to the agent conversation that wrote it โ "why does this code exist?", answered by the actual reasoning that produced it (with acv show --rangejump to the moment of the edit). -
๐ณ Anatomy of a run โ a deep agent session isn't a flat transcript, it's a forest.
cv workflow <id>renders aWorkflow-tool run as its real shape โ the phase tree, the agents under each phase, their journaled outcomes/tokens/tool-calls, and the driving script.cv tools <id>is cross-agent tool analytics over the whole orchestrator+sub-agent forest (per-agent histograms, which agent used what, a wall-clock timeline).cv compaction <id>finds every context-compaction seam โ trigger, pre-compaction size, and the summary that seeded the next window โ andcv show --pre-compactionreads back the span the continued agent lost. (cv dataset --subagentspulls the whole forest into a training set.) -
โ๏ธ Prune โ
cv prune <id>is custom compaction: instead of abandoning a giant session to the summarizer (which rewrites your history into a lossy paragraph), it snips the bulky old tool payloads โ large file reads, command logs, screenshots โ into a sidecar and leaves a tiny[PRUNED id=โฆ]marker, producing a new, resumable session (claude --resume <new-id>). Your prompts and the exact flow stay verbatim; the most recent turns stay sharp; originals are onecv cat <new-id> <tool_use_id>away. Add--drop-thinkingto also lift the oldest reasoning, and--reviveto resurrect a session already stuck at the context wall โ Claude Code's resume gate trusts a staleusagenumber recorded in the file, so a maxed session refuses to reopen even once its real content fits;--reviverewrites that number to the honest post-prune size and the gate lets you back in. (Algorithm adapted from the validated flatten-mcp.) -
๐ Redact โ
cv redact <id>scrubs secrets/PII so a transcript is safe to share. -
๐ Share โ
cv share <id>โ one self-contained, redacted-by-default HTML artifact: dark crystal-ball theme, collapsible thinking/tool folds, opens offline in any browser, uploads nothing (CSP-pinned so it can't). -
๐ฆ Pack โ
cv pack "<task>"compiles a context bundle from your whole corpus: relevant past spans + what files those sessions actually touched (event catalog), as a CLAUDE.md digest, a system prompt, or a synthetic resumable session in any harness. Never explain your codebase to an agent twice. -
๐ฅ๏ธ Desktop app + ๐ web viewer โ the Tauri app reads all your local sessions natively (zero setup) and lays the corpus out beautifully:
- a Projects lens โ every repo, every agent that touched it, over time;
- a GitHub-style activity heatmap timeline (a constellation of your working days);
- side-by-side Compare, a Stats dashboard, and a visual loom composer (OpenRouter or free local LM Studio generation);
- sub-agent trees โ a Claude Task session's children, nested and lazy-loaded inline, each labeled with its task prompt;
- a Structure explorer (
<cv-forest>) โ Overview / Forest / Workflows / Tools / Compaction tabs that turn a run's anatomy into something you can drill through.
The browser build is zero-install โ drop a harness zip, nothing uploaded (all WASM).
-
๐ Harness integrations โ plug clustervision into the agents' own hooks/MCP/plugins (
integrations/): SessionEnd โ archive + post to the board, SessionStart โcv packthe prior context back in.
๐ Manual
Full docs โ every CLI command, the MCP tools, the daemon's HTTP API, the app, cross-harness conversion, and the harness table โ live in the user manual (mdBook, also under manual/).
๐ ๏ธ Install
Prebuilt binaries for macOS / Linux / Windows (arm64 ยท x64 ยท x86) ship on every release โ grab the latest from Releases (cv ยท cv-mcp ยท cvd ยท cv-tui ยท cv-search), or one-line it:
|
Or from source:
๐ง Let agents read each other's minds (MCP)
The MCP tools are generated from the CLI โ same names, same flags, same JSON โ so they can't drift from what cv actually does. Plus the live-coordination primitives that only make sense over MCP: await_omen (block until a sibling agent's message matches a regex), observe_stream (its non-blocking sibling โ poll a junior agent's live message tail on your own cadence), and the board/task tools. The current roster is in the manual's MCP chapter, or run cv schema --commands to see the tree they're generated from.
๐ Dispatch work you can trust (cv task)
A durable task object for agent fleets, built on one law: landing state is observed, never
attested. An agent can claim a task and propose a reviewed branch โ but landed is only ever
written by cv itself, after running git (merge-base ancestry, git cherry patch-id
equivalence, whole-branch range patch-id). An agent saying "done" moves nothing.
Same substrate over MCP (task_open โฆ task_verify) and cvd HTTP (/api/tasks,
/api/tasks/debt, /api/tasks/inbox/{who}). Notifications ride the board; state lives in a
replayed event log (~/.clustervision/tasks/events.jsonl) that refuses events its own reducer
would reject.
๐ก Archive your whole fleet (cvd)
๐งฌ The OpenSession standard
After staring into seven different transcript formats, we wrote down the one they should have agreed on: OpenSession โ a small, honest, harness-neutral interchange format (the key heresy: cwd is metadata, not identity). clustervision's IR is its reference implementation. If you ship a harness, emit OpenSession and everyone's sessions become portable by construction. ๐ค
๐๏ธ Under the hood
One IR (Session โ Message โ Block{Text|Thinking|ToolUse|ToolResult|File|Image}), one Adapter per harness (discover + parse + emit), plus loom / redact / prune / watch / ingest modules โ and small crates on top: cv (CLI) ยท cv-mcp (MCP) ยท cvd (daemon + serve) ยท cv-search (tantivy + model2vec) ยท cv-llm (LLM digests for pack, --generate for the loom) ยท cv-web (WASM) ยท app/ (Tauri desktop).
parse(any harness) โ ๐ฎ unified IR โ search ยท port ยท prune ยท loom ยท pack ยท archive ยท view
๐งช Status
Built in a wild few sessions, much of it by a swarm of agents working disjoint files. โจ Honest about the edges:
- 22 harnesses parse; 13 also emit (N-way conversion). The rest โ Cursor, Goose, Zed, the Claude/ChatGPT desktop apps, and the ChatGPT/Claude.ai account data exports (
chatgpt-export/claude-exportโ register their location withcv config --add-export <path>) โ are parse-only for now. - Robustness: 2000+ real sessions parse with 0 panics; parsers are fuzz-tested against hostile input.
- The full-text index trades disk for speed; Gemini's protobuf
.pbis opaque; a few sidecar tool-call streams aren't merged yet. - Historical format variants are an explicit goal โ see
ADDING_HARNESS.md, and please send your own harness logs (we can only test what we can see).
PRs and weird old transcripts deeply welcome. ๐