/cost-track
Auto-capture per-session token usage from the Claude Code session jsonl and persist to the cost-tracking namespace
Claude Code
$ npx -y skills add ruvnet/ruflo --skill cost-track --agent claude-code
Codex
$ npx skills add ruvnet/ruflo --skill cost-track -a codex -y
Cursor
$ npx skills add ruvnet/ruflo --skill cost-track -a cursor -y
Gemini CLI
$ npx skills add ruvnet/ruflo --skill cost-track -a gemini-cli -y
GitHub Copilot
$ npx skills add ruvnet/ruflo --skill cost-track -a github-copilot -y
OpenCode
$ npx skills add ruvnet/ruflo --skill cost-track -a opencode -y
Windsurf
$ npx skills add ruvnet/ruflo --skill cost-track -a windsurf -y
SKILL.md
cost-track.SKILL.mdname: cost-track
description: Auto-capture per-session token usage from the Claude Code session jsonl and persist to the cost-tracking namespace
argument-hint: ""
allowed-tools: Bash mcp__plugin_ruflo-core_ruflo__memory_store
Cost Track
Reads the active Claude Code session jsonl (`~/.claude/projects/<encoded-cwd>/<session>.jsonl`), tallies assistant-message `usage` per model, computes USD cost using REFERENCE.md pricing, and writes a structured record to the `cost-tracking` AgentDB namespace. This is the **producer** that gives `cost-report` and `cost-optimize` real data to consume.
When to use
- After a meaningful chunk of work, to capture spend for the report.
- At session-end to persist the final tally.
- Periodically during long sessions (cron-friendly — see `/loop 30m`).
Steps
1. **Run the tracker** from the project root:
node plugins/ruflo-cost-tracker/scripts/track.mjs
The script auto-discovers the session jsonl from the current working directory. To pin a specific session: `TRACK_SESSION=/path/to/session.jsonl`. To dry-run (no memory write): `TRACK_DRY_RUN=1`.
2. **Inspect the markdown summary** — total cost, per-model and per-tier breakdowns, and the persisted memory key.
3. **Verify persistence** — `mcp__plugin_ruflo-core_ruflo__memory_search({ query: "session-", namespace: "cost-tracking" })` should list the new record. `cost-report` step 1 reads from this namespace.
Record shape (in `cost-tracking` namespace)
Key: `session-<sessionId>`. Value (JSON):
{
"sessionId": "1dba3b8c-...",
"cwd": "/Users/cohen/Projects/ruflo",
"startedAt": "2026-05-04T...",
"endedAt": "2026-05-05T...",
"messageCount": 234,
"byModel": {
"claude-opus-4-7": {
"tier": "opus",
"input_tokens": 12345,
"output_tokens": 6789,
"cache_creation_input_tokens": 800000,
"cache_read_input_tokens": 2000000,
"messages": 50,
"cost_usd": 1.23
}
},
"byTier": { "haiku": 0.0, "sonnet": 0.45, "opus": 1.23, "unknown": 0 },
"total_cost_usd": 1.68,
"capturedAt": "2026-05-05T..."
}Pricing source of truth
The script's `PRICING` constant mirrors REFERENCE.md "Model pricing (USD per 1M tokens)". Update both together when prices change. Cache-write tokens are billed at `cache_write` rate; cache-read tokens at `cache_read` (per Anthropic billing docs).
Env overrides
| Env | Default | Purpose | |---|---|---| | `TRACK_CWD` | `process.cwd()` | Override which project's sessions to scan | | `TRACK_SESSION` | most-recent jsonl | Pin a specific session file | | `TRACK_OUT` | unset | Also write the JSON summary to this path | | `TRACK_DRY_RUN=1` | unset | Skip the `memory store` call | | `TRACK_QUIET=1` | unset | Suppress markdown output | | `TRACK_NAMESPACE` | `cost-tracking` | Override target namespace |
Cross-references
- `cost-report` (consumer) — reads records produced by this skill
- REFERENCE.md "Cost attribution formula" — the math the script implements
- `cost-budget-check` (consumer; landing in P2) — reads totals to evaluate alerts
Read more
name: cost-track description: Auto-capture per-session token usage from the Claude Code session jsonl and persist to the cost-tracking namespace argument-hint: "" allowed-tools: Bash mcp__plugin_ruflo-core_ruflo__memory_store
Cost Track
Reads the active Claude Code session jsonl (`~/.claude/projects/<encoded-cwd>/<session>.jsonl`), tallies assistant-message `usage` per model, computes USD cost using REFERENCE.md pricing, and writes a structured record to the `cost-tracking` AgentDB namespace. This is the **producer** that gives `cost-report` and `cost-optimize` real data to consume.
When to use
- After a meaningful chunk of work, to capture spend for the report.
- At session-end to persist the final tally.
- Periodically during long sessions (cron-friendly — see `/loop 30m`).
Steps
1. **Run the tracker** from the project root:
node plugins/ruflo-cost-tracker/scripts/track.mjs
The script auto-discovers the session jsonl from the current working directory. To pin a specific session: `TRACK_SESSION=/path/to/session.jsonl`. To dry-run (no memory write): `TRACK_DRY_RUN=1`.
2. **Inspect the markdown summary** — total cost, per-model and per-tier breakdowns, and the persisted memory key.
3. **Verify persistence** — `mcp__plugin_ruflo-core_ruflo__memory_search({ query: "session-", namespace: "cost-tracking" })` should list the new record. `cost-report` step 1 reads from this namespace.
Record shape (in `cost-tracking` namespace)
Key: `session-<sessionId>`. Value (JSON):
{
"sessionId": "1dba3b8c-...",
"cwd": "/Users/cohen/Projects/ruflo",
"startedAt": "2026-05-04T...",
"endedAt": "2026-05-05T...",
"messageCount": 234,
"byModel": {
"claude-opus-4-7": {
"tier": "opus",
"input_tokens": 12345,
"output_tokens": 6789,
"cache_creation_input_tokens": 800000,
"cache_read_input_tokens": 2000000,
"messages": 50,
"cost_usd": 1.23
}
},
"byTier": { "haiku": 0.0, "sonnet": 0.45, "opus": 1.23, "unknown": 0 },
"total_cost_usd": 1.68,
"capturedAt": "2026-05-05T..."
}Pricing source of truth
The script's `PRICING` constant mirrors REFERENCE.md "Model pricing (USD per 1M tokens)". Update both together when prices change. Cache-write tokens are billed at `cache_write` rate; cache-read tokens at `cache_read` (per Anthropic billing docs).
Env overrides
| Env | Default | Purpose | |---|---|---| | `TRACK_CWD` | `process.cwd()` | Override which project's sessions to scan | | `TRACK_SESSION` | most-recent jsonl | Pin a specific session file | | `TRACK_OUT` | unset | Also write the JSON summary to this path | | `TRACK_DRY_RUN=1` | unset | Skip the `memory store` call | | `TRACK_QUIET=1` | unset | Suppress markdown output | | `TRACK_NAMESPACE` | `cost-tracking` | Override target namespace |
Cross-references
- `cost-report` (consumer) — reads records produced by this skill
- REFERENCE.md "Cost attribution formula" — the math the script implements
- `cost-budget-check` (consumer; landing in P2) — reads totals to evaluate alerts
📖 RuFlo Explained — Build an AI Team That Plans, Remembers, Tests, and Improves A 14-chapter guide: from the basic idea to a first useful task, then memory, agent teams, plugins, cost and verification. Agent = Model + Harness.
Other skills on ruflo.
More skills from other plugins.
agentmail
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
bmad
Answers BMad questions and recommends the next skill from what is installed. Use when the user asks bmad for help, what to do…
Questions about cost-track.
- Which coding agents can use cost-track?
- cost-track installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

