中文 | 日本語 | 한국어 | Deutsch | Français | Español
Claude Code and Codex leaderboard among friends. Track coding agent token usage, costs, active status, and agent mix across Claude Code, Codex, OpenCode, Amp, Grok, and Pi.
npx ccclub initIt asks your name, gives you a 6-letter code. Send it to friends:
npx ccclub join YHAW6PDone. ccclub automatically detects supported coding agent logs on your machine and keeps usage synced. No config, no signup, no account.
Once a friend joins, check the leaderboard:
ccclubccclub reads local usage logs that supported coding agents already write, bundles them into 30-minute summaries (agent source + token counts + cost), and uploads those numbers. No prompts, no code, no file paths, no project names — just counters. Run ccclub show-data to audit exactly what gets sent.
Supported sources:
| Agent | Default location |
|---|---|
| Claude Code | ~/.config/claude/projects, ~/.claude/projects |
| Codex | ~/.codex/sessions |
| OpenCode | ~/.local/share/opencode |
| Amp | ~/.local/share/amp/threads |
| Pi | ~/.pi/agent/sessions |
| Grok | ~/.grok/logs/unified.jsonl |
If you use the default locations, there is nothing to configure. Custom locations are supported with CLAUDE_CONFIG_DIR, CODEX_HOME, OPENCODE_DATA_DIR, AMP_DATA_DIR, PI_AGENT_DIR, and GROK_HOME.
The leaderboard deliberately tracks coding agents only — usage from personal-assistant tools (e.g. OpenClaw) is excluded server-side so it can never inflate anyone's rank.
Everyday use — these four are all you need:
ccclub init # One-time setup, creates a group
ccclub join <CODE> # Join a friend's group
ccclub sync # Manual sync; auto-sync also runs after setup
ccclub # Show the leaderboardMore options:
ccclub -d 1 # Time window: 1 / 7 / 30 / all
ccclub --no-cache # Exclude cache tokens from count
ccclub --all # Show all members, including those with no activity today
ccclub --global # Everyone who opted in
ccclub -g YHAW6P # Specific group
ccclub --json # Raw JSON output — pipe to jq, feed to agentsIf you want more, it's there:
ccclub create # Make another group
ccclub profile # See your profile
ccclub profile --name "new name" # Change display name
ccclub profile --avatar "URL" # Custom avatar
ccclub profile --public # Show up on global board
ccclub profile --private # Hide from global (default)
ccclub show-data # See exactly what gets uploaded
ccclub statusline on|off # Claude Code statusline toggleSetup also enables a statusline inside Claude Code — current model and reasoning effort, 5-hour/7-day usage limits (plus the model-scoped weekly cap when your plan has one), and today's rank:
Fable 5 xhigh | 5h: 15% / 7d: 43% / Fable: 8% | #11/67 $19.0
It is only enabled when no other statusline is configured: if you use cc-costline (a richer statusline that already shows your ccclub rank) or any custom command, ccclub never touches it. Toggle anytime:
ccclub statusline off # Remove (and never auto-enable again)
ccclub statusline on # Bring it backRendering reads only local caches kept fresh by the auto-sync hooks — no network calls, ~30 ms.
Thanks to my friend Ventuss — we borrowed a lot of the statusline code from cc-costline. ❤️
Every group gets a live page:
https://ccclub.dev/g/YHAW6P
Period switcher (today / 7d / 30d / all time), avatars, active status, agent mix, auto-refresh every 5 minutes. There's also a global page at /g/global for public users.
Uploads only this:
{
"blockStart": "2025-02-13T00:00:00Z",
"blockEnd": "2025-02-13T00:30:00Z",
"source": "claude",
"inputTokens": 48210,
"outputTokens": 12050,
"cacheCreationTokens": 0,
"cacheReadTokens": 31200,
"reasoningTokens": 0,
"totalTokens": 91460,
"costUSD": 0.2184,
"models": ["claude-sonnet-4-5-20250929"],
"entryCount": 23
}You are private by default — visible only in groups you've joined. Global leaderboard is opt-in (ccclub profile --public).
packages/
shared/ Types, constants + model pricing
cli/ ccclub — Commander.js CLI
worker/ Cloudflare Worker — Hono API + KV + dashboard
Auto-sync: ccclub init installs Claude Code SessionEnd + Stop hooks and a lightweight background sync that keeps Codex, OpenCode, Amp, Grok, and Pi fresh (throttled to once per 5 minutes).
Model pricing: costs are computed locally against a compact price table derived from LiteLLM — the same upstream ccusage uses. The Worker refreshes it daily and serves it at /api/pricing; the CLI keeps a 24-hour local cache (~/.ccclub/pricing.json) with a bundled snapshot as offline fallback. New models are priced correctly within a day, with no CLI update required.
Scan cache: sync only re-reads log files whose mtime/size changed (~/.ccclub/scan-cache/), so steady-state syncs take milliseconds regardless of history size.
For agents and scripts: ccclub --json prints the raw leaderboard JSON, and ccclub.dev/llms.txt documents the public HTTP API.
pnpm install
pnpm build
pnpm dev:worker # localhost:8787
# In another terminal
CCCLUB_API_URL=http://localhost:8787 ccclub initMIT
