agenttelemetry-app 2.1.0__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/MANIFEST.in +5 -10
  2. {agenttelemetry_app-2.1.0/agenttelemetry_app.egg-info → agenttelemetry_app-2.3.0}/PKG-INFO +91 -68
  3. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/README.md +90 -67
  4. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/__init__.py +1 -1
  5. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/accounts.py +3 -3
  6. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0/agenttelemetry_app.egg-info}/PKG-INFO +91 -68
  7. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/agenttelemetry_app.egg-info/SOURCES.txt +9 -19
  8. agenttelemetry_app-2.3.0/antigravity.py +1291 -0
  9. agenttelemetry_app-2.3.0/cursor_data.py +966 -0
  10. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/dashboard.py +823 -153
  11. agenttelemetry_app-2.3.0/docs/antigravity.md +79 -0
  12. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/docs/python-package.md +2 -4
  13. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/editor_snapshot.py +135 -5
  14. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/index.html +4 -16
  15. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/native.py +99 -0
  16. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/native_activity.py +63 -4
  17. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/parser.py +1507 -253
  18. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/pyproject.toml +3 -3
  19. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/release_notes.py +3 -1
  20. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/session_names.py +46 -13
  21. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/session_timeline.py +358 -3
  22. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/setup.py +2 -7
  23. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/app.css +5 -43
  24. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/core.js +93 -7
  25. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/maintenance.js +8 -1
  26. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/timeline.js +52 -9
  27. agenttelemetry_app-2.3.0/static/tool-icons/LICENSE.antigravity.txt +17 -0
  28. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/README.md +3 -1
  29. agenttelemetry_app-2.3.0/static/tool-icons/antigravity.svg +3 -0
  30. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/views.js +310 -718
  31. agenttelemetry_app-2.1.0/docs/mcp.md +0 -83
  32. agenttelemetry_app-2.1.0/mcp_access.py +0 -338
  33. agenttelemetry_app-2.1.0/mcp_backend.py +0 -549
  34. agenttelemetry_app-2.1.0/mcp_protocol.py +0 -97
  35. agenttelemetry_app-2.1.0/mcp_server.py +0 -678
  36. agenttelemetry_app-2.1.0/mcp_tools.py +0 -234
  37. agenttelemetry_app-2.1.0/static/insights.js +0 -115
  38. agenttelemetry_app-2.1.0/static/mcp.js +0 -281
  39. agenttelemetry_app-2.1.0/telemetry_insights.py +0 -1754
  40. agenttelemetry_app-2.1.0/telemetry_query.py +0 -1359
  41. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/LICENSE +0 -0
  42. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/__main__.py +0 -0
  43. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/agenttelemetry_app.egg-info/dependency_links.txt +0 -0
  44. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/agenttelemetry_app.egg-info/entry_points.txt +0 -0
  45. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/agenttelemetry_app.egg-info/top_level.txt +0 -0
  46. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/chart.umd.min.js +0 -0
  47. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/cli.py +0 -0
  48. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/diagnostics.py +0 -0
  49. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/docs/native-activity.md +0 -0
  50. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/docs/release-notes.md +0 -0
  51. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/ledger_backups.py +0 -0
  52. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/local_servers.py +0 -0
  53. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/local_servers_windows.py +0 -0
  54. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/manifest.json +0 -0
  55. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/setup.cfg +0 -0
  56. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/apple-touch-icon.png +0 -0
  57. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/charts.js +0 -0
  58. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/icon-192.png +0 -0
  59. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/icon-512.png +0 -0
  60. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/release-notes.js +0 -0
  61. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/LICENSE.hermes.txt +0 -0
  62. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/LICENSE.openclaw.txt +0 -0
  63. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/LICENSE.simple-icons.txt +0 -0
  64. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/claude.svg +0 -0
  65. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/copilot.svg +0 -0
  66. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/cursor.svg +0 -0
  67. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/hermes.svg +0 -0
  68. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/openai.svg +0 -0
  69. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/openclaw.svg +0 -0
  70. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/static/tool-icons/opencode.svg +0 -0
  71. {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.3.0}/sw.js +0 -0
@@ -14,41 +14,36 @@ include native_activity.py
14
14
  include local_servers.py
15
15
  include local_servers_windows.py
16
16
  include parser.py
17
+ include antigravity.py
18
+ include cursor_data.py
17
19
  include release_notes.py
18
20
  include native.py
19
21
  include accounts.py
20
22
  include session_names.py
21
- include mcp_access.py
22
- include mcp_backend.py
23
- include mcp_protocol.py
24
- include mcp_server.py
25
- include mcp_tools.py
26
- include telemetry_query.py
27
- include telemetry_insights.py
28
23
  include index.html
29
24
  include chart.umd.min.js
30
25
  include manifest.json
31
26
  include sw.js
32
27
  include docs/python-package.md
33
- include docs/mcp.md
34
28
  include docs/release-notes.md
35
29
  include docs/native-activity.md
30
+ include docs/antigravity.md
36
31
  include static/app.css
37
32
  include static/apple-touch-icon.png
38
33
  include static/charts.js
39
34
  include static/core.js
40
35
  include static/icon-192.png
41
36
  include static/icon-512.png
42
- include static/insights.js
43
37
  include static/maintenance.js
44
38
  include static/release-notes.js
45
- include static/mcp.js
46
39
  include static/timeline.js
47
40
  include static/tool-icons/LICENSE.hermes.txt
41
+ include static/tool-icons/LICENSE.antigravity.txt
48
42
  include static/tool-icons/LICENSE.openclaw.txt
49
43
  include static/tool-icons/LICENSE.simple-icons.txt
50
44
  include static/tool-icons/README.md
51
45
  include static/tool-icons/claude.svg
46
+ include static/tool-icons/antigravity.svg
52
47
  include static/tool-icons/copilot.svg
53
48
  include static/tool-icons/cursor.svg
54
49
  include static/tool-icons/hermes.svg
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agenttelemetry-app
3
- Version: 2.1.0
3
+ Version: 2.3.0
4
4
  Summary: A private, local dashboard for AI coding agent usage
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/uttamdeb/agent-telemetry
@@ -29,26 +29,39 @@ logs your tools already write to your own machine and serves a clean, interactiv
29
29
  dashboard — estimated spend, tokens, active time, cache efficiency, an **Anthropic vs OpenAI
30
30
  vs Google** provider comparison, an activity calendar, and breakdowns by **model, provider,
31
31
  day, hour, weekday, tool, IDE, project and session** — plus how much **disk** all these logs
32
- eat, and suggestions for spending less, drawn from your own numbers.
32
+ eat.
33
33
 
