- Updated design document status to Implemented - Marked all checklist items complete - Updated fc-005 in future-considerations.json 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
Model Usage & Cost Tracking Design
Date: 2026-01-01 Status: Implemented FC Reference: fc-005 (resolved)
Overview
Build a /usage command to track and report model usage across sessions. Since we're on Claude Pro subscription ($20/month fixed), focus is on usage optimization rather than dollar tracking.
Goals
- Cost visibility — Understand usage patterns
- Optimization insights — Identify where cheaper models could be used
- Usage patterns — See which agents/skills are used most
- Rate limit awareness — Track against subscription limits
Architecture
/usage command
│
▼
Parse existing history files
│
├─→ history/index.json (session metadata)
└─→ history/*.jsonl (session content)
│
▼
Extract metrics:
- Session times and duration
- Commands/skills used
- Agent mentions
- Delegation calls
- Token estimates
│
▼
Aggregate and display report
Components
| File | Purpose |
|---|---|
~/.claude/commands/usage.md |
Slash command definition |
~/.claude/skills/usage/SKILL.md |
Query logic and formatting |
~/.claude/state/usage/config.json |
Log level + preferences |
Log Levels
Configurable via /usage --set-level:
| Level | Data Captured | Use Case |
|---|---|---|
minimal |
Session ID, time, model | Low overhead |
standard |
+ agents, skills, tokens | Balanced (default) |
detailed |
+ commands, delegations, errors | Full debugging |
Session Data Format
Parsed from history, structured as:
{
"session_id": "s-20260101-143022-a1b2c3",
"start_time": "2026-01-01T14:30:22-08:00",
"end_time": "2026-01-01T15:45:10-08:00",
"duration_mins": 75,
"model": "opus",
"log_level": "standard",
"agents": ["personal-assistant", "linux-sysadmin"],
"skills": ["gmail", "gcal"],
"commands": ["/gmail", "/gcal today", "/usage"],
"delegations": {
"sonnet": 3,
"haiku": 5
},
"token_estimate": {
"input": 45000,
"output": 12000
},
"errors": 0
}
Field Availability by Log Level
| Field | Minimal | Standard | Detailed |
|---|---|---|---|
| session_id, times, model | Yes | Yes | Yes |
| agents, skills | Yes | Yes | |
| token_estimate | Yes | Yes | |
| commands | Yes | ||
| delegations | Yes | ||
| errors | Yes |
Command Interface
Basic Usage
/usage # Summary (last 7 days)
/usage today # Today's sessions
/usage week # Last 7 days (default)
/usage month # Last 30 days
/usage all # All time
Grouping
/usage --by agent # Group by agent
/usage --by skill # Group by skill
/usage --by model # Group by model tier
Configuration
/usage --set-level minimal|standard|detailed
/usage --show-config
Example Output
📊 Usage Summary — Last 7 Days
Sessions: 12
Total time: 8h 32m
Model: opus (primary)
┌─────────────┬──────────┬────────┐
│ Agent │ Sessions │ Time │
├─────────────┼──────────┼────────┤
│ PA │ 12 │ 8h 32m │
│ sysadmin │ 4 │ 1h 15m │
│ k8s-orch │ 2 │ 45m │
└─────────────┴──────────┴────────┘
Delegations: 23 total
→ Sonnet: 15 (65%)
→ Haiku: 8 (35%)
Skills: gmail (8), gcal (5), k8s-status (3)
Tokens (est): ~125K input, ~42K output
Detection Patterns
| Pattern | Detected As |
|---|---|
/gmail, /gcal, /k8s:* |
Skill usage |
linux-sysadmin, k8s-orchestrator |
Agent usage |
gmail_delegate.py, gcal_delegate.py |
Delegations |
--model sonnet, --model haiku |
Model tier |
Token Estimation
- Rough estimate:
character_count / 4 ≈ tokens - More accurate if Claude CLI provides usage metadata
Config File
~/.claude/state/usage/config.json:
{
"log_level": "standard",
"default_range": "week",
"track_tokens": true
}
Future Enhancements
| FC | Title | Status |
|---|---|---|
| fc-036 | API token billing support | Deferred |
| fc-037 | Automatic usage summary | Identified |
| fc-038 | Usage dashboard file | Identified |
Implementation Checklist
- Create
~/.claude/state/usage/config.json - Create
~/.claude/skills/usage/SKILL.md - Create
~/.claude/commands/usage.md - Implement history parsing logic
- Test with existing session data
- Update fc-005 status to resolved