agenttelemetry-app 2.0.0__tar.gz → 2.1.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 (67) hide show
  1. agenttelemetry_app-2.1.0/MANIFEST.in +70 -0
  2. {agenttelemetry_app-2.0.0/agenttelemetry_app.egg-info → agenttelemetry_app-2.1.0}/PKG-INFO +126 -20
  3. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/README.md +125 -19
  4. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/__init__.py +1 -1
  5. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/accounts.py +1 -1
  6. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0/agenttelemetry_app.egg-info}/PKG-INFO +126 -20
  7. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/agenttelemetry_app.egg-info/SOURCES.txt +43 -0
  8. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/cli.py +2 -4
  9. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/dashboard.py +883 -70
  10. agenttelemetry_app-2.1.0/diagnostics.py +186 -0
  11. agenttelemetry_app-2.1.0/docs/mcp.md +83 -0
  12. agenttelemetry_app-2.1.0/docs/native-activity.md +68 -0
  13. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/docs/python-package.md +20 -9
  14. agenttelemetry_app-2.1.0/docs/release-notes.md +33 -0
  15. agenttelemetry_app-2.1.0/editor_snapshot.py +385 -0
  16. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/index.html +58 -3
  17. agenttelemetry_app-2.1.0/ledger_backups.py +365 -0
  18. agenttelemetry_app-2.1.0/local_servers.py +1045 -0
  19. agenttelemetry_app-2.1.0/local_servers_windows.py +378 -0
  20. agenttelemetry_app-2.1.0/mcp_access.py +338 -0
  21. agenttelemetry_app-2.1.0/mcp_backend.py +549 -0
  22. agenttelemetry_app-2.1.0/mcp_protocol.py +97 -0
  23. agenttelemetry_app-2.1.0/mcp_server.py +678 -0
  24. agenttelemetry_app-2.1.0/mcp_tools.py +234 -0
  25. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/native.py +123 -0
  26. agenttelemetry_app-2.1.0/native_activity.py +296 -0
  27. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/parser.py +352 -33
  28. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/pyproject.toml +25 -8
  29. agenttelemetry_app-2.1.0/release_notes.py +727 -0
  30. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/session_names.py +171 -6
  31. agenttelemetry_app-2.1.0/session_timeline.py +577 -0
  32. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/setup.py +15 -0
  33. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/app.css +210 -1
  34. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/core.js +88 -2
  35. agenttelemetry_app-2.1.0/static/insights.js +115 -0
  36. agenttelemetry_app-2.1.0/static/maintenance.js +175 -0
  37. agenttelemetry_app-2.1.0/static/mcp.js +281 -0
  38. agenttelemetry_app-2.1.0/static/release-notes.js +354 -0
  39. agenttelemetry_app-2.1.0/static/timeline.js +133 -0
  40. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/views.js +625 -74
  41. agenttelemetry_app-2.1.0/telemetry_insights.py +1754 -0
  42. agenttelemetry_app-2.1.0/telemetry_query.py +1359 -0
  43. agenttelemetry_app-2.0.0/MANIFEST.in +0 -28
  44. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/LICENSE +0 -0
  45. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/__main__.py +0 -0
  46. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/agenttelemetry_app.egg-info/dependency_links.txt +0 -0
  47. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/agenttelemetry_app.egg-info/entry_points.txt +0 -0
  48. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/agenttelemetry_app.egg-info/top_level.txt +0 -0
  49. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/chart.umd.min.js +0 -0
  50. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/manifest.json +0 -0
  51. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/setup.cfg +0 -0
  52. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/apple-touch-icon.png +0 -0
  53. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/charts.js +0 -0
  54. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/icon-192.png +0 -0
  55. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/icon-512.png +0 -0
  56. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/LICENSE.hermes.txt +0 -0
  57. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/LICENSE.openclaw.txt +0 -0
  58. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/LICENSE.simple-icons.txt +0 -0
  59. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/README.md +0 -0
  60. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/claude.svg +0 -0
  61. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/copilot.svg +0 -0
  62. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/cursor.svg +0 -0
  63. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/hermes.svg +0 -0
  64. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/openai.svg +0 -0
  65. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/openclaw.svg +0 -0
  66. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/static/tool-icons/opencode.svg +0 -0
  67. {agenttelemetry_app-2.0.0 → agenttelemetry_app-2.1.0}/sw.js +0 -0
