exe-watcher 0.2.54 → 0.2.67
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.
- package/LICENSE +2 -2
- package/README.md +171 -67
- package/THIRD_PARTY_NOTICES.md +37 -0
- package/dist/cli.js +2431 -801
- package/package.json +7 -4
package/LICENSE
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026 AgentSeal
|
|
4
|
-
Copyright (c) 2026 Exe AI
|
|
3
|
+
Copyright (c) 2026 AgentSeal
|
|
4
|
+
Copyright (c) 2026 Exe AI
|
|
5
5
|
|
|
6
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
7
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="assets/owl
|
|
2
|
+
<img src="assets/owls/readme-owl.gif" alt="Watcher owl glancing and blinking above the EXE wordmark" width="280" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
<p align="center"><strong>The owl watching your AI
|
|
5
|
+
<p align="center"><strong>The owl watching your AI team — spend, AI work time, and memory per employee, in your terminal and macOS menu bar.</strong></p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<a href="https://www.npmjs.com/package/exe-watcher"><img src="https://img.shields.io/npm/v/exe-watcher.svg" alt="npm version" /></a>
|
|
9
9
|
<a href="https://www.npmjs.com/package/exe-watcher"><img src="https://img.shields.io/npm/dt/exe-watcher.svg" alt="total downloads" /></a>
|
|
10
10
|
<a href="https://github.com/AskExe/exe-watcher/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/exe-watcher.svg" alt="license" /></a>
|
|
11
|
-
<a href="https://github.com/AskExe/exe-watcher"><img src="https://img.shields.io/badge/node-%3E%3D22.
|
|
11
|
+
<a href="https://github.com/AskExe/exe-watcher"><img src="https://img.shields.io/badge/node-%3E%3D22.13.0-brightgreen.svg" alt="node version" /></a>
|
|
12
12
|
<a href="https://discord.gg/pJ2DMWvtAx"><img src="https://img.shields.io/badge/discord-join-5865F2?logo=discord&logoColor=white" alt="Discord" /></a>
|
|
13
13
|
</p>
|
|
14
14
|
|
|
@@ -16,22 +16,72 @@
|
|
|
16
16
|
<img src="assets/exe-watcher-readme.png" alt="Exe Watcher macOS menu bar spend dashboard" width="401" />
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
|
-
Exe Watcher
|
|
19
|
+
Exe Watcher shows what your AI coding work costs, how long the agents run, and how each Exe OS employee's memory grows. Track nine coding clients, models, projects, tokens, and optimization findings from local usage files. Spend and time tracking need no API keys, account, proxy, or wrappers around your tools; employee memory and spend appear when Exe OS supplies its local agent stats.
|
|
20
|
+
|
|
21
|
+
**Forked from [CodeBurn by AgentSeal](https://github.com/getagentseal/codeburn) on April 24, 2026.** Since then, Exe AI has developed Watcher for AI employee teams and parallel agent workflows. [Development timeline and comparison](#development-since-the-codeburn-fork) · [Origin and MIT attribution](#origin--attribution)
|
|
22
|
+
|
|
23
|
+
**macOS app:** Download the universal DMG from [Releases](https://github.com/AskExe/exe-watcher/releases/latest), drag **Watcher by EXE** into **Applications**, and open it. macOS 14+ on Apple Silicon or Intel. From 0.2.55, Node and the CLI are included.
|
|
24
|
+
|
|
25
|
+
**Terminal CLI** (Node 22.13+):
|
|
26
|
+
|
|
27
|
+
Node 23.0–23.3 require an upgrade to 23.4 or newer; SQLite is unavailable by default on those older versions.
|
|
20
28
|
|
|
21
29
|
```bash
|
|
22
30
|
npm install -g exe-watcher
|
|
31
|
+
exe-watcher report
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Version 0.2.67 preserves recorded API-equivalent costs and keeps saved All totals available through refresh failures, restarts and day changes. AI time and the floating quota display are included. Terminal installs require Node 22.13 or newer; the Mac app includes its own compatible runtime. Download the matching app from [Releases](https://github.com/AskExe/exe-watcher/releases/latest) or [odd.community/watcher](https://odd.community/watcher). To run the current CLI from source:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git clone https://github.com/AskExe/exe-watcher.git
|
|
38
|
+
cd exe-watcher
|
|
39
|
+
npm ci
|
|
40
|
+
npm run build
|
|
41
|
+
node dist/cli.js report
|
|
23
42
|
```
|
|
24
43
|
|
|
25
44
|
---
|
|
26
45
|
|
|
27
|
-
##
|
|
46
|
+
## Built for AI employee teams
|
|
47
|
+
|
|
48
|
+
- **Floating display** — a compact on-screen quota display for Claude, Codex, Kimi, Cursor, GitHub Copilot and Gemini, with **You + AI ≈** (your estimated interaction time) and **AI Time** (work time added across all agents). Quota rings show **quota left**, default to **Weekly**, and have a **Weekly / 5h** toggle. Click either time button for its explanation. Time totals default to Today; switch to Week, Month or All Time. Enable it from the menu bar footer’s **Display settings → Floating quota display**. [Details](mac/README.md#floating-display).
|
|
49
|
+
- **AI running time** — adds recorded work across agents, so parallel work is counted as agent-hours.
|
|
50
|
+
- **Elapsed busy time** — merges overlapping runs to show how long at least one agent was working.
|
|
51
|
+
- **Your time ≈** — estimates interaction from short reply-to-next-prompt gaps, with known subagents excluded. It is not an attention or productivity measurement.
|
|
52
|
+
- **Memory per employee** — shows persistent memory counts and growth over 24 hours, 7 days, and 30 days from Exe OS. These are saved memories, not RAM usage.
|
|
53
|
+
- **Spend per employee** — puts model-aware 24-hour, 7-day, and 30-day cost beside the same Exe OS employee identities.
|
|
54
|
+
- **Bounded background work** — coalesces usage-file events, reuses cached periods, resumes historical recovery, and rests between scans.
|
|
55
|
+
- **Visible data limits** — distinguishes unknown timing, missing historical call counts, recovered usage, and models whose costs cannot be priced.
|
|
56
|
+
- **One local view** — Claude Code, Codex, Cursor, Cursor Agent, Copilot, OpenCode, Kimi Code, OMP, and Pi, with no usage-data upload service.
|
|
57
|
+
|
|
58
|
+
## Development since the CodeBurn fork
|
|
59
|
+
|
|
60
|
+
Watcher started as an import of CodeBurn 0.8.9 on **April 24, 2026**. By this review on **October 16, 2026**, it had **175 days of independent development—nearly six months**.
|
|
61
|
+
|
|
62
|
+
| Date (2026) | Watcher development milestone |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| April 24 | Imported the CodeBurn foundation and began the Exe rebrand as exe-fuelbar. |
|
|
65
|
+
| April 27–28 | Added Exe OS memory integration and the AI Employees section with per-agent memory growth and spend. |
|
|
66
|
+
| April 30 | Renamed the product to Watcher. |
|
|
67
|
+
| May–June | Improved accounting, period consistency, wake/recovery behavior, provider isolation, and model presentation. |
|
|
68
|
+
| October 3 | Added bounded event-driven usage refreshes, retained-history recovery, and pricing/accounting corrections. |
|
|
69
|
+
| October 14–15 | Added self-contained universal macOS packaging, the chosen owl artwork and animation, native Kimi usage, and clearer historical call coverage. |
|
|
70
|
+
| October 16 | Added the three AI time totals, provider coverage, a resumable timing index, automatic timing catch-up, and the floating quota/time display. |
|
|
71
|
+
|
|
72
|
+
### Where Watcher differs today
|
|
73
|
+
|
|
74
|
+
Comparison checked against [CodeBurn 0.9.27, revision 9a40cc6](https://github.com/getagentseal/codeburn/tree/9a40cc603fcd194caca9daa8c5134a61ea7e0e2b) on October 16, 2026.
|
|
28
75
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
76
|
+
| Capability | Watcher | CodeBurn at the reviewed revision |
|
|
77
|
+
| --- | --- | --- |
|
|
78
|
+
| Three separate time totals across supported clients | AI running, overlap-adjusted elapsed busy, and estimated interaction time, filtered by period/provider/project | Session-duration and Codex generation-timing metrics exist; no equivalent three-total report was found. |
|
|
79
|
+
| Persistent memory per AI employee | Exe OS memory count plus 24h / 7d / 30d growth | No equivalent employee-memory ledger was found. |
|
|
80
|
+
| Exe OS employee integration | Memory and spend use Exe OS employee IDs and local daemon stats; includes agent-pipeline diagnostics | Agent/subagent spend views exist; no Exe OS employee/stats integration was found. |
|
|
81
|
+
|
|
82
|
+
Our subsequent work also includes accounting fixes, bounded history recovery, event-driven native refreshes, current API pricing, Kimi support, self-contained packaging, and Watcher's visual identity. These are documented improvements to our imported baseline; some capabilities also exist in today's CodeBurn. [Detailed evidence and adoption backlog](docs/codeburn-upstream-review.md) · [Changelog](CHANGELOG.md)
|
|
83
|
+
|
|
84
|
+
Watcher’s floating display takes inspiration from CodeBurn’s **Capacity Dock** and adds our two time totals. It supports six quota providers, including Claude and Codex, with Weekly as their default and a 5-hour toggle. OS threshold notifications and additional adapters remain in the [adoption backlog](docs/codeburn-upstream-review.md).
|
|
35
85
|
|
|
36
86
|
---
|
|
37
87
|
|
|
@@ -42,7 +92,7 @@ npm install -g exe-watcher
|
|
|
42
92
|
```bash
|
|
43
93
|
exe-watcher menubar # install + launch
|
|
44
94
|
exe-watcher menubar --force # reinstall latest
|
|
45
|
-
exe-watcher menubar --version v0.2.
|
|
95
|
+
exe-watcher menubar --version v0.2.60 # install a specific version
|
|
46
96
|
exe-watcher # on macOS: prompts to install menubar app
|
|
47
97
|
```
|
|
48
98
|
|
|
@@ -56,34 +106,93 @@ A Swift/SwiftUI popover that lives in your menu bar. Today's spend is always vis
|
|
|
56
106
|
- **Activity breakdown** — Research, Building, Debugging, DevOps, Testing, and Planning with cost, turns, and one-shot rate.
|
|
57
107
|
- **Model breakdown** — See which models are driving spend and call volume.
|
|
58
108
|
- **Project spend** — Per-project cost across today / 7d / 30d.
|
|
109
|
+
- **AI time** — AI running, elapsed busy, and estimated interaction time for the selected period, with timing coverage details.
|
|
110
|
+
- **AI Employees** — Exe OS memory growth and employee spend, when local daemon data is available.
|
|
59
111
|
- **Optimization findings** — Menubar links open the full optimizer or report directly in Terminal.
|
|
60
|
-
- **
|
|
112
|
+
- **Plan budgets** — Compare API-equivalent spend with built-in monthly budget presets or a custom budget.
|
|
113
|
+
- **Live Claude capacity** — Five-hour and weekly utilization, reset times, and projections from the signed-in Claude account. This optional view uses provider credentials and may request macOS Keychain access.
|
|
61
114
|
- **Capacity estimation** — Derives likely token limits from usage patterns when hard caps aren't published.
|
|
62
115
|
- **Multi-currency** — USD, GBP, EUR, JPY, AUD, CAD, CHF, CNY, SEK, NOK, DKK, NZD, SGD, HKD, KRW, INR, BRL.
|
|
116
|
+
- **Animated owl** — Glances and blinks while the popover is visible, with Reduce Motion support.
|
|
63
117
|
|
|
64
118
|
macOS pushes usage-log change notifications to Watcher; there is no repeating background usage scan. Rapid writes are combined, with at least two minutes of rest after a scan and longer after slow scans (nine times the scan duration). A failed notification gets at most two spaced retries before waiting for new data or a user action. Watcher also catches up on launch/wake and explicit user actions. Only one CLI child runs at a time, at low scheduling priority, with a 256 MiB V8 heap limit and a 60-second timeout. Historical and provider detail views load on demand. Failed scans retain the last successful total, including across app restarts on the same date; missing data after midnight displays a dash until a scan succeeds.
|
|
65
119
|
|
|
120
|
+
### AI time
|
|
121
|
+
|
|
122
|
+
The menu bar dashboard and full terminal report show three times beneath the spending overview. They follow the selected day, 7 days, 30 days, month or all-time view, with the same provider and project filters:
|
|
123
|
+
|
|
124
|
+
- **AI running:** recorded run time added across agents. Two agents running for one hour add two hours. Duplicate run IDs copied into forks count once.
|
|
125
|
+
- **Elapsed busy:** time when at least one agent was running. Those two parallel agents count as one elapsed hour.
|
|
126
|
+
- **Your time ≈:** an interaction estimate from reply-to-next-prompt gaps of up to five minutes, merged across chats. Known subagents and longer idle gaps are excluded. This does not measure attention, typing or time reading while an agent runs; unidentified automation may be included.
|
|
127
|
+
|
|
128
|
+
Timing recovery starts July 1, 2025 and uses retained local evidence. **Partial history** stays visible; missing timing is **Unknown**, never zero. Recorded durations may include tool execution and waiting, rather than only time generating tokens. Open runs are not extended to the present.
|
|
129
|
+
|
|
130
|
+
| Client | Available timing evidence |
|
|
131
|
+
|--------|---------------------------|
|
|
132
|
+
| Claude Code | Recorded turn durations; older prompt/reply clocks are inferred |
|
|
133
|
+
| Codex | Completed/interrupted run boundaries or durations; older reply clocks are inferred |
|
|
134
|
+
| Cursor IDE | Saved conversation message start/end clocks, when retained |
|
|
135
|
+
| Cursor Agent | Timestamped CLI result durations; ordinary text transcripts lack clocks |
|
|
136
|
+
| Copilot | Saved assistant turn start/end pairs |
|
|
137
|
+
| OpenCode | Completed message clocks, including archived sessions and subagents; late/missing completions use short inferred spans from saved parts |
|
|
138
|
+
| Kimi Code | Native saved step boundaries, including separate agents |
|
|
139
|
+
| Pi / OMP | Inferred prompt-to-final-reply spans |
|
|
140
|
+
|
|
141
|
+
Inferred spans are capped at 30 minutes; longer unmeasured gaps remain unknown. Deleted logs, unsupported formats and sessions without complete clocks cannot supply a full lifetime total. Provider details show how many files have usable timing in the selected period.
|
|
142
|
+
|
|
143
|
+
Timing uses a separate private index and leaves financial history intact. Existing usage-file events trigger small bounded updates; no extra polling service is installed. Historical recovery advances saved byte cursors in bounded passes, without rereading unchanged transcripts.
|
|
144
|
+
|
|
145
|
+
The menu bar continues known unfinished timing work in separate timing-only steps, without waiting for another file change or rerunning cost scans. Only one CLI child runs at a time; each step rests for at least nine times its elapsed runtime. Catch-up stops when the queue clears, an incomplete final record needs more data, a step fails, or two steps make no progress. Cost freshness timestamps stay unchanged. Provider file counts mean files with timing **in the selected view**, out of all discovered files.
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
exe-watcher time --period all # saved/recent timing and coverage
|
|
149
|
+
exe-watcher time --period week --format json
|
|
150
|
+
exe-watcher time --recover --period all # one bounded historical pass
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Repeat a recovery pass while files remain pending and progress advances. Automatic parsing is capped at 16 MiB per update; explicit historical parsing at 256 MiB per pass. Incomplete or unreadable records remain clearly marked.
|
|
154
|
+
|
|
155
|
+
### Memory and spend per AI employee
|
|
156
|
+
|
|
157
|
+
When [Exe OS](https://github.com/AskExe/exe-os) supplies local agent stats, Watcher adds an **AI Employees** section to the menu bar with two panels:
|
|
158
|
+
|
|
159
|
+
- **Memory** — Persistent memory count for each employee, with 24h / 7d / 30d growth columns. This tracks saved knowledge records, not runtime memory consumption or memory quality.
|
|
160
|
+
- **Employee Spend** — Per-employee cost across 24h / 7d / 30d, using the model-aware cost buckets supplied by Exe OS.
|
|
161
|
+
|
|
162
|
+
How it works:
|
|
163
|
+
|
|
164
|
+
1. Exe OS maps Claude Code sessions to employee IDs through its session-start integration.
|
|
165
|
+
2. Its daemon publishes employee memory/growth and model-aware spend buckets to `~/.exe-os/agent-stats.json`.
|
|
166
|
+
3. Watcher reads that local stats file; it does not open Exe OS's memory database or fetch memory contents.
|
|
167
|
+
4. The CLI's project view also groups recognized agent worktree paths under their parent project.
|
|
168
|
+
|
|
169
|
+
The section shows a waiting state when Exe OS is detected without stats, and marks data older than five minutes as stale. `exe-watcher agent-status` reports whether the local directory, daemon PID file, stats format and file freshness are available. Spend/time tracking works independently of Exe OS.
|
|
170
|
+
|
|
66
171
|
### Interactive TUI dashboard
|
|
67
172
|
|
|
68
173
|
```bash
|
|
69
|
-
exe-watcher
|
|
174
|
+
exe-watcher report # 7-day terminal dashboard, including on macOS
|
|
70
175
|
exe-watcher today # today only
|
|
71
176
|
exe-watcher month # this calendar month
|
|
72
177
|
```
|
|
73
178
|
|
|
74
179
|
Full-screen terminal dashboard with gradient charts, responsive panels, and keyboard navigation. Breaks down spend by day, project, model, activity type, tools, MCP servers, and shell commands. Auto-refreshes every 30 seconds.
|
|
75
180
|
|
|
76
|
-
**Keys:** `1`-`5` switch periods (Today / 7d / 30d / Month / All). `p`
|
|
181
|
+
**Keys:** `1`-`5` switch periods (Today / 7d / 30d / Month / All); left/right arrows or Tab cycle periods. `p` switches providers. `r` refreshes. `c` opens comparison and `o` opens Optimize when available. Escape or `b` returns from Optimize; `q` quits.
|
|
77
182
|
|
|
78
183
|
### Optimize
|
|
79
184
|
|
|
80
185
|
```bash
|
|
81
|
-
exe-watcher optimize #
|
|
186
|
+
exe-watcher optimize # bounded Claude Code analysis
|
|
82
187
|
exe-watcher optimize -p week # scope to last 7 days
|
|
83
188
|
```
|
|
84
189
|
|
|
85
190
|
Scans your sessions and `~/.claude/` config for waste: re-read files, low read:edit ratios, uncapped bash output, unused MCP servers, ghost agents, bloated CLAUDE.md files. Returns exact copy-paste fixes and estimated savings. Grades your setup A through F.
|
|
86
191
|
|
|
192
|
+
In the full report, press `o` to see recommendations, `b` to return, or `r` to run the analysis again. Automatic refresh pauses while you read the optimizer. Large histories produce clearly marked partial recommendations from the newest selected sessions, within a smaller analysis budget. Partial checks omit the overall health grade and cleanup suggestions that require complete history. Nothing is applied automatically; token and dollar savings are estimates.
|
|
193
|
+
|
|
194
|
+
In the optimizer, press `c` to **copy all** recommendations and suggested fixes, ready to paste into Claude Code, or `e` to **save a Markdown file**. The file goes to Downloads when that folder exists, otherwise the current folder; the saved path appears on screen. Both actions use the displayed results without rescanning. Exports include the selected period, coverage warnings, estimates and complete fixes. If the system clipboard is unavailable, save the Markdown file instead.
|
|
195
|
+
|
|
87
196
|
### Compare
|
|
88
197
|
|
|
89
198
|
```bash
|
|
@@ -104,18 +213,25 @@ Side-by-side model comparison on your own data. One-shot rate, retry rate, cost
|
|
|
104
213
|
| **Cursor Agent** | CLI sessions | Full support |
|
|
105
214
|
| **Copilot** | `~/.copilot/session-state/` | Output tokens only |
|
|
106
215
|
| **OpenCode** | SQLite (`~/.local/share/opencode/`) | Subtask sessions excluded |
|
|
216
|
+
| **Kimi Code** | `~/.kimi-code/sessions/` | Native `usage.record` logs, including subagents; rotating model aliases remain unpriced |
|
|
107
217
|
| **OMP** (Oh My Pi) | `~/.omp/agent/sessions/` | Full support |
|
|
108
218
|
| **Pi** | `~/.pi/agent/sessions/` | Full support |
|
|
109
219
|
|
|
110
220
|
All providers auto-detected. If multiple tools have data, press `p` in the dashboard to toggle between them. The provider plugin system makes adding new tools straightforward — each provider is a single file in `src/providers/`.
|
|
111
221
|
|
|
222
|
+
On a new Mac, install and open Watcher: no client executables, API keys, shell setup or account connection are required. It reads supported clients' saved usage in the standard folders above. The menu bar app also picks up the first session from a client installed after Watcher starts. Custom folders require the matching environment override or an additional Claude profile root; Finder-launched apps do not inherit variables set only in your terminal shell.
|
|
223
|
+
|
|
224
|
+
Models are independent of clients: GLM, Kimi, DeepSeek, Gemini and other known models are priced from the model name recorded by Claude Code, OpenCode or another supported client. Costs use current API list rates, including separately recorded cache reads and writes. Subscription quotas, discounts, broker markups and old invoices are not reconstructed. Missing model prices preserve token counts and show an incomplete-cost notice in the app.
|
|
225
|
+
|
|
226
|
+
This is not universal interception of every AI request. A client must retain a supported usage format with token counts. Deleted logs, cloud-only chats and unsupported formats (including Python Kimi CLI's `~/.kimi/` Wire events and older OpenCode JSON storage) cannot be recovered automatically. Copilot's saved data currently provides output tokens only; Cursor Auto mode uses an estimate. See the table for coverage before treating a total as complete.
|
|
227
|
+
|
|
112
228
|
---
|
|
113
229
|
|
|
114
230
|
## CLI reference
|
|
115
231
|
|
|
116
232
|
```bash
|
|
117
233
|
# Dashboard
|
|
118
|
-
exe-watcher
|
|
234
|
+
exe-watcher report # interactive (default: 7 days)
|
|
119
235
|
exe-watcher today # today only
|
|
120
236
|
exe-watcher month # this month
|
|
121
237
|
|
|
@@ -124,7 +240,7 @@ exe-watcher report -p 30days # rolling 30-day window
|
|
|
124
240
|
exe-watcher report -p all # everything on disk
|
|
125
241
|
exe-watcher report --from 2026-04-01 --to 2026-04-10
|
|
126
242
|
exe-watcher report --format json # structured JSON to stdout
|
|
127
|
-
exe-watcher status # compact
|
|
243
|
+
exe-watcher status # compact spending status
|
|
128
244
|
|
|
129
245
|
# Menubar data (used by the Swift app)
|
|
130
246
|
exe-watcher status --format menubar-json --period today --provider all
|
|
@@ -140,9 +256,14 @@ exe-watcher optimize -p week # scope to last 7 days
|
|
|
140
256
|
exe-watcher compare # interactive model picker
|
|
141
257
|
exe-watcher export # CSV (today, 7d, 30d)
|
|
142
258
|
exe-watcher export -f json # JSON export
|
|
259
|
+
|
|
260
|
+
# AI time and employee diagnostics
|
|
261
|
+
exe-watcher time --period week --format json
|
|
262
|
+
exe-watcher time --recover --period all
|
|
263
|
+
exe-watcher agent-status # diagnose Exe OS stats freshness
|
|
143
264
|
```
|
|
144
265
|
|
|
145
|
-
|
|
266
|
+
`report` supports period, provider, project, exclusion, date-range and JSON options. `today`, `month`, `status` and `export` support provider/project/exclusion filters; Optimize and Compare accept period/provider options. `time` has period/provider/project/exclusion filters and text/JSON output. Use `<command> --help` for the options each command accepts.
|
|
146
267
|
|
|
147
268
|
---
|
|
148
269
|
|
|
@@ -159,21 +280,21 @@ Supported: USD, GBP, EUR, JPY, AUD, CAD, CHF, CNY, SEK, NOK, DKK, NZD, SGD, HKD,
|
|
|
159
280
|
|
|
160
281
|
### Plans
|
|
161
282
|
|
|
162
|
-
Track spend against
|
|
283
|
+
Track API-equivalent spend against a configured monthly budget:
|
|
163
284
|
|
|
164
285
|
```bash
|
|
165
|
-
exe-watcher plan set claude-max # $200
|
|
166
|
-
exe-watcher plan set claude-pro # $20
|
|
167
|
-
exe-watcher plan set cursor-pro # $20
|
|
286
|
+
exe-watcher plan set claude-max # built-in $200 monthly budget
|
|
287
|
+
exe-watcher plan set claude-pro # built-in $20 monthly budget
|
|
288
|
+
exe-watcher plan set cursor-pro # built-in $20 monthly budget
|
|
168
289
|
exe-watcher plan set custom --monthly-usd 150 --provider claude
|
|
169
290
|
exe-watcher plan set none # disable
|
|
170
291
|
```
|
|
171
292
|
|
|
172
|
-
|
|
293
|
+
These are Watcher's budget presets, not a live price list or a measurement of subscription capacity. The menu bar shows spend against the configured budget. Live Claude five-hour/weekly utilization is a separate provider-reported view.
|
|
173
294
|
|
|
174
295
|
### Model aliases
|
|
175
296
|
|
|
176
|
-
If a model
|
|
297
|
+
If a recorded model has no verified price, Watcher keeps its tokens and warns that cost is excluded. When an alias refers to a known underlying model, map it explicitly:
|
|
177
298
|
|
|
178
299
|
```bash
|
|
179
300
|
exe-watcher model-alias "my-proxy-model" "claude-opus-4-6"
|
|
@@ -181,25 +302,7 @@ exe-watcher model-alias --list
|
|
|
181
302
|
exe-watcher model-alias --remove "my-proxy-model"
|
|
182
303
|
```
|
|
183
304
|
|
|
184
|
-
Stored in `~/.config/exe-watcher/config.json
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## Exe OS integration
|
|
189
|
-
|
|
190
|
-
When [Exe OS](https://github.com/AskExe/exe-os) is installed, Watcher auto-detects it and adds an **AI Employees** section to the menubar with two panels:
|
|
191
|
-
|
|
192
|
-
- **Memory** — Per-agent memory count with 24h / 7d / 30d growth columns
|
|
193
|
-
- **Employee Spend** — Per-agent cost across 24h / 7d / 30d, using model-aware pricing (Opus, Sonnet, Haiku rates applied per-model)
|
|
194
|
-
|
|
195
|
-
How it works:
|
|
196
|
-
|
|
197
|
-
1. Exe OS's SessionStart hook maps Claude Code sessions to agents via `~/.exe-os/session-cache/`
|
|
198
|
-
2. The daemon computes `getAgentSpend()` with per-model pricing and writes `~/.exe-os/agent-stats.json` every 60 seconds
|
|
199
|
-
3. Watcher reads the stats file — zero coupling, no auth, no direct database access
|
|
200
|
-
4. Worktree-aware: agent worktree paths collapse into parent project names
|
|
201
|
-
|
|
202
|
-
The section appears automatically when exe-os is present and hides when it's not. Also shows daemon uptime and agent memory growth trends.
|
|
305
|
+
Stored in `~/.config/exe-watcher/config.json` (or beneath `XDG_CONFIG_HOME`). User aliases override built-ins. Only alias models whose identity you know; an alias supplies pricing, not proof of the underlying model.
|
|
203
306
|
|
|
204
307
|
---
|
|
205
308
|
|
|
@@ -211,6 +314,7 @@ Two components, loosely coupled via CLI output:
|
|
|
211
314
|
Provider usage files
|
|
212
315
|
↓
|
|
213
316
|
CLI: deduplicate → price tokens → cache daily totals → JSON
|
|
317
|
+
timing evidence → separate bounded timing index → time totals
|
|
214
318
|
↓
|
|
215
319
|
macOS app: file notifications → one bounded CLI worker → menu bar
|
|
216
320
|
```
|
|
@@ -219,6 +323,8 @@ macOS app: file notifications → one bounded CLI worker → menu bar
|
|
|
219
323
|
|
|
220
324
|
**Menubar app:** Calls `exe-watcher status --format menubar-json --period <period> --provider <provider>` → decodes JSON → renders SwiftUI popover. Usage-file notifications trigger coalesced refreshes, with catch-up on launch and wake. Period and provider views load when selected. A single CLI worker has memory, runtime, and output limits; failed scans preserve the last successful total. There is no periodic background usage scan. Security: no shell injection — validated argv arrays are passed directly to child processes, not through a shell.
|
|
221
325
|
|
|
326
|
+
**Employee data:** Reads Exe OS's local summary file alongside the usage payload. The memory/spend panels use daemon-supplied employee identities and do not transmit memory records.
|
|
327
|
+
|
|
222
328
|
**Deduplication** per provider: API message ID (Claude), cumulative token cross-check (Codex), conversation/timestamp (Cursor), session+message ID (OpenCode), responseId (Pi/OMP).
|
|
223
329
|
|
|
224
330
|
---
|
|
@@ -264,7 +370,7 @@ swift test --package-path mac --filter ExeWatcherUITests
|
|
|
264
370
|
| Low 1-shot rate (Coding 30%) | Agent struggling, retry loops |
|
|
265
371
|
| Opus on small turns | Overpowered model for simple tasks |
|
|
266
372
|
| Bash dominated by `git status`, `ls` | Agent exploring instead of executing |
|
|
267
|
-
|
|
|
373
|
+
| Research dominant | Investigating, discussing approaches, or reading without edits |
|
|
268
374
|
|
|
269
375
|
Starting points, not verdicts. A single experimental session with 60% cache hit is fine. That same number across weeks of work is a config issue.
|
|
270
376
|
|
|
@@ -274,7 +380,7 @@ Starting points, not verdicts. A single experimental session with 60% cache hit
|
|
|
274
380
|
|
|
275
381
|
Reads session data directly from disk. No wrapper, no proxy, no API keys needed. Pricing refreshes every 24 hours from official OpenAI, Anthropic, MiniMax, Z.AI, Kimi and xAI pricing pages, supplemented by [LiteLLM](https://github.com/BerriAI/litellm). Official rates take precedence over reseller prices for unqualified model names. Offline use retains the last available catalog or the bundled rates verified October 1, 2026, with warnings when a refresh fails. Handles input, output, 5-minute and 1-hour cache writes, cache reads, long-context tiers, and recorded web search costs. Claude streaming records are reconciled by API message ID using cumulative token counters; final usage is counted once.
|
|
276
382
|
|
|
277
|
-
|
|
383
|
+
Counted usage keeps its recorded API-equivalent dollar amount. Pricing refreshes apply to newly counted usage and never trigger an automatic repricing of saved history. Committed daily totals remain cached; new dates and missing providers add usage on top. A small local ledger retains hashed usage identities and their dollar amounts independently of temporary parsing caches, so unchanged accounting stays fixed even after cache eviction or a session append. New or corrected accounting records are new data. JSON reports include `pricing` metadata with this recorded-rates basis, the current feed refresh timestamp and source URLs. These are estimates, not historical invoices. Recovered history with missing request details remains an estimate. Models without published token prices (including Codex Spark) retain their tokens and an explicit cost-exclusion warning; an unknown price is not a final zero-dollar value.
|
|
278
384
|
|
|
279
385
|
Switching Claude accounts does not filter usage: Watcher counts all retained sessions in the configured data directory and Claude Desktop account folders. Codex archived sessions also count. Add other Claude profile roots with `claudeConfigDirs` in `~/.config/exe-watcher/config.json`.
|
|
280
386
|
|
|
@@ -288,6 +394,9 @@ For unfiltered All Time Claude totals, Watcher also reconciles `stats-cache.json
|
|
|
288
394
|
|----------|-------------|
|
|
289
395
|
| `CLAUDE_CONFIG_DIR` | Override Claude data directory (default: `~/.claude`) |
|
|
290
396
|
| `CODEX_HOME` | Override Codex data directory (default: `~/.codex`) |
|
|
397
|
+
| `KIMI_CODE_HOME` | Override native Kimi Code data directory (default: `~/.kimi-code`) |
|
|
398
|
+
| `XDG_DATA_HOME` | Base data directory for OpenCode (default: `~/.local/share`) |
|
|
399
|
+
| `XDG_CONFIG_HOME` | Base directory for Watcher configuration (default: `~/.config`) |
|
|
291
400
|
| `EXE_WATCHER_CACHE_DIR` | Override cache directory (default: `~/.cache/exe-watcher`) |
|
|
292
401
|
|
|
293
402
|
---
|
|
@@ -301,10 +410,15 @@ src/
|
|
|
301
410
|
cli.ts Entry point (Commander.js)
|
|
302
411
|
dashboard.tsx TUI (Ink — React for terminals)
|
|
303
412
|
parser.ts Session reader, dedup, date filter
|
|
304
|
-
models.ts
|
|
413
|
+
models.ts Pricing catalog and verified model aliases
|
|
414
|
+
official-pricing.ts Official provider pricing overrides
|
|
305
415
|
classifier.ts Activity classifier (6 categories)
|
|
306
416
|
compare-stats.ts Model comparison engine
|
|
307
|
-
menubar-json.ts
|
|
417
|
+
menubar-json.ts Menu bar payload, employee stats and project spend
|
|
418
|
+
resource-budget.ts Scan memory, runtime and output limits
|
|
419
|
+
history-build.ts Resumable historical accounting
|
|
420
|
+
time-tracking.ts AI running, elapsed busy and interaction estimates
|
|
421
|
+
time-index.ts Separate bounded timing index and recovery
|
|
308
422
|
export.ts CSV/JSON export
|
|
309
423
|
config.ts Config management
|
|
310
424
|
currency.ts Currency conversion
|
|
@@ -317,27 +431,17 @@ tests/ CLI data integrity tests (Vitest)
|
|
|
317
431
|
|
|
318
432
|
## Origin & attribution
|
|
319
433
|
|
|
320
|
-
Watcher is
|
|
434
|
+
Watcher is an independently developed derivative of [CodeBurn](https://github.com/getagentseal/codeburn) by [AgentSeal](https://github.com/getagentseal), used under the MIT license. It began as a source import into a new repository on **April 24, 2026 at 14:40 Asia/Makassar (06:40 UTC)**, initially named exe-fuelbar. It is a fork in the development sense; GitHub does not list this repository as a fork.
|
|
435
|
+
|
|
436
|
+
The [initial import](https://github.com/AskExe/exe-watcher/commit/8545e35633958ab3fd12600c1ac89c528c867904) contains 112 files identical to the corresponding files in [CodeBurn commit d3c4de0](https://github.com/getagentseal/codeburn/commit/d3c4de03759f0ded38052874fa829709d27fe7c6), whose package version was 0.8.9. Upstream's commit history was not imported.
|
|
437
|
+
|
|
438
|
+
**The inherited foundation** includes the CLI/TUI, eight provider integrations, the native macOS menu bar app, subscription tracking (including Claude's five-hour and weekly windows), capacity estimation, currency support, model comparisons, and optimization analysis. These were already present at import and belong in CodeBurn's credit.
|
|
321
439
|
|
|
322
|
-
**
|
|
323
|
-
- Rebranded to Watcher with the Exe Foundry Bold design system
|
|
324
|
-
- 8 provider support (added Cursor Agent, Copilot, OMP, Pi, OpenCode)
|
|
325
|
-
- Native macOS menubar app with multi-period views, provider tabs, project spend, and subscription tracking
|
|
326
|
-
- Exe OS integration — per-agent spend and memory tracking for AI employee teams
|
|
327
|
-
- Daily cache system (v8) with atomic writes and cold-start/progressive full-history backfill
|
|
328
|
-
- Capacity estimation from usage patterns
|
|
329
|
-
- Multi-currency support (17 currencies)
|
|
330
|
-
- Test coverage across CLI, Swift state, resource limits, and UI smoke layers
|
|
331
|
-
- Consolidated activity categories from 13 to 6
|
|
332
|
-
- Fixed double-counting bugs in the menubar JSON pipeline
|
|
333
|
-
- Performance: 7-day and 30-day queries from 2-5s down to ~1s via daily cache
|
|
440
|
+
**Watcher's subsequent work** includes its Exe branding and owl artwork, Exe OS agent/memory integration, bounded event-driven refreshes and history recovery, accounting and pricing corrections, native Kimi Code support, self-contained macOS packaging, and AI running/elapsed/interaction time reporting. The roadmap serves our AI employee teams and multi-agent workflows.
|
|
334
441
|
|
|
335
|
-
|
|
336
|
-
- Full control over the data pipeline to integrate with exe-os (our AI employee operating system)
|
|
337
|
-
- Our classification model, provider support, and UI direction serve a different user base (AI-first teams running multi-agent workflows)
|
|
338
|
-
- MIT license allows this — we give full credit to AgentSeal for the foundation
|
|
442
|
+
AgentSeal's original copyright notice and the full MIT terms are preserved in [LICENSE](LICENSE) and [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). The notices ship with the npm package and packaged macOS app. See the [dated upstream comparison and adoption backlog](docs/codeburn-upstream-review.md) for evidence and features to evaluate.
|
|
339
443
|
|
|
340
|
-
Thank you to AgentSeal
|
|
444
|
+
Thank you to AgentSeal and CodeBurn's contributors for the foundation.
|
|
341
445
|
|
|
342
446
|
---
|
|
343
447
|
|
|
@@ -355,7 +459,7 @@ Thank you to AgentSeal for building the original. If you want a clean cost track
|
|
|
355
459
|
|
|
356
460
|
## License
|
|
357
461
|
|
|
358
|
-
MIT
|
|
462
|
+
MIT. Includes CodeBurn by AgentSeal; see [LICENSE](LICENSE) and [third-party notices](THIRD_PARTY_NOTICES.md).
|
|
359
463
|
|
|
360
464
|
---
|
|
361
465
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
## CodeBurn by AgentSeal
|
|
4
|
+
|
|
5
|
+
Exe Watcher includes code derived from [CodeBurn](https://github.com/getagentseal/codeburn), originally developed by [AgentSeal](https://github.com/getagentseal).
|
|
6
|
+
|
|
7
|
+
The initial source import on April 24, 2026 matches the 112 corresponding files in upstream revision `d3c4de03759f0ded38052874fa829709d27fe7c6` (package version 0.8.9). Its CLI/TUI, provider integrations, macOS app, subscription tracking, and analysis tools form Watcher's original foundation. Exe AI subsequently developed Watcher's branding, integrations, and other changes. See the repository's `docs/codeburn-upstream-review.md` for the comparison.
|
|
8
|
+
|
|
9
|
+
The native multi-provider quota adapters and response mapping also adapt the Codex, Kimi, Cursor, Copilot and Gemini readers from CodeBurn revision `9a40cc603fcd194caca9daa8c5134a61ea7e0e2b` (`src/quota/`). Watcher's adaptation uses independent native request admission and read-only credential access; it does not import the upstream OAuth rotation/write-back flows or provider vectors.
|
|
10
|
+
|
|
11
|
+
CodeBurn's original license is reproduced verbatim below. Exe AI's additional copyright notice appears in the root `LICENSE`.
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
MIT License
|
|
15
|
+
|
|
16
|
+
Copyright (c) 2026 AgentSeal
|
|
17
|
+
|
|
18
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
19
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
20
|
+
in the Software without restriction, including without limitation the rights
|
|
21
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
22
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
23
|
+
furnished to do so, subject to the following conditions:
|
|
24
|
+
|
|
25
|
+
The above copyright notice and this permission notice shall be included in all
|
|
26
|
+
copies or substantial portions of the Software.
|
|
27
|
+
|
|
28
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
29
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
30
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
31
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
32
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
33
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
34
|
+
SOFTWARE.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Runtime dependencies and other bundled assets retain their own licenses. This CodeBurn notice does not replace them. Check the applicable upstream notices before importing further code or assets; current CodeBurn includes components with additional third-party terms.
|