Releases: kannandreams/agent-top
Releases · kannandreams/agent-top
Release list
agent-top v0.9.2
[0.9.2] - 2026-09-05
Changed
- The README opens with a proper introduction of what agent-top is, rather than a scenario, and now names all four supported harnesses. The "What the table shows" columns each carry an icon. Documentation only; no behaviour change.
agent-top v0.9.1
[0.9.1] - 2026-09-05
Added
- OpenAI prices in the built-in table, so Codex sessions stop reading as free. The GPT-5 family (
gpt-5.6-sol/-terra/-luna,gpt-5.5and-pro,gpt-5.4/-mini/-nano/-pro,gpt-5.2and-pro,gpt-5.1,gpt-5and-mini/-nano/-pro), at OpenAI's standard-tier list prices checked 2026-09-05, with the cached-input rate used for cache reads. A Codex model with no entry of its own (gpt-5-codex) resolves to its base model by the longest-prefix rule. Inagent-top reportover the build machine's history this turns 96 Codex sessions from$0.00into$663.59, and the cross-harness total from$1770into$2441.
Changed
- The README is reorganised around a featured
agent-top reportsection, with the longer "Why this exists" and "Where the numbers come from" material moved into docs/why-this-exists.md and docs/accounting.md.
agent-top v0.9.0
[0.9.0] - 2026-09-05
Added
agent-top report: what the agents have cost, across every harness. The live table is one moment; this reads the transcripts already on disk and totals cost and tokens over a window, grouped by harness, model, project, or day. It is the one place that adds up Claude, Codex, Gemini and OpenCode together, priced the same way, so "what did all of this cost me" has an answer.--sincetakesall, a duration (7d,12h,2w), or a date;--by harness|model|project|daychooses the grouping;--jsonprints it structured. Tokens on a model with no price (Codex's, today) are shown as anUNPRICEDcolumn and the cost carries a+so an incomplete total is never mistaken for a cheap one. Nothing is written and nothing leaves the machine; it reads the same files the live view does, so an old file outside the window is skipped by its modification time without being parsed.
agent-top v0.8.0
[0.8.0] - 2026-09-05
Added
- Rate-limit view. Codex writes a
rate_limitsblock on every usage record, a short rolling window (5 hours) and a long one (weekly), each with a used-percent and a reset time, plus the plan and whether the limit is currently hit. agent-top reads the latest one and shows it. The detail pane has arate limitsection with each window's usage, coloured green through amber to red as it fills, and the reset countdown; a hit limit is flaggedLIMIT REACHED.--onceand the plain output add aRATE LIMITS (near or at limit)section listing live and idle agents at or above 75 percent, so a session about to be throttled is visible without opening the detail pane.--jsoncarries it asrate_limiton each agent. Only harnesses that write the figure populate it; Codex does today. A stopped session's snapshot is from when it last ran, so the plain-output warning is limited to agents whose limit still applies. Verified against the real rollouts on the build machine, including a session at 100 percent of its weekly window.
agent-top v0.7.1
[0.7.1] - 2026-09-05
Added
- Turn and inference spans for OpenCode. The OpenCode tool trace now has the same three span kinds as the other harnesses. Each assistant message is one inference span, from its
time.createdto itstime.completed; a user message opens a turn that runs to the last reply before the next prompt; a reply still in flight leaves its inference and turn open. Built per session, so a subagent's turns sit on their own track. Verified against the real database: a 974-tool session exported 903 inference spans and 137 turn spans beside its tool spans, with the durations the message times give.
agent-top v0.7.0
[0.7.0] - 2026-09-05
Added
- OpenCode adapter. OpenCode sessions now get a row like the other harnesses: tokens, cost, model, tool calls, subagents folded in, and a tool trace. OpenCode is the first harness that keeps its history in a SQLite database (
~/.local/share/opencode/opencode.db) rather than a JSONL log, so the adapter reads that database read-only, never writing to or locking the file OpenCode is using. Thesessiontable already carries the accounting, so tokens and the harness's own computed cost are read straight from it; because OpenCode has already priced the session, that cost is used as is rather than re-priced from agent-top's table, and an OpenCode row is never a floor. Subagent sessions (rows with aparent_id) fold into their parent, tool parts become tool-call spans with real durations, and assistant messages are the turn count. Verified against the real database on the build machine (39 sessions, DeepSeek models, costs matching the table). Addsrusqlite(bundled, so the single static binary still has no system dependency).
Known gaps
- Turn and inference spans are not reconstructed for OpenCode yet, only tool-call spans; the turn count is still shown. Per-server MCP counts are not produced (no MCP server was configured to read the naming from). Both are follow-ups.
agent-top v0.6.0
[0.6.0] - 2026-09-05
Added
- MCP call counts for Codex and Gemini CLI. The per-server rows added for Claude Code in v0.5.0 now populate for the other two harnesses. Codex records each MCP call as an
mcp_tool_call_endevent carryinginvocation.serverandinvocation.tooland aresultofOkorErr, so the server name is exact and needs no config; the call is also aresponse_itemfunction call, which is where the tool-call count and span already come from, so the MCP line only feeds the per-server map and never double counts. Gemini names an MCP toolmcp_<server>_<tool>and splits the server off the first segment the way the CLI itself does, with a failed call taken from the tool call'serrorstatus. Verified against real Codex rollouts on this machine (serverscodex_appsandnode_repl); the Gemini side is read from the CLI's tool registry source, as the adapter itself was. - A redacted real-data golden fixture,
codex-mcp-0.152.jsonl, locking the Codex MCP line shape.
Notes
- The process-to-server join is unchanged: a server's transcript name is matched to a process by name, then by elimination, so most single-server rows read as a labelled guess. Matching a server alias to its command exactly still wants the harness's MCP config, which is the remaining step.
agent-top v0.5.0
[0.5.0] - 2026-09-05
Added
- One row per MCP server in the detail pane (RFC-104 D2, Claude Code side). Under the process tree, each server the agent uses gets a line with its pid, how many times the transcript shows the agent calling it, how many of those calls the harness reported as errors, when it was last called, and its CPU and memory. The calls come from Claude Code's
mcp__<server>__<tool>tool names; the process comes from the tree. The two are joined by name when the configured name appears in the command line, and by elimination when exactly one process and one server are left, which the row marks with a?after the pid. A server called but not running (an HTTP server, or one that has exited) shows with no pid.--jsoncarries the rows asmcp_serverson each agent, withmatched_bysaying how each was formed.--onceprints anMCP SERVERSsection. - Orphans say where they came from (RFC-104 D3). agent-top remembers which agent each MCP process was under; a process that turns up in the orphan list after that is reported as "orphaned from
<agent>(pid N) 3m ago". One that was already an orphan when agent-top started says so instead of guessing.--jsoncarries this asorphan_origins. Memory lasts for the run and is keyed by pid and process start time, so a reused pid starts over. - An
npxoruvxwrapper and the server process under it count as one MCP server, not two, in the MCP column and the header.
Fixed
- Command lines and working directories were never read from the process table.
sysinfo'srefresh_processesreads memory, CPU and the executable only, so every heuristic that looks at arguments or the working directory was running blind: MCP servers under an agent were labelledtool,--resume <id>on a command line was invisible, and thecwdfallback attribution never matched. The scanner now asks for the command line and working directory once per process. Found by the first live MCP check: annpxserver under a headless Claude Code showed astool node node. - A
--jsonsnapshot written before 0.2.0 replays again;shares_processdefaults when absent.
agent-top v0.4.0
[0.4.0] - 2026-09-05
Added
- Gemini CLI adapter. Gemini CLI sessions now get the same row as Claude Code and Codex: tokens, cost, turns, tool calls, web searches, the tool trace and the trace export. It reads
~/.gemini/tmp/<project>/chats/session-*.jsonl(the layout of Gemini CLI 0.58), folds a subagent's transcript underchats/<session id>/into its parent, counts thinking tokens as output and tool-use prompt tokens as input the way Google bills them, and dedupes messages by id so a rewind or a checkpoint cannot count a response twice. A process is matched to its conversation by working directory and start time, and the row is labelled as that heuristic; Gemini CLI keeps no registry and does not hold the file open. Legacy single-documentsession-*.jsonfiles are not read. - Gemini prices in the built-in table:
gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-3-flash,gemini-3.1-pro,gemini-3.1-flash-lite,gemini-3.5-flash,gemini-3.5-flash-lite,gemini-3.6-flash,gemini-3.7-flashandgemini-3.8-flash, at Google's paid-tier rate for prompts under 200k tokens, checked 2026-09-05. Cache writes are the input price, since Gemini CLI's implicit caching has no write charge. A prompt over 200k tokens is priced at the lower tier rather than guessed at. - A golden fixture for Gemini CLI 0.58, written by the CLI's own recorder driven with a scripted conversation, with the exact numbers it must produce, plus Chrome and OTLP trace goldens and a drift test.
Changed
- The harness adapter contract (RFC-101). Each harness is now a
HarnessAdapterinagent-top-core: it lists its transcripts, says which belong to which process, opens a tracker and recognises its own files. The collector holds a list of adapters and names no harness.harness::adapters()lists them;harness::detectandagent-top trace --session <id>resolve through them.harness::open_transcriptreturnsNonefor a harness with no adapter instead of falling back to the Claude parser. The--jsonshape is unchanged. - The Codex attribution logic and its tests moved from the collector into the Codex adapter;
harness::codex::rollout_idis public. - The price table's
updatedfield is2026-09-05.
agent-top v0.3.5
[0.3.5] - 2026-09-04
Added
- The cost is broken down per kind of token in the detail pane, with the price each was charged at and what it came to, and the total names the table it was priced from ("list price, built-in table" or "your price file"). A figure that differs from the harness's own display can now be traced to the one line that differs, instead of looking like a bug.
--jsoncarries the same lines ascost_breakdownand the table asprice_source; both are additive. - A README section, "If the cost does not match your harness", with a real worked example (Claude Code pricing Fable 5.1 cache reads at $0.50 per million where the published page says $0.25) and the one-model override that makes the figures agree.
Changed
- The README's Prices section says plainly that a user file overrides the built-in table one model at a time.