Changelog¶
All notable changes to this project are documented here. The format follows Keep a Changelog and the project uses Semantic Versioning.
[Unreleased]¶
[0.27.2] - 2026-10-28¶
Changed¶
agent-top-core: the OTLP decoders behindserve --listenmove intootlp_decode, behind the new off-by-defaultdecodefeature. (#81)
Security¶
- Bump rustls to 0.23.46, rustls-webpki to 0.103.16 and webpki-roots to 1.0.11 for RUSTSEC-2026-0346, -0347, -0348, -0349, -0381 and -0382. (#82)
[0.27.1] - 2026-10-07¶
Fixed¶
agent-top uino longer printsnullafter the totals when every token is priced. (#78)
[0.27.0] - 2026-10-07¶
Highlights¶
agent-top ui opens the local store in a browser on this machine: cost by day stacked by harness, the most expensive projects and models, tool latency, and each session's turns with a waterfall of its tool calls and inferences. It reads the store read-only and loads nothing from other sites.
Added¶
agent-top uiserves a read-only web view of the local store on127.0.0.1:4320: cost by day, project and model, tool latency, MCP servers, and each session's turns with a span waterfall. (#76)
Changed¶
agent-top-store:Reader::query_withbinds parameters to a read-only query. (#76)
[0.26.0] - 2026-10-06¶
Highlights¶
agent-top serve keeps the local store current, syncing every minute until stopped. With --listen, it also receives OpenTelemetry spans from agents you build and run yourself, including in a container, and keeps them beside the coding-agent sessions, priced from the same table. Prompt and tool content is dropped as the spans are decoded.
Added¶
agent-top serve --listen <addr>receives OpenTelemetry spans (OTLP/HTTP, protobuf or JSON) from your own agents and keeps them in the local store, priced from the same table;reportcounts them. (#74)agent-top servesyncs the local store on an interval until stopped, logging a line when a sync stores something. (#73)
Changed¶
agent-top syncno longer rewrites OpenCode and Kodelet sessions that have not changed. (#73)agent-top-store:Store::sync_withsyncs sources through a given adapter. (#73)agent-top report --json:sourcegainsreceived_sessions. (#74)agent-top-coregains theotlpmodule;agent-top-storegainsStore::receiveandStoredSession::attribution. (#74)
[0.25.0] - 2026-10-06¶
Highlights¶
agent-top report counts the sessions in the local store whose transcripts a harness has deleted, so the all-time total stops shrinking. Transcripts unchanged since the last sync are read from the store, which makes the report several times faster.
Added¶
agent-top reportcounts sessions from the local store whose transcripts were deleted, and says on its last line which it read;--no-storereads only the transcripts.--jsongainssource. (#70)
Changed¶
agent-top-store:Reader::sessionsreturns each stored session with its transcript's size, time and agent-top version. (#70)
[0.24.0] - 2026-10-06¶
Highlights¶
agent-top sql answers questions about the local store with one SQL statement, read-only. Saved views cover cost by day, harness, model and project, tool latency at p50 and p95, and MCP server errors, and the output is a table, JSON or CSV.
Added¶
agent-top sqlqueries the local store read-only, as a table,--jsonor--csv, with views for cost by day, harness, model and project, tool latency and MCP errors. (#67)
[0.23.0] - 2026-10-05¶
Highlights¶
agent-top sync keeps sessions, spans and MCP calls in a SQLite file on your machine. Claude Code deletes transcripts after 30 days by default, and agent-top report loses their cost with them; synced sessions stay. Any SQLite client can query the file.
Added¶
agent-top synckeeps sessions, spans and MCP calls in a local SQLite file, so cost history survives a harness deleting its transcripts. (#65)
Changed¶
agent-top-core:HarnessAdapter::stampandSourceStampare new, andproject_nameandparent_turnare public inmodel. (#65)
[0.22.1] - 2026-10-01¶
Fixed¶
- The detail pane's
harnesscost line fits on one line in a 120-column terminal. (#63)
[0.22.0] - 2026-10-01¶
Highlights¶
The detail pane shows Claude Code's own cost for a session on the line under agent-top's. Claude Code writes that figure when a session exits, so the line says when it was written and marks it when the session has used tokens since.
Added¶
- Claude Code: the detail pane shows Claude Code's own running cost under agent-top's, with when it was written;
--jsongainsharness_cost. (#61)
[0.21.2] - 2026-10-01¶
Fixed¶
claude-opus-5-5is priced at its own $4 / $20 rate, with cache reads at $0.20. It was priced asclaude-opus-5, which overstated its cost. (#59)- Prices for
claude-sonnet-5-5,claude-opus-4-5,claude-sonnet-4-5and the retired Opus 4, Opus 4.1, Sonnet 4 and Haiku 3.5, so older sessions inagent-top reportare no longer unpriced. (#59)
[0.21.1] - 2026-09-24¶
Fixed¶
- Codex: the rate limit no longer drops to 0% when Codex reports a second quota with no windows. The last reading that had windows stays on screen. (#55)
[0.21.0] - 2026-09-20¶
Added¶
- Kodelet: MCP call counts per server, with errors, read from its
mcp__<server>_<tool>tool names. (#52)
Changed¶
- The detail pane's
contextsection marks its figures as estimates, which--oncealready did. (#49) --jsongainsfolds_child_usage, true for a harness whose child sessions are counted in the parent's totals. (#49)
[0.20.0] - 2026-09-20¶
Highlights¶
Kodelet sessions now appear in the table alongside Claude Code, Codex, Gemini CLI and OpenCode. agent-top reads Kodelet's SQLite store read-only and uses the costs Kodelet recorded itself, and child sessions nest under the parent that started them.
Added¶
- Kodelet: sessions in the table, the report and the trace, with tokens and cost from Kodelet's own records and child sessions nested under their parent. (#47)
TOOLSshows≥Nwhere a harness has compacted its history and the count is a floor;--jsongainstool_calls_lower_bound. (#47)--jsongainscache_write_unsplitonusageandcost_breakdown, for cache writes a harness records without a TTL. (#47)
Fixed¶
- OpenCode and Kodelet rows no longer name agent-top's price table as the source of a cost the harness recorded itself. (#47)
trace -ono longer prints the session id in its stderr summary. (#46)
[0.19.1] - 2026-09-19¶
Added¶
--theme auto|dark|lightpicks Catppuccin Mocha or Latte without asking the terminal;AGENT_TOP_THEMEsets it for every run. (#45)
[0.19.0] - 2026-09-18¶
Highlights¶
Codex subagents now appear as what they are: sessions inside their parent's process. Each one nests under its parent in the table with its nickname and role, keeps its own tokens and cost, and shares one process tree, so memory is counted once.
Codex code mode is opened up. A session that used to show 28 rows of exec now shows the commands and patches that ran inside them, in the trace and in context by source.
Added¶
- Codex: subagent sessions nest under their parent in the table and in
--once, named by nickname and role.--jsongainssubagent(parent_session_id,nickname,role) per agent. (#44) - Codex: tools run inside a code-mode
execcall, such asexec_commandandapply_patch, appear in the trace, the tool-call count and context by source. (#44) - Catppuccin Mocha and Latte themes, chosen from the terminal's background colour. (#43)
Changed¶
- Codex: a code-mode call's context share is divided between its nested tools by the length of each tool's output. Only the length is taken; no output text is kept. (#44)
- A nested agent process is labelled
agentin the process tree and in--json; thesubagentprocess kind is gone. Older snapshots still load. (#44) agent-top-core:ProcKind::Subagentis removed,HarnessAdapter::preparetakes the process map, andAgentandSessionSummarygainsubagent. (#44)
Fixed¶
- Linux: worker threads were counted as child processes, which multiplied an agent's memory and process count and showed threads as subagents. (#44)
- Codex: on recent versions, context by source sized each tool result from the wrong response and charged typed messages to tools. (#44)
- Codex installed through npm is matched to its transcript by the open rollout file instead of by working directory. (#44)
- Codex helper processes such as
codex mcpand the sandbox are no longer listed as agents. (#44)
[0.18.1] - 2026-09-16¶
Security¶
- Bump rustls to 0.23.45 for RUSTSEC-2026-0285. (#42)
[0.18.0] - 2026-09-13¶
Added¶
- OpenCode: MCP call counts per server, matched against the server names in OpenCode's config. (#36)
- OpenCode: context by source in the detail pane,
--onceand--json. (#37) - Prices for
deepseek-v4-proanddeepseek-flash(alsodeepseek-v4-flash), at DeepSeek's peak list rate. (#38)
[0.17.0] - 2026-09-13¶
Highlights¶
Every panel now comes in four sizes: a popup over the table, the full terminal with Enter, its own command such as agent-top mcp, or a split pane beside the table with o under tmux, zellij, WezTerm or kitty. A panel you want to keep watching no longer has to share the screen with the table.
The new m panel lists every MCP server on the machine in one place, with the orphaned MCP processes and the agent each one came from.
Added¶
Enterexpands a popup to fill the terminal, with scrolling;Escreturns to the table. (#34)agent-top slow,fails,adviceandmcpstart directly on one panel. (#34)oopens the current panel in a split pane under tmux, zellij, WezTerm or kitty. (#34)mopens the MCP servers panel: every server under every agent, plus orphaned MCP processes and where they came from. (#34)
Changed¶
- The help popup lists the panels, and the footer shows
m mcp. (#34)
[0.16.0] - 2026-09-11¶
Added¶
- A documentation site with a guide to every panel, the cost report, trace export, replay and prices, plus a blog. (#8)
Fixed¶
qon the update popup quits agent-top; before, it declined the update. (32fd1a6)- The detail pane's
web searchlabel no longer runs into its value. (#8)
[0.15.2] - 2026-09-07¶
Changed¶
- Shorter wording on the update popup. (#7)
[0.15.1] - 2026-09-07¶
Fixed¶
- Timestamps with a numeric zone offset (
+01:00,+0100) now parse. (#6)
[0.15.0] - 2026-09-07¶
Highlights¶
Advice reads the numbers for you. Press a to see what looks wasteful right now: a tool whose large results every later response pays to re-read, an MCP server attached but unused for ten minutes, or one whose memory keeps growing with no calls. Each line gives the numbers behind it; agent-top points and changes nothing.
agent-top can now upgrade itself. When a newer version exists, a popup shows the exact command and runs it on u, using the installer that installed agent-top.
Added¶
aopens the advice panel: expensive context sources, idle MCP servers and MCP servers whose memory keeps growing. Also in--onceand in--jsonasadvice. (#4)- When a newer version exists, a popup offers
uto upgrade and restart.norEscskips that version. (#5)
[0.14.0] - 2026-09-07¶
Highlights¶
Context by source shows which tools and MCP servers are filling the prompt, and what re-reading them has cost. Every response re-reads the whole conversation, so one large file read or a chatty MCP server is paid for again on every later response until compaction. No harness shows this.
Added¶
- Context by source in the detail pane, for Claude Code, Codex and Gemini CLI. (#3)
CONTEXT BY SOURCEin--once, andcontextin--json. (#3)
[0.13.0] - 2026-09-05¶
Added¶
- Burn rate: the header shows spend per hour across all agents, averaged over the last minute. (e9e74e5)
- A daily update check against crates.io. The footer version badge turns amber when a newer version exists.
AGENT_TOP_NO_UPDATE_CHECK=1turns the check off. (eafab41)
Changed¶
- The version badge moved from the header to the footer. (a2035e5)
- The help popup is sized to its content. (eafab41)
[0.12.1] - 2026-09-05¶
Changed¶
- Footer keys are grouped, with
q quitat the right.xappears only when there are stopped sessions to hide. (f4688f6)
[0.12.0] - 2026-09-05¶
Added¶
agent-top --whats-newprints the changelog shipped with the binary. (d11ab19)- The header, help popup and
--helpshow the running version and the upgrade command. (d11ab19)
[0.11.0] - 2026-09-05¶
Added¶
lopens the slowest tools panel andfopens the failed tool calls panel, both across all agents. (bd2c199)
[0.10.2] - 2026-09-05¶
Changed¶
- The detail pane lists cost, cache, tokens, turns and tool calls before the cost breakdown. (0ae8767)
- With the detail pane open, the agents table takes only the height its rows need. (67b886e)
[0.10.1] - 2026-09-05¶
Changed¶
- No change to the binary; the README gains a key features section. (19c3730)
[0.10.0] - 2026-09-05¶
Added¶
- Cache efficiency: the detail pane shows the share of the prompt served from cache, and
agent-top reporthas aCACHEcolumn. (16a08ef)
[0.9.2] - 2026-09-05¶
Changed¶
- No change to the binary; the README introduction is rewritten. (e910a45)
[0.9.1] - 2026-09-05¶
Added¶
- OpenAI prices for the GPT-5 family, so Codex sessions show a cost. (3430445)
Changed¶
- The README is reorganised, with background moved to docs/why-this-exists.md and docs/accounting.md. (3430445)
[0.9.0] - 2026-09-05¶
Highlights¶
agent-top report answers "what have my agents cost me" across Claude Code, Codex, Gemini CLI and OpenCode together, priced the same way. It reads the transcripts already on disk, so it covers history from before agent-top was installed, and tokens on a model without a price are shown separately rather than counted as free.
Added¶
agent-top reporttotals cost and tokens from transcripts on disk, grouped with--by harness|model|project|dayover a--sincewindow. Supports--json. (5e8cc24)
[0.8.0] - 2026-09-05¶
Added¶
- Codex rate limits (5-hour and weekly windows) in the detail pane and in
--jsonasrate_limit. (370d1ea) --oncelists agents at 75% or more of a rate limit underRATE LIMITS. (370d1ea)
[0.7.1] - 2026-09-05¶
Added¶
- OpenCode: turn and inference spans in the tool trace. (394bfcd)
[0.7.0] - 2026-09-05¶
Highlights¶
OpenCode is the fourth supported harness. Its sessions get a row with tokens, cost, tool calls and a tool trace, read from OpenCode's own database without writing to it, and the cost is the figure OpenCode computed itself.
Added¶
- OpenCode support: tokens, cost, model, tool calls, subagents and tool trace, read from OpenCode's database without writing to it. (2e2f92c)
[0.6.0] - 2026-09-05¶
Added¶
- Codex and Gemini CLI: MCP call counts per server. (5a5facd)
[0.5.0] - 2026-09-05¶
Highlights¶
The detail pane shows each MCP server an agent uses as its own row: its process, how often the agent called it, how many calls failed, and its CPU and memory. When an MCP process outlives its agent, the orphan list now says which agent it was left behind by.
Added¶
- Claude Code: the detail pane has one row per MCP server with pid, calls, errors, last call, CPU and memory. Also
MCP SERVERSin--onceandmcp_serversin--json. (9fa6c4d) - Orphaned MCP processes name the agent they were orphaned from, and how long ago. In
--jsonasorphan_origins. (9fa6c4d) - An
npxoruvxwrapper and the server it starts count as one MCP server. (9fa6c4d)
Fixed¶
- MCP servers were labelled
tool, and--resumeand working-directory attribution never matched, because process command lines were never read. (9fa6c4d) --jsonsnapshots from before 0.2.0 replay again. (9fa6c4d)
[0.4.0] - 2026-09-05¶
Highlights¶
Gemini CLI is the third supported harness, with the same row as Claude Code and Codex: tokens, cost, turns, tool calls and the tool trace. Every harness now plugs in through one adapter interface, so adding the next one does not touch the collector.
Added¶
- Gemini CLI support: tokens, cost, turns, tool calls, web searches, tool trace and trace export. (d47ddc2)
- Prices for Gemini 2.5, 3, 3.1, 3.5, 3.6, 3.7 and 3.8 models. (d47ddc2)
Changed¶
agent-top-core: each harness is aHarnessAdapter, andharness::open_transcriptreturnsNonefor a harness without one. (d47ddc2)
[0.3.5] - 2026-09-04¶
Added¶
- The detail pane breaks cost down by token type with the rate applied, and names the price table used. In
--jsonascost_breakdownandprice_source. (1fb2578)
[0.3.4] - 2026-09-04¶
Fixed¶
- Codex sessions started after the first day of a month were not found. (e70bc83)
- Two Codex app-servers running at once no longer swap conversations. (e70bc83)
- The header sparkline plots output tokens per second, labelled
out tok/s. (e70bc83)
[0.3.3] - 2026-09-04¶
Added¶
agent-top trace --endpoint URLposts an OTLP trace to a collector. (1c8d4a8)- A local Jaeger setup in
examples/jaeger/. (1c8d4a8) - The detail pane shows the
agent-top tracecommand for the selected session. (1c8d4a8)
[0.3.2] - 2026-09-04¶
Added¶
agent-top trace --format otlpwrites OpenTelemetry JSON for Jaeger, Tempo or any OTLP collector. (cc4c1df)
[0.3.1] - 2026-09-04¶
Added¶
- Claude Code web searches are counted and priced; Codex web searches are counted. (0ad32d5)
- Turn and inference spans in the waterfall, and
kindon each span in--json. (0ad32d5) - Chrome trace export nests tool calls and inferences under turns, with separate tracks for subagents. (0ad32d5)
Fixed¶
- An interrupted turn ends at its last line, not at the next prompt. (0ad32d5)
[0.3.0] - 2026-09-04¶
Highlights¶
agent-top trace turns a session into a timeline you can open in Perfetto: every tool call as a bar with its real duration, so a slow turn shows exactly which call it was waiting on. It reads the whole transcript, not only the recent calls the live view keeps.
Added¶
agent-top traceexports a session's tool calls as a Chrome trace for Perfetto orchrome://tracing. (075d2a5)agent-top-core:SpanLog::unbounded,SpanRetention,SessionTracker::refresh_all,harness::detectandharness::open_transcript. (075d2a5)
Fixed¶
- Claude Code subagent usage (2.1.233 and later) is counted in the parent row. (dcfd7ae)
[0.2.1] - 2026-09-04¶
Fixed¶
- No change to the binary; the release workflow runs the full test suite before publishing. (d0ac169)
[0.2.0] - 2026-09-03¶
Highlights¶
Drift detection catches a harness update that breaks parsing. A renamed transcript field used to show as 0 tokens and $0.00, which looks like good news; a session with model responses but no tokens now shows ? and names the harness version that changed.
Added¶
- Drift detection: a session that shows model responses but no tokens reads
?and names the harness version, instead of$0.00. (4afbce5) - Shell completions with
--completions <shell>. (4afbce5)
Changed¶
- One row per Codex conversation instead of one per process. (4afbce5)
[0.1.6] - 2026-09-03¶
Changed¶
- No change to the binary; README corrections on pricing and Codex. (8e6b6bc)
[0.1.5] - 2026-09-03¶
Added¶
- Prices live in
prices.toml. Override or add models in~/.config/agent-top/prices.tomlor$AGENT_TOP_PRICES. (17165be) --pricesprints the effective price table. (17165be)
Fixed¶
- A price file that fails to parse is reported on stderr. (17165be)
[0.1.4] - 2026-09-03¶
Changed¶
agent-top-core:SpanLog::iteris double-ended. (4fb523c)
[0.1.3] - 2026-09-03¶
Changed¶
- No change to the binary;
agent-top-corehas its own crates.io README, and the install section lists every route. (1be1657, fb68ea3)
[0.1.2] - 2026-09-03¶
Added¶
- Published on crates.io:
cargo install agent-topandcargo binstall agent-top. (67392ac)
Fixed¶
- Both crates ship with a README. (67392ac)
[0.1.1] - 2026-09-03¶
Added¶
--replay <file>opens a--jsonsnapshot in the interactive UI. (a355d77)
Changed¶
- Rounded, lighter panel borders. (4435080)
- Header totals are aligned in columns, and the sort direction moved to the footer. (4435080)
[0.1.0] - 2026-09-03¶
Highlights¶
The first release: a top for coding agents. One table shows every Claude Code and Codex session on the machine with its CPU, memory, tokens and cost, and a detail pane shows its process tree and a waterfall of its recent tool calls. MCP processes left running with no agent above them are flagged as orphans.
Added¶
- Interactive TUI with host CPU and memory, a tokens-per-second sparkline, a sortable agent table and a detail pane.
- Discovers Claude Code, Codex, Gemini CLI, OpenCode, Aider, Copilot CLI and cursor-agent processes, with nested agents shown as subagents.
- Claude Code and Codex: tokens, cost, turns and tool calls from transcripts.
- Tool trace: a waterfall of recent tool calls, toggled with
Tab. - Orphaned MCP process detection.
--onceand--jsonoutput.- Prebuilt binaries for macOS and Linux, and a Homebrew tap.