neo — local workflow forensics · claude code

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.

neo mascot

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/*.jsonl for full transcripts and reminders
  • ~/.claude/projects/*/subagents/ for spawned files and sidechains
  • ~/.neo/harness_log.jsonl for 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
localhost only · data stays on disk neo@localhost:~