feat: Claude Code Monitor — lanes, pipelines and a merged workspace

Internal SmartGift build of a Claude Code monitoring dashboard.

Lanes: a durable unit of parallel agent work, one per working directory,
tracked across session restarts. Managed lanes are git worktrees the
dashboard provisions and can reset or remove behind a three-check destroy
guard and a counted preflight; adopted lanes are directories you already
own and are never destroyable.

Pipelines: a lane moves through pipeline stages. A stage the agent declares
with evidence renders green; a stage inferred from the tool-event stream
renders dashed amber and never counts as done. Detection is forward-only
within a 30-minute window, and never writes the declared stage.

Workspace: one page at /run with a lane grid, the selected lane's pipeline,
and a full Claude console behind a disclosure.
This commit is contained in:
2026-07-29 17:07:45 +07:00
commit 57dc91585d
783 changed files with 221743 additions and 0 deletions
@@ -0,0 +1,28 @@
---
description: Compute the recent 7-day spend trend (burn rate) from daily sessions and per-session cost.
argument-hint: ""
---
Estimate the recent daily spend trend (burn rate) for Claude Code usage from the Agent Monitor dashboard.
Fetch analytics, which includes the 365-day daily series and token totals:
```
curl -s http://localhost:4820/api/analytics
```
Use `daily_sessions` (365 days of `{ date, count }`) together with per-session cost to estimate daily spend. If `daily_sessions` does not carry cost directly, fetch the session list to map cost to dates:
```
curl -s "http://localhost:4820/api/sessions?limit=200"
```
Then compute and print:
1. **Last 7 days vs. prior 7 days** — total spend in each window, and the change as a percent with ▲ (up) / ▼ (down).
2. **7-day burn rate** — average daily spend over the last 7 days, as USD to 4 decimal places, plus a simple 30-day projection (`avg_daily × 30`).
3. **Per-day mini-trend** — one line per day for the last 7 days: `<date> — $<spend to 4dp>` with a ▲/▼ vs. the prior day.
Currency as USD to 4 decimal places. Keep it to these three blocks — no long analysis.
If session dates and costs cannot be aligned precisely, state the approximation you made in one line rather than fabricating exact daily figures. If the dashboard is unreachable, tell the user to start it with `npm start` from the repo root.
@@ -0,0 +1,26 @@
---
description: Quick total cost plus a per-model one-liner from the dashboard pricing engine.
argument-hint: "[today|week]"
---
Print a quick cost snapshot from the Agent Monitor dashboard pricing engine.
The user's scope is **$ARGUMENTS** (default `today` if empty; accepts `today` or `week`).
Fetch the fleet-wide cost breakdown:
```
curl -s http://localhost:4820/api/pricing/cost
```
This returns `{ total_cost, breakdown: [{ model, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, cost, matched_rule }] }`.
Then print, concisely:
1. **Total cost**`total_cost` as USD to 4 decimal places, labeled with the scope (`$ARGUMENTS`).
2. **Per-model one-liners** — one line per entry in `breakdown`, sorted by `cost` descending:
`<model> — $<cost to 4dp> (in <input_tokens>, out <output_tokens>, cacheR <cache_read_tokens>, cacheW <cache_write_tokens>)`
Keep token counts with thousands separators. No tables, no preamble — just the total and the per-model lines.
Note: the endpoint returns lifetime totals; if the user asked for `today` or `week` and the data is not scoped, say so in one line rather than fabricating a windowed number. If the dashboard is unreachable, tell the user to start it with `npm start` from the repo root.
@@ -0,0 +1,25 @@
---
description: List the top N most expensive Claude Code sessions by inline cost.
argument-hint: "[N]"
---
List the most expensive Claude Code sessions from the Agent Monitor dashboard.
`N` = **$ARGUMENTS** (default `10` if empty).
Fetch the session list (each session carries an inline `cost` field from bulk pricing):
```
curl -s "http://localhost:4820/api/sessions?limit=200"
```
Then:
1. Sort sessions by `cost` descending.
2. Print the top `N` as a numbered list, one line each:
`<rank>. $<cost to 4dp> — <model> — <cwd basename or id> — <started_at>`
3. After the list, print the **summed cost of the top N** and what percent that is of the summed cost of all returned sessions.
Currency as USD to 4 decimal places. Skip sessions with no/zero cost only if it would otherwise pad the list past meaningful entries — otherwise include them. Keep it terse, no extra commentary.
If the dashboard is unreachable, tell the user to start it with `npm start` from the repo root.