Claude Code productivity toolkit for solo full-stack AI developers — One-Person Company / Solo Founder / Solo Builder.
A growing workshop of small tools I extract from my own daily Claude Code workflow: cross-session visibility, one-keystroke resume, token usage tracking, skill scaffolding, daily worklogs, statusline templates. Issues and PRs welcome.
git clone https://github.com/weijt606/claude-code-opc-toolkit.git
cd claude-code-opc-toolkit
./install.sh
source ~/.zshrc
cc-status # see all your Claude Code sessions
cc-resume # interactively pick + resume any past session, anywhere on disk
cc-limits # token usage + cost across all transcriptsRequires bash, jq (a command-line JSON processor), and fzf (an interactive fuzzy picker for terminal lists). On macOS: brew install jq fzf.
For prompt-count stats and subagent tracking, also merge the hooks block from settings.example.json into ~/.claude/settings.json and run /hooks inside Claude Code (or restart).
| Tool | Status | What it does |
|---|---|---|
cc-status / cc-watch |
✅ | Cross-project session dashboard. Live mode with cc-watch (30s default; REFRESH_INTERVAL=5 for tighter). |
cc-resume |
✅ | Fuzzy-search picker across every past session (uses fzf), sorted by recency → claude --resume <id>. |
cc-limits |
✅ | Cross-project token usage + cost history with arbitrary windows, watch mode, statusline integration — complements Claude Code's built-in /usage (which is the authoritative source for current 5h quota). |
cc-daily |
✅ | Per-project daily-worklog.md writer. Optional --export obsidian / --export notion. |
cc-skill-init <name> |
✅ | Scaffold .claude/skills/<name>/ with frontmatter, Step-0 read-context, README, prompts, templates. |
cc-pilot suggest |
✅ | Read past transcripts, suggest permissions.allow patterns from Bash commands you've manually approved ≥ 5×. Refuses destructive patterns; shows the triggering command when blocking. |
cc-pilot safe / dev / yolo |
✅ | Launch Claude Code with a permission profile: safe (read-only), dev (safe + builds/tests + reversible git), yolo (--dangerously-skip-permissions after preflight: must be in a git repo, working tree clean, branch ≠ main/master/etc.). Profiles live as plain text in pilot/profiles/. |
cc-tail |
✅ | tail -f the hook event log with jq pretty-print. |
| Statusline gallery | ✅ | 7 plug-and-play statusLine scripts; swap with sl-default / sl-cost / sl-pomo / sl-bip / sl-cn / sl-minimal / sl-session. See statuslines/. |
| Hook event log | ✅ | SessionStart / SessionEnd / UserPromptSubmit / SubagentStop → ~/.claude/monitor/events.jsonl (a JSONL — one JSON object per line — append-only event stream). |
cc-status # one-shot dashboard
cc-watch # auto-refresh (30s default)
REFRESH_INTERVAL=5 cc-watch # tighter polling
cc-resume # fzf picker — pick any past session, Enter to resumeQuick note on
/usage: Claude Code now ships a built-in/usageslash command. Type/usagein any Claude Code session and you get: total session cost (API users), total API / wall duration, lines added/removed, and — for Pro/Max/Team subscribers — the authoritative current 5h plan-usage bar + reset countdown straight from Anthropic's server. For "where am I right now?" — just run/usage. It's interactive-only (no JSON/CLI form), socc-limitscomplements it with: cross-project history, cost in arbitrary windows, live processes, watch mode, statusline integration.
cc-limits # default window: last 24 hours
cc-limits -1h # window shorthand: -30m | -1h | -7d | -30d | --last 6h
cc-limits --watch # auto-refresh (30 s)Every window shows: live processes · window aggregates (tokens / cost / per-model) · top sessions by output. With CC_PLAN set, also adds a local-approximation plan-budget block (anchored to the current 5h tumbling block).
Optional — plan budget block (for continuous display in watch / statusline):
export CC_PLAN=max5 # one of: pro | max5 | max20 | team | freeOptional — calibration (only useful for statusline / watch where running /usage repeatedly isn't ergonomic):
# 1. Run /usage in Claude Code (or open claude.ai/settings/usage), note the %
# 2. Within a minute or two:
cc-limits --calibrate 40 # whatever % was shown — anchors local % to your account's weighting
cc-limits --calibrate-clear # revert to plan defaultsFull reference: docs/cc-limits.md — /usage relationship in detail, pricing overrides for Sonnet/Haiku, tumbling-window mechanics, weekly-cap caveats, watch-mode env vars.
cc-daily # write today's section to every active project
cc-daily 2026-05-06 # specific date (YYYY-MM-DD, UTC)
cc-daily --here # only the current project (cwd = current working directory)
cc-daily --dry-run # preview without writing
cc-daily --export obsidian # ALSO write to $CC_OBSIDIAN_VAULT/Daily Notes/<date>.md
cc-daily --export notion # ALSO push to $NOTION_DB_ID (needs $NOTION_API_KEY)Each project gets a single cumulative <project_root>/daily-worklog.md — newest day on top, prepended. Re-running for the same date replaces only that day's section; days you already annotated stay untouched.
cc-skill-init voc-collect -d "Mine customer quotes weekly" --opc
cc-skill-init seo-write -d "Draft SEO blog from voice + outline" --reads .agents/voice-of-customer.md
cc-skill-init my-utility --global # ~/.claude/skills/ instead of ./.claude/skills/Generates a complete skill structure (SKILL.md with frontmatter and Step 0 · Context check, README.md, prompts/starter.md, empty templates/ and examples/).
Three subcommands sharing one goal: stop clicking "yes" on routine prompts without opening up destructive operations.
cc-pilot suggest # learn from past approvals → recommend permissions.allow patterns
cc-pilot safe # launch with read-only profile
cc-pilot dev # launch with safe + builds + reversible git profile
cc-pilot yolo # launch with --dangerously-skip-permissions (preflight gated)All three are session-scoped and use only official Claude Code flags (--allowed-tools, --disallowed-tools, --dangerously-skip-permissions).
| Profile | Risk | Refuses to start unless… |
|---|---|---|
safe |
🟢 | (no preconditions — always safe to launch) |
dev |
🟡 | (no preconditions, but explicit deny list blocks force-push, rm -rf, sudo, etc.) |
yolo |
🔴 | inside a git repo · working tree clean · branch ≠ main/master/develop/prod/production/release/stable. Override with --i-understand-the-risk. |
Profiles are plain-text files in pilot/profiles/ — one Claude Code permission rule per line, # for comments. PRs welcome to extend dev.allow for languages we don't yet cover.
Full reference: docs/cc-pilot.md — full deny-list, read-only-verb whitelist, suggest output explained, all profile contents, yolo preflight rules.
7 plug-and-play statusLine scripts. Each is a single shell file that reads Claude Code's stdin JSON (.workspace.current_dir, .model.display_name, .context_window.used_percentage) and prints one short line. sl-* aliases swap the active statusline with one keystroke — restart the Claude Code session for it to take effect.
| Alias | Shows | Best for |
|---|---|---|
sl-default |
📁 dir ⎇ branch ✨ model ctx N% |
Daily driver — info-rich without clutter |
sl-cost |
✨ model ctx N% ⏰5h $X 📅24h $Y |
High-intensity days — keep token spend visible (override pricing with CC_PRICE_* env vars) |
sl-session |
📁 dir sid:xxx 🟢 live 3/8 🤖 12 |
Multi-session work — see live process count and today's subagent fires |
sl-pomo |
🍅 task 📁 dir ⏱ 18:42 focus |
Focus mode — 25min focus / 5min break Pomodoro with task label |
sl-bip |
📁 dir 🪙 142k 💬 35 🐦 6h |
Build-in-Public creators — nudges with ⚠ when last post > 24h |
sl-cn |
📁 项目 ✨ 模型 📊 N% 🪙 142k 🕐 14:30 |
Chinese-localized — Chinese labels, Beijing time, today's tokens |
sl-minimal |
model · dir |
Narrow terminals / minimalists |
Pomodoro state lives at ~/.claude/monitor/pomodoro.state:
cc-pomo-start "fix Stripe webhook 502" # start a focus block
cc-pomo-stop # cancel
# defaults: 25 min focus, 5 min break — override with CC_POMO_FOCUS / CC_POMO_BREAK in secondsBuild-in-Public posting timestamp at ~/.claude/monitor/last-x-post:
cc-bip-posted # run after each X / LinkedIn post — statusline shows ⚠ if > 24h agoEach statusline is ~50 lines of bash. Want a custom one? Copy any of the existing scripts in statuslines/, tweak the printf, drop your .sh next to them, and ln -sf it into ~/.claude/statusline-command.sh. Full gallery doc + stdin schema reference: statuslines/README.md.
Adds prompt counts, subagent tracking, and per-project activity stats. Merge the hooks block from settings.example.json into ~/.claude/settings.json, then run /hooks inside Claude Code or restart.
This toolkit reads only local files Claude Code writes for you. It makes zero outbound network requests, calls no Anthropic API, scrapes no claude.ai pages, and never touches your OAuth tokens or API keys.
| Behavior | This toolkit |
|---|---|
| Sends data to Anthropic | ❌ never |
| Calls Anthropic API (incl. private endpoints) | ❌ never |
| Reads / uploads OAuth tokens or API keys | ❌ never |
| Scrapes claude.ai or other web UIs | ❌ never |
| Loops Claude calls to inflate usage / bypass rate limits | ❌ never |
| Phones home with telemetry of any kind | ❌ never |
Uses Claude Code's official hooks API |
✅ passive: read stdin → append JSONL |
Reads ~/.claude/projects/*/*.jsonl (your own transcripts) |
✅ your local files |
Invokes claude --resume <id> (documented public CLI flag) |
✅ standard usage |
On account-ban / platform-alert risk — we can only describe what this toolkit does, not predict how Anthropic interprets its own ToS. What we can verify:
- The toolkit makes zero outbound requests to Anthropic services (the lone
curlis the user-opt-incc-daily --export notionto api.notion.com). - It reads only files Claude Code itself writes to your local disk (
~/.claude/projects/,~/.claude/sessions/). - It uses only officially-documented extension points: hooks (
SessionStart/SessionEnd/UserPromptSubmit/SubagentStop),claude --resume,claude --allowed-tools/--disallowed-tools/--dangerously-skip-permissions, and thestatusLinesetting.
Whether your account stays in good standing depends on how you use these capabilities, not on the wrapper. Running git push --force from a wrapper script isn't materially different from typing it yourself — both are bound by your own judgment.
On the cc-limits "% used" estimate — every number is computed locally from your own transcript JSONL files. The tool counts unique requestId values and divides by the plan cap (Anthropic-published defaults; you can override via --calibrate against /usage or your claude.ai/settings/usage reading). For an authoritative current-window %, prefer Claude Code's built-in /usage slash command — it queries the server directly. cc-limits' arithmetic is all-local: no API call, no scraping, no Anthropic-internal data.
- Privacy is on you.
~/.claude/monitor/events.jsonlcarries prompt previews + full cwd paths;~/.claude/projects/*/*.jsonlcarries entire conversations. Don't commit either to a public repo..gitignorecoversevents.jsonlalready; if you sync~/.claude/anywhere, excludeprojects/too. - Estimates aren't authoritative.
cc-limitsplan budget, burn rate, reset countdown, and per-token cost projections are all derived locally and labeled⚠ estimated, not authoritativefor a reason. Treat them as guardrails, not gospel — Anthropic's real meter can throttle earlier or later. - Hooks are powerful. Our four hooks are passive (stdin → JSONL), but if you or a teammate later adds a hook that calls external services, that's on you. Audit yours anytime:
jq '.hooks' ~/.claude/settings.json.
- ❌ Loop-call Claude to inflate or game usage stats
- ❌ Read, copy, or share your OAuth tokens / API keys
- ❌ Scrape undocumented endpoints or web UIs
- ❌ Phone home with anonymized usage data (or any data at all)
- ❌ Modify Claude Code's binary or inject code into its runtime
Add to ~/.claude/settings.json:
{ "disableAllHooks": true }Aliases stay (so cc-status etc. still work read-only on the existing data) but no new events get appended. Remove the line to re-enable.
I haven't read every line of Anthropic's full ToS and can't promise some clause doesn't apply in some unusual interpretation. The reasoning above is based on what the toolkit does (zero network, local-files-only, official APIs only) being clearly orthogonal to the kinds of behaviors platforms typically police (credential theft, API abuse, scraping, fake usage). If you want full reassurance, the safe move is to email Anthropic support and link this README — happy to amend based on any feedback.
- Tested on macOS / zsh; should work on Linux (BSD/GNU
statauto-detected) but not yet verified. - For authoritative current 5h quota %, use Claude Code's
/usage.cc-limits' plan-budget block is a local approximation — useful for watch / statusline, not as ground truth. - Plan defaults drift.
cc-limitsships with 5h-cap defaults verified 2026-05-07. Anthropic adjusts these — override withCC_PLAN_MSG_LIMIT_5H(or just check/usage). - Weekly rate-limit cap is not yet modeled. Anthropic enforces a separate 7-day rolling cap;
cc-limitsonly shows the 5h window.
Solo full-stack AI developers running multiple Claude Code sessions in parallel. Whatever you call yourself — OPC, Solo Founder, Solo Builder, Indie Hacker, Vibe Coder — same toolset, same problem.
When you're alone with Claude Code as your engineering leverage, observability matters more than in team environments. This toolkit replaces "where were we?" with a dashboard.
PRs welcome. The bar is "would I install this in my own ~/.claude/ tomorrow?" — pragmatic over polished, opinionated over comprehensive. Bug reports and questions equally welcome.
Language policy — keep things English by default:
- All code, shell comments, error/help messages, and docs → English
README.zh-CN.mdis the only translated document; keep its structure aligned 1:1 withREADME.mdso future updates can mirror cleanlystatuslines/bilingual-cn.shis the only script whose rendered output is intentionally Chinese (its source comments stay English)- The
alt="中文"text inside the language-switcher badge stays as-is — it's the visible label readers click to flip languages
MIT — use it, fork it, ship it.