@@ -0,0 +1,70 @@
1
+ include pyproject.toml
2
+ include setup.py
3
+ include README.md
4
+ include LICENSE
5
+ include __init__.py
6
+ include __main__.py
7
+ include cli.py
8
+ include dashboard.py
9
+ include editor_snapshot.py
10
+ include ledger_backups.py
11
+ include diagnostics.py
12
+ include session_timeline.py
13
+ include native_activity.py
14
+ include local_servers.py
15
+ include local_servers_windows.py
16
+ include parser.py
17
+ include release_notes.py
18
+ include native.py
19
+ include accounts.py
20
+ 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
+ include index.html
29
+ include chart.umd.min.js
30
+ include manifest.json
31
+ include sw.js
32
+ include docs/python-package.md
33
+ include docs/mcp.md
34
+ include docs/release-notes.md
35
+ include docs/native-activity.md
36
+ include static/app.css
37
+ include static/apple-touch-icon.png
38
+ include static/charts.js
39
+ include static/core.js
40
+ include static/icon-192.png
41
+ include static/icon-512.png
42
+ include static/insights.js
43
+ include static/maintenance.js
44
+ include static/release-notes.js
45
+ include static/mcp.js
46
+ include static/timeline.js
47
+ include static/tool-icons/LICENSE.hermes.txt
48
+ include static/tool-icons/LICENSE.openclaw.txt
49
+ include static/tool-icons/LICENSE.simple-icons.txt
50
+ include static/tool-icons/README.md
51
+ include static/tool-icons/claude.svg
52
+ include static/tool-icons/copilot.svg
53
+ include static/tool-icons/cursor.svg
54
+ include static/tool-icons/hermes.svg
55
+ include static/tool-icons/openai.svg
56
+ include static/tool-icons/openclaw.svg
57
+ include static/tool-icons/opencode.svg
58
+ include static/views.js
59
+ prune tests
60
+ prune website
61
+ prune macos
62
+ prune windows
63
+ prune vscode
64
+ prune .github
65
+ prune build
66
+ prune dist
67
+ prune .usage_cache.json
68
+ prune .usage-backups
69
+ prune .peers
70
+ global-exclude .usage_cache.json .usage_cache.json.tmp .peers.json server.log project-names.json release-notes.json release-notes.lock .release-notes-*.tmp *.py[cod]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agenttelemetry-app
3
- Version: 2.0.0
3
+ Version: 2.1.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
@@ -31,11 +31,14 @@ vs Google** provider comparison, an activity calendar, and breakdowns by **model
31
31
  day, hour, weekday, tool, IDE, project and session** — plus how much **disk** all these logs
32
32
  eat, and suggestions for spending less, drawn from your own numbers.
33
33
 
34
- **Your data stays on your machine** — unless you turn on [Your devices](#your-devices-optional)
35
- to combine two of your own computers over your local network. Optional account lookups
36
- contact the provider only after you choose **Read once**; account metadata is never shared
37
- with paired devices. No account, no API key, no
38
- telemetry, no dependencies — just Python's standard library and a vendored copy of Chart.js.
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
38
+ fetch GitHub update and release-note metadata after you click **Check for updates** or
39
+ **Load notes**. Cached release notes can be shown offline after an upgrade. No account or API key is needed
40
+ for the dashboard; it has no runtime dependencies beyond Python's standard library and a
41
+ vendored copy of Chart.js.
39
42
 
40
43
  Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · OpenCode · Hermes Agent · OpenClaw**.
41
44
 
@@ -43,9 +46,9 @@ Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · O
43
46
 
44
47
  | Platform | Download |
45
48
  | --- | --- |
46
- | macOS 13+ · Apple Silicon | **[Download DMG](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.0.0/AgentTelemetry-2.0.0-macos-arm64.dmg)** |
47
- | macOS 13+ · Intel | **[Download DMG](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.0.0/AgentTelemetry-2.0.0-macos-x86_64.dmg)** |
48
- | Windows 10/11 · x64 | **[Download EXE installer](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.0.0/AgentTelemetry-2.0.0-windows-x64-setup.exe)** |
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)** |
49
52
 
