claude-token-saver 3.16.0 โ 3.18.0
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.
- package/README.en.md +20 -6
- package/README.md +77 -63
- package/package.json +1 -1
- package/src/commands/install.js +49 -0
package/README.en.md
CHANGED
|
@@ -6,9 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
## ๐ Routing saved โ the reason this tool exists
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
๐ Routing saved $2.09 | fableโsonnet 1ร $0.72 ยท opusโhaiku 1ร $0.57 ยท fableโhaiku 1ร $0.51 ยท opusโsonnet 2ร $0.29
|
|
11
|
-
```
|
|
9
|
+

|
|
12
10
|
|
|
13
11
|
**That figure on the first statusline row is the whole product.** It is money actually saved by moving the easy work your expensive model kept repeating onto cheaper ones โ and right beside it is which model that money moved off, and onto what.
|
|
14
12
|
|
|
@@ -40,8 +38,6 @@ By run (newest first):
|
|
|
40
38
|
npm i -g claude-token-saver # postinstall auto-registers the statusline + Skill
|
|
41
39
|
```
|
|
42
40
|
|
|
43
|
-

|
|
44
|
-
|
|
45
41
|
---
|
|
46
42
|
|
|
47
43
|
## โก Why โ the 30-second pitch
|
|
@@ -62,7 +58,15 @@ It never intercepts a request in realtime.
|
|
|
62
58
|
kept handling, and promotes them into rules so a cheaper model takes them **from the next session
|
|
63
59
|
onward**. Rules are scoped global or per-project.
|
|
64
60
|
|
|
65
|
-
|
|
61
|
+
### Why realtime model routing can cost more, not less
|
|
62
|
+
|
|
63
|
+
Never switching models mid-session is the point of this design.
|
|
64
|
+
|
|
65
|
+
Prompt caches are **kept per model.** Switch to a cheaper model mid-session and it starts from a cold cache, re-reading the whole conversation at full input price. A cache hit costs about a tenth of that, so past roughly 20k tokens of history **one switch can erase everything the cheaper model was going to save.** You moved the work down a tier and the bill went up: the central paradox of realtime routing.
|
|
66
|
+
|
|
67
|
+
Teams shipping routing products have turned the feature off for exactly this reason: [LLM ๋ผ์ฐํฐ๋ฅผ ๋ง๋ ์ฌ๋๋ค์ด ์ง์ ๊ป์ต๋๋ค #Shorts](https://www.youtube.com/shorts/SK-GoAABjbg) (Korean).
|
|
68
|
+
|
|
69
|
+
So this tool never touches the main session's model. It delegates to **subagents only**, which leaves the main session's cache intact and runs the delegated work on a cheap model in its own context. That is why the savings are not cancelled out by cache loss.
|
|
66
70
|
|
|
67
71
|
```bash
|
|
68
72
|
npm i -g claude-token-saver@latest
|
|
@@ -87,6 +91,8 @@ npm i -g claude-token-saver
|
|
|
87
91
|
|
|
88
92
|
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`.
|
|
89
93
|
|
|
94
|
+
One install sets up everything: **statusline, Skill, SessionStart hook, the ๐
ท Harness (5 principles), and a first route-scan.** 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. Skip it with `CTS_NO_HARNESS=1 npm i -g claude-token-saver`; undo it with `claude-token-saver harness uninit --global`.
|
|
95
|
+
|
|
90
96
|
> โ ๏ธ 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`.
|
|
91
97
|
|
|
92
98
|
## Reading the statusline
|
|
@@ -339,6 +345,14 @@ Also update `statusLine.command` in `~/.claude/settings.json` to `claude-token-s
|
|
|
339
345
|
|
|
340
346
|
## Release notes
|
|
341
347
|
|
|
348
|
+
### v3.18.0 (2026-08-22)
|
|
349
|
+
- **Korean documentation rewritten for clarity** โ full sentences with explicit predicates, and em dashes replaced by colons and conjunctions where they were compressing too much meaning.
|
|
350
|
+
- **Added why realtime model routing can cost more** โ prompt caches are per-model, so a mid-session switch cancels the savings via cache loss; this is why the tool delegates to subagents only.
|
|
351
|
+
|
|
352
|
+
### v3.17.0 (2026-08-22)
|
|
353
|
+
- **One install now sets up the ๐
ท Harness too** โ until now `harness init` was a separate step, without which the ๐
ท score and ratchet-rule delivery did nothing. The install **appends** the 5-principle block to `~/.claude/CLAUDE.md` (existing content backed up and preserved; an existing block is left alone). Skip with `CTS_NO_HARNESS=1`, undo with `harness uninit --global`.
|
|
354
|
+
- **The README leads with the real statusline screenshot** โ the capture replaces the code block at the top, and the duplicate image further down was removed.
|
|
355
|
+
|
|
342
356
|
### v3.16.0 (2026-08-22)
|
|
343
357
|
- **README restructured around routing savings** โ `๐ Routing saved` now opens the page, with how the figure is derived (before / after / gap) and the real `route-scan savings` output alongside it. Channel and homepage badges moved to a "Who makes this" section at the bottom.
|
|
344
358
|
- **Statusline screenshot refreshed to the current two-row layout** โ captured from real output rather than mocked up. Regenerate with `npm run docs:statusline` (headless Chrome; no dependencies added).
|
package/README.md
CHANGED
|
@@ -4,21 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
# claude-token-saver
|
|
6
6
|
|
|
7
|
-
## ๐ Routing saved
|
|
7
|
+
## ๐ Routing saved: ์ด ๋๊ตฌ๊ฐ ์กด์ฌํ๋ ์ด์
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
๐ Routing saved $2.09 | fableโsonnet 1ร $0.72 ยท opusโhaiku 1ร $0.57 ยท fableโhaiku 1ร $0.51 ยท opusโsonnet 2ร $0.29
|
|
11
|
-
```
|
|
9
|
+

|
|
12
10
|
|
|
13
|
-
**statusline
|
|
11
|
+
**statusline ์ฒซ์งธ ์ค์ ํ์๋๋ ์ด ๊ธ์ก์ด ์ด ๋๊ตฌ์ ์ ๋ถ์
๋๋ค.** ๋น์ผ ๋ชจ๋ธ์ด ๋ฐ๋ณตํด์ ์ฒ๋ฆฌํด ์จ ์ฌ์ด ์์
์ ๋ ์ผ ๋ชจ๋ธ์ ๋๊ฒจ์ **์ค์ ๋ก ์ ๊ฐํ ๋น์ฉ**์ด๋ฉฐ, ๊ทธ ์์๋ ์ด๋ ๋ชจ๋ธ์์ ์ด๋ ๋ชจ๋ธ๋ก ์์
์ด ์ฎ๊ฒจ ๊ฐ๋ฉด์ ๊ทธ ๊ธ์ก์ด ๋ฐ์ํ๋์ง๊ฐ ํจ๊ป ํ์๋ฉ๋๋ค.
|
|
14
12
|
|
|
15
|
-
์ด ์ซ์๋ ์ถ์ ์น๋ ํ๋ณด ๋ฌธ๊ตฌ๊ฐ ์๋๋ผ **์์ฅ(ledger)
|
|
13
|
+
์ด ์ซ์๋ ์ถ์ ์น๋ ํ๋ณด ๋ฌธ๊ตฌ๊ฐ ์๋๋ผ **์์ฅ(ledger)์ ๊ธฐ๋ก๋ ์ค์ธก๊ฐ์
๋๋ค.** ์์๋ ์๋ธ์์ด์ ํธ ์คํ ํ๋ํ๋๋ง๋ค ๋ค์ ์ธ ๊ฐ์ง๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
|
|
16
14
|
|
|
17
|
-
- **๊ธฐ์ค(before)
|
|
18
|
-
-
|
|
19
|
-
-
|
|
15
|
+
- **๊ธฐ์ค ๋ชจ๋ธ(before):** ๋ฃฐ์ ์น๊ฒฉํ๊ธฐ ์ ์ ๊ทธ ์ ํ์ ์ค์ ๋ก ์ฒ๋ฆฌํ๋ ๋ชจ๋ธ์
๋๋ค.
|
|
16
|
+
- **์คํ ๋ชจ๋ธ(after):** ๊ทธ ์์
์ ์ค์ ๋ก ์ฒ๋ฆฌํ ๋ชจ๋ธ์
๋๋ค.
|
|
17
|
+
- **์ฐจ์ก:** ๋์ผํ ํ ํฐ๋์ ๋ ๋ชจ๋ธ์ ๊ฐ๊ฒฉํ๋ฅผ ๊ฐ๊ฐ ์ ์ฉํด ๊ณ์ฐํ ๊ฐ์
๋๋ค.
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
๊ทธ๋์ `route-scan savings` ๋ช
๋ น ํ ๋ฒ์ด๋ฉด **๋ชจ๋ ๊ธ์ก์ ์ด๋ค ๋ฃฐ์ด ๋ง๋ค์ด ๋๋์ง๊น์ง ๊ฑฐ์ฌ๋ฌ ํ์ธํ ์ ์์ต๋๋ค.**
|
|
22
20
|
|
|
23
21
|
```bash
|
|
24
22
|
$ claude-token-saver route-scan savings
|
|
@@ -34,44 +32,50 @@ $ claude-token-saver route-scan savings
|
|
|
34
32
|
๋ฃฐ: T2|paste|-Users-me-projects-my-app
|
|
35
33
|
```
|
|
36
34
|
|
|
37
|
-
**์ ์งํ๊ฒ
|
|
35
|
+
**์ ์งํ๊ฒ ์ง๊ณํ๋ ๊ฒ์ด ์ด ๋๊ตฌ์ ์ค๊ณ ์์น์
๋๋ค.** ๋ฑ๋ก๋ ๋ฃฐ์ด ๋ด๋นํ์ง ์๋ ์์(`Explore`, ์ฌ์ฉ์๊ฐ ์ง์ ๋ง๋ ์์ด์ ํธ, ํ๋ฌ๊ทธ์ธ์ด ์ ๊ณตํ๋ ์์ด์ ํธ)์ ์ด ๋๊ตฌ๊ฐ ๋ผ์ฐํ
ํ ๊ฒฐ๊ณผ๊ฐ ์๋๋ฏ๋ก **๊ธ์ก์์ ์ ์ธํฉ๋๋ค.** ๊ฐ๊ฒฉํ๊ฐ ๋ชจ๋ธ๋ช
์ ์ธ์ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์๋ ํ๋ฆฐ ๊ธ์ก์ ํ์ํ๋ ๋์ **๊ทธ ์คํ์ ์ง๊ณ์์ ์ ์ธํฉ๋๋ค.** ๊ทธ๋์ ๊ธ์ก์ด ์๊ฒ ๋์ฌ ์๋ ์์ด๋, ํ์๋๋ ๊ฐ์ ์ธ์ ๋ ์ค์ ๋ก ์ ๊ฐํ ๊ธ์ก์
๋๋ค.
|
|
38
36
|
|
|
39
37
|
```bash
|
|
40
38
|
npm i -g claude-token-saver # postinstall์ด statusline + Skill ์๋ ๋ฑ๋ก
|
|
41
39
|
```
|
|
42
40
|
|
|
43
|
-

|
|
44
|
-
|
|
45
41
|
---
|
|
46
42
|
|
|
47
|
-
## โก ์
|
|
43
|
+
## โก ์ ์ฐ๋๊ฐ: 30์ด ์์ฝ
|
|
48
44
|
|
|
49
45
|
| | |
|
|
50
46
|
|---|---|
|
|
51
|
-
| ๐ **๋ผ์ฐํ
|
|
52
|
-
| ๐ฏ **๋ชจ๋ธ ํผํ
์์** | ์์ ๋ชจ๋ธ(opus
|
|
53
|
-
| ๐ธ **๋น์ฉ ์ค์ธก โ18.6%** | harness
|
|
54
|
-
| ๐จ **ํ๋ ์ด๊ณผ ์๋ฐฉ** |
|
|
55
|
-
| ๐ง **์บ์ ๋ญ๋น ๊ฐ์ง** |
|
|
56
|
-
| ๐
ท **๊ฐ์ ์ค์ ์ฐจ๋จ** |
|
|
47
|
+
| ๐ **๋ผ์ฐํ
์ ๊ฐ์ก ์ค์ธก** | ์์์ผ๋ก ์ ๊ฐํ ๊ธ์ก์ ์คํ ๋จ์๋ก ์์ฅ์ ๊ธฐ๋กํ๊ณ , statusline ์ฒซ์งธ ์ค์ ๋์ ์ก๊ณผ ๋ชจ๋ธ ์ด๋ ๋ด์ญ์ ํจ๊ป ํ์ํฉ๋๋ค (`route-scan savings`๋ก ์ ์ ํ์ธ) |
|
|
48
|
+
| ๐ฏ **๋ชจ๋ธ ํผํ
์์** | ์์ ๋ชจ๋ธ(opusยทfable)์ด ๋ฐ๋ณต ์ฒ๋ฆฌํด ์จ ์ฌ์ด ์์
์ ํฐ์ด(T0/T1/T2)๋ก ๋ถ๋ฅํ ๋ค haikuยทsonnet ์์ ๋ฃฐ๋ก ์น๊ฒฉํ๊ณ , ๋ค์ ์ธ์
๋ถํฐ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค |
|
|
49
|
+
| ๐ธ **๋น์ฉ ์ค์ธก โ18.6%** | harness์ ratchet์ ๋์
ํ๊ธฐ ์ ํ๋ก ์ฌ์ฉ์ ๋ฉ์์ง๋น ๋น์ฉ์ด $2.35์์ $1.91๋ก ์ค์์ต๋๋ค (์ ์์ ์ค์ฌ์ฉ ๋ก๊ทธ, [์์ธ](#์ค์ -ํจ๊ณผ-๋์
-์ ํ-๋ฆฌํฌํธ)) |
|
|
50
|
+
| ๐จ **ํ๋ ์ด๊ณผ ์๋ฐฉ** | 5์๊ฐยท7์ผ rate-limit ์๋๊ฐ 90%์ ๋๋ฌํ๋ฉด ์ฆ์ ๊ฒฝ๊ณ ํ๊ณ , `handoff`๋ก ์งํ ์ค์ธ ์์
์ ๋ฐฑ์
ํฉ๋๋ค |
|
|
51
|
+
| ๐ง **์บ์ ๋ญ๋น ๊ฐ์ง** | ํํธ์จ๊ณผ TTL ์นด์ดํธ๋ค์ด, 1M ์ปจํ
์คํธ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์๋์ผ๋ก ๊ฐ์งํด ํ ํฐ์ด ๊ธ์ฆํ ์์ธ์ ์ฝ๋๋ก ์ง๋จํฉ๋๋ค |
|
|
52
|
+
| ๐
ท **๊ฐ์ ์ค์ ์ฐจ๋จ** | ๋ฐ๋ณต๋๋ ์๋ฌ๋ฅผ ๊ฐ์งํด ratchet ๋ฃฐ๋ก ์น๊ฒฉํ๊ณ , ๋ค์ ์ธ์
๋ถํฐ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค |
|
|
53
|
+
|
|
54
|
+
## ๋ผ์ฐํฐ๊ฐ ์๋๋๋ค: 60์ด ์ค๋ช
|
|
55
|
+
|
|
56
|
+
์ด ๋๊ตฌ๋ ์์ฒญ์ ์ค์๊ฐ์ผ๋ก ๊ฐ๋ก์ฑ์ง ์์ต๋๋ค.
|
|
57
|
+
**์ธ์
์ด ๋๋ ๋ค์** ๋ก์ปฌ ๊ธฐ๋ก์ ์ฝ์ด์ ๋น์ผ ๋ชจ๋ธ์ด ๋ฐ๋ณตํด์ ์ฒ๋ฆฌํด ์จ ์ฌ์ด ์ ํ์ ์ฐพ์๋ด๊ณ ,
|
|
58
|
+
๊ทธ ์ ํ์ **๋ค์ ์ธ์
๋ถํฐ** ๋ ์ผ ๋ชจ๋ธ์ด ๋งก๋๋ก ๋ฃฐ๋ก ๋ฑ๋กํฉ๋๋ค. ๋ฃฐ์ ์ ์ฉ ๋ฒ์๋ ๊ธ๋ก๋ฒ๊ณผ ํ๋ก์ ํธ๋ก ๋๋ฉ๋๋ค.
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
### ์ค์๊ฐ ๋ชจ๋ธ ๋ผ์ฐํ
์ด ์คํ๋ ค ๋น์ฉ์ ํค์ฐ๋ ์ด์
|
|
59
61
|
|
|
60
|
-
|
|
61
|
-
**์ธ์
์ด ๋๋ ๋ค** ๋ก์ปฌ ๊ธฐ๋ก์ ์ฝ์ด์, ๋น์ผ ๋ชจ๋ธ์ด ๋ฐ๋ณตํด์ ์ฒ๋ฆฌํด ์จ ์ฌ์ด ์ ํ์ ๋ฝ๊ณ ,
|
|
62
|
-
๊ทธ ์ ํ์ **๋ค์ ์ธ์
๋ถํฐ** ์ผ ๋ชจ๋ธ์ด ๋งก๋๋ก ๋ฃฐ๋ก ๊ฒ๋๋ค. ๋ฃฐ์ ๊ธ๋ก๋ฒยทํ๋ก์ ํธ๋ก ๋ฒ์๊ฐ ๋๋ฉ๋๋ค.
|
|
62
|
+
์ธ์
๋์ค์ ๋ชจ๋ธ์ ๋ฐ๊พธ์ง ์๋๋ค๋ ์ ์ด ์ด ๋๊ตฌ์ ํต์ฌ์
๋๋ค.
|
|
63
63
|
|
|
64
|
-
์ธ์
์ค๊ฐ์
|
|
64
|
+
ํ๋กฌํํธ ์บ์๋ **๋ชจ๋ธ๋ณ๋ก ๋ฐ๋ก ์ ์ง๋ฉ๋๋ค.** ๊ทธ๋์ ์ธ์
์ค๊ฐ์ ๋ ์ผ ๋ชจ๋ธ๋ก ์ ํํ๋ฉด ์ ๋ชจ๋ธ์ ๋น ์บ์์์ ์์ํ๊ณ , ๊ทธ๋๊น์ง ์์ธ ๋ํ ์ ์ฒด๋ฅผ ์ ๊ฐ๋ก ๋ค์ ์ฝ์ด์ผ ํฉ๋๋ค. ์บ์ ํํธ๋ ์๋ ์
๋ ฅ๊ฐ์ 10๋ถ์ 1 ์์ค์ด๋ฏ๋ก, ๋ํ๊ฐ 2๋ง ํ ํฐ๋ง ๋์ด๊ฐ๋ **์ ํ ํ ๋ฒ์ ๊ทธ๋ ์๋ ๊ธ์ก์ด ํต์งธ๋ก ์ฌ๋ผ์ง๋๋ค.** ์ผ ๋ชจ๋ธ๋ก ์ฎ๊ฒผ๋๋ฐ ์ฒญ๊ตฌ์๋ ๋ ์ปค์ง๋, ์ค์๊ฐ ๋ผ์ฐํ
์ ๋ํ์ ์ธ ์ญ์ค์
๋๋ค.
|
|
65
|
+
|
|
66
|
+
์ค์ ๋ก ๋ผ์ฐํ
์ ํ์ ๋ง๋ค๋ ํ๋ค์ด ๊ฐ์ ์ด์ ๋ก ๊ธฐ๋ฅ์ ๊ป์ต๋๋ค: [LLM ๋ผ์ฐํฐ๋ฅผ ๋ง๋ ์ฌ๋๋ค์ด ์ง์ ๊ป์ต๋๋ค #Shorts](https://www.youtube.com/shorts/SK-GoAABjbg)
|
|
67
|
+
|
|
68
|
+
์ด ๋๊ตฌ๋ ๊ทธ๋์ ๋ฉ์ธ ์ธ์
์ ๋ชจ๋ธ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค. **์๋ธ์์ด์ ํธ ์์๋ง ์ฌ์ฉํ๋ฏ๋ก** ๋ฉ์ธ ์ธ์
์ ์บ์๋ ๊ทธ๋๋ก ์ ์ง๋๊ณ , ์์๋ ์์
๋ง ๋ณ๋ ์ปจํ
์คํธ์์ ์ผ ๋ชจ๋ธ์ด ์ฒ๋ฆฌํฉ๋๋ค. ์ ๊ฐ์ก์ด ์บ์ ์์ค๋ก ์์๋์ง ์๋ ์ด์ ๊ฐ ์ฌ๊ธฐ์ ์์ต๋๋ค.
|
|
65
69
|
|
|
66
70
|
```bash
|
|
67
71
|
npm i -g claude-token-saver@latest
|
|
68
|
-
claude-token-saver route-scan #
|
|
72
|
+
claude-token-saver route-scan # ์ง๋ ์ธ์
์์ ์์ ํ๋ณด ์ถ์ถ (LLM ํธ์ถ ์์)
|
|
69
73
|
claude-token-saver route-scan rules # ์น๊ฒฉ๋ ๋ฃฐ ํ์ธ ยท rm <N> ์ผ๋ก ์ญ์
|
|
70
|
-
claude-token-saver route-scan savings # ์์์ผ๋ก
|
|
74
|
+
claude-token-saver route-scan savings # ์์์ผ๋ก ์ ๊ฐํ ๊ธ์ก์ ๊ทผ๊ฑฐ๋ฅผ ์ ์ ํ์ธ
|
|
71
75
|
```
|
|
72
76
|
|
|
73
|
-
๊ธฐ์ค์ ์
|
|
74
|
-
|
|
77
|
+
ํ์ ๊ธฐ์ค์ ์ ๋ค๋ฅธ ์ฌ๋์ ๋ฒค์น๋งํฌ๊ฐ ์๋๋ผ **์ฌ์ฉ์ ๋ณธ์ธ์ ์ต๊ทผ 14์ผ ๋ถํฌ(p25/p75)** ๋ก ์ก์ต๋๋ค.
|
|
78
|
+
์์ํ ๋ค์ ์ค์ ๋ก ์ฑ๊ณตํ๋์ง๊น์ง ์ธก์ ํ๋ rule-health๋ [v3.9.0](#v390-2026-08-01)์ ๋ค์ด๊ฐ์ต๋๋ค.
|
|
75
79
|
|
|
76
80
|
---
|
|
77
81
|
|
|
@@ -84,43 +88,45 @@ npm uninstall -g claude-cache-monitor # (๊ตฌ ํจํค์ง ์ฌ์ฉ์๋ง)
|
|
|
84
88
|
npm i -g claude-token-saver
|
|
85
89
|
```
|
|
86
90
|
|
|
87
|
-
|
|
91
|
+
์ค์นํ๋ฉด Claude Code ํ๋ฉด ํ๋จ์ statusline์ด ๊ณง๋ฐ๋ก ๋ํ๋ฉ๋๋ค. `--ignore-scripts` ์ต์
์ด๋ sudo ์ฌ์ฉ ๋ฑ์ผ๋ก ์๋ ๋ฑ๋ก์ด ๋์ง ์์๋ค๋ฉด `claude-token-saver install`์ ์คํํด ์ง์ ๋ฑ๋กํ์ญ์์ค.
|
|
92
|
+
|
|
93
|
+
์ค์น ํ ๋ฒ์ผ๋ก **statusline๊ณผ Skill, SessionStart ํ
, ๐
ท Harness(5์์น), ์ต์ด route-scan์ด** ๋ชจ๋ ์ค๋น๋ฉ๋๋ค. Harness๋ `~/.claude/CLAUDE.md`์ ํ์๊ฐ ๋ถ์ ๋ธ๋ก์ผ๋ก **์ถ๊ฐ๋๋ฉฐ**, ๊ธฐ์กด์ ์์ฑํด ๋ ๋ด์ฉ์ ๋ฐฑ์
ํ ๋ค ๊ทธ๋๋ก ๋ณด์กดํฉ๋๋ค. ์ด๋ฏธ ์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ์๋ ์๋ฌด๊ฒ๋ ๋ฐ๊พธ์ง ์์ต๋๋ค. ์๋ ์ค์ ์ ์ํ์ง ์์ผ๋ฉด `CTS_NO_HARNESS=1 npm i -g claude-token-saver`๋ก ๊ฑด๋๋ธ ์ ์๊ณ , ์ด๋ฏธ ์ ์ฉํ ์ค์ ์ ๋๋๋ฆฌ๋ ค๋ฉด `claude-token-saver harness uninit --global`์ ์คํํ์ญ์์ค.
|
|
88
94
|
|
|
89
|
-
> โ ๏ธ sudo ๊ธ๋ก๋ฒ
|
|
95
|
+
> โ ๏ธ sudo๋ก ๊ธ๋ก๋ฒ ์ค์น๋ฅผ ํ๋ฉด Skill์ด ์ฌ์ฉ์ ๊ณ์ ์ด ์๋๋ผ root์ `~/.claude`์ ๋ฑ๋ก๋๋ ํจ์ ์ด ์์ต๋๋ค. nvm์ด๋ fnm, Volta๋ฅผ ์ฌ์ฉํด ์ฌ์ฉ์ ์์ญ์ ์ค์นํ๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.
|
|
90
96
|
|
|
91
97
|
## statusline ์ฝ๋ ๋ฒ
|
|
92
98
|
|
|
93
|
-
์ ๊ฐ ์์ฅ์ ๊ธฐ๋ก์ด ์์ด๋ฉด **๋
|
|
99
|
+
์ ๊ฐ ์์ฅ์ ๊ธฐ๋ก์ด ์์ด๋ฉด statusline์ด **๋ ์ค๋ก** ์ถ๋ ฅ๋ฉ๋๋ค. ์ฒซ์งธ ์ค์๋ ๋ผ์ฐํ
์ ๊ฐ์ก๋ง ํ์ํ๊ณ , ๋์งธ ์ค์๋ ์ง๋จ ์นฉ์ ํ์ํฉ๋๋ค.
|
|
94
100
|
|
|
95
101
|
```
|
|
96
102
|
๐ Routing saved $2.09 | fableโsonnet 1ร $0.72 ยท opusโhaiku 1ร $0.57
|
|
97
103
|
โ Ctx 200k+ ยท ๐
ท 5/5 ยท ๐ค Opus 5 ยท ๐ง Cache hit 98.8% ยท โณ Cache expires 59:46 ยท โฆ current โโโโโโ 62% ๐ 21:33 ยท ๐
weekly โโโโโโ 38% ๐ Tue 19:33 ยท ๐ฆ Ctx 47% of 1M ยท ๐ฐ Cache saved $1.0K ยท last 1d
|
|
98
104
|
```
|
|
99
105
|
|
|
100
|
-
์์ฅ์ด ๋น์ด
|
|
106
|
+
์์ฅ์ด ๋น์ด ์์ผ๋ฉด, ๋ค์ ๋งํด ์์ง ์ค์ธก๋ ์์์ด ์์ผ๋ฉด ์ฒซ์งธ ์ค์ ๊ทธ๋ฆฌ์ง ์๊ณ ์ข
์ ์ฒ๋ผ ํ ์ค๋ก ์ถ๋ ฅํฉ๋๋ค. ์ผ๋ถ ํ๊ฒฝ(๊ตฌ๋ฒ์ macOS Claude Code)์์ ์ฒซ์งธ ์ค๋ง ํ์๋๋ค๋ฉด `--single-line` ์ต์
์ผ๋ก ํ ์ค ๋ ์ด์์์ ์ ์งํ์ญ์์ค.
|
|
101
107
|
|
|
102
108
|
| ์ธ๊ทธ๋จผํธ | ์๋ฏธ |
|
|
103
109
|
|---|---|
|
|
104
|
-
| `๐`
|
|
110
|
+
| `๐` **์ฒซ์งธ ์ค** | **๋ผ์ฐํ
์ผ๋ก ์ ๊ฐํ ๋์ ๊ธ์ก๊ณผ ๋ชจ๋ธ ์ด๋ ๋ด์ญ์
๋๋ค.** ๋์ ๊ธ์ก์ ๋
น์์ผ๋ก, ๋ด์ญ์ ํ์์ผ๋ก ํ์ํฉ๋๋ค. ๋ด์ญ์ ๋ชจ๋ ๋ํ๋ฉด ๋์ ๊ธ์ก๊ณผ ์ ํํ ์ผ์นํ๋ฉฐ(์๋ผ๋ด์ง ์๊ณ ์ ๋ถ ํ์ํฉ๋๋ค), ๋ฒ์ ์ซ์๋ ๊ณ์ ๋ฐ๋๋ฏ๋ก ๊ณ์ด๋ช
๋ง ๋จ๊น๋๋ค(`claude-opus-4-5-โฆ` โ `opus`). ๊ทผ๊ฑฐ๋ฅผ ์ ๋ถ ํ์ธํ๋ ค๋ฉด `route-scan savings`๋ฅผ ์คํํ์ญ์์ค |
|
|
105
111
|
| `๐ค` | ํ์ฌ ๋ชจ๋ธ |
|
|
106
112
|
| `๐
ท 5/5` | harness ์์น ์ ์ ([Harness ๋ชจ๋](#-harness-๋ชจ๋)) |
|
|
107
113
|
| `๐ง ` | ์บ์ ํํธ์จ (85%+ ๋
น์) |
|
|
108
|
-
| `โณ` | ์บ์ TTL
|
|
114
|
+
| `โณ` | ์บ์ TTL ์นด์ดํธ๋ค์ด์
๋๋ค. ๋ง๋ฃ๋๊ธฐ ์ ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ฉด ์บ์๊ฐ ์ ์ง๋ฉ๋๋ค |
|
|
109
115
|
| `โฆ current` / `๐
weekly` | 5์๊ฐ / 7์ผ rate-limit ์๋ ์ฌ์ฉ๋ฅ + ๋ฆฌ์
์๊ฐ |
|
|
110
|
-
| `๐ฆ` | ์ปจํ
์คํธ
|
|
111
|
-
| `๐ฐ` | ํ๋กฌํํธ ์บ์๊ฐ
|
|
116
|
+
| `๐ฆ` | ์ปจํ
์คํธ ์ฌ์ฉ๋ฅ ์
๋๋ค(์: `Ctx 68% of 1M`). ์ฌ์ฉ๋ฅ ์ ๋ฐ๋ผ ๋
น์ยท๋
ธ๋์ยท๋นจ๊ฐ์์ผ๋ก ํ์ํฉ๋๋ค. ์ต์ ๋ชจ๋ธ์ 1M ์ปจํ
์คํธ๊ฐ ๊ธฐ๋ณธ์ด๊ณ ๋ณ๋ ์๊ธ์ด ๋ถ์ง ์์ง๋ง, ํ ํฐ๋ ์์ฒด๊ฐ ํด๋น ๋น์ฉ๊ณผ 5์๊ฐยท7์ผ ํ๋๋ฅผ ๋น ๋ฅด๊ฒ ์๋ชจ์ํต๋๋ค |
|
|
117
|
+
| `๐ฐ` | ํ๋กฌํํธ ์บ์๊ฐ ์ ์ฝํด ์ค ๋์ ๊ธ์ก์
๋๋ค. ์ฒซ์งธ ์ค์ `๐`(๋ชจ๋ธ ๋ผ์ฐํ
์ ๊ฐ์ก)์๋ **์๋ก ๋ค๋ฅธ ์์น์
๋๋ค** |
|
|
112
118
|
|
|
113
|
-
๋ฌธ์ ๊ฐ ๊ฐ์ง๋๋ฉด **๊ฒฝ๊ณ
|
|
119
|
+
๋ฌธ์ ๊ฐ ๊ฐ์ง๋๋ฉด **๊ฒฝ๊ณ ์นฉ์ ์ค ๋งจ ์์** ๋ถ์
๋๋ค.
|
|
114
120
|
|
|
115
121
|
```
|
|
116
122
|
๐จ 5H โโโโโโ 94% ๐ 12:36 ยท ๐
ท 5/5 ยท ๐ค Opus 4.8 ยท ๐ง Cache hit 72.1% ยท โ Cache miss ยท ๐
weekly โโโโโโ 12% ๐ Sun 14:26 ยท ๐ฆ Ctx 200k ยท last 1d
|
|
117
123
|
```
|
|
118
124
|
|
|
119
|
-
|
|
125
|
+
์นฉ์ ์ข
๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. `๐จ 5H/7D NN%`(ํ๋ ์๋ฐ) ยท `โ Ctx 200k+`(๋จ์ผ ์์ฒญ์ด ์ค์ ๋ก 200k๋ฅผ ์ด๊ณผ) ยท `โ Cache miss` ยท `โ Input spike` ยท `โ Output heavy` ยท `โ Call surge` ยท `โ Rebuild churn` ยท `โ 5m TTL`. ๋ ์๋๊ฐ ๋์์ 90%๋ฅผ ๋์ผ๋ฉด ๋ฆฌ์
์ด ๋ ์๋ฐํ ์ชฝ์ ๐จ๋ก ์ฌ๋ฆฌ๊ณ , ๋๋จธ์ง ํ๋๋ ๋นจ๊ฐ ์ธ๊ทธ๋จผํธ๋ก ๊ณ์ ํ์ํฉ๋๋ค (v2.16.0 ์ด์).
|
|
120
126
|
|
|
121
127
|
### ๊ฒฝ๊ณ ์นฉ์ด ๋ด์ ๋
|
|
122
128
|
|
|
123
|
-
Claude ์์์ `/claude-token-saver` Skill์
|
|
129
|
+
Claude Code ์์์ `/claude-token-saver` Skill์ ์คํํ๊ฑฐ๋, ์นฉ์ ์ ํ ๋ฌธ๊ตฌ๋ฅผ ๊ทธ๋๋ก ๋งํ๊ธฐ๋ง ํด๋("5H cap ๋ด์ด", "cache miss") Skill์ด ์๋์ผ๋ก ํ์ฑํ๋์ด **์์ธ ์ฝ๋์ ๋จ๊ณ๋ณ ํด๊ฒฐ ๋ช
๋ น์** ๋ณด์ฌ ์ค๋๋ค. ํ๋๊ฐ ์๋ฐํ ์ํฉ์์๋ `claude-token-saver handoff`๋ก ์งํ ์ค์ธ ์์
์ ๋งํฌ๋ค์ด ํ์ผ์ ๋ฐฑ์
ํ ๋ค ์ ์ธ์
์์ ์ด์ด๊ฐ๋ ๋ฐฉ์์ ๊ถ์ฅํฉ๋๋ค.
|
|
124
130
|
|
|
125
131
|
## ์ฃผ์ ๋ช
๋ น
|
|
126
132
|
|
|
@@ -134,12 +140,12 @@ Claude ์์์ `/claude-token-saver` Skill์ ์คํํ๊ฑฐ๋ ์นฉ ๋ฌธ๊ตฌ๋ฅผ
|
|
|
134
140
|
| `claude-token-saver handoff` | ์์
์ํ๋ฅผ `HANDOFF-*.md`๋ก ๋ฐฑ์
(์บก ์๋ฐ ์) |
|
|
135
141
|
| `claude-token-saver mode [keywords...]` | ์ถ๋ ฅ ์ค์ (`icon`/`text`, `ko`/`en`, `1h`~`30d` ์๋ ๋ฑ) |
|
|
136
142
|
| `claude-token-saver harness ...` | ๐
ท Harness ๊ด๋ฆฌ (์๋ ์ฐธ๊ณ ) |
|
|
137
|
-
| `claude-token-saver route-scan` | ์์ ๋ชจ๋ธ์ด ๋ฐ๋ณต ์ฒ๋ฆฌํ
|
|
138
|
-
| `claude-token-saver route-scan savings` | ๋ผ์ฐํ
์ ๊ฐ
|
|
139
|
-
| `claude-token-saver compact-window` | 1M
|
|
143
|
+
| `claude-token-saver route-scan` | ์์ ๋ชจ๋ธ์ด ๋ฐ๋ณต ์ฒ๋ฆฌํ ์ฌ์ด ์์
์ ๊ฐ์งํด haiku ์์ ๋ซ์ณ ๋ฃฐ์ ์ ์ํฉ๋๋ค (์๋ ์ฐธ๊ณ ) |
|
|
144
|
+
| `claude-token-saver route-scan savings` | ๋ผ์ฐํ
์ ๊ฐ ์์ฅ์
๋๋ค. ๋ชจ๋ธ ์ด๋๋ณ ํฉ๊ณ์ ์คํ๋ณ ๋ด์ญ์ ํจ๊ป ๋ณด์ฌ ์ฃผ๋ฉฐ, ํ์๋๋ ๊ธ์ก์ ๊ทผ๊ฑฐ๊ฐ ๋ฉ๋๋ค |
|
|
145
|
+
| `claude-token-saver compact-window` | 1M ์ปจํ
์คํธ๋ฅผ ์ฐ๋ฉด์ ์๋ ์์ถ ์ฐฝ์ด ์ค์ ๋์ง ์์์ผ๋ฉด ๊ฒฝ๊ณ ํ๊ณ , `set`์ผ๋ก 40๋ง์ ๊ณ ์ ํฉ๋๋ค (์๋ ์ฐธ๊ณ ) |
|
|
140
146
|
| `claude-token-saver install` | Skillยทstatusline ์๋ ๋ฑ๋ก |
|
|
141
147
|
|
|
142
|
-
์ถ๋ ฅ ์ธ์ด๋ `mode ko
|
|
148
|
+
์ถ๋ ฅ ์ธ์ด๋ `mode ko`์ `mode en`์ผ๋ก ์ ํํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์์ด์ด๋ฉฐ, statusline์ ์นฉ์ ์ธ์ ๋ ๊ธฐํธ๋ก ํ์ํฉ๋๋ค. ์ ์ฒด ์ต์
์ [์๋ฌธ README](./README.en.md#options)๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
|
|
143
149
|
|
|
144
150
|
## ๐
ท Harness ๋ชจ๋
|
|
145
151
|
|
|
@@ -147,7 +153,7 @@ Claude ์์์ `/claude-token-saver` Skill์ ์คํํ๊ฑฐ๋ ์นฉ ๋ฌธ๊ตฌ๋ฅผ
|
|
|
147
153
|
|
|
148
154
|
```bash
|
|
149
155
|
claude-token-saver harness init # ์ด ํ๋ก์ ํธ์ ์
์
|
|
150
|
-
claude-token-saver harness init --global # ~/.claude/CLAUDE.md
|
|
156
|
+
claude-token-saver harness init --global # ~/.claude/CLAUDE.md, ๋ชจ๋ ํ๋ก์ ํธ์ ์ ์ฉ
|
|
151
157
|
claude-token-saver harness check # ํ์ฌ ์ ์ (๊ธ๋ก๋ฒ fallback ์ธ์ )
|
|
152
158
|
claude-token-saver harness promote <N> --project|--global # ๊ฒฝ๊ณ #N โ ratchet ๋ฃฐ (์ค์ฝํ ํ์)
|
|
153
159
|
claude-token-saver harness promote "<๋ฃฐ ํ
์คํธ>" --project|--global # ๋ด๊ฐ ์ง์ ์ ์ํ ๋ฃฐ๋ ๊ฐ์ ๋ช
๋ น์ผ๋ก ๋ฑ๋ก
|
|
@@ -156,12 +162,12 @@ claude-token-saver harness list / rm <N> # ๋ฃฐ ์กฐํ / ์ญ์ (์๋ .ba
|
|
|
156
162
|
claude-token-saver harness off | on # ๐
ท ํ์ ํ ๊ธ
|
|
157
163
|
```
|
|
158
164
|
|
|
159
|
-
- `promote`๋ non-TTY(
|
|
165
|
+
- `promote`๋ non-TTY ํ๊ฒฝ(์คํฌ๋ฆฝํธ๋ LLM ํธ์ถ)์์ `--project` ๋๋ `--global` ํ๋๊ทธ๊ฐ **๋ฐ๋์ ํ์ํฉ๋๋ค.** ์ ์ฉ ๋ฒ์๊ฐ ์ฌ์ฉ์์๊ฒ ๋ฌป์ง ์์ ์ฑ ๊ฒฐ์ ๋๋ ์ฌ๊ณ ๋ฅผ ๋ง๊ธฐ ์ํ ์ค๊ณ์
๋๋ค.
|
|
160
166
|
- `pull`์ ํจํค์ง์ ๋๋ด๋ **์ ์์ ํ๋ ์ด์
๋ซ์ณ ๋ฃฐ**(`presets/ratchet-rules.md` โ ์ค์ ๋ฐ๋ณต ์ฌ๊ณ ์์ ์น๊ฒฉ๋ ๋ฒ์ฉ ๋ฃฐ๋ง)์ ๋ด ๊ธ๋ก๋ฒ ๋ซ์ณ(`~/.claude/ratchet.md`)์ ๋ฑ๋กํฉ๋๋ค. ์ค์น(`install`)๋ `init`์ ์๋ฌด๊ฒ๋ ์๋ ์ฃผ์
ํ์ง ์์ผ๋ฉฐ, `pull`์ ํญ์ opt-in์ด๊ณ ์ฌ์คํํด๋ ์ค๋ณต์ด ์์ต๋๋ค(๋ฉฑ๋ฑ). ๋ง์์ ์ ๋๋ ๋ฃฐ์ `harness rm`์ผ๋ก ์ ๊ฑฐํ๋ฉด ๋ฉ๋๋ค.
|
|
161
167
|
- ๐
ทโ ๋ฐํ์ ๊ฒฝ๊ณ (`ratchet?` `no-evidence` `PEV-skip`)๋ 30๋ถ ํ ์๋ ๋ง๋ฃ๋๊ณ , ํ์ ๋๋ ํฐ๋ฆฌ ์ธ์
๋ ํ๋ก์ ํธ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋งค์นญ๋ฉ๋๋ค. PEV-skip์ ๋ณ๊ฒฝ์ฑ ๋๊ตฌ(Edit/Write/Bash)๋ง ์นด์ดํธํด ์ฝ๊ธฐ ์์ฃผ ์ธ์
์์๋ ๋ฐ๋ํ์ง ์์ต๋๋ค (v2.16.0+).
|
|
162
168
|
|
|
163
169
|
<details>
|
|
164
|
-
<summary>โ ๏ธ <code>harness rm</code>์ ์ ์คํ๊ฒ
|
|
170
|
+
<summary>โ ๏ธ <code>harness rm</code>์ ์ ์คํ๊ฒ ์ฌ์ฉํ์ญ์์ค: ์ญ์ ์ ํ์ธ ์ฌํญ</summary>
|
|
165
171
|
|
|
166
172
|
ratchet์ ๊ฐ์น๋ **ํ ๋ฐฉํฅ ๋์ **์ ์์ต๋๋ค. ๋ฃฐ์ ๊ฐ๋ณ๊ฒ ์ง์ฐ๋ฉด ๊ฐ์ ์ค์๊ฐ ๋ค์ ์๊ธฐ ์์ํฉ๋๋ค.
|
|
167
173
|
|
|
@@ -173,13 +179,13 @@ ratchet์ ๊ฐ์น๋ **ํ ๋ฐฉํฅ ๋์ **์ ์์ต๋๋ค. ๋ฃฐ์ ๊ฐ๋ณ๊ฒ ์ง
|
|
|
173
179
|
</details>
|
|
174
180
|
|
|
175
181
|
|
|
176
|
-
## ๐ฆ compact-window
|
|
182
|
+
## ๐ฆ compact-window: 1M ์ปจํ
์คํธ์ ์๋ ์์ถ ์ง์ ๊ณ ์
|
|
177
183
|
|
|
178
184
|
Claude Code๋ `min(autoCompactWindow, ๋ชจ๋ธ ์ต๋ ์ฐฝ)`์ ๊ฐ๊น์์ง๋ฉด ๋ํ๋ฅผ ์๋ ์์ถํฉ๋๋ค. 1M ์ฐฝ์ ์ฐ๋ฉด ์ด ๊ฐ์ด ์กํ ์์ง ์์ ํ 80๋ง ํ ํฐ ๊ทผ์ฒ๊น์ง ๊ฐ์์ผ ์์ถ์ด ๊ฑธ๋ฆฌ๊ณ , ๊ทธ์ ๊น์ง ๋ชจ๋ ์์ฒญ์ด ์ ์ฒด ์ปจํ
์คํธ๋ฅผ ํต์งธ๋ก ์ฌ๊ณผ๊ธํฉ๋๋ค. **1M์ ๋๋ฌด ํฌ๋ 40๋ง~70๋ง ๋ฒ์๋ฅผ ๊ถ์ฅํฉ๋๋ค** โ ํฐ ๋ถ์ฌ๋ฃ๊ธฐ์ฉ ์ฌ์ ๋ 200k ์ธ์
์ 2~3.5๋ฐฐ๋ก ๋จ๊ธฐ๋ฉด์ ๊ผฌ๋ฆฌ๋ง ์๋ผ๋
๋๋ค.
|
|
179
185
|
|
|
180
186
|
**๊ถ์ฅ ๋ฒ์ ์์ด๋ฉด ๊ฒฝ๊ณ ํ์ง ์์ต๋๋ค.** 40๋ง์ ์ ๊ฐ์ด ์์ถ ํ์๋ฅผ ์ด๊ธฐ๋ ํํ์ด๊ณ , ๊ธด ์ธ์
์ ๊ทธ๋ณด๋ค ์ฌ์ ๊ฐ ๋ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ฏธ์ค์ ์ด๊ฑฐ๋ 70๋ง์ ๋์ ๋๋ง ์๋ฆฝ๋๋ค(๊ทธ๋ณด๋ค ๋ฎ๊ฒ ์ก์ ๊ฑด ๋ ๊ณต๊ฒฉ์ ์ผ๋ก ์๋ผ๊ฒ ๋ค๋ ์ ํ์ด๋ผ ๊ทธ๋ฅ ๋ก๋๋ค).
|
|
181
187
|
|
|
182
|
-
**200k ์ปจํ
์คํธ๋ ๊ฒฝ๊ณ ๋์์ด
|
|
188
|
+
**200k ์ปจํ
์คํธ๋ ๊ฒฝ๊ณ ๋์์ด ์๋๋๋ค.** ์ฐฝ์ด ์ด๋ฏธ 200k ์ดํ์ด๋ฏ๋ก ์ด ์ค์ ์ผ๋ก ๋ฌ๋ผ์ง๋ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
|
|
183
189
|
|
|
184
190
|
```bash
|
|
185
191
|
claude-token-saver compact-window # ํ์ฌ ์ํ (๋ชจ๋ธยท์ฐฝยท์ค์ ๊ฐยท์ถ์ฒ)
|
|
@@ -190,29 +196,29 @@ claude-token-saver compact-window off | on # ๊ฒฝ๊ณ ํ์ ํ ๊ธ
|
|
|
190
196
|
```
|
|
191
197
|
|
|
192
198
|
- 1M ๋ชจ๋ธ์ธ๋ฐ ๋ฏธ์ค์ ์ด๊ฑฐ๋ 40๋ง์ ๋์ผ๋ฉด statusline์ `๐
ทโ compact-window?`๊ฐ ๋จ๊ณ , ์ธ์
๋ธ๋ฆฌํ์ด ๋ฑ๋ก ๋ช
๋ น๊น์ง ์๋ ค์ค๋๋ค.
|
|
193
|
-
-
|
|
199
|
+
- ์ ์ฉ ๋ฒ์(`--global` ๋๋ `--project`)๋ `set`์์ **๋ฐ๋์ ์ง์ ํด์ผ ํฉ๋๋ค.** ๊ธ๋ก๋ฒ ์ค์ ํ์ผ์ ์ฌ์ฉ์์๊ฒ ๋ฌป์ง ์๊ณ ์์ ํ๋ ์ผ์ ๋ง๊ธฐ ์ํ ์ค๊ณ์
๋๋ค.
|
|
194
200
|
- ๊ธฐ์กด `settings.json`์ ๋ค๋ฅธ ํค๋ ๊ทธ๋๋ก ๋ณด์กดํ๊ณ `.bak`์ ๋จ๊น๋๋ค. JSON์ด ๊นจ์ ธ ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ์ฐ์ง ์๊ณ ์ค๋จํฉ๋๋ค.
|
|
195
201
|
- ์
ธ์ `CLAUDE_CODE_AUTO_COMPACT_WINDOW`๊ฐ export๋ผ ์์ผ๋ฉด ๊ทธ์ชฝ์ด settings.json๋ณด๋ค ์ฐ์ ํฉ๋๋ค (`set`์ด ์ด ๊ฒฝ์ฐ๋ฅผ ๊ฐ์งํด ์๋ ค์ค๋๋ค).
|
|
196
202
|
|
|
197
|
-
## ๐ route-scan
|
|
203
|
+
## ๐ route-scan: "์ด ๋ฐ๋ณต ์์
์ ๋ ์ผ ํฐ์ด๋ก ๋ด๋ ค๋ ๋ฉ๋๋ค"
|
|
198
204
|
|
|
199
205
|
์ธ์
๋ก๊ทธ์์ ์์ ๋ชจ๋ธ(opus/fable)์ด ๋ฐ๋ณต ์ฒ๋ฆฌํด ์จ ์ฌ์ด ์์
์ ์ฐพ์ **haiku/sonnet ์์ ๋ฃฐ๋ก ์น๊ฒฉ**์ ์ ์ํฉ๋๋ค. ์ ๊ณผ์ ๋ก์ปฌ, ํ ํฐ ๋น์ฉ 0.
|
|
200
206
|
|
|
201
|
-
- **T2 โ haiku
|
|
202
|
-
- **T1 โ sonnet
|
|
203
|
-
- **T0
|
|
207
|
+
- **T2 โ haiku:** ํ์๊ณผ ์กฐํ, ๋จ์ ์คํ์ ํด๋นํฉ๋๋ค. ์๋ฌ๊ฐ ์๊ณ ๋ณ๊ฒฝ๋ ๊ฑฐ์ ์๋ ์์
์
๋๋ค.
|
|
208
|
+
- **T1 โ sonnet:** ๋น๋์ ์ํ ์ ๊ฒ์ ํด๋นํฉ๋๋ค. ๋ณ๊ฒฝ์ด ์ ๊ณ ์๋ฌ๊ฐ 1๊ฑด ์ดํ์ธ ์์
์
๋๋ค.
|
|
209
|
+
- **T0 ์ ์ง:** ์๋ฌ๊ฐ ๋ฐ๋ณต๋๊ฑฐ๋ ๋ณ๊ฒฝ์ด ๋ง๊ฑฐ๋ ์ค๊ณ์ ๋ถ์์ด ํ์ํ ์์
์
๋๋ค. ์ธ์
๋ชจ๋ธ์ด ๊ณ์ ๋ด๋นํฉ๋๋ค.
|
|
204
210
|
|
|
205
211
|
ํต์ฌ ์ค๊ณ๋ ์ธ ๊ฐ์ง์
๋๋ค:
|
|
206
|
-
1.
|
|
207
|
-
2. ์๊ณ๊ฐ์
|
|
208
|
-
3. ์น๊ฒฉ๋ ๋ฃฐ์
|
|
212
|
+
1. ๋์ด๋๋ฅผ ํ
์คํธ๋ก ์ถ์ธกํ์ง ์๊ณ **์ค์ ๊ฒฐ๊ณผ๋ก ํ์ ํฉ๋๋ค.** ๋๊ตฌ ์๋ฌ์ ๋ณ๊ฒฝ์ ์ผ์ผํจ ๋๊ตฌ์ ์, ์ถ๋ ฅ ํ ํฐ์ ๊ทผ๊ฑฐ๋ก ์ผ์ต๋๋ค.
|
|
213
|
+
2. ์๊ณ๊ฐ์ **์ฌ์ฉ์์ ์ต๊ทผ 14์ผ ๋ก๊ทธ ๋ถํฌ์์ ์๋์ผ๋ก ๋ณด์ ํฉ๋๋ค.** ๊ณ ์ ๋ ์์๋ ์ํฌ๋ก๋๊ฐ ๋ฐ๋๋ฉด ๊ณง ์ด๊ธ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
|
|
214
|
+
3. ์น๊ฒฉ๋ ๋ฃฐ์ ๋๊ตฌ๊ฐ ๊ด๋ฆฌํ๋ ๋ณ๋ ํ์ผ(`.claude/ratchet-model.md`)์์ **์๋์ผ๋ก ๊ฐฑ์ ๋๋ฉฐ,** ์์ํ ๋ค ์๋ฌ์จ์ด ๋์์ง๋ฉด `โ rule-health`๋ก ๊ฒฝ๊ณ ํฉ๋๋ค. ๋ฃฐ์ด ๋ก์๋ค๋ ์ฌ์ค์ ์ค์ค๋ก ์๋ฆฌ๋ ์
์
๋๋ค.
|
|
209
215
|
|
|
210
216
|
```bash
|
|
211
217
|
claude-token-saver route-scan # ์ค์บ (24h ์บ์) + ํฐ์ด๋ณ ํ๋ณด ์ถ๋ ฅ
|
|
212
218
|
claude-token-saver harness promote R1 --project # ํ๋ณด R1์ ๋ชจ๋ธ ํผํ
๋ฃฐ๋ก ๋ฑ๋ก
|
|
213
219
|
claude-token-saver route-scan dismiss 1 # ๊ด์ฌ ์์ผ๋ฉด ๋ฌด์ (์ฌ์ค์บ์๋ ์ ๋ธ)
|
|
214
220
|
claude-token-saver route-scan rules # ๋ฑ๋ก๋ ๋ชจ๋ธ ํผํ
๋ฃฐ ๋ชฉ๋ก (rm <N>์ผ๋ก ์ ๊ฑฐ)
|
|
215
|
-
claude-token-saver route-scan savings # ์ ๊ฐ
|
|
221
|
+
claude-token-saver route-scan savings # ์ ๊ฐ ์์ฅ: ์ด๋ ๋ฃฐ์ด ์ด๋ค ๋ชจ๋ธ์์ ์ด๋ค ๋ชจ๋ธ๋ก ์ฎ๊ฒผ๋์ง
|
|
216
222
|
```
|
|
217
223
|
|
|
218
224
|
`route-scan savings`๋ statusline์ `๐ Routing saved` ํ ์ค ๋ค์ ์๋ ๊ทผ๊ฑฐ๋ฅผ ๊ทธ๋๋ก ๋ณด์ฌ์ค๋๋ค. ๋ชจ๋ธ ์ด๋๋ณ ํฉ๊ณ์ ์คํ๋ณ ๋ด์ญ์ด ํจ๊ป ๋์ค๋ฏ๋ก, ๊ธ์ก์ด ์ด๋์ ๋์๋์ง ์ถ์ ํ ์ ์์ต๋๋ค.
|
|
@@ -253,7 +259,7 @@ v3.10.0๋ถํฐ๋ ํ๋กํ์ผ ID๋ฅผ ์ญํ (mainยทopusยทsonnetยทhaiku)๋ก ๋๋
|
|
|
253
259
|
|
|
254
260
|
| ์ฝ๋ | ์๋ฏธ |
|
|
255
261
|
|---|---|
|
|
256
|
-
| `LARGE_INPUT_PER_REQUEST` | ๋จ์ผ
|
|
262
|
+
| `LARGE_INPUT_PER_REQUEST` | ๋จ์ผ ์์ฒญ์ ์
๋ ฅ์ด 200k๋ฅผ ์ด๊ณผํ์ต๋๋ค. ํด๋ง๋ค ๋ค์ ๊ณผ๊ธ๋๊ณ ํ๋ ์๋ชจ๊ฐ ๊ธ๊ฒฉํ ๋์ด๋ฉ๋๋ค |
|
|
257
263
|
| `LOW_HIT_RATE` | ์บ์ ํํธ์จ 50% ๋ฏธ๋ง |
|
|
258
264
|
| `BUCKET_5M_DOMINANT` | ์บ์ ์ฐ๊ธฐ์ 70%+๊ฐ 5๋ถ ๋ฒํท (Pro ํ๋/Max ๋ค์ด๊ทธ๋ ์ด๋) |
|
|
259
265
|
| `HIGH_OUTPUT_RATIO` | ์ถ๋ ฅ/์
๋ ฅ ๋น์จ 0.15 ์ด๊ณผ (์ถ๋ ฅ ๋จ๊ฐ๋ ์
๋ ฅ์ 5๋ฐฐ) |
|
|
@@ -262,9 +268,9 @@ v3.10.0๋ถํฐ๋ ํ๋กํ์ผ ID๋ฅผ ์ญํ (mainยทopusยทsonnetยทhaiku)๋ก ๋๋
|
|
|
262
268
|
|
|
263
269
|
๊ฐ ์ฝ๋๋ง๋ค OS๋ณ ํด๊ฒฐ ๋ช
๋ น์ด ํจ๊ป ์ถ๋ ฅ๋ฉ๋๋ค.
|
|
264
270
|
|
|
265
|
-
## ์ค์
|
|
271
|
+
## ์ค์ ํจ๊ณผ: ๋์
์ ํ ๋ฆฌํฌํธ
|
|
266
272
|
|
|
267
|
-

|
|
268
274
|
|
|
269
275
|
harness 5/5 + ratchet์ ์ค์ ์ ์ฉํ ์ ํ ๋น๊ต์
๋๋ค (์ ์ Claude Code ๋ก๊ทธ, **์ฌ์ฉ์ ๋ฉ์์ง 1๊ฑด๋น** ์ ๊ทํ, 2026-05-02 ๊ธฐ์ค, Opus 4.7 ๊ฐ๊ฒฉ):
|
|
270
276
|
|
|
@@ -278,7 +284,7 @@ harness 5/5 + ratchet์ ์ค์ ์ ์ฉํ ์ ํ ๋น๊ต์
๋๋ค (์ ์ Claude
|
|
|
278
284
|
๊ฐ์ ์์ฒญ์ ๋ ์ ์ ์๋ณต์ผ๋ก ๋๋ธ๋ค = ์ฒซ ์๋ ์ ์ค๋ฅ โ. PEVยทStructured Task๊ฐ ํ ๋ฒ์ ๊ฐ๊ฒ ๋ง๋ ํจ๊ณผ๋ก ๋ณด์
๋๋ค.
|
|
279
285
|
|
|
280
286
|
<details>
|
|
281
|
-
<summary>์ธก์
|
|
287
|
+
<summary>์ธก์ ๋ฐฐ๊ฒฝ: ์บ์ ํํธ์จ์ ์ ์ธํ ์ด์ ์ ํ๋ณธ์ ๊ดํ ์ฃผ์ ์ฌํญ</summary>
|
|
282
288
|
|
|
283
289
|
- ์ ์๋ Max ํ๋(์บ์ TTL 1์๊ฐ)์ด๋ผ ํํธ์จ์ด ์ด๋ฏธ ~98%์ ์๋ ดํด ๊ฐ์ ์ฌ์ง๊ฐ ์์์ต๋๋ค. **Pro ํ๋(5๋ถ TTL) ์ฌ์ฉ์๋** ๋ง๋ฃ ์ง์ handoff ์ํฌํ๋ก ์กฐํฉ์ผ๋ก ํํธ์จ ์์ฒด๊ฐ ์ค๋ฅผ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
|
|
284
290
|
- ๋ง๋ฃ ์ง์ handoff ์ํฌํ๋ก: statusline TTL ์นด์ดํธ๋ค์ด์ ๋ณด๋ค๊ฐ ๋ง๋ฃ ์ง์ `claude-token-saver handoff`๋ก ์์
์ํ๋ฅผ ๋ฐฑ์
ํ๊ณ ์ ์บ์ ์ฌ์ดํด์ ์์. 1M ๊ฒฝ๊ณ ยทcap ์นฉ๋ ๊ฐ์ ํ๋ฆ์ผ๋ก ์ฒ๋ฆฌ.
|
|
@@ -294,7 +300,7 @@ Node.js โฅ 18 ยท macOS / Linux / Windows / WSL ยท **์์กด์ฑ 0**.
|
|
|
294
300
|
<details>
|
|
295
301
|
<summary>์๋ ค์ง ํ๊ฒฝ ์ด์ ยท ๋ง์ด๊ทธ๋ ์ด์
</summary>
|
|
296
302
|
|
|
297
|
-
**IntelliJ Claude Code plugin
|
|
303
|
+
**IntelliJ Claude Code plugin:** statusline ์์ ฏ์ด ํ๋ ์์ ์๋ชป ํฉ์ฑํด `59:548` ๊ฐ์ ์์ฌ๊ฐ ๋ณด์ด๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค(์ด๋ชจ์ง ์ถ๋ ฅ์์๋ง). v2.8.5+๋ `TERMINAL_EMULATOR=JetBrains-JediTerm` ๊ฐ์ง ์ ์๋์ผ๋ก text ๋ชจ๋ ํด๋ฐฑํฉ๋๋ค.
|
|
298
304
|
|
|
299
305
|
**claude-cache-monitor์์ ๋ง์ด๊ทธ๋ ์ด์
:**
|
|
300
306
|
```bash
|
|
@@ -305,6 +311,14 @@ npm uninstall -g claude-cache-monitor && npm i -g claude-token-saver
|
|
|
305
311
|
|
|
306
312
|
## ๋ฆด๋ฆฌ์ค ๋
ธํธ
|
|
307
313
|
|
|
314
|
+
### v3.18.0 (2026-08-22)
|
|
315
|
+
- **ํ๊ตญ์ด ๋ฌธ์๋ฅผ ๋ค์ ๋ค๋ฌ์์ต๋๋ค** โ ๋ฌธ์ฅ ์ฑ๋ถ์ ์๋ตํ์ง ์๊ณ ์์ ์ด๋ก ๋๋งบ๋ ํํ๋ก ๋ณธ๋ฌธ์ ๊ณ ์ณ ์ผ์ต๋๋ค. ์๋ฏธ๋ฅผ ์ง๋์น๊ฒ ํจ์ถํ๋ ์ ๋์๋ ์ฝ๋ก ๊ณผ ์ ์์ฌ๋ก ๋ฐ๊พธ์์ต๋๋ค.
|
|
316
|
+
- **์ค์๊ฐ ๋ชจ๋ธ ๋ผ์ฐํ
์ด ๋น์ฉ์ ํค์ฐ๋ ์ด์ ๋ฅผ ์ค๋ช
์ ์ถ๊ฐํ์ต๋๋ค** โ ํ๋กฌํํธ ์บ์๊ฐ ๋ชจ๋ธ๋ณ๋ก ์ ์ง๋๊ธฐ ๋๋ฌธ์ ์ธ์
์ค๊ฐ์ ๋ชจ๋ธ์ ๋ฐ๊พธ๋ฉด ์ ๊ฐ์ก์ด ์บ์ ์์ค๋ก ์์๋๋ค๋ ์ , ๊ทธ๋์ ์ด ๋๊ตฌ๊ฐ ์๋ธ์์ด์ ํธ ์์๋ง ์ฌ์ฉํ๋ค๋ ์ ์ ๋ช
์ํ์ต๋๋ค.
|
|
317
|
+
|
|
318
|
+
### v3.17.0 (2026-08-22)
|
|
319
|
+
- **์ค์น ํ ๋ฒ์ผ๋ก ๐
ท Harness๊น์ง ์ ์ฉ๋ฉ๋๋ค** โ ์ง๊ธ๊น์ง๋ ์ค์น ํ `harness init`์ ๋ฐ๋ก ์คํํด์ผ statusline์ ๐
ท ์ ์์ ratchet ๋ฃฐ ์ ๋ฌ์ด ๋์ํ์ต๋๋ค. ์ด์ ์ค์น๊ฐ `~/.claude/CLAUDE.md`์ 5์์น ๋ธ๋ก์ **์ถ๊ฐ**ํฉ๋๋ค(๊ธฐ์กด ๋ด์ฉ์ ๋ฐฑ์
ํ ๋ณด์กด, ์ด๋ฏธ ์์ผ๋ฉด ๊ฑด๋๋ฆฌ์ง ์์). ๊ฑด๋๋ฐ๋ ค๋ฉด `CTS_NO_HARNESS=1`, ๋๋๋ฆฌ๋ ค๋ฉด `harness uninit --global`.
|
|
320
|
+
- **README ์๋จ์ statusline ์ค์ ์คํฌ๋ฆฐ์ท์ผ๋ก ๊ต์ฒด** โ ์ฝ๋ ๋ธ๋ก ๋์ ์ค์ ์บก์ฒ๋ฅผ ์ต์๋จ์ ๋๊ณ , ์๋์ชฝ์ ์ค๋ณต์ผ๋ก ์๋ ์ด๋ฏธ์ง๋ ๋บ์ต๋๋ค.
|
|
321
|
+
|
|
308
322
|
### v3.16.0 (2026-08-22)
|
|
309
323
|
- **README๋ฅผ ๋ผ์ฐํ
์ ๊ฐ ์ค์ฌ์ผ๋ก ์ฌ๊ตฌ์ฑ** โ ์ด ๋๊ตฌ์ ํต์ฌ์ด ๋ฌด์์ธ์ง ์ฒซ ํ๋ฉด์์ ๋ฐ๋ก ๋ณด์ด๋๋ก `๐ Routing saved`๋ฅผ ์ต์๋จ์ ์ฌ๋ฆฌ๊ณ , ๊ธ์ก์ด ์์ฅ์์ ์ด๋ป๊ฒ ๋์ค๋์ง(before/after/์ฐจ์ก)์ `route-scan savings` ์ค์ ์ถ๋ ฅ์ ํจ๊ป ์ค์์ต๋๋ค. ์ฑ๋ยทํํ์ด์ง ๋ฐฐ์ง๋ ์ตํ๋จ "๋ง๋ ๊ณณ"์ผ๋ก ๋ด๋ ธ์ต๋๋ค.
|
|
310
324
|
- **statusline ์คํฌ๋ฆฐ์ท์ ํ์ฌ 2์ค ๋ ์ด์์์ผ๋ก ๊ฐฑ์ ** โ ๋ชฉ์
์ด ์๋๋ผ ์ค์ ์ถ๋ ฅ์ ์บก์ฒํฉ๋๋ค. `npm run docs:statusline`์ผ๋ก ์ฌ์์ฑํ ์ ์์ต๋๋ค(headless Chrome ์ฌ์ฉ, ์์กด์ฑ ์ถ๊ฐ ์์).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-token-saver",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.18.0",
|
|
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": {
|
package/src/commands/install.js
CHANGED
|
@@ -59,6 +59,55 @@ export async function run({ hasFlag }) {
|
|
|
59
59
|
} catch (e) { debug('install:route-scan-seed', e); /* hook-triggered scan covers it on the first session instead */ }
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
+
// Harness, set up as part of the install rather than left as a manual
|
|
63
|
+
// follow-up step. The ๐
ท statusline segment and the ratchet rules that
|
|
64
|
+
// route-scan promotes both depend on the block existing in CLAUDE.md, so
|
|
65
|
+
// an install without it ships a tool that is half wired up.
|
|
66
|
+
//
|
|
67
|
+
// Scope is global (~/.claude/CLAUDE.md): a global install is not tied to
|
|
68
|
+
// any one project, and the harness principles are project-independent.
|
|
69
|
+
// Only ever ADDS โ harnessInit appends its own marked block, backs up the
|
|
70
|
+
// previous file, and leaves surrounding content untouched. Skipped when a
|
|
71
|
+
// block is already there (nothing to do) and when CTS_NO_HARNESS=1 is set,
|
|
72
|
+
// for anyone who wants the statusline without the CLAUDE.md rules.
|
|
73
|
+
try {
|
|
74
|
+
const { harnessInit, harnessStatus } = await import('../harness.js');
|
|
75
|
+
const before = harnessStatus(undefined, { scope: 'global' });
|
|
76
|
+
if (process.env.CTS_NO_HARNESS === '1') {
|
|
77
|
+
console.log('');
|
|
78
|
+
console.log(lang === 'ko'
|
|
79
|
+
? ' harness: CTS_NO_HARNESS=1 ์ด๋ฏ๋ก ๊ฑด๋๋๋๋ค (๋์ค์ `harness init --global`).'
|
|
80
|
+
: ' harness: skipped (CTS_NO_HARNESS=1) โ run `harness init --global` later.');
|
|
81
|
+
} else if (before.hasBlock) {
|
|
82
|
+
console.log('');
|
|
83
|
+
console.log(lang === 'ko'
|
|
84
|
+
? ` harness: ์ด๋ฏธ ์ค์ ๋จ โ ๐
ท ${before.configured}/${before.total} (${before.file})`
|
|
85
|
+
: ` harness: already set up โ ๐
ท ${before.configured}/${before.total} (${before.file})`);
|
|
86
|
+
} else {
|
|
87
|
+
const h = harnessInit({ scope: 'global' });
|
|
88
|
+
console.log('');
|
|
89
|
+
for (const p of h.backedUp) {
|
|
90
|
+
console.log(lang === 'ko' ? ` harness: ๋ฐฑ์
${p}` : ` harness: backed up ${p}`);
|
|
91
|
+
}
|
|
92
|
+
for (const p of h.wrote) {
|
|
93
|
+
console.log(lang === 'ko' ? ` harness: ์์ฑ ${p}` : ` harness: wrote ${p}`);
|
|
94
|
+
}
|
|
95
|
+
console.log(lang === 'ko'
|
|
96
|
+
? ' harness: 5์์น์ ~/.claude/CLAUDE.md ์ ์ค์ ํ์ต๋๋ค โ statusline์ ๐
ท 5/5 ๊ฐ ํ์๋ฉ๋๋ค.'
|
|
97
|
+
: ' harness: 5 principles installed in ~/.claude/CLAUDE.md โ the statusline now shows ๐
ท 5/5.');
|
|
98
|
+
console.log(lang === 'ko'
|
|
99
|
+
? ' ๋๋๋ฆฌ๋ ค๋ฉด: claude-token-saver harness uninit --global'
|
|
100
|
+
: ' to undo: claude-token-saver harness uninit --global');
|
|
101
|
+
}
|
|
102
|
+
} catch (e) {
|
|
103
|
+
// Never fail an install over this โ the statusline and Skill are already
|
|
104
|
+
// in place, and `harness init` remains available as a manual step.
|
|
105
|
+
debug('install:harness-init', e);
|
|
106
|
+
console.log(lang === 'ko'
|
|
107
|
+
? ' harness: ์๋ ์ค์ ์ ๊ฑด๋๋ฐ์์ต๋๋ค โ `claude-token-saver harness init --global` ๋ก ์ง์ ์ค์ ํ์ธ์.'
|
|
108
|
+
: ' harness: auto-setup skipped โ run `claude-token-saver harness init --global` yourself.');
|
|
109
|
+
}
|
|
110
|
+
|
|
62
111
|
console.log('');
|
|
63
112
|
console.log('Open Claude Code in any directory and just mention:');
|
|
64
113
|
console.log(' "cache hit rate" / "1M context" / "5H cap" โ the skill auto-activates.');
|