agentic stenographer
It’s free
The Stenographer app icon: a quill and gold stars on a dark rounded square

Tracks and records everything Claude does. Automatically.

Every Claude Code session, recorded verbatim to one SQLite file on your Mac — then summarized, charted, and watched by oversight rules that can reach into the terminal running it.

Free · macOS 14 or later · Coming soon

Stenographer
Screenshot pendingThe main window — sessions, usage and oversight in one place
The difference

Every other Claude tool is a fuel gauge. This one takes the wheel.

Your agents work for hours while you are looking somewhere else. Nobody is watching the session that is running; what it did ends up in a folder of JSONL nobody reads. Both of those are jobs nothing is doing.

You have probably seen a Claude usage meter: a percentage in the menu bar, counting down how much of your quota is left. 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?
  • /compact typed into the live terminal at a safe breakpoint
  • Every AI call logged with its result, so it is auditable
AI Oversight

An AI that watches your AI — and steps in.

You write the rules: when this happens in a running session, do that. Match on any field, and add an optional step that asks a model whether now is a good moment. Then the app acts. Every AI call it 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
AI Oversight
Screenshot pendingTrigger rules, AI judgment, and the actions taken
Sessions

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.

Stenographer — Sessions
Screenshot pendingSession list with per-project grouping and live status

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.

Usage

Know how much Claude quota is left, to the second.

Claude Code meters you on a 5-hour window and a 7-day one, and both run down while you work. Stenographer counts them down per second. 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.

Claude Usage Details
Screenshot pending5-hour and 7-day quota with live countdowns
Insights

Your work, in four charts.

How many events a day and of what kind, which tools you lean on, which projects ate the time, how many sessions you started. Obvious questions, and impossible to answer from a folder of JSONL.

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 Claude Code think.

A live 3D force-directed graph of everything running right now. Sessions, tools and projects are the nodes; particles run the edges as tool calls fire. It is the one screen in the app worth watching rather than reading.

Visualization
Screenshot pendingLive 3D force-directed graph of sessions, tools and projects
Insights
Screenshot pendingEvents per day, stacked by event type
Where it all lives

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. A background daemon captures every hook event and every transcript line into one SQLite database on your own machine, and every screen on this page reads from that one file.

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, with 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.

Every LLM

Sixteen providers ship configured. And a blank one.

Every AI call the app makes, from the summaries to the oversight judgments, 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.

Stenographer asks each model what it can do rather than shipping a fixed list, and warns you before you load one your Mac has not got the memory to hold.

  • Anthropic API
  • Claude (Max token)
  • Claude (local CLI)
  • OpenAI
  • Gemini
  • xAI
  • DeepSeek
  • Mistral
  • Groq
  • Cerebras
  • Fireworks
  • Together
  • Kimi
  • OpenRouter
  • Ollama
  • Custom (OpenAI-compatible)
Planned agents

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
Everything it does

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 the Models section labels it planned.

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
Questions

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. Everything the app does with it runs locally and needs 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 two 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. Neither has shipped.

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.

Price

There is no pricing table. It is free.

Stenographer is free to download and free to use. No trial, no tier, no seat count, and nothing to unlock later — the app you install is the whole app.

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.

Stenographer's About window: the app icon above the name Stenographer, version 2.88.0 build 205, and a 2026 copyright notice
The running app, on the Mac this page was built on.
hello@fishlamp.com