Measure your agents, not your people.

session-viz reads the transcripts Claude Code already writes to your disk and tells you what your sessions and autonomous agents actually did — what shipped, what silently failed, and what it cost. It has no person column, and it prints what it declined to conclude.

Install the plugin Read the architecture claude plugin install session-viz@qs-plugins
completed · structured completed · prose not resolved — shown as a hole, never guessed truncated zombie one cell = one run · 1,166 runs, 60 days, one machine

What it found on one developer's machine

0 / 20cron delivery

A scheduled job ran for 30 days, cost real money, and shipped nothing. It announced the same next instalment on every run. Every conventional signal was green — coherent transcripts, correct plans, no errors on five of the runs — and a human walked back into twelve of those sessions without noticing.

95.7%of tokens

Almost your entire bill is cache-read — context replayed to the model — not text it generated. It never appears in a per-session view, and on this machine it was 24.19B tokens against 85M of output.

1,102invisible runs

Subagents are the fleet nobody watches. They were 94% of all runs and 99% of autonomous spend. One parent session spawned 347 children; the median parent spawns 26.

8.0% vs 1.2%schema failure

One agent definition failed its caller's schema seven times more often than another. The 95% intervals do not overlap, so the difference is real — and it is a property of a file you can edit, not of a person.

Two planes that cannot join

Fleet observability and a private place to learn are only compatible if the boundary between them is a property of the schema rather than a promise in a policy document.

Schematic. The agent families and their proportions on plane A are from the reference corpus; the three-person team on plane B illustrates the supported topology, not a measured headcount.

Plane A — telemetry

Person-blind by construction

  • Keyed on repo, task, agent definition, config, version — never on a person
  • Closed contribution schema: enums and bounded integers, no free-text field exists
  • k-gated cells; suppressions are counted, never silent
  • Signed reference table served with no request body and no cookie
no shared key
no foreign key
boot fails if one appears
Plane B — collaboration

Identity-bearing, on purpose

  • Federated Obsidian vaults: [[wikilinks]] resolve across projects and people
  • Task handoff with an explicit state machine — nothing lands on you unaccepted
  • Live sync over SSE, and a stateless MCP server for agents
  • Note bodies stay on your machine; only titles, tags and link names are indexed

You cannot hand a task from one person to another without knowing both. So the collaboration plane knows them — and is structurally unable to be turned back into per-person performance measurement, because the join does not exist and the service refuses to start if a migration adds one.

What it refuses to tell you

Any per-person rate

Structurally uncomputable. There is no person column to group by, so this is not a setting that can be turned on later.

That the newer model is better

Adoption replaced the old model wholesale, so there is no week where both ran at volume. The difference is unattributable — not weakly, but not at all.

That your prompting improved

On 1,075 turns, not one prompt-form signal survived a workload control. The raw correlations were inverted by task difficulty; naming a file appeared to double friction.

A trend across a format change

The transcript format moved twelve times in sixty days. Any window straddling a change point is returned blocked rather than rendered.

Run it yourself, or let us run it

The parser and the statistical gates are the credibility, so they stay open and local. What you can pay for is not seeing your own data — it is somebody else operating the fleet plane and answering the phone.

RYO

Roll your own. The whole tool, on your machine.

FreeMIT · self-hosted
  • Both plugin commands, fully local
  • The control center and every gate
  • Backend deployable to your own Railway, Fly or box
  • Reference table works offline forever
  • You operate it, you upgrade it
  • No SLA, best-effort issues
Install the plugin

Nothing is held back. A user who never contributes anything still gets the full local report.

Hosted

Fleet

We run the collaboration plane and the reference table.

Per agent-runusage-based · not per seat
  • Managed backend, Postgres and backups
  • Federated vaults across projects and people
  • Task handoff, live sync, hosted MCP endpoint
  • Signed reference table with a stable key
  • EU region, DPA, deletion on request
  • Still no person column — that is not a tier
Talk to us

Priced on agent-runs because that is the unit the product measures. Counting people would require identifying them, which the telemetry plane is built not to do.

Support

For teams putting this in front of a works council.

Annualscoped engagement
  • Named contact, response-time commitment
  • Deployment review and upgrade assistance
  • Extraction contract pinned to your CLI versions
  • Co-determination pack: what is measured, what cannot be
  • Custom detectors for your recurring tasks
  • Priority on parser fixes when the format moves
Enquire

The transcript format changed twelve times in sixty days. Keeping a parser current is the single most valuable thing to outsource.

Install

$ claude plugin marketplace add QSchlegel/qs-plugins
$ claude plugin install session-viz@qs-plugins

# one session, with a tuned /compact line
$ /qpact

# every session on the machine
$ /qtrends

Runs entirely locally. 600 MB of transcript parses in about two seconds, so there is no cache and no daemon.

# optional: the collaboration plane
$ curl -sX POST $HOST/v1/mcp \
    -H "authorization: Bearer $TOKEN" \
    -H "x-actor: you" \
    -d '{"jsonrpc":"2.0","id":1,
         "method":"tools/list"}'

vault_list      vault_register
vault_resolve   vault_dangling
task_create     task_offer
task_accept     task_done
task_list       events_recent

Stateless MCP over HTTP JSON-RPC. No session to keep, so it survives being moved between machines mid-request.

Sign in

Passwordless. A code by email, or a passkey if this device has one.

Your tenant is derived from the domain, so colleagues land in the same workspace.

Self-hosted installs print the code to the server log until an email provider is configured — see cloud/README.md.