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:
@@ -0,0 +1,36 @@
|
||||
---
|
||||
description: Quick connectivity + health probe of the Agent Monitor dashboard.
|
||||
---
|
||||
|
||||
Run a fast health probe against the Agent Monitor dashboard at
|
||||
`http://localhost:4820`. Do two checks and print OK / FAIL for each.
|
||||
|
||||
1. **API + stats** — fetch core stats:
|
||||
```bash
|
||||
curl -s -o /dev/null -w '%{http_code}' http://localhost:4820/api/stats
|
||||
curl -s http://localhost:4820/api/stats
|
||||
```
|
||||
PASS if HTTP 200 and the body is valid JSON. From the body, surface
|
||||
`total_sessions`, `active_sessions`, `total_events`, and `events_today`.
|
||||
|
||||
2. **Self-update status** — confirm the update subsystem responds:
|
||||
```bash
|
||||
curl -s -o /dev/null -w '%{http_code}' http://localhost:4820/api/updates/status
|
||||
curl -s http://localhost:4820/api/updates/status
|
||||
```
|
||||
PASS if HTTP 200 and valid JSON. Surface whether an update is available and
|
||||
the current vs latest version if present.
|
||||
|
||||
Print a compact report, one line per check:
|
||||
|
||||
```
|
||||
Agent Monitor Doctor
|
||||
API /api/stats ............ OK (sessions=12 active=1 events=3480 today=57)
|
||||
/api/updates/status ....... OK (up to date — v1.x.x)
|
||||
|
||||
Overall: OK (2/2)
|
||||
```
|
||||
|
||||
Use ✅ OK / ❌ FAIL markers. If any curl fails to connect (non-200 or no
|
||||
response), mark that check FAIL and end with: "Dashboard unreachable — start it
|
||||
with `npm start` from the repo root." Keep it to the report only; no extra prose.
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
description: Export Agent Monitor data (sessions/events/analytics/costs/all) as json/csv/md.
|
||||
argument-hint: "[sessions|events|analytics|costs|all] [json|csv|md]"
|
||||
---
|
||||
|
||||
Export Agent Monitor data using the dashboard export endpoint. Arguments:
|
||||
**$ARGUMENTS** — the first token is the data `type`, the second is the `format`.
|
||||
|
||||
- `type` ∈ `sessions | events | analytics | costs | all` (default `all`)
|
||||
- `format` ∈ `json | csv | md` (default `json`)
|
||||
|
||||
Set `TYPE` and `FORMAT` from the args (apply the defaults if missing), then run:
|
||||
|
||||
```bash
|
||||
TYPE="${1:-all}"; FORMAT="${2:-json}"
|
||||
curl -s "http://localhost:4820/api/settings/export?type=${TYPE}&format=${FORMAT}" \
|
||||
-o "ccam-export-${TYPE}.${FORMAT}"
|
||||
```
|
||||
|
||||
Then:
|
||||
1. Confirm the file was written and report its absolute path and byte size.
|
||||
2. Preview the result: for `csv`/`md` print the first ~15 lines; for `json`
|
||||
print a pretty-printed head (e.g. `head -c 1500` or the first array element
|
||||
plus the record count).
|
||||
3. Print a one-line summary: `Exported <type> as <format> → <path> (<N> records / <bytes>)`.
|
||||
|
||||
If the curl returns a non-200 or an error body, do not claim success — print the
|
||||
error and remind the user to start the dashboard with `npm start` from the repo
|
||||
root. Do not delete or overwrite any existing data; this command only reads via
|
||||
the export endpoint and writes a new export file.
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
description: Show the latest N ingested events with timestamp, event_type, and tool_name.
|
||||
argument-hint: "[N]"
|
||||
---
|
||||
|
||||
Show the most recent events from the Agent Monitor dashboard. Argument:
|
||||
**$ARGUMENTS** — `N`, the number of events to show (default 20).
|
||||
|
||||
Fetch recent events and take the newest N:
|
||||
|
||||
```bash
|
||||
N="${1:-20}"
|
||||
curl -s "http://localhost:4820/api/events?limit=${N}" | jq -r '.[] | "\(.timestamp)\t\(.event_type)\t\(.tool_name // "-")"'
|
||||
```
|
||||
|
||||
The `/api/events` list is returned newest-first; show the most recent `N`.
|
||||
Render a compact, aligned table — one row per event:
|
||||
|
||||
```
|
||||
TIME EVENT_TYPE TOOL_NAME
|
||||
2026-06-25T14:03:11Z PostToolUse Bash
|
||||
2026-06-25T14:03:09Z PreToolUse Bash
|
||||
2026-06-25T14:02:58Z Stop -
|
||||
```
|
||||
|
||||
Include `event_type` (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart,
|
||||
SessionEnd, Notification, Compaction, APIError, TurnDuration) and `tool_name`
|
||||
when present (use `-` for events without a tool). End with a one-line count:
|
||||
`Showing latest <N> events.`
|
||||
|
||||
If the request returns a non-200 or empty body, say so and tell the user to start
|
||||
the dashboard with `npm start` from the repo root. Read-only — never POST or
|
||||
modify events.
|
||||
Reference in New Issue
Block a user