claude-token-saver 3.35.0 โ†’ 3.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.en.md +53 -41
  2. package/README.md +53 -41
  3. package/package.json +1 -1
package/README.en.md CHANGED
@@ -20,6 +20,8 @@ Three numbers are the whole pitch.
20
20
  - **510,000 tokens on one document**: a 30MB deck read as Markdown instead of raw XML ([evidence](#-doc2md--documents-become-markdown-before-the-model-reads-them))
21
21
  - **Routing savings are a per-run ledger**: the price difference of each delegated run, not an estimate ([evidence](#-the-savings-figure-is-a-ledger-entry-not-an-estimate))
22
22
 
23
+ Since v3.35.0 spend is visible too: month-to-date spend shows as `๐Ÿ’ต Sep $42`, and on LiteLLM gateways (Bedrock and friends) with no 5h/7d caps, your key budget renders as a `๐Ÿ”‘ budget โ–ฐโ–ฑ 34% $34/$100` gauge.
24
+
23
25
  ## Four parts, working together
24
26
 
25
27
  | | What it does | Effect |
@@ -33,6 +35,54 @@ One install sets up all four. The measured โˆ’18.6% comes from the harness and r
33
35
 
34
36
  The two savings figures are never added together, because they answer different questions. Routing says "the same work ran on a cheaper model". Conversion says "a file you could not read became readable, without pushing the original through the context window". The statusline gives each its own line and puts the larger one first.
35
37
 
38
+ ## Contents
39
+
40
+ - **Start here**: [Getting started](#getting-started) ยท [Reading the statusline](#reading-the-statusline) ยท [Commands](#commands)
41
+ - **Savings**: [The routing ledger](#-the-savings-figure-is-a-ledger-entry-not-an-estimate) ยท [route-scan](#-route-scan--this-recurring-task-could-run-on-a-cheaper-tier) ยท [doc2md](#-doc2md--documents-become-markdown-before-the-model-reads-them) ยท [seed](#-seed-delegation-that-works-from-the-first-session)
42
+ - **Guardrails**: [Harness](#-harness-mode) ยท [compact-window](#-compact-window--pin-where-a-1m-session-compacts) ยท [Korean writing guidance](#-korean-writing-guidance)
43
+ - **Spend & environments**: [Monthly spend ยท LiteLLM key budget](#litellm-your-key-budget-stands-in-for-the-missing-5h7d-caps-v3350) ยท [Gateways (Bedrock/Vertex)](#-behind-a-gateway-bedrock--vertex) ยท [Spike issue codes](#spike-issue-codes) ยท [Measured impact](#real-world-impact--beforeafter-report)
44
+
45
+ ## Getting started
46
+
47
+ **Prerequisite:** Node.js โ‰ฅ 18 (`node -v` ยท macOS `brew install node` ยท Windows `winget install OpenJS.NodeJS.LTS` ยท Linux/WSL: [nvm](https://github.com/nvm-sh/nvm) recommended)
48
+
49
+ ```bash
50
+ npm uninstall -g claude-cache-monitor # (previous-package users only)
51
+ npm i -g claude-token-saver
52
+ ```
53
+
54
+ The statusline appears at the bottom of Claude Code right away. If auto-registration was skipped (`--ignore-scripts`, sudo, sandboxed installs), run `claude-token-saver install`.
55
+
56
+ One install sets up everything: **statusline, Skill, SessionStart hook, the ๐Ÿ…ท Harness (5 principles), and a first route-scan.** The harness and the Korean writing guidance **show what they add and ask before enabling it.** The harness is **appended** to `~/.claude/CLAUDE.md` as a marked block (your existing content is backed up and preserved) and is left alone if one is already there.
57
+
58
+ Outside a terminal โ€” npm `postinstall`, CI, piped stdin โ€” the question is skipped and the old defaults apply. Use `--yes` or `--no-input` to skip it deliberately, `CTS_NO_HARNESS=1 npm i -g claude-token-saver` to skip the harness entirely, and `claude-token-saver harness uninit --global` to undo it.
59
+
60
+ > โš ๏ธ Avoid `sudo` global installs โ€” the Skill lands in root's `~/.claude` instead of yours. Use nvm/fnm/Volta or `npm config set prefix ~/.npm-global`.
61
+
62
+ ### What the install turns on, and what stays manual
63
+
64
+ Everything that costs nothing until it is needed is on after a plain install. The only manual items are the ones that change Claude Code's own settings or need a human to pick a scope.
65
+
66
+ | Feature | After install | How to turn it off |
67
+ |---|---|---|
68
+ | statusline (diagnostic chips, savings ledger) | on | `claude-token-saver uninstall` |
69
+ | `/claude-token-saver` Skill | on | same |
70
+ | SessionStart hook (route-scan refresh) | on | same |
71
+ | UserPromptSubmit hook (brief injection) | on | same |
72
+ | First route-scan (last 14 days of logs) | runs once during the install | n/a |
73
+ | ๐Ÿ…ท Harness 5 principles (`~/.claude/CLAUDE.md`) | on (shown and confirmed once at a terminal) | `harness uninit --global`, `CTS_NO_HARNESS=1` |
74
+ | doc2md hooks (Read, Edit/Write, prompt) | on | `doc2md off`, `CTS_NO_DOC2MD=1` |
75
+ | doc2md converter (markitdown venv) | offered at a terminal; an unattended install prints the command | install later with `doc2md install-converter` |
76
+ | Korean writing guidance | on when the locale is Korean (asked at a terminal) | `korean off`, `CTS_NO_KOREAN=1` |
77
+ | compact-window warning chip | on | `compact-window off` |
78
+ | Update-available chip | on | `CTS_NO_UPDATE_CHECK=1` |
79
+ | **Pinning compact-window** (`autoCompactWindow` 500k) | **off โ€” run it yourself** | `compact-window set --global` or `--project` |
80
+ | **Model-fitting rules** (`ratchet-model.md` delegations) | **candidates are proposed only** | review and approve with `route-scan rules` |
81
+ | `handoff` (back up work before a cap) | an on-demand command | n/a |
82
+
83
+ `compact-window set` writes into Claude Code's `settings.json` and a human has to choose global or project scope, so it is never run for you. Model-fitting rules keep an approval step for the same reason: which work belongs on a cheaper tier is your call.
84
+
85
+
36
86
  ## ๐Ÿ”€ The savings figure is a ledger entry, not an estimate
37
87
 
38
88
  Every delegated run is recorded like this:
@@ -72,6 +122,7 @@ By run (newest first):
72
122
  |---|---|
73
123
  | ๐Ÿšจ **No surprise rate limits** | Warns when the 5H/7D window hits 90%; `handoff` backs up your work |
74
124
  | ๐Ÿง  **Cache waste detection** | Hit rate, TTL, 1M-context detection โ€” spikes diagnosed with issue codes |
125
+ | ๐Ÿ’ต **Spend visibility** | Month-to-date spend (`๐Ÿ’ต Sep $42`) always on; behind a LiteLLM gateway the key budget gauge (`๐Ÿ”‘ budget 34% $34/$100`) stands in for the missing 5h/7d caps ([below](#litellm-your-key-budget-stands-in-for-the-missing-5h7d-caps-v3350)) |
75
126
  | ๐Ÿ‡ฐ๐Ÿ‡ท **Korean writing guidance** | Offered at install time, defaulting to your locale ([below](#-korean-writing-guidance)) |
76
127
 
77
128
  ## Not a router โ€” 60 seconds
@@ -103,46 +154,6 @@ Measured rule-health โ€” whether a delegated run actually succeeded โ€” landed i
103
154
 
104
155
  ---
105
156
 
106
- ## Getting started
107
-
108
- **Prerequisite:** Node.js โ‰ฅ 18 (`node -v` ยท macOS `brew install node` ยท Windows `winget install OpenJS.NodeJS.LTS` ยท Linux/WSL: [nvm](https://github.com/nvm-sh/nvm) recommended)
109
-
110
- ```bash
111
- npm uninstall -g claude-cache-monitor # (previous-package users only)
112
- npm i -g claude-token-saver
113
- ```
114
-
115
- The statusline appears at the bottom of Claude Code right away. If auto-registration was skipped (`--ignore-scripts`, sudo, sandboxed installs), run `claude-token-saver install`.
116
-
117
- One install sets up everything: **statusline, Skill, SessionStart hook, the ๐Ÿ…ท Harness (5 principles), and a first route-scan.** The harness and the Korean writing guidance **show what they add and ask before enabling it.** The harness is **appended** to `~/.claude/CLAUDE.md` as a marked block (your existing content is backed up and preserved) and is left alone if one is already there.
118
-
119
- Outside a terminal โ€” npm `postinstall`, CI, piped stdin โ€” the question is skipped and the old defaults apply. Use `--yes` or `--no-input` to skip it deliberately, `CTS_NO_HARNESS=1 npm i -g claude-token-saver` to skip the harness entirely, and `claude-token-saver harness uninit --global` to undo it.
120
-
121
- > โš ๏ธ Avoid `sudo` global installs โ€” the Skill lands in root's `~/.claude` instead of yours. Use nvm/fnm/Volta or `npm config set prefix ~/.npm-global`.
122
-
123
- ### What the install turns on, and what stays manual
124
-
125
- Everything that costs nothing until it is needed is on after a plain install. The only manual items are the ones that change Claude Code's own settings or need a human to pick a scope.
126
-
127
- | Feature | After install | How to turn it off |
128
- |---|---|---|
129
- | statusline (diagnostic chips, savings ledger) | on | `claude-token-saver uninstall` |
130
- | `/claude-token-saver` Skill | on | same |
131
- | SessionStart hook (route-scan refresh) | on | same |
132
- | UserPromptSubmit hook (brief injection) | on | same |
133
- | First route-scan (last 14 days of logs) | runs once during the install | n/a |
134
- | ๐Ÿ…ท Harness 5 principles (`~/.claude/CLAUDE.md`) | on (shown and confirmed once at a terminal) | `harness uninit --global`, `CTS_NO_HARNESS=1` |
135
- | doc2md hooks (Read, Edit/Write, prompt) | on | `doc2md off`, `CTS_NO_DOC2MD=1` |
136
- | doc2md converter (markitdown venv) | offered at a terminal; an unattended install prints the command | install later with `doc2md install-converter` |
137
- | Korean writing guidance | on when the locale is Korean (asked at a terminal) | `korean off`, `CTS_NO_KOREAN=1` |
138
- | compact-window warning chip | on | `compact-window off` |
139
- | Update-available chip | on | `CTS_NO_UPDATE_CHECK=1` |
140
- | **Pinning compact-window** (`autoCompactWindow` 500k) | **off โ€” run it yourself** | `compact-window set --global` or `--project` |
141
- | **Model-fitting rules** (`ratchet-model.md` delegations) | **candidates are proposed only** | review and approve with `route-scan rules` |
142
- | `handoff` (back up work before a cap) | an on-demand command | n/a |
143
-
144
- `compact-window set` writes into Claude Code's `settings.json` and a human has to choose global or project scope, so it is never run for you. Model-fitting rules keep an approval step for the same reason: which work belongs on a cheaper tier is your call.
145
-
146
157
  ## Reading the statusline
147
158
 
148
159
  Once the savings ledger has entries it renders as **two rows** โ€” routing savings on row 1, diagnostics on row 2.
@@ -156,7 +167,8 @@ With an empty ledger (no measured delegation yet) row 1 is not drawn and the lay
156
167
 
157
168
  | Segment | Meaning |
158
169
  |---|---|
159
- | `๐Ÿ”€` **row 1** | **Lifetime routing savings + the model changes behind them.** The total is green, the breakdown gray. The breakdown sums exactly to the total (all pairs, never truncated) and drops version digits, which churn (`claude-opus-4-5-โ€ฆ` โ†’ `opus`). Full audit: `route-scan savings` |
170
+ | `๐Ÿ”€` **row 1** | Lifetime routing savings + the model moves behind them. The breakdown sums exactly to the total, model names keep only the family (`opusโ†’haiku`). Full audit: `route-scan savings` |
171
+ | `๐Ÿ“„` **row 2** | Lifetime doc2md conversion savings with a per-format breakdown. Whichever of routing/conversion saved more takes row 1 |
160
172
  | `๐Ÿค–` | Active model |
161
173
  | `๐Ÿ…ท 5/5` | Harness principle score ([Harness mode](#-harness-mode)) |
162
174
  | `๐Ÿง ` | Cache hit rate (green at 85%+) |
package/README.md CHANGED
@@ -20,6 +20,8 @@ npm i -g claude-token-saver
20
20
  - **๋ฌธ์„œ ํ•œ ๊ฑด์— 51๋งŒ ํ† ํฐ**: 30MB ๋ฐœํ‘œ์ž๋ฃŒ๋ฅผ XML ๋Œ€์‹  Markdown ์œผ๋กœ ์ฝ์—ˆ์„ ๋•Œ ([๊ทผ๊ฑฐ](#-doc2md-๋ฌธ์„œ๋ฅผ-์ฝ๊ธฐ-์ „์—-markdown-์œผ๋กœ-๋ฐ”๊ฟ‰๋‹ˆ๋‹ค))
21
21
  - **๋ผ์šฐํŒ… ์ ˆ๊ฐ์•ก์€ ์‹คํ–‰ ๋‹จ์œ„ ์›์žฅ**: ์ถ”์ •์น˜๊ฐ€ ์•„๋‹ˆ๋ผ ์œ„์ž„ ํ•œ ๊ฑด ํ•œ ๊ฑด์˜ ์ฐจ์•ก ๊ธฐ๋ก ([๊ทผ๊ฑฐ](#-์ ˆ๊ฐ์•ก์€-์ถ”์ •์ด-์•„๋‹ˆ๋ผ-์›์žฅ-๊ธฐ๋ก์ž…๋‹ˆ๋‹ค))
22
22
 
23
+ v3.35.0 ๋ถ€ํ„ฐ๋Š” ์ง€์ถœ๋„ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋‹ฌ 1์ผ ์ดํ›„ ์“ด ๊ธˆ์•ก์„ `๐Ÿ’ต Sep $42` ๋กœ ์ƒ์‹œ ํ‘œ์‹œํ•˜๊ณ , 5h/7d cap ์ด ์•„์˜ˆ ์—†๋Š” LiteLLM ๊ฒŒ์ดํŠธ์›จ์ด(Bedrock ๋“ฑ) ํ™˜๊ฒฝ์—์„œ๋Š” ํ‚ค ์˜ˆ์‚ฐ์„ `๐Ÿ”‘ budget โ–ฐโ–ฑ 34% $34/$100` ๊ฒŒ์ด์ง€๋กœ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.
24
+
23
25
  ## ๋„ค ๊ฐ€์ง€๊ฐ€ ํ•จ๊ป˜ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค
24
26
 
25
27
  | | ํ•˜๋Š” ์ผ | ํšจ๊ณผ |
@@ -31,6 +33,54 @@ npm i -g claude-token-saver
31
33
 
32
34
  ์„ค์น˜ ํ•œ ๋ฒˆ์ด๋ฉด ๋„ท ๋‹ค ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ธก โˆ’18.6%๋Š” Harness์™€ ratchet์˜ ๋ชซ์ด๊ณ , ๋ผ์šฐํŒ…๊ณผ ๋ฌธ์„œ ๋ณ€ํ™˜ ์ ˆ๊ฐ์•ก์€ ๊ทธ ์œ„์— ์–นํž™๋‹ˆ๋‹ค. ๋‘ ์ ˆ๊ฐ์•ก์€ ์„ฑ๊ฒฉ์ด ๋‹ฌ๋ผ์„œ ํ•œ ์ˆซ์ž๋กœ ํ•ฉ์น˜์ง€ ์•Š๊ณ , statusline ์ด ๊ฐ๊ฐ์˜ ์ค„๋กœ ๋ณด์—ฌ ์ฃผ๋ฉฐ ๊ธˆ์•ก์ด ํฐ ์ชฝ์„ ์œ„์— ๋†“์Šต๋‹ˆ๋‹ค.
33
35
 
36
+ ## ๋ชฉ์ฐจ
37
+
38
+ - **๋จผ์ € ๋ณผ ๊ฒƒ**: [์‹œ์ž‘ํ•˜๊ธฐ](#์‹œ์ž‘ํ•˜๊ธฐ) ยท [statusline ์ฝ๋Š” ๋ฒ•](#statusline-์ฝ๋Š”-๋ฒ•) ยท [์ฃผ์š” ๋ช…๋ น](#์ฃผ์š”-๋ช…๋ น)
39
+ - **์ ˆ๊ฐ ๊ธฐ๋Šฅ**: [๋ผ์šฐํŒ… ์ ˆ๊ฐ ์›์žฅ](#-์ ˆ๊ฐ์•ก์€-์ถ”์ •์ด-์•„๋‹ˆ๋ผ-์›์žฅ-๊ธฐ๋ก์ž…๋‹ˆ๋‹ค) ยท [route-scan](#-route-scan-์ด-๋ฐ˜๋ณต-์ž‘์—…์€-๋”-์‹ผ-ํ‹ฐ์–ด๋กœ-๋‚ด๋ ค๋„-๋ฉ๋‹ˆ๋‹ค) ยท [doc2md](#-doc2md-๋ฌธ์„œ๋ฅผ-์ฝ๊ธฐ-์ „์—-markdown-์œผ๋กœ-๋ฐ”๊ฟ‰๋‹ˆ๋‹ค) ยท [seed](#-seed-์„ค์น˜-์งํ›„๋ถ€ํ„ฐ-์œ„์ž„์ด-๊ฑธ๋ฆฌ๊ฒŒ-ํ•˜๋Š”-์‹œ์ž‘-๋ฃฐ)
40
+ - **๊ฐ€๋“œ๋ ˆ์ผ**: [Harness](#-harness-๋ชจ๋“œ) ยท [compact-window](#-compact-window-1m-์ปจํ…์ŠคํŠธ์˜-์ž๋™-์••์ถ•-์ง€์ -๊ณ ์ •) ยท [ํ•œ๊ตญ์–ด ๋ฌธ์ฒด](#-ํ•œ๊ตญ์–ด-๋ฌธ์ฒด-์ง€์นจ)
41
+ - **๋น„์šฉ ๊ฐ€์‹œํ™”ยทํ™˜๊ฒฝ**: [์ด๋ฒˆ ๋‹ฌ ์ง€์ถœยทLiteLLM ํ‚ค ์˜ˆ์‚ฐ](#litellm-5h7d-cap-๋Œ€์‹ -ํ‚ค-์˜ˆ์‚ฐ์„-๋ณด์—ฌ-์ค๋‹ˆ๋‹ค-v3350) ยท [๊ฒŒ์ดํŠธ์›จ์ด(BedrockยทVertex)](#-bedrockvertex-๊ฒฝ์œ -ํ™˜๊ฒฝ) ยท [ํ† ํฐ ๊ธ‰์ฆ ์›์ธ ์ฝ”๋“œ](#ํ† ํฐ-๊ธ‰์ฆ-์›์ธ-์ฝ”๋“œ) ยท [์‹ค์ธก ํšจ๊ณผ](#์‹ค์ œ-ํšจ๊ณผ-๋„์ž…-์ „ํ›„-๋ฆฌํฌํŠธ)
42
+
43
+ ## ์‹œ์ž‘ํ•˜๊ธฐ
44
+
45
+ **์‚ฌ์ „ ์ค€๋น„:** Node.js โ‰ฅ 18 (`node -v`๋กœ ํ™•์ธ ยท macOS `brew install node` ยท Windows `winget install OpenJS.NodeJS.LTS` ยท Linux/WSL์€ [nvm](https://github.com/nvm-sh/nvm) ๊ถŒ์žฅ)
46
+
47
+ ```bash
48
+ npm uninstall -g claude-cache-monitor # (๊ตฌ ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ž๋งŒ)
49
+ npm i -g claude-token-saver
50
+ ```
51
+
52
+ ์„ค์น˜ํ•˜๋ฉด Claude Code ํ™”๋ฉด ํ•˜๋‹จ์— statusline์ด ๊ณง๋ฐ”๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. `--ignore-scripts` ์˜ต์…˜์ด๋‚˜ sudo ์‚ฌ์šฉ ๋“ฑ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก์ด ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด `claude-token-saver install`์„ ์‹คํ–‰ํ•ด ์ง์ ‘ ๋“ฑ๋กํ•˜์‹ญ์‹œ์˜ค.
53
+
54
+ ์„ค์น˜ ํ•œ ๋ฒˆ์œผ๋กœ **statusline๊ณผ Skill, SessionStart ํ›…, ๐Ÿ…ท Harness(5์›์น™), ์ตœ์ดˆ route-scan์ด** ๋ชจ๋‘ ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. Harness์™€ ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ์ง€์นจ์€ **๋ฌด์—‡์ด ์ถ”๊ฐ€๋˜๋Š”์ง€ ๋ณด์—ฌ ์ค€ ๋’ค ์ผค์ง€ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.** Harness๋Š” `~/.claude/CLAUDE.md`์— ํ‘œ์‹œ๊ฐ€ ๋ถ™์€ ๋ธ”๋ก์œผ๋กœ **์ถ”๊ฐ€๋˜๋ฉฐ**, ๊ธฐ์กด์— ์ž‘์„ฑํ•ด ๋‘” ๋‚ด์šฉ์€ ๋ฐฑ์—…ํ•œ ๋’ค ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
55
+
56
+ ํ„ฐ๋ฏธ๋„์ด ์•„๋‹Œ ํ™˜๊ฒฝ(npm์˜ `postinstall`, CI, ํŒŒ์ดํ”„ ์ž…๋ ฅ)์—์„œ๋Š” ์งˆ๋ฌธ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๊ธฐ์กด ๊ธฐ๋ณธ๊ฐ’์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ ์—†์ด ์ง„ํ–‰ํ•˜๋ ค๋ฉด `--yes`๋‚˜ `--no-input`, ์•„์˜ˆ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด `CTS_NO_HARNESS=1 npm i -g claude-token-saver`๋ฅผ ์“ฐ์‹ญ์‹œ์˜ค. ์ด๋ฏธ ์ ์šฉํ•œ ์„ค์ •์„ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด `claude-token-saver harness uninit --global`์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
57
+
58
+ > โš ๏ธ sudo๋กœ ๊ธ€๋กœ๋ฒŒ ์„ค์น˜๋ฅผ ํ•˜๋ฉด Skill์ด ์‚ฌ์šฉ์ž ๊ณ„์ •์ด ์•„๋‹ˆ๋ผ root์˜ `~/.claude`์— ๋“ฑ๋ก๋˜๋Š” ํ•จ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. nvm์ด๋‚˜ fnm, Volta๋ฅผ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž ์˜์—ญ์— ์„ค์น˜ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
59
+
60
+ ### ์„ค์น˜ํ•˜๋ฉด ์ผœ์ง€๋Š” ๊ธฐ๋Šฅ๊ณผ ์ง์ ‘ ์ผœ์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ
61
+
62
+ ์„ค์น˜ ์‹œ์ ์— ๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์€ ์ „๋ถ€ ์ž๋™์œผ๋กœ ์ผœ์ง‘๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ๋‚จ๊ฒจ ๋‘” ํ•ญ๋ชฉ์€ Claude Code ์ž์ฒด์˜ ์„ค์ •์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์‚ฌ๋žŒ์ด ์ •ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค๋ฟ์ž…๋‹ˆ๋‹ค.
63
+
64
+ | ๊ธฐ๋Šฅ | ์„ค์น˜ ์งํ›„ ์ƒํƒœ | ๋„๋Š” ๋ฐฉ๋ฒ• |
65
+ |---|---|---|
66
+ | statusline (์ง„๋‹จ ์นฉยท์ ˆ๊ฐ ์›์žฅ) | ์ผœ์ง | `claude-token-saver uninstall` |
67
+ | `/claude-token-saver` Skill | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
68
+ | SessionStart ํ›… (route-scan ์žฌ๋ถ„์„) | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
69
+ | UserPromptSubmit ํ›… (brief ์ฃผ์ž…) | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
70
+ | ์ตœ์ดˆ route-scan (์ตœ๊ทผ 14์ผ ๋กœ๊ทธ ๋ถ„์„) | ์„ค์น˜ ์ค‘ ์ฆ‰์‹œ 1ํšŒ ์‹คํ–‰ | ํ•ด๋‹น ์—†์Šต๋‹ˆ๋‹ค |
71
+ | ๐Ÿ…ท Harness 5์›์น™ (`~/.claude/CLAUDE.md`) | ์ผœ์ง (ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ๋‚ด์šฉ์„ ๋ณด์—ฌ ์ฃผ๊ณ  ํ•œ ๋ฒˆ ๋ฌป์Šต๋‹ˆ๋‹ค) | `harness uninit --global` ยท `CTS_NO_HARNESS=1` |
72
+ | doc2md ํ›… (ReadยทEditยทWriteยทํ”„๋กฌํ”„ํŠธ) | ์ผœ์ง | `doc2md off` ยท `CTS_NO_DOC2MD=1` |
73
+ | doc2md ๋ณ€ํ™˜๊ธฐ(markitdown venv) | ํ„ฐ๋ฏธ๋„์—์„œ ์„ค์น˜ ์—ฌ๋ถ€๋ฅผ ๋ฌป๊ณ , ๋น„๋Œ€ํ™”ํ˜• ์„ค์น˜์—์„œ๋Š” ๋ช…๋ น๋งŒ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค | `doc2md install-converter` ๋กœ ๋‚˜์ค‘์— ์„ค์น˜ |
74
+ | ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ์ง€์นจ | ์‹œ์Šคํ…œ ๋กœ์ผ€์ผ์ด ํ•œ๊ตญ์–ด๋ฉด ์ผœ์ง (ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ๋ฌป์Šต๋‹ˆ๋‹ค) | `korean off` ยท `CTS_NO_KOREAN=1` |
75
+ | compact-window ๊ฒฝ๊ณ  ์นฉ | ์ผœ์ง | `compact-window off` |
76
+ | ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด ์นฉ | ์ผœ์ง | `CTS_NO_UPDATE_CHECK=1` |
77
+ | **compact-window ๊ฐ’ ๊ณ ์ •** (`autoCompactWindow` 500k) | **๊บผ์ง โ€” ์ง์ ‘ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค** | `compact-window set --global` ๋˜๋Š” `--project` |
78
+ | **๋ชจ๋ธ ํ”ผํŒ… ๋ฃฐ ์Šน์ธ** (`ratchet-model.md` ์œ„์ž„ ๋ฃฐ) | **ํ›„๋ณด๋งŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค** | `route-scan rules` ๋กœ ํ™•์ธํ•˜๊ณ  ์Šน์ธยท์‚ญ์ œ |
79
+ | `handoff` (ํ•œ๋„ ์ž„๋ฐ• ์‹œ ์ž‘์—… ๋ฐฑ์—…) | ํ•„์š”ํ•  ๋•Œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค | ํ•ด๋‹น ์—†์Šต๋‹ˆ๋‹ค |
80
+
81
+ `compact-window set` ์€ Claude Code ์˜ `settings.json` ์— ๊ฐ’์„ ์ ๊ณ , ์ „์—ญ๊ณผ ํ”„๋กœ์ ํŠธ ์ค‘ ์–ด๋””์— ์ ์„์ง€๋Š” ์‚ฌ๋žŒ์ด ์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํ”ผํŒ… ๋ฃฐ๋„ ๊ฐ™์€ ์ด์œ ๋กœ ์Šน์ธ ๋‹จ๊ณ„๋ฅผ ๋‚จ๊ฒจ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ž‘์—…์„ ๋” ์‹ผ ํ‹ฐ์–ด์— ๋งก๊ธธ์ง€๋Š” ์‚ฌ์šฉ์ž์˜ ํŒ๋‹จ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
82
+
83
+
34
84
  ## ๐Ÿ”€ ์ ˆ๊ฐ์•ก์€ ์ถ”์ •์ด ์•„๋‹ˆ๋ผ ์›์žฅ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค
35
85
 
36
86
  ์œ„์ž„๋œ ์‹คํ–‰ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ด๋ ‡๊ฒŒ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
@@ -70,6 +120,7 @@ $ claude-token-saver route-scan savings # ๋ชจ๋“  ๊ธˆ์•ก์„ ๋ฃฐ ๋‹จ์œ„๊นŒ์ง€
70
120
  |---|---|
71
121
  | ๐Ÿšจ **ํ•œ๋„ ์ดˆ๊ณผ ์˜ˆ๋ฐฉ** | 5์‹œ๊ฐ„ยท7์ผ rate-limit ์œˆ๋„๊ฐ€ 90%์— ๋‹ฟ์œผ๋ฉด ๊ฒฝ๊ณ ํ•˜๊ณ , `handoff`๋กœ ์ž‘์—…์„ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค |
72
122
  | ๐Ÿง  **์บ์‹œ ๋‚ญ๋น„ ๊ฐ์ง€** | ํžˆํŠธ์œจยทTTLยท1M ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ์ง€ํ•ด ํ† ํฐ ๊ธ‰์ฆ ์›์ธ์„ ์ฝ”๋“œ๋กœ ์ง„๋‹จํ•ฉ๋‹ˆ๋‹ค |
123
+ | ๐Ÿ’ต **๋น„์šฉ ๊ฐ€์‹œํ™”** | ์ด๋ฒˆ ๋‹ฌ ์ง€์ถœ(`๐Ÿ’ต Sep $42`)์„ ์ƒ์‹œ ํ‘œ์‹œํ•˜๊ณ , LiteLLM ๊ฒŒ์ดํŠธ์›จ์ด์—์„œ๋Š” ํ‚ค ์˜ˆ์‚ฐ ๊ฒŒ์ด์ง€(`๐Ÿ”‘ budget 34% $34/$100`)๋กœ 5h/7d cap ์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค ([์•„๋ž˜](#litellm-5h7d-cap-๋Œ€์‹ -ํ‚ค-์˜ˆ์‚ฐ์„-๋ณด์—ฌ-์ค๋‹ˆ๋‹ค-v3350)) |
73
124
  | ๐Ÿ‡ฐ๐Ÿ‡ท **ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ๊ต์ •** | ํ•œ๊ตญ์–ด ํ™˜๊ฒฝ์ด๋ฉด ์ž๋™์œผ๋กœ ์ผœ์ง‘๋‹ˆ๋‹ค ([์•„๋ž˜](#-ํ•œ๊ตญ์–ด-๋ฌธ์ฒด-์ง€์นจ)) |
74
125
 
75
126
  ## ๋ผ์šฐํ„ฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค: 60์ดˆ ์„ค๋ช…
@@ -100,46 +151,6 @@ claude-token-saver route-scan savings # ์œ„์ž„์œผ๋กœ ์ ˆ๊ฐํ•œ ๊ธˆ์•ก์˜ ๊ทผ๊ฑฐ
100
151
 
101
152
  ---
102
153
 
103
- ## ์‹œ์ž‘ํ•˜๊ธฐ
104
-
105
- **์‚ฌ์ „ ์ค€๋น„:** Node.js โ‰ฅ 18 (`node -v`๋กœ ํ™•์ธ ยท macOS `brew install node` ยท Windows `winget install OpenJS.NodeJS.LTS` ยท Linux/WSL์€ [nvm](https://github.com/nvm-sh/nvm) ๊ถŒ์žฅ)
106
-
107
- ```bash
108
- npm uninstall -g claude-cache-monitor # (๊ตฌ ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ž๋งŒ)
109
- npm i -g claude-token-saver
110
- ```
111
-
112
- ์„ค์น˜ํ•˜๋ฉด Claude Code ํ™”๋ฉด ํ•˜๋‹จ์— statusline์ด ๊ณง๋ฐ”๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. `--ignore-scripts` ์˜ต์…˜์ด๋‚˜ sudo ์‚ฌ์šฉ ๋“ฑ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก์ด ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด `claude-token-saver install`์„ ์‹คํ–‰ํ•ด ์ง์ ‘ ๋“ฑ๋กํ•˜์‹ญ์‹œ์˜ค.
113
-
114
- ์„ค์น˜ ํ•œ ๋ฒˆ์œผ๋กœ **statusline๊ณผ Skill, SessionStart ํ›…, ๐Ÿ…ท Harness(5์›์น™), ์ตœ์ดˆ route-scan์ด** ๋ชจ๋‘ ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. Harness์™€ ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ์ง€์นจ์€ **๋ฌด์—‡์ด ์ถ”๊ฐ€๋˜๋Š”์ง€ ๋ณด์—ฌ ์ค€ ๋’ค ์ผค์ง€ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.** Harness๋Š” `~/.claude/CLAUDE.md`์— ํ‘œ์‹œ๊ฐ€ ๋ถ™์€ ๋ธ”๋ก์œผ๋กœ **์ถ”๊ฐ€๋˜๋ฉฐ**, ๊ธฐ์กด์— ์ž‘์„ฑํ•ด ๋‘” ๋‚ด์šฉ์€ ๋ฐฑ์—…ํ•œ ๋’ค ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
115
-
116
- ํ„ฐ๋ฏธ๋„์ด ์•„๋‹Œ ํ™˜๊ฒฝ(npm์˜ `postinstall`, CI, ํŒŒ์ดํ”„ ์ž…๋ ฅ)์—์„œ๋Š” ์งˆ๋ฌธ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๊ธฐ์กด ๊ธฐ๋ณธ๊ฐ’์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ ์—†์ด ์ง„ํ–‰ํ•˜๋ ค๋ฉด `--yes`๋‚˜ `--no-input`, ์•„์˜ˆ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด `CTS_NO_HARNESS=1 npm i -g claude-token-saver`๋ฅผ ์“ฐ์‹ญ์‹œ์˜ค. ์ด๋ฏธ ์ ์šฉํ•œ ์„ค์ •์„ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด `claude-token-saver harness uninit --global`์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
117
-
118
- > โš ๏ธ sudo๋กœ ๊ธ€๋กœ๋ฒŒ ์„ค์น˜๋ฅผ ํ•˜๋ฉด Skill์ด ์‚ฌ์šฉ์ž ๊ณ„์ •์ด ์•„๋‹ˆ๋ผ root์˜ `~/.claude`์— ๋“ฑ๋ก๋˜๋Š” ํ•จ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. nvm์ด๋‚˜ fnm, Volta๋ฅผ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž ์˜์—ญ์— ์„ค์น˜ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
119
-
120
- ### ์„ค์น˜ํ•˜๋ฉด ์ผœ์ง€๋Š” ๊ธฐ๋Šฅ๊ณผ ์ง์ ‘ ์ผœ์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ
121
-
122
- ์„ค์น˜ ์‹œ์ ์— ๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์€ ์ „๋ถ€ ์ž๋™์œผ๋กœ ์ผœ์ง‘๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ๋‚จ๊ฒจ ๋‘” ํ•ญ๋ชฉ์€ Claude Code ์ž์ฒด์˜ ์„ค์ •์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์‚ฌ๋žŒ์ด ์ •ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค๋ฟ์ž…๋‹ˆ๋‹ค.
123
-
124
- | ๊ธฐ๋Šฅ | ์„ค์น˜ ์งํ›„ ์ƒํƒœ | ๋„๋Š” ๋ฐฉ๋ฒ• |
125
- |---|---|---|
126
- | statusline (์ง„๋‹จ ์นฉยท์ ˆ๊ฐ ์›์žฅ) | ์ผœ์ง | `claude-token-saver uninstall` |
127
- | `/claude-token-saver` Skill | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
128
- | SessionStart ํ›… (route-scan ์žฌ๋ถ„์„) | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
129
- | UserPromptSubmit ํ›… (brief ์ฃผ์ž…) | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
130
- | ์ตœ์ดˆ route-scan (์ตœ๊ทผ 14์ผ ๋กœ๊ทธ ๋ถ„์„) | ์„ค์น˜ ์ค‘ ์ฆ‰์‹œ 1ํšŒ ์‹คํ–‰ | ํ•ด๋‹น ์—†์Šต๋‹ˆ๋‹ค |
131
- | ๐Ÿ…ท Harness 5์›์น™ (`~/.claude/CLAUDE.md`) | ์ผœ์ง (ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ๋‚ด์šฉ์„ ๋ณด์—ฌ ์ฃผ๊ณ  ํ•œ ๋ฒˆ ๋ฌป์Šต๋‹ˆ๋‹ค) | `harness uninit --global` ยท `CTS_NO_HARNESS=1` |
132
- | doc2md ํ›… (ReadยทEditยทWriteยทํ”„๋กฌํ”„ํŠธ) | ์ผœ์ง | `doc2md off` ยท `CTS_NO_DOC2MD=1` |
133
- | doc2md ๋ณ€ํ™˜๊ธฐ(markitdown venv) | ํ„ฐ๋ฏธ๋„์—์„œ ์„ค์น˜ ์—ฌ๋ถ€๋ฅผ ๋ฌป๊ณ , ๋น„๋Œ€ํ™”ํ˜• ์„ค์น˜์—์„œ๋Š” ๋ช…๋ น๋งŒ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค | `doc2md install-converter` ๋กœ ๋‚˜์ค‘์— ์„ค์น˜ |
134
- | ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ์ง€์นจ | ์‹œ์Šคํ…œ ๋กœ์ผ€์ผ์ด ํ•œ๊ตญ์–ด๋ฉด ์ผœ์ง (ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ๋ฌป์Šต๋‹ˆ๋‹ค) | `korean off` ยท `CTS_NO_KOREAN=1` |
135
- | compact-window ๊ฒฝ๊ณ  ์นฉ | ์ผœ์ง | `compact-window off` |
136
- | ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด ์นฉ | ์ผœ์ง | `CTS_NO_UPDATE_CHECK=1` |
137
- | **compact-window ๊ฐ’ ๊ณ ์ •** (`autoCompactWindow` 500k) | **๊บผ์ง โ€” ์ง์ ‘ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค** | `compact-window set --global` ๋˜๋Š” `--project` |
138
- | **๋ชจ๋ธ ํ”ผํŒ… ๋ฃฐ ์Šน์ธ** (`ratchet-model.md` ์œ„์ž„ ๋ฃฐ) | **ํ›„๋ณด๋งŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค** | `route-scan rules` ๋กœ ํ™•์ธํ•˜๊ณ  ์Šน์ธยท์‚ญ์ œ |
139
- | `handoff` (ํ•œ๋„ ์ž„๋ฐ• ์‹œ ์ž‘์—… ๋ฐฑ์—…) | ํ•„์š”ํ•  ๋•Œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค | ํ•ด๋‹น ์—†์Šต๋‹ˆ๋‹ค |
140
-
141
- `compact-window set` ์€ Claude Code ์˜ `settings.json` ์— ๊ฐ’์„ ์ ๊ณ , ์ „์—ญ๊ณผ ํ”„๋กœ์ ํŠธ ์ค‘ ์–ด๋””์— ์ ์„์ง€๋Š” ์‚ฌ๋žŒ์ด ์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํ”ผํŒ… ๋ฃฐ๋„ ๊ฐ™์€ ์ด์œ ๋กœ ์Šน์ธ ๋‹จ๊ณ„๋ฅผ ๋‚จ๊ฒจ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ž‘์—…์„ ๋” ์‹ผ ํ‹ฐ์–ด์— ๋งก๊ธธ์ง€๋Š” ์‚ฌ์šฉ์ž์˜ ํŒ๋‹จ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
142
-
143
154
  ## statusline ์ฝ๋Š” ๋ฒ•
144
155
 
145
156
  ์ ˆ๊ฐ ์›์žฅ์— ๊ธฐ๋ก์ด ์Œ“์ด๋ฉด statusline์ด **๋‘ ์ค„๋กœ** ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ ์ค„์—๋Š” ๋ผ์šฐํŒ… ์ ˆ๊ฐ์•ก๋งŒ ํ‘œ์‹œํ•˜๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ง„๋‹จ ์นฉ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
@@ -153,7 +164,8 @@ npm i -g claude-token-saver
153
164
 
154
165
  | ์„ธ๊ทธ๋จผํŠธ | ์˜๋ฏธ |
155
166
  |---|---|
156
- | `๐Ÿ”€` **์ฒซ์งธ ์ค„** | **๋ผ์šฐํŒ…์œผ๋กœ ์ ˆ๊ฐํ•œ ๋ˆ„์  ๊ธˆ์•ก๊ณผ ๋ชจ๋ธ ์ด๋™ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.** ๋ˆ„์  ๊ธˆ์•ก์€ ๋…น์ƒ‰์œผ๋กœ, ๋‚ด์—ญ์€ ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์—ญ์„ ๋ชจ๋‘ ๋”ํ•˜๋ฉด ๋ˆ„์  ๊ธˆ์•ก๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋ฉฐ(์ž˜๋ผ๋‚ด์ง€ ์•Š๊ณ  ์ „๋ถ€ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค), ๋ฒ„์ „ ์ˆซ์ž๋Š” ๊ณ„์† ๋ฐ”๋€Œ๋ฏ€๋กœ ๊ณ„์—ด๋ช…๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค(`claude-opus-4-5-โ€ฆ` โ†’ `opus`). ๊ทผ๊ฑฐ๋ฅผ ์ „๋ถ€ ํ™•์ธํ•˜๋ ค๋ฉด `route-scan savings`๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค |
167
+ | `๐Ÿ”€` **์ฒซ์งธ ์ค„** | ๋ผ์šฐํŒ…์œผ๋กœ ์ ˆ๊ฐํ•œ ๋ˆ„์  ๊ธˆ์•ก๊ณผ ๋ชจ๋ธ ์ด๋™ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. ๋‚ด์—ญ ํ•ฉ๊ณ„๋Š” ๋ˆ„์  ๊ธˆ์•ก๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๊ณ , ๋ชจ๋ธ๋ช…์€ ๊ณ„์—ด๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค(`opusโ†’haiku`). ๊ทผ๊ฑฐ๋Š” `route-scan savings` ๋กœ ์ „๋ถ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค |
168
+ | `๐Ÿ“„` **๋‘˜์งธ ์ค„** | doc2md ๋ฌธ์„œ ๋ณ€ํ™˜์ด ์ ˆ๊ฐํ•œ ๋ˆ„์  ๊ธˆ์•ก๊ณผ ํ˜•์‹๋ณ„ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. ๋ผ์šฐํŒ…๊ณผ ๋ฌธ์„œ ๋ณ€ํ™˜ ์ค‘ ๊ธˆ์•ก์ด ํฐ ์ชฝ์ด ์ฒซ์งธ ์ค„์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค |
157
169
  | `๐Ÿค–` | ํ˜„์žฌ ๋ชจ๋ธ |
158
170
  | `๐Ÿ…ท 5/5` | harness ์›์น™ ์ ์ˆ˜ ([Harness ๋ชจ๋“œ](#-harness-๋ชจ๋“œ)) |
159
171
  | `๐Ÿง ` | ์บ์‹œ ํžˆํŠธ์œจ (85%+ ๋…น์ƒ‰) |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-token-saver",
3
- "version": "3.35.0",
3
+ "version": "3.35.1",
4
4
  "description": "Route the easy work your expensive Claude model keeps repeating down to haiku/sonnet โ€” post-hoc session analysis, no realtime router, no extra LLM calls.",
5
5
  "type": "module",
6
6
  "bin": {