Jay's Claude Code toolbox โ a personal collection of hooks, commands, skills, and agents for everyday Claude Code workflows, packaged as a single plugin so every machine stays in sync.
Instead of copying install scripts between machines, register the marketplace once and sync everything with git push โ plugin update.
/plugin marketplace add jyh4358/jay-plugin
/plugin install jay-plugin@jay-plugin
โ ๏ธ If you previously installed these hooks manually, remove the old entries (Stophooks in~/.claude/settings.jsonand~/.claude/commands/tokens.md) to avoid double execution.
Requirements: Python 3.9+ ยท macOS (for notifications only โ the token reporter works everywhere)
| Type | Name | Description | Status |
|---|---|---|---|
| Hook (Stop) | plan-usage | Per-turn token usage report as a system message after every response | โ |
| Hook (Stop ยท Notification) | stop-notify | macOS notification on response completion (Glass) and when Claude is waiting for your input โ permission requests, questions (Ping) | โ |
| Command | /tokens | Ranks the current session's turns by weighted usage and explains why the heavy ones were heavy | โ |
| Statusline | statusline | Model ยท git branch/worktree ยท 5h/weekly plan usage bars with reset timers ยท session time ยท context usage | โ |
| Skill | /commit | Analyzes staged changes, generates a Korean Conventional-Commits message (optional Jira ID), confirms, then commits | โ |
| Skill | /record | Records session work into the My Track Record Obsidian vault as resume-ready task notes โ why/how/result structure, short interview, confidentiality filter | โ |
| Skill | /record-review | Monthly vault maintenance โ re-evaluates resume/impact on work notes, checks frontmatter & wikilink integrity across work/learning notes (report โ confirm โ apply) | โ |
| Skill | /learn | Captures things learned mid-session (or user-specified concepts) into the vault as knowledge notes โ fixed frontmatter, free-form body, "why" required, fact-checked against primary sources, always-on generalization filter | โ |
| Agents | โ | (planned) | ๐ง |
New components go into their directory (hooks/ commands/ skills/ agents/) โ push, then update the plugin on each machine.
Shows what every turn actually consumed, right after it finishes:
โโโโโโ ์ด ํด ํ๋ ํ ํฐ โโโโโโ
Q: ์ฌ์ฉํ๋ ๋ชจ๋ธ ๊ธฐ์ค์ผ๋ก ์ถ๋ ฅ๋๊ฒ ํ ์ ์์ด?
๋ชจ๋ธ: claude-opus-5
์์ง(์ ๊ท) ~62,948 ์ฌ์ฌ์ฉ(์บ์) 10,071,993 ๊ฐ์คโ1.21M (Opus์
๋ ฅ ํ์ฐ)
โ ์ถ๋ ฅ ์์ฑ 24,287
โ ์ ๊ท ์
๋ ฅ 38,661
์ง๋ฌธ+์์คํ
3,059 / ๋๊ตฌ๊ฒฐ๊ณผ 5,449 / ๋ฃจํ์ฌ์
๋ ฅ 30,153
๋๊ตฌ๋ณ ์ ์
(์ถ์ ):
Read ~ 3,644 (1ํ)
์ธ์
๋์ : ์์ง ~138,536 ๊ฐ์คโ2.25M (9ํด)
- Weighted usage โ a single index in Opus-input-token equivalents. Reflects model tier (haiku 0.2x / sonnet 0.4โ0.6x / opus 1x / fable 2x), output 5x, cache reads 0.1x โ a more honest proxy for plan consumption than raw token counts.
- Subagent-aware โ reads
agent-*.jsonltranscripts and attributes their usage to the turn that spawned them. - Ledger โ
~/.claude/token-usage/<session>.json, ~0.5 KB per turn. Stores numbers only (plus the first 200 chars of each question) โ never conversation content. - Future-proof pricing โ built-in table โ family inference for brand-new models (opus/sonnet/haiku/fable)
โ user override via
~/.claude/token-usage/prices.json. No code edits when models or prices change.
SCRIPT=~/.claude/plugins/โฆ/jay-plugin/scripts/plan_usage.py # installed path
python3 $SCRIPT --rank <session-id> # recomputed ranking for one session
python3 $SCRIPT --rank-all # all sessions (--since YYYY-MM-DD / --json)
python3 $SCRIPT --log <session-id> # read the stored ledger
python3 $SCRIPT --repair # reconcile ledger against transcripts (--yes to apply, keeps .bak)- Figures are local approximations. The authoritative plan-usage number is
/usage. - Once Claude Code's transcript retention (default 30 days) cleans a session,
recomputation (
--rank/--repair) is no longer possible โ the ledger keeps the last known values.
Model: Fable 5 | branch:main
5h:[โโโโโโโโ]7%(4h32m) wk:[โโโโโโโโ]17%(5d15h) | session:6m | ctx:[โโโโโโโโโโ]9%
Two rows: the first holds the identity segments that vary in length (model, branch/worktree),
the second the near-fixed-width numbers. A single row overflows a split pane and gets cut with
..., and wrapping it would move the segment boundaries on every refresh โ a fixed split keeps
each value in the same place.
Renders entirely from the JSON Claude Code pipes to the statusline command โ no network calls,
no dependencies (rate limits require a subscription/OAuth login; the segment is skipped for API-key users).
Colors: green โ yellow (โฅ70%) โ red (โฅ90%).
session is colored by elapsed time alone (โฅ60m yellow, โฅ120m red) and formatted 7m / 2h5m / 5d3h;
context pressure is already reported by the ctx segment next to it.
Inside a linked git worktree the branch segment becomes branch:feat-x (wt:feat-x).
Plugins can't register a statusline automatically, so add this once per machine to ~/.claude/settings.json
(after installing the plugin):
"statusLine": {
"type": "command",
"command": "python3 \"${CLAUDE_CONFIG_DIR:-$HOME/.claude}/plugins/marketplaces/jay-plugin/scripts/statusline.py\""
}Two distinct sounds so you can tell them apart without looking:
| Event | Sound | Meaning |
|---|---|---|
Response finished (Stop) |
Glass | done โ come check the result |
Waiting for you (Notification) |
Ping | action needed โ permission request, question, or idle prompt |
The notification title is the session title (custom title first, then AI title).
Jay์ Claude Code ํด๋ฐ์ค โ ์ผ์ ์ํฌํ๋ก์์ ๋ฐ๋ณตํด ์ฐ๋ ํ
ยท์ปค๋งจ๋ยท์คํฌยท์์ด์ ํธ๋ฅผ
ํ๋์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ฌถ์ด ์ฌ๋ฌ ๋งฅ์์ ๋์ผํ๊ฒ ์ฐ๊ธฐ ์ํ ๊ฐ์ธ ์ปฌ๋ ์
.
์๋ ์ค์น ์คํฌ๋ฆฝํธ๋ฅผ ๊ธฐ๊ธฐ๋ง๋ค ์ฎ๊ธฐ๋ ๋์ , ๋ง์ผํ๋ ์ด์ค ๋ฑ๋ก ํ ๋ฒ์ผ๋ก ์ค์นํ๊ณ
git push โ ํ๋ฌ๊ทธ์ธ ์
๋ฐ์ดํธ๋ก ๋ชจ๋ ๊ธฐ๊ธฐ๋ฅผ ๋๊ธฐํํ๋ค.
/plugin marketplace add jyh4358/jay-plugin
/plugin install jay-plugin@jay-plugin
โ ๏ธ ์ด์ ์ ์๋์ผ๋ก ์ค์นํ๋ ๋งฅ์ด๋ผ๋ฉด ๋ค์์ ์ ๊ฑฐํด์ผ ์ด์ค ์คํ๋์ง ์๋๋ค:~/.claude/settings.json์ Stop ํ 2๊ฐ(plan_usage, stop-notify),~/.claude/commands/tokens.md
| ์ข ๋ฅ | ์ด๋ฆ | ์ค๋ช |
|---|---|---|
| ํ (Stop) | plan-usage | ๋งค ํด ์ข ๋ฃ ์ ํ ํฐ ์ฌ์ฉ๋ ๋ฆฌํฌํธ๋ฅผ ์์คํ ๋ฉ์์ง๋ก ํ์ |
| ํ (StopยทNotification) | stop-notify | ์๋ต ์๋ฃ(Glass์), ์ ๋ ฅ ๋๊ธฐ โ ๊ถํ ์์ฒญยท์ง๋ฌธ โ ์(Ping์) macOS ์๋ฆผ |
| ์ปค๋งจ๋ | /tokens |
ํ์ฌ ์ธ์ ์ ๊ฐ์ค ์ฌ์ฉ๋ ๋ญํน + ์ ๋ฌด๊ฑฐ์ ๋์ง ๋ถ์ |
| ์ํ์ค | statusline | ๋ชจ๋ธ ยท git ๋ธ๋์น/์ํฌํธ๋ฆฌ ยท 5h/์ฃผ๊ฐ ํ๋ ์ฌ์ฉ๋ ๋ง๋(๋ฆฌ์ ํ์ด๋จธ) ยท ์ธ์ ์๊ฐ ยท ์ปจํ ์คํธ ์ฌ์ฉ๋ฅ ํ์ |
| ์คํฌ | /commit |
๋ณ๊ฒฝ์ฌํญ ๋ถ์ โ Conventional Commits ํ๊ตญ์ด ์ปค๋ฐ ๋ฉ์์ง ์์ฑ(Jira ID ์ง์) โ ํ์ธ ํ ์ปค๋ฐ |
| ์คํฌ | /record |
์ธ์ ์์ ํ ์์ ์ Obsidian vault(My Track Record)์ ๋ฌด์์/์/์ด๋ป๊ฒ/์ฑ๊ณผ ๊ตฌ์กฐ์ ์์ ๋ ธํธ๋ก ๊ธฐ๋ก โ ๋ถ์กฑํ ๋งฅ๋ฝ ์ธํฐ๋ทฐ + ํ์ฌ ๊ธฐ๋ฐ ๋ณด์ ํํฐ |
| ์คํฌ | /record-review |
vault ์๊ฐ ์ ๊ฒ โ ์์ ๋ ธํธ resumeยทimpact ์ฌํ๊ฐ, ์์ ยทํ์ต ๋ ธํธ frontmatterยทwikilink ๋ฌด๊ฒฐ์ฑ ์ ๊ฒ (๋ฆฌํฌํธ โ ํ์ธ โ ๋ฐ์) |
| ์คํฌ | /learn |
์ธ์ ์ค ์๋ก ์๊ฒ ๋ ๊ฒยท๊ฐ๋ ์ ๋ฆฌ๋ฅผ ํ์ต ๋ ธํธ๋ก ๊ธฐ๋ก โ frontmatter ๊ณ ์ + ๋ณธ๋ฌธ ์์ , '์/์๋ฆฌ' ํ์, 1์ฐจ ์ถ์ฒ ๊ฒ์ฆ(ํ๋ฆฐ ์ง์์ ์์ ํ์ฌ ๊ธฐ๋ก), ์ผ๋ฐํ ํํฐ ์์ ์ ์ฉ |
- ๊ฐ์ค ์ฌ์ฉ๋: Opus ์ ๋ ฅ ํ ํฐ์ผ๋ก ํ์ฐํ ๋จ์ผ ์ง์. ๋ชจ๋ธ ํฐ์ด(haiku 0.2x / sonnet 0.4~0.6x / opus 1x / fable 2x), ์ถ๋ ฅ 5x, ์บ์์ฝ๊ธฐ 0.1x ๋ฐ์.
- ์๋ธ์์ด์ ํธ ํฌํจ:
agent-*.jsonl์ ์ฝ์ด ๊ฐ ํด์ ์๊ฐ ๊ธฐ์ค์ผ๋ก ๊ท์. - ์ฅ๋ถ:
~/.claude/token-usage/<์ธ์ ID>.jsonโ ํด๋น ~0.5KB ์์ฝ๋ง ์ ์ฅ (๋ํ ๋ณธ๋ฌธ ์์, ์ง๋ฌธ ์ 200์๋ง). - ๋จ๊ฐ(๊ฐ์ค์น ์์ฒ): ๋ด์ฅ ํ โ ๊ณ์ด ์ถ์ โ
~/.claude/token-usage/prices.json์ค๋ฒ๋ผ์ด๋ ์. ์ ๋ชจ๋ธ์ด ๋์๋ ๊ณ์ด๋ก ์๋ ์ถ์ ํ๊ณ , ๊ฐ๊ฒฉ์ด ๋ค๋ฅด๋ฉด prices.json ์ ํ ์ค ์ถ๊ฐ.
- ์์น๋ ๋ก์ปฌ ๊ทผ์ฌ์น๋ค. ํ๋ ์ค์ ์์ง์จ์ ๊ถ์๊ฐ์
/usage. - transcript(
~/.claude/projects/**)๊ฐ ๋ณด์กด ๊ธฐ๊ฐ(๊ธฐ๋ณธ 30์ผ)์ผ๋ก ์ ๋ฆฌ๋๋ฉด ํด๋น ์ธ์ ์ ์ฌ๊ณ์ฐ์ ๋ถ๊ฐ๋ฅํด์ง๊ณ , ์ฅ๋ถ์ ๊ธฐ์กด ๊ฐ๋ง ๋จ๋๋ค.