cwd-rollup — Claude Code skill: what it does, how to install
Aggregates Claude Code sessions by working directory using Agent Monitor data. It compares session counts, token totals, and dollar spend across active projects.
npx skills add hoangsonww/Claude-Code-Agent-Monitor --skill cwd-rollup -a claude-codeWhat cwd-rollup does
The skill aggregates Claude Code activity across projects using data from Agent Monitor. It queries the /api/run/cwds, /api/sessions?limit=1000, and /api/pricing/cost endpoints. Everything groups by working directory. For each folder, it tallies session counts, total dollar cost, active models, and latest timestamps. Token sums separate billable text from cache reads and writes.
Output comes as a Markdown table sorted by cost descending. It shows each directory's share of total fleet spend. You can pass a path substring to filter rows or use top N to limit results. The skill requires an active Agent Monitor instance; if the local dashboard is down, start it with npm start in the repository root. Sessions missing usage_extras metadata are simply excluded from token sums.
What it helps with
- Compare Claude Code spend across different working directories
- Find projects with the highest token consumption and dollar cost
- Check recent activity timestamps and model usage for a folder
- Calculate each project's percentage share of total fleet spend
Example prompts for the agent
- Roll up Claude Code sessions across all working directories
- Show top 5 most expensive projects using cwd-rollup
- Filter directory rollup for paths matching backend
How to install cwd-rollup
1Skills CLI (Vercel)
npx skills add hoangsonww/Claude-Code-Agent-Monitor --skill cwd-rollup -a claude-code2Manually: put the files in place
~/.claude/skills/cwd-rollup/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/cwd-rollup/
1Skills CLI (Vercel)
npx skills add hoangsonww/Claude-Code-Agent-Monitor --skill cwd-rollup -a codex2Manually: put the files in place
.agents/skills/cwd-rollup/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add hoangsonww/Claude-Code-Agent-Monitor --skill cwd-rollup -a cursor2Manually: put the files in place
.cursor/skills/cwd-rollup/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install hoangsonww/Claude-Code-Agent-Monitor cwd-rollup2Manually: put the files in place
.github/skills/cwd-rollup/SKILL.md1Skills CLI (Vercel)
npx skills add hoangsonww/Claude-Code-Agent-Monitor --skill cwd-rollup -a gemini-cli2Platform CLI
gemini skills install https://github.com/hoangsonww/Claude-Code-Agent-Monitor --path plugins/ccam-sessions/skills/cwd-rollupManually: put the files in place
.devin/skills/cwd-rollup/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add hoangsonww/Claude-Code-Agent-Monitor --skill cwd-rollup -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about cwd-rollup
How do I install cwd-rollup in Claude Code?
Run npx skills add hoangsonww/Claude-Code-Agent-Monitor --skill cwd-rollup -a claude-code. The skill file can also be placed at ~/.claude/skills/cwd-rollup/SKILL.md.
What does cwd-rollup do?
It pulls session logs from Agent Monitor and rolls them up by working directory. The result is a Markdown table showing spend in USD, token counts, run counts, and fleet share per project.
What happens if the Agent Monitor dashboard is not running?
The skill cannot fetch data if the local API is unreachable. Start the dashboard by running npm start from the Agent Monitor repository root before invoking the skill.
Source text
SKILL.md · MIT
---
name: cwd-rollup
description: >
Roll up Claude Code sessions by working directory (project) from Agent Monitor
data — session count, total cost, total tokens, and last-active timestamp per cwd
— so per-project activity can be compared at a glance. Use when summarizing where
effort and spend went across projects.
---
# CWD Rollup
Aggregate session activity per working directory (project).
## Input
The user provides: **$ARGUMENTS**
- Empty → roll up **all** working directories.
- A path / project substring → restrict the rollup to matching cwds.
- `top N` → keep only the N highest-cost (or highest-count) projects.
## Data Sources
| Endpoint | Returns |
|----------|---------|
| `GET /api/run/cwds` | the distinct working directories that have sessions — the rollup key set |
| `GET /api/sessions?limit=N` | session list: id, status, model, cwd, started_at, ended_at, cost, metadata (usage_extras with token counts) |
| `GET /api/pricing/cost` | fleet cost: total_cost, breakdown[{ model, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, cost, matched_rule }] — for the fleet total to compute each cwd's share |
## Report Sections
### 1. Key set
`GET /api/run/cwds` for the canonical list of working directories. Apply the
`$ARGUMENTS` filter (substring match) if one was given.
### 2. Pull sessions
`GET /api/sessions?limit=1000`. Bucket sessions by `cwd`.
### 3. Aggregate per cwd
For each working directory compute:
- **sessions** — count.
- **cost** — sum of the inline `cost` field across the bucket.
- **tokens** — sum of input / output / cache-read / cache-write from each session's
metadata `usage_extras` (sum the four into a total, and keep input + output as the
"billable text" subtotal).
- **last active** — the max `started_at` (or `ended_at`) in the bucket.
- **models** — the distinct models seen.
### 4. Share of fleet
`GET /api/pricing/cost` for `total_cost`; show each cwd's cost as a percentage of the
fleet total.
### 5. Ranking
Sort by cost descending by default (or count if the user asked); apply `top N`.
## Output
Markdown table: `project (cwd basename) | sessions | total tokens | cost | % of fleet | last active | models`.
Currency as USD to 4 decimal places; token counts with thousands separators; sort
cost-descending. Add a final TOTAL row summing the columns. Only count tokens that
the session metadata actually carries — if `usage_extras` is absent for a session,
note it as excluded rather than guessing. If the dashboard is unreachable, tell the
user to start it with `npm start` from the repo root.
© hoangsonww · MIT · hoangsonww/Claude-Code-Agent-Monitor