34
34
  By default, log inventory, usage and the cache stay on this machine. Separate actions can
35
- share selected exports with [paired devices](#your-devices-optional), return requested
36
- analytics to an enabled [local MCP client](docs/mcp.md) (which may forward tool results to
37
- its model provider), contact a provider after a confirmed **Read once** account lookup, or
35
+ share selected exports with [paired devices](#your-devices-optional), contact a provider
36
+ after a confirmed **Read once** account lookup, or
38
37
  fetch GitHub update and release-note metadata after you click **Check for updates** or
39
38
  **Load notes**. Cached release notes can be shown offline after an upgrade. No account or API key is needed
40
39
  for the dashboard; it has no runtime dependencies beyond Python's standard library and a
41
40
  vendored copy of Chart.js.
42
41
 
43
- Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · OpenCode · Hermes Agent · OpenClaw**.
42
+ Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · Antigravity · OpenCode · Hermes Agent · OpenClaw**.
43
+
44
+ **Get AgentTelemetry:** [Desktop apps for macOS and Windows](#download-the-app) ·
45
+ [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=agenttelemetry-team.agenttelemetry) ·
46
+ [Open VSX](https://open-vsx.org/extension/agenttelemetry-team/agenttelemetry) (Cursor and compatible editors) ·
47
+ [Browser dashboard (Python or source)](#quick-start) ·
48
+ [Product page](https://agenttelemetry-app.vercel.app/)
49
+
50
+ **AgentTelemetry Pro (optional).** Everything above stays free, open source and local. [AgentTelemetry
51
+ Pro](https://agenttelemetry-app.vercel.app/#pro) is a separate add-on with a sign-in: your dashboard in any browser or
52
+ on your phone; chat with your running Claude Code and Codex sessions from the web, your phone or the Pro app on Mac
53
+ and Windows; answering Claude Code's permission prompts from your phone; sessions that message each other across
54
+ your devices; Optimize; and the local MCP bridge. See [Free vs Pro](https://agenttelemetry-app.vercel.app/#pro).
44
55
 
45
56
  ## Download the app
46
57
 
47
- | Platform | Download |
58
+ Choose the installer for your platform from the release's **Assets** section.
59
+
60
+ | Platform | Release downloads |
48
61
  | --- | --- |
49
- | macOS 13+ · Apple Silicon | **[Download DMG](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.1.0/AgentTelemetry-2.1.0-macos-arm64.dmg)** |
50
- | macOS 13+ · Intel | **[Download DMG](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.1.0/AgentTelemetry-2.1.0-macos-x86_64.dmg)** |
51
- | Windows 10/11 · x64 | **[Download EXE installer](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.1.0/AgentTelemetry-2.1.0-windows-x64-setup.exe)** |
62
+ | macOS 13+ · Apple Silicon | **[Find the Apple Silicon DMG](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
63
+ | macOS 13+ · Intel | **[Find the Intel DMG](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
64
+ | Windows 10/11 · x64 | **[Find the Windows EXE installer](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
52
65
 
53
66
  **Python is bundled — no terminal setup needed.** macOS: open the DMG, drag the app to
54
67
  Applications and open it. Windows: run the installer and open AgentTelemetry from Start.
@@ -61,10 +74,11 @@ starting monitoring. On macOS, opening the app manually also lets you import fir
61
74
 
62
75
  These builds are unsigned/unnotarized. macOS may require **System Settings → Privacy &
63
76
  Security → Open Anyway**; Windows SmartScreen may require **More info → Run anyway**.
77
+ [Product and install page](https://agenttelemetry-app.vercel.app/) ·
64
78
  [All releases](https://github.com/uttamdeb/agent-telemetry/releases) ·
65
- [What's new in 2.1.0](docs/releases/v2.1.0.md) ·
66
- [SHA-256 checksums](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.1.0/SHA256SUMS.txt) ·
67
- [PyPI package 2.1.0](https://pypi.org/project/agenttelemetry-app/2.1.0/)
79
+ [What's new in 2.3.0](docs/releases/v2.3.0.md) ·
80
+ [SHA-256 checksums in release assets](https://github.com/uttamdeb/agent-telemetry/releases/latest) ·
81
+ [PyPI package 2.3.0](https://pypi.org/project/agenttelemetry-app/2.3.0/)
68
82
 
69
83
  ---
70
84
 
@@ -166,12 +180,14 @@ estimated from tokens or combined across devices. Session details show recorded
166
180
  creator/account IDs with their attribution limits. Account metadata is private to the
167
181
  source device. See [setup, research and limitations](docs/account-limits.md).
168
182
 
169
- ## Local servers (macOS)
183
+ ## Local servers (macOS and Windows)
170
184
 
171
- The **Local servers** tab and menu bar can list local project listeners, pin them,
172
- and save an explicit launch command for Start and Restart. Process actions ask for
173
- confirmation. They require a ready macOS backend; Windows and Linux show the support
174
- limitation. Commands stay on this machine and are never included in device sharing.
185
+ The **Local servers** dashboard tab can list local project listeners, pin them,
186
+ and save an explicit launch command for Start and Restart. macOS can also show pinned
187
+ controls in the menu bar; the Windows tray opens the dashboard controls. Process actions
188
+ ask for confirmation. Lifecycle controls are supported on macOS and Windows; Linux does
189
+ not yet support this feature. Windows asks for a working folder and uses ownership-checked
190
+ process controls. Commands stay on this machine and are never included in device sharing.
175
191
  Running a saved command gives it your account's file and network access.
176
192
  See [behavior, privacy and limitations](docs/local-servers.md).
177
193
 
@@ -238,25 +254,15 @@ retain one serialized snapshot per display tick, in memory only; the ledger is u
238
254
  as all writes. `POST /api/shutdown` additionally requires the owning Windows client's
239
255
  per-process control token; a normal standalone dashboard cannot be stopped by that route.
240
256
 
241
- ## Local MCP access (optional)
242
-
243
- AgentTelemetry provides eight read-only MCP tools for usage, comparisons, supported insights,
244
- session summaries and timelines, data health, the telemetry catalog and saved subscription
245
- limits. MCP access is off by default. Enable it in Settings and confirm each scope. The local
246
- bridge requires an already-running dashboard and returns data only when the configured MCP
247
- client requests it. A cloud-backed client may send tool results to its provider; review that
248
- client's data-handling settings before enabling access. Project/device names and usage from
249
- connected devices require their own opt-in scopes. The MCP bridge never refreshes accounts,
250
- returns prompt text, or edits client configuration. See [MCP tools, setup and privacy
251
- limits](docs/mcp.md).
252
-
253
- The MCP bridge ships with the **2.1.0** application and Python package. It is not a separate
254
- marketplace listing; install/update AgentTelemetry, then use the [MCP setup guide](docs/mcp.md).
255
-
256
257
  > `--rebuild` deletes the cache, and with it every session whose log has since been deleted
257
258
  > from disk (see [Storage](#storage--what-these-logs-cost-you-in-disk)). Copy
258
259
  > `.usage_cache.json` somewhere safe first if you've cleaned up old logs.
259
260
 
261
+ Deleting a session inside a tool doesn't remove it from your totals either. If OpenCode,
262
+ Hermes or OpenClaw delete a session from their database, the dashboard keeps the usage it
263
+ already counted and marks that session as deleted. The same applies to turns you undo in
264
+ OpenCode and to a Claude or Copilot log that gets shorter.
265
+
260
266
  **Requirements:** Python 3.8+ on **macOS, Linux or Windows**. On Windows run
261
267
  `python dashboard.py` (or `run.cmd`); on macOS/Linux `python3 dashboard.py` (or `./run.sh`).
262
268
 
@@ -280,21 +286,33 @@ instead of cloning, delete `.usage_cache.json` first — that file is your perso
280
286
 
281
287
  ## Data sources
282
288
 
289
+ **AgentTelemetry Pulsar** is the engine that reads these sources. It finds each tool's
290
+ local logs, picks the usage signal out of them and turns every tool's format into the one
291
+ shared usage shape the dashboard shows. It runs on your machine, and its code lives in
292
+ `parser.py`.
293
+
283
294
  | Tool | Where it reads | Tokens |
284
295
  |---|---|---|
285
296
  | **Claude Code** | `~/.claude/projects/**/*.jsonl` | exact (in/out/cache read+write, 5m/1h tiers) |
286
297
  | **Claude Desktop** (agent mode) | `Claude/local-agent-mode-sessions/**` under App Support / `%APPDATA%` / `~/.config` | exact |
287
- | **Codex** | `~/.codex/sessions/**`, `~/.codex/archived_sessions/**` | exact (in/cached/out/reasoning); subagents are identified and labelled |
298
+ | **Codex** | `~/.codex/sessions/**`, `~/.codex/archived_sessions/**` (plain `*.jsonl` and the zstd-compressed `*.jsonl.zst` Codex swaps in for idle threads) | exact (in/cached/out/reasoning); subagents are identified and labelled. Compressed rollouts are read with Python 3.14+ or the `zstd` command; without either they are counted as unread (never dropped) and the sidebar says how many |
288
299
  | **GitHub Copilot** | VS Code-family `chatSessions/*.{json,jsonl}`; SDK/CLI `~/.copilot/session-state/*/events.jsonl`, enriched from VS Code `agentSessionData/*/session.db` | recorded request/turn tokens where available; SDK shutdown totals where safely dated. SDK gaps show a warning tooltip and unavailable/partial usage; older non-SDK chats retain text estimates. Premium multipliers are separate from estimated dollars. |
289
- | **Cursor** (native AI) | `Cursor/User/globalStorage/state.vscdb` under App Support / `%APPDATA%` / `~/.config` | partial — model, mode, timestamps, tool calls and AI-line stats are exact; tokens are on only ~2% of messages |
300
+ | **Cursor** (native AI) | `Cursor/User/globalStorage/state.vscdb` under App Support / `%APPDATA%` / `~/.config` | recorded, partial or unavailable per session/model: explicit message input/output tokens, models, tools and AI-line stats where the local records expose them |
301
+ | **Google Antigravity** | `~/.gemini/antigravity/conversations/*.db`, `~/.gemini/antigravity-ide/conversations/*.db`, `~/.gemini/antigravity-cli/conversations/*.db` | recorded SQLite usage with per-field availability; standalone legacy `.pb` files are unsupported |
290
302
  | **OpenCode** | `~/.local/share/opencode/opencode.db`, `%LOCALAPPDATA%\opencode\opencode.db`, `~/.opencode/opencode.db` (or `$OPENCODE_DATA_DIR`) | V1/V2 SQLite; exact (in/out/reasoning/cache), prompts and tools; cost is read from OpenCode's own per-message value |
291
303
  | **Hermes Agent** | `~/.hermes/state.db` (or `$HERMES_HOME`, `%LOCALAPPDATA%\hermes`) | exact (in/out/cache/reasoning, per model) |
292
304
  | **OpenClaw** | `~/.openclaw/agents/<agent>/agent/openclaw-agent.sqlite` (or `$OPENCLAW_STATE_DIR`; also the older `~/.clawdbot`, `~/.moltbot`) and the older per-session `sessions/*.jsonl` | exact (in/out/cache read/cache write/reasoning, per response); its own logged cost is used only for a model with no verified price. Large events are stored zstd-compressed: read with the `zstd` command or Python 3.14+ |
293
305
 
294
306
  A tool you don't use simply contributes nothing. **Attribution is by tool, not by model** —
295
- a Claude or GPT model used *inside* Copilot/Cursor/OpenCode/Hermes/OpenClaw counts under that tool, and the
307
+ a Claude, Gemini, or GPT model used *inside* Copilot/Cursor/Antigravity/OpenCode/Hermes/OpenClaw counts under that tool, and the
296
308
  Models table lists each `model × tool` row separately.
297
309
 
310
+ Antigravity's supported SQLite schema, duplicate-row handling, recorded checkpoint detail,
311
+ and format limits are documented in [Google Antigravity support](docs/antigravity.md).
312
+
313
+ Cursor's local conversation metadata is documented in [Cursor support](docs/cursor.md),
314
+ including its model/token coverage states, workspace associations, subagents, and limits.
315
+
298
316
  Copilot's newer SDK-based agent sessions use a different store from older Copilot Chat.
299
317
  AgentTelemetry joins their event history to VS Code's saved per-turn usage using native
300
318
  session and event IDs. Custom endpoint models, including Cloudflare GLM 5.3, still count
@@ -374,26 +392,22 @@ anything is saved. Close the session in its original tool before confirming, and
374
392
  that tool if needed. Token, cost, prompt, tool-call and compaction records stay intact.
375
393
  Previous title metadata is backed up privately in
376
394
  `AgentTelemetryNative/session-title-backups/`, separately from the usage ledger.
377
- This supports local Claude Code transcripts, Codex through its installed CLI’s
395
+ This supports local Claude Code transcripts, Codex through its
378
396
  [official name API](https://learn.chatgpt.com/docs/app-server), and OpenCode’s SQLite
379
- session stores. Other formats, remote sessions and deleted logs cannot be edited.
380
- Recognized local Claude subagent transcripts instead offer **Name in AgentTelemetry**.
381
- This saves a private display name on this device without editing Claude's transcript,
382
- native subagent name, or parent session. The preview states this scope explicitly.
397
+ session stores. Codex's program is found wherever its apps install it (the ChatGPT app,
398
+ the Codex editor extension, the Codex desktop app on Windows, or a Codex CLI), with no
399
+ need for it on your PATH. Remote sessions and deleted logs cannot be renamed.
400
+ Recognized local Claude subagent transcripts, and sessions from tools whose own title
401
+ can't be edited safely (Copilot, Cursor, Claude Desktop, Antigravity, Hermes, OpenClaw),
402
+ instead offer **Name in AgentTelemetry**. This saves a private display name on this
403
+ device without editing the tool's files, Claude's transcript, native subagent name, or
404
+ parent session. The preview states this scope explicitly.
383
405
  These names live in `AgentTelemetryNative/session-display-names.json`, outside the
384
406
  usage ledger, summaries, and device sharing. Enter the source title again to remove
385
407
  a display-name override. See [subagent name behavior](docs/subagent-sessions.md).
386
408
  Tool/provider icons are bundled locally, including the OpenAI mark for Codex; no remote
387
409
  logo requests occur. Their sources and licenses are in `static/tool-icons/README.md`.
388
410
 
389
- **Optimize** — suggestions derived from your own logs, ranked by what they'd save: sessions
390
- re-reading a very large context, thinking share, tool-heavy sessions that never delegated,
391
- cache written but never read, a costly model doing light work, what each **Skill** costs,
392
- edits that needed a retry, oversized **CLAUDE.md / AGENTS.md**, sessions that open heavier
393
- than your leanest ones, wasted file reads, installed skills and agents you never use, and
394
- MCP servers you never call, barely use, or load everywhere but use in one project. Nothing is shown unless
395
- your data supports it, and because the estimates overlap they are never summed.
396
-
397
411
  **Storage** — see below.
398
412
 
399
413
  **Keyboard** — `1`/`7`/`3`/`9`/`a` ranges, `m` month-to-date, `,` / `.` previous / next
@@ -475,26 +489,32 @@ dollars**, so cost is always derived. Rates live in `parser.py → PRICING` as
475
489
  `(input, output, cache_write_5m, cache_write_1h, cache_read)` per 1M tokens; edit freely
476
490
  (recomputed on each request, no re-parse needed).
477
491
 
478
- - **Anthropic** rates are current list prices (Opus 5.5 $4/$20, Opus 5 & 4.x $5/$25, Sonnet 5
479
- & 5.5 $2/$10, Sonnet 4.x $3/$15, Haiku 4.5 $1/$5; cache write 1.25×/2× input for 5-min/1-hour, cache
480
- read 0.1× — 0.05× on Opus 5.5). **OpenAI** GPT-5.4/5.5/5.6/6 are verified from OpenAI docs;
492
+ - **Anthropic** rates are current list prices (Fable & Mythos 5.2 $8/$40, Fable & Mythos 5/5.1
493
+ $10/$50, Opus 5.5 $4/$20, Opus 5 & 4.x $5/$25, Sonnet 5 & 5.5 $2/$10, Sonnet 4.x $3/$15, Haiku
494
+ 4.5 $1/$5; cache write 1.25×/2× input for 5-min/1-hour, cache read 0.1× — 0.05× on Opus 5.5 and
495
+ Sonnet 5.5, 0.025× on Fable & Mythos 5.1/5.2). **OpenAI** GPT-5.4/5.5/5.6/6 are verified from OpenAI docs;
481
496
  older/other models are estimates.
482
497
  - **Haiku 5.5** uses [Anthropic's published rates](https://platform.claude.com/docs/en/about-claude/pricing):
483
498
  $0.10/$0.50 per million input/output tokens up to 100K prompt tokens, $0.50/$2.50
484
499
  above 100K. The threshold includes cached input and applies to each request.
485
500
  Available Claude logs backfill this pricing detail on a normal restart; token and
486
501
  message counts stay unchanged. Older archives/peers and other tools without that
487
- detail use the short-prompt rate. Optimize model substitutions conservatively use
488
- the higher tier when the target request size is unknown.
502
+ detail use the short-prompt rate.
489
503
  - **Price changes are date-aware.** When a vendor cuts a price (OpenAI's GPT-5.6 cuts of
490
- 2026-07-30 and 2026-08-21), usage from before the change keeps the rate it had then —
504
+ 2026-07-30 and 2026-08-21, Anthropic's Sonnet 5.5 cache-read cut of 2026-10-07), usage
505
+ from before the change keeps the rate it had then —
491
506
  see `parser.py → PRICE_HISTORY`.
492
507
  - **These are API-equivalent values.** If you're on a subscription (Claude Max/Pro, Codex,
493
508
  Copilot), you don't pay per token — the $ is "what this would cost at API rates."
494
- - **Cursor** rarely logs token counts, and **older Copilot chats** have none, so their tokens
495
- (and thus $) are rough. Current Copilot builds log real per-request tokens, which are used.
496
- Copilot's honest metric is **request count** and its **premium-request** total (both shown);
497
- Cursor's is **messages, tool calls and AI lines kept** (also shown).
509
+ - **Cursor** exposes explicit input/output token receipts for some messages; missing and
510
+ placeholder values are unavailable, and usage coverage can be partial. Cache and reasoning
511
+ values remain unavailable unless recorded. Overview shows observed Cursor prompts, replies,
512
+ and tool calls separately when they have no token/cost coverage. It does not estimate tokens
513
+ from text or context meters, infer subscription charges, or count metadata as tokens. The
514
+ **Exact tokens only** filter omits Cursor because local token coverage is incomplete. See
515
+ [Cursor support](docs/cursor.md). **Older Copilot chats** may have no token data; current
516
+ Copilot builds log real per-request tokens. Copilot's honest metric is **request count** and
517
+ its **premium-request** total (both shown); Cursor also exposes **AI lines kept**.
498
518
  - **Billing details that change the price are applied**: prompt-cache writes at their own
499
519
  rate (Claude and GPT-5.6/GPT-6), Claude fast mode, US-only inference (1.1x) and web
500
520
  searches ($10/1K). A forked or subagent Codex thread's replay of its parent is skipped,
@@ -504,12 +524,15 @@ dollars**, so cost is always derived. Rates live in `parser.py → PRICING` as
504
524
  when it runs through supported tools, at the Standard rate for prompts up to 200K
505
525
  tokens. Live, TTS, image and embedding models are not priced, and nor are the higher Pro rate
506
526
  for longer prompts or audio input. The Gemini CLI itself writes no token counts to read.
507
- - **Gemini 4 Argon** is recognized across the supported tools and uses Google's
508
- [announced introductory rates](https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-4-argon/):
509
- $2 input, $10 output and $0.10 cached input per 1M tokens. Access is still limited to
510
- trusted testers, and Google has not listed a public API model ID. These are API-equivalent
511
- estimates for Argon usage found in logs. The later $4/$20 rate has no effective date yet
512
- and is not applied ahead of time; cache storage charges are not modeled.
527
+ - **Gemini 4 Argon and Gemini 4 Carbon** (`gemini-4-argon`, `gemini-4-carbon`) are recognized
528
+ across the supported tools and use Google's [published rates](https://aistudio.google.com/docs/pricing):
529
+ $2 input, $10 output and $0.10 cached input per 1M tokens through November 30, 2026. Google
530
+ doubles them to $4, $20 and $0.20 on December 1, 2026. The higher rate is not applied ahead
531
+ of time: it goes in once it takes effect, and earlier usage keeps the rate it had then.
532
+ Cache storage charges are not modeled.
533
+ - **Gemini 4 Hydrogen** (`gemini-4-hydrogen`) uses Google's paid rate: $1.50 input, $7.50 output
534
+ and $0.075 cached input per 1M tokens. Its free tier can't be told apart in logs, so usage
535
+ is shown at the paid rate.
513
536
 
514
537
  ## Note on log retention
515
538
 
@@ -539,7 +562,7 @@ and extend this from that file).
539
562
 
540
563
  ## Files
541
564
 
542
- `dashboard.py` (server + cache + cost + `/api/storage`) · `parser.py` (log parsers + pricing) ·
565
+ `dashboard.py` (server + cache + cost + `/api/storage`) · `parser.py` (AgentTelemetry Pulsar: log parsers + pricing) ·
543
566
  `index.html` (shell) · `static/app.css` · `static/core.js` · `static/charts.js` ·
544
567
  `static/views.js` · `chart.umd.min.js` (vendored Chart.js) · `AGENTS.md` · `run.sh`.
545
568
 
@@ -571,8 +594,8 @@ What sharing sends: session titles (often the start of a prompt), project and br
571
594
  log file paths, models, token counts, costs and times. Full prompts, replies and file
572
595
  contents are never sent. Sharing opens one read-only port (7879) that answers only to the
573
596
  pairing code. The dashboard itself stays on `127.0.0.1`. The connection is **not
574
- encrypted**, so share only on a network you trust. The setup checks on the Optimize tab
575
- (instruction files, installed skills, MCP servers) and the Storage tab still describe only
597
+ encrypted**, so share only on a network you trust. The Storage tab and setup inventories
598
+ (instruction files, installed skills, MCP servers) still describe only
576
599
  the computer you're looking at. `.peers.json` and `.peers/` are gitignored.
577
600
 
578
601
  **If it can't connect**, the error says which of these it is:
@@ -5,26 +5,39 @@ logs your tools already write to your own machine and serves a clean, interactiv
5
5
  dashboard — estimated spend, tokens, active time, cache efficiency, an **Anthropic vs OpenAI
6
6
  vs Google** provider comparison, an activity calendar, and breakdowns by **model, provider,
7
7
  day, hour, weekday, tool, IDE, project and session** — plus how much **disk** all these logs
8
- eat, and suggestions for spending less, drawn from your own numbers.
8
+ eat.
9
9
 
10
10
  By default, log inventory, usage and the cache stay on this machine. Separate actions can
11
- share selected exports with [paired devices](#your-devices-optional), return requested
12
- analytics to an enabled [local MCP client](docs/mcp.md) (which may forward tool results to
13
- its model provider), contact a provider after a confirmed **Read once** account lookup, or
11
+ share selected exports with [paired devices](#your-devices-optional), contact a provider
12
+ after a confirmed **Read once** account lookup, or
14
13
  fetch GitHub update and release-note metadata after you click **Check for updates** or
15
14
  **Load notes**. Cached release notes can be shown offline after an upgrade. No account or API key is needed
16
15
  for the dashboard; it has no runtime dependencies beyond Python's standard library and a
17
16
  vendored copy of Chart.js.
18
17
 
19
- Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · OpenCode · Hermes Agent · OpenClaw**.
18
+ Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · Antigravity · OpenCode · Hermes Agent · OpenClaw**.
19
+
20
+ **Get AgentTelemetry:** [Desktop apps for macOS and Windows](#download-the-app) ·
21
+ [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=agenttelemetry-team.agenttelemetry) ·
22
+ [Open VSX](https://open-vsx.org/extension/agenttelemetry-team/agenttelemetry) (Cursor and compatible editors) ·
23
+ [Browser dashboard (Python or source)](#quick-start) ·
24
+ [Product page](https://agenttelemetry-app.vercel.app/)
25
+
26
+ **AgentTelemetry Pro (optional).** Everything above stays free, open source and local. [AgentTelemetry
27
+ Pro](https://agenttelemetry-app.vercel.app/#pro) is a separate add-on with a sign-in: your dashboard in any browser or
28
+ on your phone; chat with your running Claude Code and Codex sessions from the web, your phone or the Pro app on Mac
29
+ and Windows; answering Claude Code's permission prompts from your phone; sessions that message each other across
30
+ your devices; Optimize; and the local MCP bridge. See [Free vs Pro](https://agenttelemetry-app.vercel.app/#pro).
20
31
 
21
32
  ## Download the app
22
33
 
23
- | Platform | Download |
34
+ Choose the installer for your platform from the release's **Assets** section.
35
+
36
+ | Platform | Release downloads |
24
37
  | --- | --- |
25
- | macOS 13+ · Apple Silicon | **[Download DMG](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.1.0/AgentTelemetry-2.1.0-macos-arm64.dmg)** |
26
- | macOS 13+ · Intel | **[Download DMG](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.1.0/AgentTelemetry-2.1.0-macos-x86_64.dmg)** |
27
- | Windows 10/11 · x64 | **[Download EXE installer](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.1.0/AgentTelemetry-2.1.0-windows-x64-setup.exe)** |
38
+ | macOS 13+ · Apple Silicon | **[Find the Apple Silicon DMG](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
39
+ | macOS 13+ · Intel | **[Find the Intel DMG](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
40
+ | Windows 10/11 · x64 | **[Find the Windows EXE installer](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
28
41
 
29
42
  **Python is bundled — no terminal setup needed.** macOS: open the DMG, drag the app to
30
43
  Applications and open it. Windows: run the installer and open AgentTelemetry from Start.
@@ -37,10 +50,11 @@ starting monitoring. On macOS, opening the app manually also lets you import fir
37
50
 
38
51
  These builds are unsigned/unnotarized. macOS may require **System Settings → Privacy &
39
52
  Security → Open Anyway**; Windows SmartScreen may require **More info → Run anyway**.
53
+ [Product and install page](https://agenttelemetry-app.vercel.app/) ·
40
54
  [All releases](https://github.com/uttamdeb/agent-telemetry/releases) ·
41
- [What's new in 2.1.0](docs/releases/v2.1.0.md) ·
42
- [SHA-256 checksums](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.1.0/SHA256SUMS.txt) ·
43
- [PyPI package 2.1.0](https://pypi.org/project/agenttelemetry-app/2.1.0/)
55
+ [What's new in 2.3.0](docs/releases/v2.3.0.md) ·
56
+ [SHA-256 checksums in release assets](https://github.com/uttamdeb/agent-telemetry/releases/latest) ·
57
+ [PyPI package 2.3.0](https://pypi.org/project/agenttelemetry-app/2.3.0/)
44
58
 
45
59
  ---
46
60
 
@@ -142,12 +156,14 @@ estimated from tokens or combined across devices. Session details show recorded
142
156
  creator/account IDs with their attribution limits. Account metadata is private to the
143
157
  source device. See [setup, research and limitations](docs/account-limits.md).
144
158
 
145
- ## Local servers (macOS)
159
+ ## Local servers (macOS and Windows)
146
160
 
147
- The **Local servers** tab and menu bar can list local project listeners, pin them,
148
- and save an explicit launch command for Start and Restart. Process actions ask for
149
- confirmation. They require a ready macOS backend; Windows and Linux show the support
150
- limitation. Commands stay on this machine and are never included in device sharing.
161
+ The **Local servers** dashboard tab can list local project listeners, pin them,
162
+ and save an explicit launch command for Start and Restart. macOS can also show pinned
163
+ controls in the menu bar; the Windows tray opens the dashboard controls. Process actions
164
+ ask for confirmation. Lifecycle controls are supported on macOS and Windows; Linux does
165
+ not yet support this feature. Windows asks for a working folder and uses ownership-checked
166
+ process controls. Commands stay on this machine and are never included in device sharing.
151
167
  Running a saved command gives it your account's file and network access.
152
168
  See [behavior, privacy and limitations](docs/local-servers.md).
153
169
 
@@ -214,25 +230,15 @@ retain one serialized snapshot per display tick, in memory only; the ledger is u
214
230
  as all writes. `POST /api/shutdown` additionally requires the owning Windows client's
215
231
  per-process control token; a normal standalone dashboard cannot be stopped by that route.
216
232
 
217
- ## Local MCP access (optional)
218
-
219
- AgentTelemetry provides eight read-only MCP tools for usage, comparisons, supported insights,
220
- session summaries and timelines, data health, the telemetry catalog and saved subscription
221
- limits. MCP access is off by default. Enable it in Settings and confirm each scope. The local
222
- bridge requires an already-running dashboard and returns data only when the configured MCP
223
- client requests it. A cloud-backed client may send tool results to its provider; review that
224
- client's data-handling settings before enabling access. Project/device names and usage from
225
- connected devices require their own opt-in scopes. The MCP bridge never refreshes accounts,
226
- returns prompt text, or edits client configuration. See [MCP tools, setup and privacy
227
- limits](docs/mcp.md).
228
-
229
- The MCP bridge ships with the **2.1.0** application and Python package. It is not a separate
230
- marketplace listing; install/update AgentTelemetry, then use the [MCP setup guide](docs/mcp.md).
231
-
232
233
  > `--rebuild` deletes the cache, and with it every session whose log has since been deleted
233
234
  > from disk (see [Storage](#storage--what-these-logs-cost-you-in-disk)). Copy
234
235
  > `.usage_cache.json` somewhere safe first if you've cleaned up old logs.
235
236
 
237
+ Deleting a session inside a tool doesn't remove it from your totals either. If OpenCode,
238
+ Hermes or OpenClaw delete a session from their database, the dashboard keeps the usage it
239
+ already counted and marks that session as deleted. The same applies to turns you undo in
240
+ OpenCode and to a Claude or Copilot log that gets shorter.
241
+
236
242
  **Requirements:** Python 3.8+ on **macOS, Linux or Windows**. On Windows run
237
243
  `python dashboard.py` (or `run.cmd`); on macOS/Linux `python3 dashboard.py` (or `./run.sh`).
238
244
 
@@ -256,21 +262,33 @@ instead of cloning, delete `.usage_cache.json` first — that file is your perso
256
262
 
257
263
  ## Data sources
258
264
 
265
+ **AgentTelemetry Pulsar** is the engine that reads these sources. It finds each tool's
266
+ local logs, picks the usage signal out of them and turns every tool's format into the one
267
+ shared usage shape the dashboard shows. It runs on your machine, and its code lives in
268
+ `parser.py`.
269
+
259
270
  | Tool | Where it reads | Tokens |
260
271
  |---|---|---|
261
272
  | **Claude Code** | `~/.claude/projects/**/*.jsonl` | exact (in/out/cache read+write, 5m/1h tiers) |
262
273
  | **Claude Desktop** (agent mode) | `Claude/local-agent-mode-sessions/**` under App Support / `%APPDATA%` / `~/.config` | exact |
263
- | **Codex** | `~/.codex/sessions/**`, `~/.codex/archived_sessions/**` | exact (in/cached/out/reasoning); subagents are identified and labelled |
274
+ | **Codex** | `~/.codex/sessions/**`, `~/.codex/archived_sessions/**` (plain `*.jsonl` and the zstd-compressed `*.jsonl.zst` Codex swaps in for idle threads) | exact (in/cached/out/reasoning); subagents are identified and labelled. Compressed rollouts are read with Python 3.14+ or the `zstd` command; without either they are counted as unread (never dropped) and the sidebar says how many |
264
275
  | **GitHub Copilot** | VS Code-family `chatSessions/*.{json,jsonl}`; SDK/CLI `~/.copilot/session-state/*/events.jsonl`, enriched from VS Code `agentSessionData/*/session.db` | recorded request/turn tokens where available; SDK shutdown totals where safely dated. SDK gaps show a warning tooltip and unavailable/partial usage; older non-SDK chats retain text estimates. Premium multipliers are separate from estimated dollars. |
265
- | **Cursor** (native AI) | `Cursor/User/globalStorage/state.vscdb` under App Support / `%APPDATA%` / `~/.config` | partial — model, mode, timestamps, tool calls and AI-line stats are exact; tokens are on only ~2% of messages |
276
+ | **Cursor** (native AI) | `Cursor/User/globalStorage/state.vscdb` under App Support / `%APPDATA%` / `~/.config` | recorded, partial or unavailable per session/model: explicit message input/output tokens, models, tools and AI-line stats where the local records expose them |
277
+ | **Google Antigravity** | `~/.gemini/antigravity/conversations/*.db`, `~/.gemini/antigravity-ide/conversations/*.db`, `~/.gemini/antigravity-cli/conversations/*.db` | recorded SQLite usage with per-field availability; standalone legacy `.pb` files are unsupported |
266
278
  | **OpenCode** | `~/.local/share/opencode/opencode.db`, `%LOCALAPPDATA%\opencode\opencode.db`, `~/.opencode/opencode.db` (or `$OPENCODE_DATA_DIR`) | V1/V2 SQLite; exact (in/out/reasoning/cache), prompts and tools; cost is read from OpenCode's own per-message value |
267
279
  | **Hermes Agent** | `~/.hermes/state.db` (or `$HERMES_HOME`, `%LOCALAPPDATA%\hermes`) | exact (in/out/cache/reasoning, per model) |
268
280
  | **OpenClaw** | `~/.openclaw/agents/<agent>/agent/openclaw-agent.sqlite` (or `$OPENCLAW_STATE_DIR`; also the older `~/.clawdbot`, `~/.moltbot`) and the older per-session `sessions/*.jsonl` | exact (in/out/cache read/cache write/reasoning, per response); its own logged cost is used only for a model with no verified price. Large events are stored zstd-compressed: read with the `zstd` command or Python 3.14+ |
269
281
 
270
282
  A tool you don't use simply contributes nothing. **Attribution is by tool, not by model** —
271
- a Claude or GPT model used *inside* Copilot/Cursor/OpenCode/Hermes/OpenClaw counts under that tool, and the
283
+ a Claude, Gemini, or GPT model used *inside* Copilot/Cursor/Antigravity/OpenCode/Hermes/OpenClaw counts under that tool, and the
272
284
  Models table lists each `model × tool` row separately.
273
285
 
286
+ Antigravity's supported SQLite schema, duplicate-row handling, recorded checkpoint detail,
287
+ and format limits are documented in [Google Antigravity support](docs/antigravity.md).
288
+
289
+ Cursor's local conversation metadata is documented in [Cursor support](docs/cursor.md),
290
+ including its model/token coverage states, workspace associations, subagents, and limits.
291
+
274
292
  Copilot's newer SDK-based agent sessions use a different store from older Copilot Chat.
275
293
  AgentTelemetry joins their event history to VS Code's saved per-turn usage using native
276
294
  session and event IDs. Custom endpoint models, including Cloudflare GLM 5.3, still count
@@ -350,26 +368,22 @@ anything is saved. Close the session in its original tool before confirming, and
350
368
  that tool if needed. Token, cost, prompt, tool-call and compaction records stay intact.
351
369
  Previous title metadata is backed up privately in
352
370
  `AgentTelemetryNative/session-title-backups/`, separately from the usage ledger.
353
- This supports local Claude Code transcripts, Codex through its installed CLI’s
371
+ This supports local Claude Code transcripts, Codex through its
354
372
  [official name API](https://learn.chatgpt.com/docs/app-server), and OpenCode’s SQLite
355
- session stores. Other formats, remote sessions and deleted logs cannot be edited.
356
- Recognized local Claude subagent transcripts instead offer **Name in AgentTelemetry**.
357
- This saves a private display name on this device without editing Claude's transcript,
358
- native subagent name, or parent session. The preview states this scope explicitly.
373
+ session stores. Codex's program is found wherever its apps install it (the ChatGPT app,
374
+ the Codex editor extension, the Codex desktop app on Windows, or a Codex CLI), with no
375
+ need for it on your PATH. Remote sessions and deleted logs cannot be renamed.
376
+ Recognized local Claude subagent transcripts, and sessions from tools whose own title
377
+ can't be edited safely (Copilot, Cursor, Claude Desktop, Antigravity, Hermes, OpenClaw),
378
+ instead offer **Name in AgentTelemetry**. This saves a private display name on this
379
+ device without editing the tool's files, Claude's transcript, native subagent name, or
380
+ parent session. The preview states this scope explicitly.
359
381
  These names live in `AgentTelemetryNative/session-display-names.json`, outside the
360
382
  usage ledger, summaries, and device sharing. Enter the source title again to remove
361
383
  a display-name override. See [subagent name behavior](docs/subagent-sessions.md).
362
384
  Tool/provider icons are bundled locally, including the OpenAI mark for Codex; no remote
363
385
  logo requests occur. Their sources and licenses are in `static/tool-icons/README.md`.
364
386
 
365
- **Optimize** — suggestions derived from your own logs, ranked by what they'd save: sessions
366
- re-reading a very large context, thinking share, tool-heavy sessions that never delegated,
367
- cache written but never read, a costly model doing light work, what each **Skill** costs,
368
- edits that needed a retry, oversized **CLAUDE.md / AGENTS.md**, sessions that open heavier
369
- than your leanest ones, wasted file reads, installed skills and agents you never use, and
370
- MCP servers you never call, barely use, or load everywhere but use in one project. Nothing is shown unless
371
- your data supports it, and because the estimates overlap they are never summed.
372
-
373
387
  **Storage** — see below.
374
388
 
375
389
  **Keyboard** — `1`/`7`/`3`/`9`/`a` ranges, `m` month-to-date, `,` / `.` previous / next
@@ -451,26 +465,32 @@ dollars**, so cost is always derived. Rates live in `parser.py → PRICING` as
451
465
  `(input, output, cache_write_5m, cache_write_1h, cache_read)` per 1M tokens; edit freely
452
466
  (recomputed on each request, no re-parse needed).
453
467
 
454
- - **Anthropic** rates are current list prices (Opus 5.5 $4/$20, Opus 5 & 4.x $5/$25, Sonnet 5
455
- & 5.5 $2/$10, Sonnet 4.x $3/$15, Haiku 4.5 $1/$5; cache write 1.25×/2× input for 5-min/1-hour, cache
456
- read 0.1× — 0.05× on Opus 5.5). **OpenAI** GPT-5.4/5.5/5.6/6 are verified from OpenAI docs;
468
+ - **Anthropic** rates are current list prices (Fable & Mythos 5.2 $8/$40, Fable & Mythos 5/5.1
469
+ $10/$50, Opus 5.5 $4/$20, Opus 5 & 4.x $5/$25, Sonnet 5 & 5.5 $2/$10, Sonnet 4.x $3/$15, Haiku
470
+ 4.5 $1/$5; cache write 1.25×/2× input for 5-min/1-hour, cache read 0.1× — 0.05× on Opus 5.5 and
471
+ Sonnet 5.5, 0.025× on Fable & Mythos 5.1/5.2). **OpenAI** GPT-5.4/5.5/5.6/6 are verified from OpenAI docs;
457
472
  older/other models are estimates.
458
473
  - **Haiku 5.5** uses [Anthropic's published rates](https://platform.claude.com/docs/en/about-claude/pricing):
459
474
  $0.10/$0.50 per million input/output tokens up to 100K prompt tokens, $0.50/$2.50
460
475
  above 100K. The threshold includes cached input and applies to each request.
461
476
  Available Claude logs backfill this pricing detail on a normal restart; token and
462
477
  message counts stay unchanged. Older archives/peers and other tools without that
463
- detail use the short-prompt rate. Optimize model substitutions conservatively use
464
- the higher tier when the target request size is unknown.
478
+ detail use the short-prompt rate.
465
479
  - **Price changes are date-aware.** When a vendor cuts a price (OpenAI's GPT-5.6 cuts of
466
- 2026-07-30 and 2026-08-21), usage from before the change keeps the rate it had then —
480
+ 2026-07-30 and 2026-08-21, Anthropic's Sonnet 5.5 cache-read cut of 2026-10-07), usage
481
+ from before the change keeps the rate it had then —
467
482
  see `parser.py → PRICE_HISTORY`.
468
483
  - **These are API-equivalent values.** If you're on a subscription (Claude Max/Pro, Codex,
469
484
  Copilot), you don't pay per token — the $ is "what this would cost at API rates."
470
- - **Cursor** rarely logs token counts, and **older Copilot chats** have none, so their tokens
471
- (and thus $) are rough. Current Copilot builds log real per-request tokens, which are used.
472
- Copilot's honest metric is **request count** and its **premium-request** total (both shown);
473
- Cursor's is **messages, tool calls and AI lines kept** (also shown).
485
+ - **Cursor** exposes explicit input/output token receipts for some messages; missing and
486
+ placeholder values are unavailable, and usage coverage can be partial. Cache and reasoning
487
+ values remain unavailable unless recorded. Overview shows observed Cursor prompts, replies,
488
+ and tool calls separately when they have no token/cost coverage. It does not estimate tokens
489
+ from text or context meters, infer subscription charges, or count metadata as tokens. The
490
+ **Exact tokens only** filter omits Cursor because local token coverage is incomplete. See
491
+ [Cursor support](docs/cursor.md). **Older Copilot chats** may have no token data; current
492
+ Copilot builds log real per-request tokens. Copilot's honest metric is **request count** and
493
+ its **premium-request** total (both shown); Cursor also exposes **AI lines kept**.
474
494
  - **Billing details that change the price are applied**: prompt-cache writes at their own
475
495
  rate (Claude and GPT-5.6/GPT-6), Claude fast mode, US-only inference (1.1x) and web
476
496
  searches ($10/1K). A forked or subagent Codex thread's replay of its parent is skipped,
@@ -480,12 +500,15 @@ dollars**, so cost is always derived. Rates live in `parser.py → PRICING` as
480
500
  when it runs through supported tools, at the Standard rate for prompts up to 200K
481
501
  tokens. Live, TTS, image and embedding models are not priced, and nor are the higher Pro rate
482
502
  for longer prompts or audio input. The Gemini CLI itself writes no token counts to read.
483
- - **Gemini 4 Argon** is recognized across the supported tools and uses Google's
484
- [announced introductory rates](https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-4-argon/):
485
- $2 input, $10 output and $0.10 cached input per 1M tokens. Access is still limited to
486
- trusted testers, and Google has not listed a public API model ID. These are API-equivalent
487
- estimates for Argon usage found in logs. The later $4/$20 rate has no effective date yet
488
- and is not applied ahead of time; cache storage charges are not modeled.
503
+ - **Gemini 4 Argon and Gemini 4 Carbon** (`gemini-4-argon`, `gemini-4-carbon`) are recognized
504
+ across the supported tools and use Google's [published rates](https://aistudio.google.com/docs/pricing):
505
+ $2 input, $10 output and $0.10 cached input per 1M tokens through November 30, 2026. Google
506
+ doubles them to $4, $20 and $0.20 on December 1, 2026. The higher rate is not applied ahead
507
+ of time: it goes in once it takes effect, and earlier usage keeps the rate it had then.
508
+ Cache storage charges are not modeled.
509
+ - **Gemini 4 Hydrogen** (`gemini-4-hydrogen`) uses Google's paid rate: $1.50 input, $7.50 output
510
+ and $0.075 cached input per 1M tokens. Its free tier can't be told apart in logs, so usage
511
+ is shown at the paid rate.
489
512
 
490
513
  ## Note on log retention
491
514
 
@@ -515,7 +538,7 @@ and extend this from that file).
515
538
 
516
539
  ## Files
517
540
 
518
- `dashboard.py` (server + cache + cost + `/api/storage`) · `parser.py` (log parsers + pricing) ·
541
+ `dashboard.py` (server + cache + cost + `/api/storage`) · `parser.py` (AgentTelemetry Pulsar: log parsers + pricing) ·
519
542
  `index.html` (shell) · `static/app.css` · `static/core.js` · `static/charts.js` ·
520
543
  `static/views.js` · `chart.umd.min.js` (vendored Chart.js) · `AGENTS.md` · `run.sh`.
521
544
 
@@ -547,8 +570,8 @@ What sharing sends: session titles (often the start of a prompt), project and br
547
570
  log file paths, models, token counts, costs and times. Full prompts, replies and file
548
571
  contents are never sent. Sharing opens one read-only port (7879) that answers only to the
549
572
  pairing code. The dashboard itself stays on `127.0.0.1`. The connection is **not
550
- encrypted**, so share only on a network you trust. The setup checks on the Optimize tab
551
- (instruction files, installed skills, MCP servers) and the Storage tab still describe only
573
+ encrypted**, so share only on a network you trust. The Storage tab and setup inventories
574
+ (instruction files, installed skills, MCP servers) still describe only
552
575
  the computer you're looking at. `.peers.json` and `.peers/` are gitignored.
553
576
 
554
577
  **If it can't connect**, the error says which of these it is: