From citadel
Reports Claude Code session costs, token usage, burn rates, campaign spend, and model breakdowns from native data via /cost with time or campaign filters.
npx claudepluginhub sethgammon/citadel --plugin citadelThis skill uses the workspace's default tool permissions.
- `/cost` -- current session cost and burn rate
Generates daily cost reports for Claude Code usage including total spend, running sessions, token stats via claude-view MCP tools. Useful for cost, spending, budget queries.
Tracks Claude Code session costs, sets budget alerts, and optimizes token spend with task budgets, cost drivers, and strategies. Useful for mid-session checks and multi-session planning.
Tracks real-time costs and manages budgets for Claude Code sessions, displaying spend, burn rate, budget status, per-tool and per-model breakdowns. Invoke via /cost-guardian subcommands or keywords like 'cost', 'budget'.
Share bugs, ideas, or general feedback.
/cost -- current session cost and burn rate/cost today -- today's total spend/cost week -- this week's spend/cost campaign {slug} -- total spend for a specific campaign/cost all -- lifetime cost summaryOptional arguments parsed from user message:
today -- filter to today's sessionsweek -- filter to last 7 dayscampaign {slug} -- filter to a specific campaignall -- show all-time dataRun the session-tokens.js script to get real token data:
node scripts/session-tokens.js # current/latest session
node scripts/session-tokens.js --today # today's sessions
node scripts/session-tokens.js --all # all sessions (use for week/all/campaign)
Also read:
.planning/telemetry/cost-tracker-state.json for live burn rate.planning/telemetry/session-costs.jsonl for campaign attributionscripts/pricing.json to show which pricing is being usedIf session-tokens.js is not available or fails, fall back to session-costs.jsonl
data and clearly mark output as "(estimated)".
Current session (/cost with no args):
=== Session Cost Report ===
Session: {sessionId (first 8 chars)}
Started: {relative time} ({absolute time})
Duration: {minutes} min
Tokens:
Input: {N} tokens
Output: {N} tokens
Cache creation: {N} tokens
Cache read: {N} tokens
Total: {N} tokens
Cost: ${total}
Burn rate: ${rate}/min
Messages: {N} ({N} main + {N} across {N} subagents)
Model breakdown:
claude-opus-4-6: {N} messages (${cost}, {pct}% of spend)
claude-haiku-4-5: {N} messages (${cost}, {pct}% of spend)
Cache efficiency: {pct}% of input tokens served from cache
(Higher = more cost-efficient. Cache reads cost 10x less than fresh input.)
Pricing source: scripts/pricing.json (version {version})
Today / Week / All (/cost today, /cost week, /cost all):
=== Cost Report: {Today / This Week / All Time} ===
Summary:
Sessions: {N}
Total cost: ${total}
Subagents spawned: {N}
Total messages: {N}
Top 5 sessions by cost:
${cost} {duration}min {agents} agents {msgs} msgs {date}
${cost} {duration}min {agents} agents {msgs} msgs {date}
...
By campaign (from session-costs.jsonl):
{slug}: ${cost} across {N} sessions
_unattached: ${cost} across {N} sessions
Average session: ${avg_cost} | ${avg_rate}/min | {avg_duration} min
For historical charts and billing-window views: npx ccusage
Campaign (/cost campaign {slug}):
=== Campaign Cost: {slug} ===
Total: ${cost} across {N} sessions ({N} agents, {N} min)
Average session: ${avg}
Sessions:
{date}: ${cost} ({duration} min, {agents} agents, {msgs} msgs)
{date}: ${cost} ({duration} min, {agents} agents, {msgs} msgs)
...
After the cost data, add one of these contextual lines based on the numbers:
If scripts/session-tokens.js does not exist: Fall back to session-costs.jsonl data. Show estimated costs with "(est)" marker.
If no session data exists:
No session data found. Cost tracking requires Claude Code session files
at ~/.claude/projects/. These are created automatically by Claude Code.
If pricing.json is missing or unreadable: Use hardcoded pricing in session-tokens.js. Note: "Using built-in pricing (pricing.json not found)."
If user asks about Pro/Max subscription costs:
Note: Pro/Max subscribers pay a flat monthly fee, not per-token.
The token counts shown here represent your usage volume, not billing.
For rate limit awareness, token throughput matters more than dollar cost.
.planning/telemetry/ does not exist — output: "No telemetry data found. Run any skill first to generate session data, then re-run /cost."session-*.json file fails to parse — output: "Telemetry file is corrupted. Delete .planning/telemetry/session-*.json and re-run the skill that generated it." Skip the bad file and continue with the rest.Disclosure: "Reading telemetry and session data. No files modified." Reversibility: green — read-only; no files modified Trust gates:
/cost does not produce a HANDOFF block. It is a read-only cost exploration tool. After displaying the report, wait for the next user command.