neo --about
neo
The interesting part is what stayed on disk.
neo reads Claude Code's local artifacts directly: reminder text found on disk, raw transcripts, subagent copies, retained telemetry rows, memory files, and hook-visible lifecycle events. It indexes them into SQLite and exposes them through a dashboard and MCP server running on the same machine.
Why it exists
Claude Code exports cleaner transcripts than the local corpus actually
contains. The export boundary strips some of the most interesting material,
so neo starts from raw JSONL and local state instead of the cleaned
transcript. The dashboard binds to localhost, the database lives under
~/.neo/, and the project does not transmit your data anywhere.
neo --accounting
From one local corpus
- 714hidden reminder rows found on disk in a single local corpus.measured
- 62.5%of local data volume came from context outside the visible chat transcript in one sample corpus.measured / estimated
- 2.7xlocal evidence volume relative to what the UI would suggest from the primary conversation alone.measured / estimated
- variestelemetry rows only count what is still retained on disk. Absence does not prove upload or deletion.measured
Measured vs estimated vs inferred
neo keeps row counts, cost heuristics, and anomaly interpretation in separate lanes so the strongest claims stay attached to the strongest evidence. Row counts are measured. The hidden-context share and the multiplier are measured when the transcript carries API-reported token usage, and estimated from on-disk byte sizes when it does not. State-model labels are inferred.
neo --surfaces
How you read it
Dashboard — browser-first local inspection
Summary cards, reminders with provenance, sessions, agents, correlations, retained telemetry, memory files, and heuristic state-model analysis served from localhost.
MCP — query from inside Claude Code
neo-mcp registers into Claude Code so the local evidence can be
queried from inside the same tool it is inspecting.
Terminal — quick accounting without the UI
neo-tokens and neo-states diagram give you the
accounting and state-model views directly when a browser is unnecessary.
neo --paths
What it captures
Reads from
~/.claude/projects/*.jsonlfor full transcripts and reminders~/.claude/projects/*/subagents/for spawned files and sidechains~/.neo/harness_log.jsonlfor hook events and compaction traces~/.claude/telemetry/for telemetry rows currently retained on disk~/.claude/projects/*/memory/for persistent seeded memory~/.claude/tasks/for task lifecycle state
Cannot capture
- server-side reasoning or model internals that never land on disk
- the contents of any secondary channel not persisted locally
- whether absent telemetry rows were uploaded, deleted, or never written locally
- system prompt assembly inside the compiled binary
- HTTPS request and response bodies without a proxy
neo --install
Install
The package is neo-harnesster. The command stays neo.
pipx install neo-harnesster neo
With pip
pip install neo-harnesster neo
From source
Inspect the implementation or keep the tool next to your own experiments.
git clone https://github.com/asuramaya/neo.git cd neo python3 neo.py