Claude Code writes a rich trace of every session, then exposes none of it.
Every session lands as line-delimited JSON, scattered one folder per project under ~/.claude/projects/: token spend, tool calls, file edits, costs, all there, none of it readable without a one-off script. ae-os is the desktop app that reads it: the questions every Claude user eventually asks, answered from one workspace.
One crate, headless or visual.
~/.ae-os/, no serverIndex first, render late.
The JSONL is streamed once and split so a partial load touches one slice, not the whole session. Two paths read the same source: one for history, one for the live session.
One binary indexes. The dashboard, the CLI, and a query server all read the same cache.
Everything downstream of the cache is a reader, so the work is done once and consumed many ways: a native dashboard, a batch CLI, and a server other assistants can call.
~/.ae-os; licensed offline, device-bound.The trace was always there. Nothing ever read it.