Everything your coding agents do, on the record.
Stenographer captures every Claude Code session verbatim, summarizes it, charts it — and then acts on it, while the session is still running. All of it lands in one file on your Mac, and that file is yours.
- Free
- Local-first
- No telemetry
- macOS 14+
Coming soon
Every other Claude tool is a fuel gauge. This one takes the wheel.
The menu-bar meters tell you the tank is emptying. Useful — and Stenographer does it too, in more detail than most. But a number you have to notice is a job you still have to do.
A usage meter
Tells you what already happened.
- A percentage in the menu bar
- A reset countdown
- Numbers you have to be looking at
- No idea which session burned them
Stenographer
Reads the live session and acts on it.
- Trigger→response rules over sessions as they run
- An optional model judgment step — is now a good moment?
- Types
/compactinto the live terminal at a safe breakpoint - Every AI call logged with its result, so it is auditable
An AI that watches your AI — and steps in.
Trigger→response rules run over live sessions, matching on any field, with an optional judgment step that asks a model whether now is a good moment to act. Then it acts. Every AI call the app makes is logged with its result, so oversight is auditable rather than magic.
- When
- a session has been idle since its last Stop event
- And
- its context is close to the compaction threshold
- Ask
- a model: is this a safe moment to interrupt?
- Then
- type /compact into the terminal running it
- Log
- the prompt, the judgment, the action, the result
Every session, every line — and one click back to it.
Twenty terminals deep and no idea which one is the session you care about. Click its row in Stenographer and that terminal comes forward: iTerm2 down to the exact tab and pane, Terminal.app to the window.
Verbatim capture
Full JSONL, byte-for-byte, including system entries and sidechains. Nothing paraphrased, nothing summarized away.
Summaries per session
An AI-written summary on every session, so a list of forty sessions reads as forty sentences instead of forty UUIDs.
Idempotent by design
Backfilling all your history and recording live are the same code path — nothing dropped, nothing doubled, run it as many times as you like.
Attributed per account
Sessions are tied to the account that ran them, so a work login and a personal one never blur into one pile.
Know exactly how much runway you have left.
5-hour and 7-day quotas with live per-second countdowns. Per-model cost calibration turns dollars into Claude’s own rate-limit percentages, so the number on screen is the number that runs out.
- 5h & 7d
- Quota windows, counted down per second
- Projected
- Daily average, days left, burn ahead
- 1 line
- Always-on-top HUD, out of the way
Window positions persist per monitor setup, so nothing drifts between desks when you undock.
Your work, in aggregate.
Events per day stacked by type; top tools; new sessions per day; top projects; four summary cards.
Charts that survive a purge
Daily rollups are written alongside the raw events and outlive retention purges, so a trend line keeps its history after the events behind it age out.
Where the time went
Top tools and top projects, ranked — the two questions you actually have at the end of a week.
Watch it think.
A real-time 3D force-directed graph of everything happening right now. Sessions, tools and projects as nodes; particles running the edges as tool calls fire.
Your whole history, in a file you own.
You run Claude Code all day, and it leaves behind a trail of JSONL files you will never read. Stenographer is a menubar app and a background daemon that captures every hook event and every transcript line into a SQLite database on your own machine — then turns that pile into telemetry, dashboards, summaries and oversight.
One SQLite file
Your database, on your disk, in a format you can open with any tool that speaks SQL. There is no export step because there is nothing to export it out of.
Works with no network
Capture, storage, charts, search and the 3D graph need nothing but your Mac. Install it and it works — there is no sign-in standing between you and the app doing its job.
No telemetry
No analytics, no crash pings, no usage beacons. Every call the app makes off this machine is one you configured — starting with the model provider behind summaries and oversight.
Sixteen providers ship configured. And a blank one.
The summaries, the oversight judgments — every AI call the app makes runs on a model you pick, with a key you supply. Ollama and the local Claude CLI keep it on the machine entirely; the custom endpoint takes anything that speaks the OpenAI API, so the answer to “do you support X?” does not depend on this list.
Model choice is live, not hardcoded: capability discovery per model, and memory-fit warnings before you load something your Mac cannot hold.
- Anthropic API
- Claude (Max token)
- Claude (local CLI)
- OpenAI
- Gemini
- xAI
- DeepSeek
- Mistral
- Groq
- Cerebras
- Fireworks
- Together
- Kimi
- OpenRouter
- Ollama
- Custom (OpenAI-compatible)
Those sixteen are the models the app calls. This is the other list: the coding agents whose sessions it records. That is Claude Code today — the rest are planned, and this page will keep calling them planned until they ship.
- Codex
- Kimi
- More agents to follow
The whole list, in one place.
No asterisks and no coming-soon rows — everything below is in the app. The one thing that is not yet shipped is capture for agents other than Claude Code, and it says so where it belongs.
Capture
- Full JSONL, byte-for-byte
- System entries and sidechains included
- Every hook event, live, from a background daemon
- Idempotent — backfill and live capture are one code path
- Your whole history backfilled on first run
- Sessions attributed per account
- One SQLite database on your own disk
Sessions window
- Grouped per project, with live status
- An AI-written summary on every session
- Click a row to bring its terminal forward
- iTerm2 down to the exact tab and pane
- Terminal.app to the window
Usage & cost
- 5-hour and 7-day quota windows
- Live per-second countdowns
- Weekly window, daily average, days left
- Projected burn
- Per-model cost calibration into rate-limit percentages
- One-line always-on-top HUD
- Window positions persist per monitor setup
Insights
- Events per day, stacked by event type
- Top tools and top projects
- New sessions per day
- Four summary cards
- Daily rollups that outlive retention purges
Oversight
- Trigger→response rules over live sessions
- Match on any field
- Optional model judgment before acting
- /compact typed into the live terminal at a safe breakpoint
- Every AI call logged with its result
Models
- Sixteen provider templates
- A custom OpenAI-compatible endpoint
- Live capability discovery per model
- Memory-fit warnings before loading a local model
- Ollama and the local Claude CLI, for no third party at all
The things you were about to ask.
What does it cost?
Nothing. Stenographer is free. There is no trial, no seat, no tier above this one, and nothing to enter a card into.
Where does my data live?
In one SQLite database on your own disk. Capture, storage, charts, search and the 3D graph all run against it locally and need no network at all — there is nothing to sign into before the app works.
The calls it makes off the machine are the ones you configured yourself, for the features that need a model — session summaries and oversight judgments. Point those at Ollama or the local Claude CLI and even they stay on the machine.
Which coding agents does it record?
Claude Code, today — every hook event and every transcript line. Codex and Kimi are next, with more agents behind them. None of that is shipped yet, so nothing on this page counts it as done.
Model selection is already provider-agnostic: sixteen providers ship configured, plus a custom OpenAI-compatible endpoint.
Do I need an API key?
Only for the parts that call a model: the per-session summaries and the optional judgment step in an oversight rule. Capture, usage, insights and the visualization all work without one.
And it does not have to be a key at all — Ollama and the local Claude CLI are two of the sixteen providers, and neither involves a third party.
Which terminals can it bring forward?
iTerm2 and Terminal.app. iTerm2 is resolved down to the exact tab and pane that ran the session; Terminal.app comes forward as a window. Other terminals are not supported for click-through — the app needs a session identifier it can trace back to a window, and not every terminal publishes one.
Does it change how Claude Code behaves?
It reads what Claude Code already writes — the hook events and the transcript files — from a background daemon. It does not sit between you and the model, and it does not touch a running session except where you have written an oversight rule that says to, which is the entire point of that feature.
What happens when the database gets big?
Retention purges age out the raw events. Daily rollups are written alongside them and survive the purge, so the trend charts keep their history after the events behind them are gone.
Is it open source?
Not announced. Free and open source are different questions, and only the first one has an answer today.
When can I get it?
No date announced yet — the app is finished enough to describe honestly and not finished enough to promise a day. macOS 14 or later when it lands. Say hello below and you will hear about it.
Free, local, and on the record.
Stenographer is coming to macOS 14 and later. There is nothing to sign up for yet — but there is somebody on the other end of this address.
hello@fishlamp.comStenographer is made by FishLamp Design.
© 2026 fishlamp design