Visualize coding-agent sessions on a 3D codebase map
mindwalk replays coding-agent session logs as a glowing 3D map of your codebase, showing what the agent explored, read, and edited - fully local.
0.5.0Add to Favorites
Why it matters
Understand how AI coding agents explored and modified your codebase by replaying their session logs as animated 3D visualizations that show which files were searched, read, and edited, revealing the agent's mental model of the task.
Outcomes
What it gets done
Replay Claude Code and Codex session logs as glowing paths through a 3D repository map
Identify agent exploration patterns, scope drift, and friction signals like error rates and churned files
Inspect individual file visit histories and jump to specific moments in the agent's timeline
Evaluate session quality using local LLM judges that anchor findings to timeline events
Source
Get it from source
Spark does not host a copy of it.
Open sourceReports
Agent outcome reports
No reports yet
Overview
Mindwalk
mindwalk turns a coding-agent session log into a glowing 3D map of the repo, replaying exactly where the agent searched, read, and edited. It reads Claude Code, Codex, and pi logs and runs entirely locally except for an optional AI-judged evaluation step. Use it to audit or debug how an agent approached a task and whether its exploration matched the intended scope, not as a substitute for reading a plain diff.
What it does
mindwalk is a visualization tool that replays coding-agent sessions on a 3D map of your codebase. A raw session JSONL log records what an agent did, but not how it understood the task - which parts of the repo it treated as relevant, where it explored before it acted, whether its footprint matched the scope you had in mind. mindwalk answers that by drawing the repository as a night map and playing the session back as light moving through it: wherever the agent searched, read, or edited, the map glows, and everything else stays dark.
One Go binary reads Claude Code, Codex, and pi session logs. Viewing a session is fully local and sends nothing anywhere. The one exception is the optional session evaluation feature, which explicitly sends a summary of the session to the model behind your own claude or codex CLI when you run it.
When to use - and when NOT to
Use it when you want to see, at a glance, how an agent actually understood and worked a task - whether its exploration matched the scope you expected, where it wandered, and which files it touched versus which it should have. The tree and terrain views, touch-state coloring (seen, read, edited, unvisited), and the playback deck with its cool/warm observation-versus-mutation spectrum are built for exactly this kind of post-hoc review.
Don't reach for it if you just need a text diff of what changed - mindwalk is about understanding process and exploration, not reviewing a patch. And the optional evaluation feature (mindwalk analyze) is not a fully automated verdict: it drafts criteria from your own request wording and scores against evidence you can click through, so it is a structured aid to review, not a replacement for reading the session yourself.
Inputs and outputs
Inputs are session logs from ~/.claude/projects, ~/.codex/sessions, and ~/.pi/agent/sessions (or a specific .jsonl file), plus the target repository itself. mindwalk serve scans all three locations, serves the UI on a local port, and opens a browser; mindwalk open <session.jsonl> opens one specific session; mindwalk map <repo> renders a repository's citymap with no session attached, with height encoding lines of code instead of attention. mindwalk build and mindwalk trace write out the underlying citymap and normalized-trace JSON directly. mindwalk analyze produces an evaluation report: four fixed process dimensions (exploration, scope, wandering, verification) plus a task-specific scorecard drafted from your request wording, with every finding citing a clickable timeline event and no verdict left to the model - dimension and criterion verdicts are rolled up mechanically from finding severities, and an unverifiable criterion reads "no signal" rather than pass or fail. Reports are cached per-session in ~/.mindwalk/reports and go stale only when the session's content changes.
Integrations
mindwalk reads session formats from three agent CLIs - Claude Code, Codex, and pi - via one adapter per format, and can correlate subagent sessions into an agent graph so each subagent's trace replays on its own. Session evaluation runs your own installed claude or codex CLI as a sealed judge subprocess: no tools, no MCP servers, no user or project settings, and no session persistence beyond the cached report. Nix users can install it via the numtide/llm-agents.nix flake. The frontend is React/Three.js served by a local Go server.
Who it's for
Developers and teams who use coding agents (Claude Code, Codex, or pi) and want to audit or debug how an agent actually approached a task - reviewers checking whether an agent's footprint matched the intended scope, and anyone building intuition for how their agents explore code before they edit it.
mindwalk is released under the MIT License.
Source README
mindwalk
A visualization tool that replays coding-agent sessions on a 3D map of your codebase.
https://github.com/user-attachments/assets/5153481b-3805-45e6-a61f-372250a969eb
The problem
A session log records what an agent did, but not how it understood the task:
which parts of the repo it treated as relevant, where it explored before it
acted, whether its footprint matched the scope you had in mind. Reading the
raw JSONL line by line doesn't answer any of that.
The idea
Draw the repository as a night map, and play the session back as light moving
through it: where the agent searched, read, and edited, the map glows -
everything else stays dark. The agent's understanding of the task becomes a
shape you can see at a glance. One Go binary reads Claude Code, Codex, and pi
session logs, fully local; viewing sends nothing anywhere. The one exception
is the optional session evaluation: when you explicitly run it, a summary of
that session (task wording, file paths, event digests) is sent to the model
behind your own claude or codex CLI - see
Session evaluation.
Quick start
curl -fsSL https://raw.githubusercontent.com/cosmtrek/mindwalk/master/scripts/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
mindwalk
The installer verifies the binary against checksums.txt and installs to~/.local/bin (override with INSTALL_DIR; pin a release with VERSION).
Windows archives are on GitHub Releases
To build from source: make setup && make build → bin/mindwalk.
With no arguments, mindwalk scans ~/.claude/projects, ~/.codex/sessions,
and ~/.pi/agent/sessions, serves the UI on a random local port, and opens a
browser:
mindwalk serve [--port N] [--no-open] [--claude-dir DIR] [--codex-dir DIR] [--pi-dir DIR]
mindwalk open [--no-open] <session.jsonl> open one specific session
mindwalk map [--no-open] <repo> open a repository map, no session needed
mindwalk build <repo> [-o out] write the repository citymap JSON
mindwalk trace <session> [-o out] write the normalized trace JSON
mindwalk analyze <session> [--judge claude|codex] [--model name] [--no-rubric]
evaluate one session (see below)
Reading the picture
- Tree / Terrain views - the repo as a radial tree or a treemap plain;
glow ∝ how deeply and how often a file was touched. - Touch states - each file keeps its deepest touch: seen (moss green),
read (moonlight blue), edited (warm amber), unvisited (dark). Files the
session touched that are no longer in the repo linger as wireframe ghosts.
The HUD folds friction signals - error rate, churned files, edits after the
last verify - into a review strip. - Playback deck - scrub or play the session over a bucketed histogram of
the run. Bars sit on a cool/warm spectrum: observation stays cool (search,
read, exec), mutation glows warm (edit, verify), so editing phases jump out
at a glance. Restart, speed, and video export fold into the deck's⋯menu;
export records the playback to a.webmentirely client-side. - Timeline marks -
◇context compactions,○subagent launches,›user turns; every mark is a click-to-jump target. - Agent lenses - when a session launched subagents, the HUD carries a
subagent count and an agents panel: pick a lens to replay any subagent's
trace on the same map, then step back out to the main trace. - Inspector - click a file to pin its visit history; click a visit row to
jump the playhead to that moment. - Evaluate - ask a local agent CLI to judge the session's trajectory,
scored against criteria drafted from your own request; session rows carry
the evaluation state as a quiet badge. See
Session evaluation. - Repo map -
mindwalk map <repo>(or the folder icon in the session
rail) renders any repository's citymap with no session attached; height
encodes lines of code instead of attention.
Keyboard: Space play/pause · ←/→ step (⇧ ×10) · Home/End ends ·S speed · V view · E next edit · X next error · M next mark ·⌘B session rail.
Session evaluation
The evaluate panel (and mindwalk analyze) asks a local agent CLI to judge
how the session went. A report has two layers:
- Process dimensions - exploration, scope, wandering, verification: four
fixed lenses, the same for every session, so reports stay comparable. - Task scorecard - before scoring, the judge drafts criteria from your
own request wording: what would count as done for this task, grouped per
task when the session carried several. Each criterion is then scored
against the session, alongside the dimensions, in one pass.
Every finding in either layer must cite timeline events you can click
through to, and no verdict is the model's to decide: dimension and criterion
verdicts are rolled up mechanically from finding severities. When the log
simply can't show whether a criterion was met, its coverage drops and the
verdict reads "no signal" - an unverifiable criterion is a blind spot, not a
failure. Pick the judge (any installed CLI) and its model in the panel; the
report records who actually judged.
The scorecard steps aside rather than getting in the way: sessions with no
tool events or too little task text skip it, and a failed criteria draft
degrades to a dimensions-only report. --no-rubric (or "rubric": false on
the analyze API) skips it explicitly, in a single judge call. How the
scorecard is built - and why it is shaped the way it is - is covered in
docs/dynamic-rubric-evaluation.md.
What leaves your machine, and only when you ask: evaluation runs your ownclaude or codex CLI - up to two sealed calls, one drafting criteria and
one scoring. Both send only that session's summary - the user messages'
wording, file paths, and one-line event digests - to the model behind your
account. Nothing is sent while viewing sessions, and no other session is
included. The judge subprocess runs sealed: no tools, no MCP servers, no user
or project settings, and no session persistence.
Reports are cached in ~/.mindwalk/reports, one per session; a report goes
stale (never auto-reruns) when the session's content changes. Re-evaluating
a session whose task wording hasn't changed reuses the drafted criteria -
scores can move, the yardstick doesn't.
Under the hood
Three artifacts, kept deliberately separate:
- a trace - the session log normalized into an ordered stream of
file-touch events (internal/adapter, one adapter per agent format);
adapters also correlate subagent sessions into an agent graph, so each
subagent's trace can be replayed on its own; - a citymap - a deterministic layout of the repository
(internal/citymap); the same tree always produces the same map, so
replays are comparable across sessions; - a report - an LLM judge's evidence-anchored findings about one
session (internal/judge): four fixed process dimensions plus a
task-specific scorecard; the judge only contributes findings, verdicts
are always rolled up mechanically, so reports stay comparable too.
A local Go server (internal/server) joins them and serves the
React/Three.js frontend (web). schema/ mirrors the exported JSON contracts.
Star History
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.