50
53
  **Python is bundled — no terminal setup needed.** macOS: open the DMG, drag the app to
51
54
  Applications and open it. Windows: run the installer and open AgentTelemetry from Start.
@@ -59,7 +62,9 @@ starting monitoring. On macOS, opening the app manually also lets you import fir
59
62
  These builds are unsigned/unnotarized. macOS may require **System Settings → Privacy &
60
63
  Security → Open Anyway**; Windows SmartScreen may require **More info → Run anyway**.
61
64
  [All releases](https://github.com/uttamdeb/agent-telemetry/releases) ·
62
- [SHA-256 checksums](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.0.0/SHA256SUMS.txt)
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/)
63
68
 
64
69
  ---
65
70
 
@@ -78,17 +83,17 @@ Security → Open Anyway**; Windows SmartScreen may require **More info → Run
78
83
 
79
84
  ## Quick start
80
85
 
81
- With [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
86
+ Install with Python 3.9+:
82
87
 
83
88
  ```bash
84
- uvx agenttelemetry-app
89
+ python -m pip install agenttelemetry-app
90
+ agenttelemetry
85
91
  ```
86
92
 
87
- Or install with Python 3.9+:
93
+ Or, with [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
88
94
 
89
95
  ```bash
90
- python -m pip install agenttelemetry-app
91
- agenttelemetry
96
+ uvx agenttelemetry-app
92
97
  ```
93
98
 
94
99
  Then open **http://127.0.0.1:7878**. The Python package starts the local browser dashboard;
@@ -114,6 +119,39 @@ Options: `python3 dashboard.py --port 9000` · `--rebuild` (ignore cache, full r
114
119
  cache and optional device-sharing files outside the checkout). Without `--data-dir`, current
115
120
  checkout behavior is unchanged. Or `./run.sh [flags]`.
116
121
 
122
+ ## Editor extension
123
+
124
+ The [AgentTelemetry editor extension](vscode/README.md) brings local usage into
125
+ VS Code compatible desktop editors, including Cursor and Antigravity IDE. Its
126
+ Agent desk uses the app's icon and light/dark theme, with workspace totals,
127
+ recorded main-agent/subagent relationships, and an in-memory usage baseline.
128
+ Install from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=agenttelemetry-team.agenttelemetry)
129
+ in VS Code, from [Open VSX](https://open-vsx.org/extension/agenttelemetry-team/agenttelemetry)
130
+ in Cursor and compatible editors, or use the universal VSIX following the
131
+ [extension guide](vscode/README.md#install-a-vsix).
132
+
133
+ ## Recognizing subagent sessions
134
+
135
+ Sessions shows a full **Subagent** label, a branching icon, and a searchable session
136
+ identifier for transcripts that the source identifies as delegated work. Use
137
+ **All sessions / Main agents / Subagents** to focus the list; the choice survives
138
+ reloads and shared links without changing the other dashboard totals. Session titles
139
+ also open details from the keyboard.
140
+
141
+ Recorded delegation counts and Claude sidechain usage are explained in the drawer.
142
+ Main agents shows sessions not marked as subagents; some tools and older logs
143
+ do not record this marker. Parent links are not inferred. See
144
+ [behavior and limitations](docs/subagent-sessions.md).
145
+
146
+ ## Recorded reasoning effort
147
+
148
+ Sessions shows **Recorded effort** below the model for Claude and Codex. Open a
149
+ session for the recorded levels and their date/model scope. Changing the date,
150
+ model or provider filter changes this label alongside the session figures.
151
+ Missing metadata says **Not recorded**; mixed settings and partial coverage are
152
+ explicit. These are recorded controls, not a measurement of reasoning quality or
153
+ thinking tokens. See [sources and limitations](docs/recorded-effort.md).
154
+
117
155
  ## Subscription limits and account details
118
156
 
119
157
  The bottom of Cost shows subscription limits for Codex and Claude Code when they
@@ -128,6 +166,15 @@ estimated from tokens or combined across devices. Session details show recorded
128
166
  creator/account IDs with their attribution limits. Account metadata is private to the
129
167
  source device. See [setup, research and limitations](docs/account-limits.md).
130
168
 
169
+ ## Local servers (macOS)
170
+
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.
175
+ Running a saved command gives it your account's file and network access.
176
+ See [behavior, privacy and limitations](docs/local-servers.md).
177
+
131
178
  ## Install the menu bar / system tray app
132
179
 
133
180
  Use the [app downloads](#download-the-app) above for a ready-to-run installation.
@@ -178,8 +225,8 @@ the sync API retain independent polling until upgraded and restarted.
178
225
  Read the [macOS guide](macos/AgentTelemetryMac/README.md) and
179
226
  [Windows guide](windows/README.md) for paths, controls and development checks. macOS
180
227
  downloads and source builds are ad-hoc signed; a Developer ID signed/notarized installer
181
- is not supplied. The backend remains stdlib-only and no runtime update checks
182
- are added. The macOS packaging step downloads a hash-pinned Python runtime explicitly.
228
+ is not supplied. The backend remains stdlib-only and does not check for updates
229
+ automatically. The macOS packaging step downloads a hash-pinned Python runtime explicitly.
183
230
 
184
231
  Local app integrations can use `GET /api/health` for a small readiness response that contains
185
232
  no usage data, and `GET /api/summary` for today's token total and API-equivalent estimated
@@ -191,6 +238,21 @@ retain one serialized snapshot per display tick, in memory only; the ledger is u
191
238
  as all writes. `POST /api/shutdown` additionally requires the owning Windows client's
192
239
  per-process control token; a normal standalone dashboard cannot be stopped by that route.
193
240
 
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
+
194
256
  > `--rebuild` deletes the cache, and with it every session whose log has since been deleted
195
257
  > from disk (see [Storage](#storage--what-these-logs-cost-you-in-disk)). Copy
196
258
  > `.usage_cache.json` somewhere safe first if you've cleaned up old logs.
@@ -315,6 +377,12 @@ Previous title metadata is backed up privately in
315
377
  This supports local Claude Code transcripts, Codex through its installed CLI’s
316
378
  [official name API](https://learn.chatgpt.com/docs/app-server), and OpenCode’s SQLite
317
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.
383
+ These names live in `AgentTelemetryNative/session-display-names.json`, outside the
384
+ usage ledger, summaries, and device sharing. Enter the source title again to remove
385
+ a display-name override. See [subagent name behavior](docs/subagent-sessions.md).
318
386
  Tool/provider icons are bundled locally, including the OpenAI mark for Codex; no remote
319
387
  logo requests occur. Their sources and licenses are in `static/tool-icons/README.md`.
320
388
 
@@ -340,10 +408,48 @@ search box, and `#cost`, `#sessions`… for the tab. For example
340
408
  `/?range=7d&metric=cost&tools=claude&projects=sims#cost`. Only what differs from the default
341
409
  is written, and changing a filter never adds a browser-history entry.
342
410
 
411
+ **What changed?** — Overview and Cost compare the selected range with the preceding
412
+ equal-length range. Switch between projects, models, tools and (for tokens/cost)
413
+ token types to see signed contributions, including decreases and categories that
414
+ disappeared. Each breakdown reconciles independently to the total change. Click a
415
+ category for current-period sessions or its previous value for earlier sessions.
416
+ All usage filters apply; All time has no comparison. Missing prior observations and
417
+ an unfinished current period are labeled. Contributions identify where usage changed,
418
+ not a causal explanation. Cost remains an API-equivalent estimate.
419
+
420
+ **Session timeline** — the session drawer combines daily retained usage with recorded
421
+ compaction markers and local Claude/Codex source events: model requests, tool calls,
422
+ user turns and recorded subagent starts. No prompts or tool arguments are returned.
423
+ The read is bounded to the first 64 MiB and 400 events in the selected date range;
424
+ truncation is explicit. Date filters use local dates; model filters apply to events
425
+ with model attribution. Archived/remote sessions and unsupported formats retain
426
+ daily detail where available; missing timestamps or history are not reconstructed.
427
+
428
+ **Backups and troubleshooting** — Settings shows detected-source scan results,
429
+ actionable parsing errors, ledger failures and models missing prices. An inactive
430
+ tool is not reported as stale merely because it has no recent activity. Backups are
431
+ private copies of the ledger in `.usage-backups/` beside it (including with
432
+ `--data-dir`), excluded from device sharing and installation payloads. A saved-ledger
433
+ snapshot is kept on the first save each UTC day; updates and cache resets require a
434
+ safety copy first. Retention keeps 7 daily snapshots and up to 5 each of manual,
435
+ pre-restore and corrupt-file recovery copies. A failed daily backup does not stop
436
+ normal ledger saving and is reported in Settings.
437
+
438
+ Restore shows stored-session counts and requires a one-use, five-minute confirmation
439
+ ticket. Changed backups, disk contents or newly parsed usage invalidate the preview.
440
+ The current ledger is preserved before replacement, including unreadable bytes as
441
+ a non-restorable recovery copy. Backups cover aggregates, not original transcripts,
442
+ device pairing settings or native preferences; local backups do not protect against
443
+ loss of the drive. Use `python tests/preview_features.py --port 8896` for an isolated
444
+ preview with invented data.
445
+
343
446
  **Version and updates** — the sidebar footer shows the running version. *Check for updates*
344
- asks GitHub (the only time the dashboard goes online, and only when you click); *Update*
345
- fast-forwards your checkout and restarts the server. It refuses if you have local edits or
346
- commits that aren't on GitHub. A copy that isn't a git clone has no update button.
447
+ asks GitHub for the latest stable release and its tagged notes only when you click; notes
448
+ already cached on this machine can be shown offline. A first open records the current version
449
+ as the baseline. Later upgrades can show their notes once, after which the display is
450
+ acknowledged. *Update* fast-forwards a source checkout and restarts the server; it refuses
451
+ local edits and commits that aren't upstream. Packaged apps link to the official release for
452
+ manual installation. See [release notes behavior](docs/release-notes.md).
347
453
 
348
454
  ---
349
455
 
@@ -7,11 +7,14 @@ vs Google** provider comparison, an activity calendar, and breakdowns by **model
7
7
  day, hour, weekday, tool, IDE, project and session** — plus how much **disk** all these logs
8
8
  eat, and suggestions for spending less, drawn from your own numbers.
9
9
 
10
- **Your data stays on your machine** — unless you turn on [Your devices](#your-devices-optional)
11
- to combine two of your own computers over your local network. Optional account lookups
12
- contact the provider only after you choose **Read once**; account metadata is never shared
13
- with paired devices. No account, no API key, no
14
- telemetry, no dependencies — just Python's standard library and a vendored copy of Chart.js.
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
14
+ fetch GitHub update and release-note metadata after you click **Check for updates** or
15
+ **Load notes**. Cached release notes can be shown offline after an upgrade. No account or API key is needed
16
+ for the dashboard; it has no runtime dependencies beyond Python's standard library and a
17
+ vendored copy of Chart.js.
15
18
 
16
19
  Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · OpenCode · Hermes Agent · OpenClaw**.
17
20
 
@@ -19,9 +22,9 @@ Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · O
19
22
 
20
23
  | Platform | Download |
21
24
  | --- | --- |
22
- | macOS 13+ · Apple Silicon | **[Download DMG](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.0.0/AgentTelemetry-2.0.0-macos-arm64.dmg)** |
23
- | macOS 13+ · Intel | **[Download DMG](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.0.0/AgentTelemetry-2.0.0-macos-x86_64.dmg)** |
24
- | Windows 10/11 · x64 | **[Download EXE installer](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.0.0/AgentTelemetry-2.0.0-windows-x64-setup.exe)** |
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)** |
25
28
 
26
29
  **Python is bundled — no terminal setup needed.** macOS: open the DMG, drag the app to
27
30
  Applications and open it. Windows: run the installer and open AgentTelemetry from Start.
@@ -35,7 +38,9 @@ starting monitoring. On macOS, opening the app manually also lets you import fir
35
38
  These builds are unsigned/unnotarized. macOS may require **System Settings → Privacy &
36
39
  Security → Open Anyway**; Windows SmartScreen may require **More info → Run anyway**.
37
40
  [All releases](https://github.com/uttamdeb/agent-telemetry/releases) ·
38
- [SHA-256 checksums](https://github.com/uttamdeb/agent-telemetry/releases/download/v2.0.0/SHA256SUMS.txt)
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/)
39
44
 
40
45
  ---
41
46
 
@@ -54,17 +59,17 @@ Security → Open Anyway**; Windows SmartScreen may require **More info → Run
54
59
 
55
60
  ## Quick start
56
61
 
57
- With [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
62
+ Install with Python 3.9+:
58
63
 
59
64
  ```bash
60
- uvx agenttelemetry-app
65
+ python -m pip install agenttelemetry-app
66
+ agenttelemetry
61
67
  ```
62
68
 
63
- Or install with Python 3.9+:
69
+ Or, with [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
64
70
 
65
71
  ```bash
66
- python -m pip install agenttelemetry-app
67
- agenttelemetry
72
+ uvx agenttelemetry-app
68
73
  ```
69
74
 
70
75
  Then open **http://127.0.0.1:7878**. The Python package starts the local browser dashboard;
@@ -90,6 +95,39 @@ Options: `python3 dashboard.py --port 9000` · `--rebuild` (ignore cache, full r
90
95
  cache and optional device-sharing files outside the checkout). Without `--data-dir`, current
91
96
  checkout behavior is unchanged. Or `./run.sh [flags]`.
92
97
 
98
+ ## Editor extension
99
+
100
+ The [AgentTelemetry editor extension](vscode/README.md) brings local usage into
101
+ VS Code compatible desktop editors, including Cursor and Antigravity IDE. Its
102
+ Agent desk uses the app's icon and light/dark theme, with workspace totals,
103
+ recorded main-agent/subagent relationships, and an in-memory usage baseline.
104
+ Install from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=agenttelemetry-team.agenttelemetry)
105
+ in VS Code, from [Open VSX](https://open-vsx.org/extension/agenttelemetry-team/agenttelemetry)
106
+ in Cursor and compatible editors, or use the universal VSIX following the
107
+ [extension guide](vscode/README.md#install-a-vsix).
108
+
109
+ ## Recognizing subagent sessions
110
+
111
+ Sessions shows a full **Subagent** label, a branching icon, and a searchable session
112
+ identifier for transcripts that the source identifies as delegated work. Use
113
+ **All sessions / Main agents / Subagents** to focus the list; the choice survives
114
+ reloads and shared links without changing the other dashboard totals. Session titles
115
+ also open details from the keyboard.
116
+
117
+ Recorded delegation counts and Claude sidechain usage are explained in the drawer.
118
+ Main agents shows sessions not marked as subagents; some tools and older logs
119
+ do not record this marker. Parent links are not inferred. See
120
+ [behavior and limitations](docs/subagent-sessions.md).
121
+
122
+ ## Recorded reasoning effort
123
+
124
+ Sessions shows **Recorded effort** below the model for Claude and Codex. Open a
125
+ session for the recorded levels and their date/model scope. Changing the date,
126
+ model or provider filter changes this label alongside the session figures.
127
+ Missing metadata says **Not recorded**; mixed settings and partial coverage are
128
+ explicit. These are recorded controls, not a measurement of reasoning quality or
129
+ thinking tokens. See [sources and limitations](docs/recorded-effort.md).
130
+
93
131
  ## Subscription limits and account details
94
132
 
95
133
  The bottom of Cost shows subscription limits for Codex and Claude Code when they
@@ -104,6 +142,15 @@ estimated from tokens or combined across devices. Session details show recorded
104
142
  creator/account IDs with their attribution limits. Account metadata is private to the
105
143
  source device. See [setup, research and limitations](docs/account-limits.md).
106
144
 
145
+ ## Local servers (macOS)
146
+
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.
151
+ Running a saved command gives it your account's file and network access.
152
+ See [behavior, privacy and limitations](docs/local-servers.md).
153
+
107
154
  ## Install the menu bar / system tray app
108
155
 
109
156
  Use the [app downloads](#download-the-app) above for a ready-to-run installation.
@@ -154,8 +201,8 @@ the sync API retain independent polling until upgraded and restarted.
154
201
  Read the [macOS guide](macos/AgentTelemetryMac/README.md) and
155
202
  [Windows guide](windows/README.md) for paths, controls and development checks. macOS
156
203
  downloads and source builds are ad-hoc signed; a Developer ID signed/notarized installer
157
- is not supplied. The backend remains stdlib-only and no runtime update checks
158
- are added. The macOS packaging step downloads a hash-pinned Python runtime explicitly.
204
+ is not supplied. The backend remains stdlib-only and does not check for updates
205
+ automatically. The macOS packaging step downloads a hash-pinned Python runtime explicitly.
159
206
 
160
207
  Local app integrations can use `GET /api/health` for a small readiness response that contains
161
208
  no usage data, and `GET /api/summary` for today's token total and API-equivalent estimated
@@ -167,6 +214,21 @@ retain one serialized snapshot per display tick, in memory only; the ledger is u
167
214
  as all writes. `POST /api/shutdown` additionally requires the owning Windows client's
168
215
  per-process control token; a normal standalone dashboard cannot be stopped by that route.
169
216
 
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
+
170
232
  > `--rebuild` deletes the cache, and with it every session whose log has since been deleted
171
233
  > from disk (see [Storage](#storage--what-these-logs-cost-you-in-disk)). Copy
172
234
  > `.usage_cache.json` somewhere safe first if you've cleaned up old logs.
@@ -291,6 +353,12 @@ Previous title metadata is backed up privately in
291
353
  This supports local Claude Code transcripts, Codex through its installed CLI’s
292
354
  [official name API](https://learn.chatgpt.com/docs/app-server), and OpenCode’s SQLite
293
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.
359
+ These names live in `AgentTelemetryNative/session-display-names.json`, outside the
360
+ usage ledger, summaries, and device sharing. Enter the source title again to remove
361
+ a display-name override. See [subagent name behavior](docs/subagent-sessions.md).
294
362
  Tool/provider icons are bundled locally, including the OpenAI mark for Codex; no remote
295
363
  logo requests occur. Their sources and licenses are in `static/tool-icons/README.md`.
296
364
 
@@ -316,10 +384,48 @@ search box, and `#cost`, `#sessions`… for the tab. For example
316
384
  `/?range=7d&metric=cost&tools=claude&projects=sims#cost`. Only what differs from the default
317
385
  is written, and changing a filter never adds a browser-history entry.
318
386
 
387
+ **What changed?** — Overview and Cost compare the selected range with the preceding
388
+ equal-length range. Switch between projects, models, tools and (for tokens/cost)
389
+ token types to see signed contributions, including decreases and categories that
390
+ disappeared. Each breakdown reconciles independently to the total change. Click a
391
+ category for current-period sessions or its previous value for earlier sessions.
392
+ All usage filters apply; All time has no comparison. Missing prior observations and
393
+ an unfinished current period are labeled. Contributions identify where usage changed,
394
+ not a causal explanation. Cost remains an API-equivalent estimate.
395
+
396
+ **Session timeline** — the session drawer combines daily retained usage with recorded
397
+ compaction markers and local Claude/Codex source events: model requests, tool calls,
398
+ user turns and recorded subagent starts. No prompts or tool arguments are returned.
399
+ The read is bounded to the first 64 MiB and 400 events in the selected date range;
400
+ truncation is explicit. Date filters use local dates; model filters apply to events
401
+ with model attribution. Archived/remote sessions and unsupported formats retain
402
+ daily detail where available; missing timestamps or history are not reconstructed.
403
+
404
+ **Backups and troubleshooting** — Settings shows detected-source scan results,
405
+ actionable parsing errors, ledger failures and models missing prices. An inactive
406
+ tool is not reported as stale merely because it has no recent activity. Backups are
407
+ private copies of the ledger in `.usage-backups/` beside it (including with
408
+ `--data-dir`), excluded from device sharing and installation payloads. A saved-ledger
409
+ snapshot is kept on the first save each UTC day; updates and cache resets require a
410
+ safety copy first. Retention keeps 7 daily snapshots and up to 5 each of manual,
411
+ pre-restore and corrupt-file recovery copies. A failed daily backup does not stop
412
+ normal ledger saving and is reported in Settings.
413
+
414
+ Restore shows stored-session counts and requires a one-use, five-minute confirmation
415
+ ticket. Changed backups, disk contents or newly parsed usage invalidate the preview.
416
+ The current ledger is preserved before replacement, including unreadable bytes as
417
+ a non-restorable recovery copy. Backups cover aggregates, not original transcripts,
418
+ device pairing settings or native preferences; local backups do not protect against
419
+ loss of the drive. Use `python tests/preview_features.py --port 8896` for an isolated
420
+ preview with invented data.
421
+
319
422
  **Version and updates** — the sidebar footer shows the running version. *Check for updates*
320
- asks GitHub (the only time the dashboard goes online, and only when you click); *Update*
321
- fast-forwards your checkout and restarts the server. It refuses if you have local edits or
322
- commits that aren't on GitHub. A copy that isn't a git clone has no update button.
423
+ asks GitHub for the latest stable release and its tagged notes only when you click; notes
424
+ already cached on this machine can be shown offline. A first open records the current version
425
+ as the baseline. Later upgrades can show their notes once, after which the display is
426
+ acknowledged. *Update* fast-forwards a source checkout and restarts the server; it refuses
427
+ local edits and commits that aren't upstream. Packaged apps link to the official release for
428
+ manual installation. See [release notes behavior](docs/release-notes.md).
323
429
 
324
430
  ---
325
431
 
@@ -1,3 +1,3 @@
1
1
  """AgentTelemetry's local dashboard package."""
2
2
 
3
- __version__ = "2.0.0"
3
+ __version__ = "2.1.0"
@@ -183,7 +183,7 @@ def _codex_read():
183
183
  if not isinstance(result, dict): raise ValueError("Codex returned an unsupported account response.")
184
184
  return result
185
185
  try:
186
- request(1, "initialize", {"clientInfo": {"name": "agent_telemetry", "title": "AgentTelemetry", "version": "2.0.0"}})
186
+ request(1, "initialize", {"clientInfo": {"name": "agent_telemetry", "title": "AgentTelemetry", "version": "2.1.0"}})
187
187
  process.stdin.write('{"method":"initialized","params":{}}\n'); process.stdin.flush()
188
188
  before = request(2, "account/read", {"refreshToken": False}).get("account")
189
189
  limits = request(3, "account/rateLimits/read", {}) if isinstance(before, dict) and before.get("type") == "chatgpt" else {}