Skip to content

weijt606/claude-code-opc-toolkit

Repository files navigation

Claude-Code OPC Toolkit

English 中文  ·  Built for Claude Code License: MIT  ·  6 tools 7 statuslines 4 hooks GitHub stars

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.


Quickstart

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 transcripts

Requires 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).


Tools

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).

Usage

Sessions

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 resume

Token usage & cost: cc-limits

Quick note on /usage: Claude Code now ships a built-in /usage slash command. Type /usage in 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), so cc-limits complements 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 | free

Optional — 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 defaults

Full reference: docs/cc-limits.md/usage relationship in detail, pricing overrides for Sonnet/Haiku, tumbling-window mechanics, weekly-cap caveats, watch-mode env vars.

Daily worklog: cc-daily

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.

New skill in 1 command: cc-skill-init

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/).

Reduce permission prompts: cc-pilot

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.

Statusline gallery

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 seconds

Build-in-Public posting timestamp at ~/.claude/monitor/last-x-post:

cc-bip-posted   # run after each X / LinkedIn post — statusline shows ⚠ if > 24h ago

Each 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.


Hooks (optional)

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.

⚠️ New hooks do not fire in the current session — only in fresh ones.


How it works & safety

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 curl is the user-opt-in cc-daily --export notion to 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 the statusLine setting.

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.

Real risks worth knowing about

  • Privacy is on you. ~/.claude/monitor/events.jsonl carries prompt previews + full cwd paths; ~/.claude/projects/*/*.jsonl carries entire conversations. Don't commit either to a public repo. .gitignore covers events.jsonl already; if you sync ~/.claude/ anywhere, exclude projects/ too.
  • Estimates aren't authoritative. cc-limits plan budget, burn rate, reset countdown, and per-token cost projections are all derived locally and labeled ⚠ estimated, not authoritative for 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.

What this toolkit explicitly does NOT do

  • ❌ 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

Pause everything without uninstalling

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.

What I'm NOT 100% certain about

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.


Caveats

  • Tested on macOS / zsh; should work on Linux (BSD/GNU stat auto-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-limits ships with 5h-cap defaults verified 2026-05-07. Anthropic adjusts these — override with CC_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-limits only shows the 5h window.

Who is this for?

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.


Contributing

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.md is the only translated document; keep its structure aligned 1:1 with README.md so future updates can mirror cleanly
  • statuslines/bilingual-cn.sh is 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

License

MIT — use it, fork it, ship it.

About

Productivity toolkit for solo developers running Claude Code — cross-session dashboard, fzf resume picker, calibrated token/cost tracker, skill scaffolder, and permission profiles (safe/dev/yolo). Local-only, zero telemetry.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages