sprag-cli 3.40.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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +637 -0
  3. package/README.md +758 -0
  4. package/bin/cli.js +801 -0
  5. package/examples/statusline-command.ps1 +43 -0
  6. package/examples/statusline-command.sh +36 -0
  7. package/package.json +62 -0
  8. package/presets/cohesion/cohesion-en.md +26 -0
  9. package/presets/doc2md/convert.py +363 -0
  10. package/presets/korean-style/LICENSE-fluent-korean +21 -0
  11. package/presets/korean-style/fluent-korean.md +52 -0
  12. package/presets/korean-style/supplement.md +93 -0
  13. package/presets/model-rules.json +115 -0
  14. package/presets/ratchet-rules.json +38 -0
  15. package/src/advice.js +564 -0
  16. package/src/agents.js +52 -0
  17. package/src/brief.js +264 -0
  18. package/src/caps-cache.js +84 -0
  19. package/src/cli-args.js +51 -0
  20. package/src/cohesion.js +70 -0
  21. package/src/commands/brief.js +31 -0
  22. package/src/commands/cohesion.js +59 -0
  23. package/src/commands/compact-window.js +93 -0
  24. package/src/commands/doc2md.js +166 -0
  25. package/src/commands/feedback.js +132 -0
  26. package/src/commands/handoff.js +33 -0
  27. package/src/commands/harness.js +459 -0
  28. package/src/commands/history.js +46 -0
  29. package/src/commands/install.js +358 -0
  30. package/src/commands/korean.js +220 -0
  31. package/src/commands/last.js +151 -0
  32. package/src/commands/mode.js +46 -0
  33. package/src/commands/route-scan.js +454 -0
  34. package/src/commands/seed.js +105 -0
  35. package/src/commands/uninstall.js +42 -0
  36. package/src/commands/update-check.js +77 -0
  37. package/src/commands/upgrade.js +68 -0
  38. package/src/compact-window.js +205 -0
  39. package/src/config.js +232 -0
  40. package/src/cost.js +253 -0
  41. package/src/debug.js +29 -0
  42. package/src/demo.js +331 -0
  43. package/src/doc2md-ledger.cjs +227 -0
  44. package/src/doc2md.cjs +997 -0
  45. package/src/fig2md-runner.cjs +21 -0
  46. package/src/fig2md.cjs +191 -0
  47. package/src/first-run-note.js +63 -0
  48. package/src/format-time.js +44 -0
  49. package/src/formatters/csv.js +8 -0
  50. package/src/formatters/json.js +3 -0
  51. package/src/formatters/statusline.js +750 -0
  52. package/src/formatters/table.js +299 -0
  53. package/src/handoff.js +161 -0
  54. package/src/harness-analyzer.cjs +264 -0
  55. package/src/harness-templates.js +153 -0
  56. package/src/harness.js +613 -0
  57. package/src/history.js +383 -0
  58. package/src/hook-manager.js +96 -0
  59. package/src/hook.cjs +196 -0
  60. package/src/installer.js +614 -0
  61. package/src/korean-lint.cjs +303 -0
  62. package/src/korean-style.js +187 -0
  63. package/src/litellm-budget.js +223 -0
  64. package/src/model-alias.js +484 -0
  65. package/src/model-rules.js +527 -0
  66. package/src/month-spend.js +47 -0
  67. package/src/parser.js +330 -0
  68. package/src/paths.js +41 -0
  69. package/src/prompt.js +52 -0
  70. package/src/route-scan.js +832 -0
  71. package/src/savings-ledger.js +137 -0
  72. package/src/seed-rules.js +280 -0
  73. package/src/session-cache.js +160 -0
  74. package/src/session-records.js +188 -0
  75. package/src/stats.js +380 -0
  76. package/src/stdin-payload.js +122 -0
  77. package/src/subagent-records.js +214 -0
  78. package/src/update-check.js +201 -0
  79. package/src/window-labels.js +64 -0
package/README.ko.md ADDED
@@ -0,0 +1,637 @@
1
+ [English](./README.md) ยท **ํ•œ๊ตญ์–ด**
2
+
3
+ [![npm](https://img.shields.io/npm/v/claude-token-saver.svg)](https://www.npmjs.com/package/claude-token-saver)
4
+
5
+ ๐ŸŒ **[sprag.io](https://sprag.io)** ยท ํ”„๋กœ์ ํŠธ ์‚ฌ์ดํŠธ (claude-token-saver๋Š” **Sprag**๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ์ค‘์ž…๋‹ˆ๋‹ค)
6
+
7
+ # claude-token-saver
8
+
9
+ **์•„๋‚€ ๋ˆ์„ ๋‘ ์ค„๋กœ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.** ๋น„์‹ผ ๋ชจ๋ธ์ด ๋ฐ˜๋ณตํ•˜๋˜ ์‰ฌ์šด ์ž‘์—…์„ ์‹ผ ๋ชจ๋ธ๋กœ ๋‚ด๋ ค๋ณด๋‚ด๊ณ , ๋ชจ๋ธ์ด ์ฝ์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์„œ๋ฅผ Markdown ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋‘ ์ ˆ๊ฐ์•ก ๋ชจ๋‘ ์ถ”์ •์ด ์•„๋‹ˆ๋ผ ์›์žฅ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค. ์˜์กด์„ฑ 0, ์„ค์น˜ ํ•œ ์ค„.
10
+
11
+ ![statusline ์˜ˆ์‹œ. ์ฒซ ์ค„์€ ๋ผ์šฐํŒ… ์ ˆ๊ฐ์•ก, ๋‘˜์งธ ์ค„์€ ๋ฌธ์„œ ๋ณ€ํ™˜ ์ ˆ๊ฐ์•ก, ์…‹์งธ ์ค„์€ ์ง„๋‹จ ์นฉ์ž…๋‹ˆ๋‹ค](./docs/statusline.png)
12
+
13
+ ```bash
14
+ npm i -g claude-token-saver
15
+ ```
16
+
17
+ ์ˆซ์ž ๋„ค ๊ฐœ๊ฐ€ ์ด ๋„๊ตฌ์˜ ์ „๋ถ€์ž…๋‹ˆ๋‹ค.
18
+
19
+ - **๊ณต๊ฐœ ๋ฒค์น˜๋งˆํฌ์—์„œ ๋‹จ์ผ ๋ชจ๋ธ ์ „๋ถ€๋ฅผ ์ด๊น๋‹ˆ๋‹ค**: ์ด ๋„๊ตฌ๊ฐ€ ๋ฐฐํฌํ•˜๋Š” ํ‹ฐ์–ด ํŒ๋ณ„ ๊ธฐ์ค€์„ LLMRouterBench 11,696๋ฌธํ•ญ์— ์ ์šฉํ•˜๋ฉด 59.1%๋กœ, ๋‹จ์ผ ์ตœ๊ณ  ๋ชจ๋ธ(57.9%)์„ ๋„˜์–ด์„œ๋ฉด์„œ ๋น„์šฉ์€ gpt-5 ๋Œ€๋น„ 31%, gemini-2.5-pro ๋Œ€๋น„ 64% ์Œ‰๋‹ˆ๋‹ค ([๋ฒค์น˜๋งˆํฌ](./docs/BENCHMARK.md))
20
+ - **๋ฌธ์„œ ํ† ํฐ 95.8% ์ ˆ๊ฐ**: 30MB ๋ฐœํ‘œ์ž๋ฃŒ๋ฅผ Markdown ์œผ๋กœ ์ฝ์œผ๋ฉด 540,429 ํ† ํฐ์ด 22,610 ํ† ํฐ์ด ๋ฉ๋‹ˆ๋‹ค ([๊ทผ๊ฑฐ](#-doc2md-๋ฌธ์„œ๋ฅผ-์ฝ๊ธฐ-์ „์—-markdown-์œผ๋กœ-๋ฐ”๊ฟ‰๋‹ˆ๋‹ค))
21
+ - **๋น„์šฉ 18.6% ์ ˆ๊ฐ**: Harness 5์›์น™ ๋„์ž… ์ „ํ›„ ์‹ค์ธก์ž…๋‹ˆ๋‹ค ([๊ทผ๊ฑฐ](#์‹ค์ œ-ํšจ๊ณผ-๋„์ž…-์ „ํ›„-๋ฆฌํฌํŠธ))
22
+ - **๋ผ์šฐํŒ… ์ ˆ๊ฐ์•ก์€ ์‹คํ–‰ ๋‹จ์œ„ ์›์žฅ**: ์ถ”์ •์น˜๊ฐ€ ์•„๋‹ˆ๋ผ ์œ„์ž„ ํ•œ ๊ฑด ํ•œ ๊ฑด์˜ ์ฐจ์•ก ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค ([๊ทผ๊ฑฐ](#-์ ˆ๊ฐ์•ก์€-์ถ”์ •์ด-์•„๋‹ˆ๋ผ-์›์žฅ-๊ธฐ๋ก์ž…๋‹ˆ๋‹ค))
23
+
24
+ ```text
25
+ ์ •ํ™•๋„ ์ด๋น„์šฉ (11,696๋ฌธํ•ญ)
26
+ ํ‹ฐ์–ด ๊ธฐ์ค€ ๋ผ์šฐํ„ฐ 59.1% โ† ์ตœ๊ณ  $268 โ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑ
27
+ gpt-5 57.8% $388 โ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑโ–ฑ
28
+ gemini-2.5-pro 57.9% $734 โ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐโ–ฐ
29
+ ```
30
+
31
+ v3.35.0 ๋ถ€ํ„ฐ๋Š” ์ง€์ถœ๋„ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋‹ฌ 1์ผ ์ดํ›„ ์“ด ๊ธˆ์•ก์„ `๐Ÿ’ต Sep $42` ๋กœ ์ƒ์‹œ ํ‘œ์‹œํ•˜๊ณ , 5h/7d cap ์ด ์•„์˜ˆ ์—†๋Š” LiteLLM ๊ฒŒ์ดํŠธ์›จ์ด(Bedrock ๋“ฑ) ํ™˜๊ฒฝ์—์„œ๋Š” ํ‚ค ์˜ˆ์‚ฐ์„ `๐Ÿ”‘ budget โ–ฐโ–ฑ 34% $34/$100` ๊ฒŒ์ด์ง€๋กœ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.
32
+
33
+ ## ๋„ค ๊ฐ€์ง€๊ฐ€ ํ•จ๊ป˜ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค
34
+
35
+ | | ํ•˜๋Š” ์ผ | ํšจ๊ณผ |
36
+ |---|---|---|
37
+ | ๐Ÿ”€ **๋ผ์šฐํŒ…** | ๋ฐ˜๋ณต๋˜๋Š” ์‰ฌ์šด ์ž‘์—…์„ ๋” ์‹ผ ๋ชจ๋ธ์— ์œ„์ž„ | ์ ˆ๊ฐ์•ก์„ ์›์žฅ์— ์‹ค์ธก ๊ธฐ๋ก, ํŒ๋ณ„ ๊ธฐ์ค€์€ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋กœ [๋ฒค์น˜๋งˆํฌ](./docs/BENCHMARK.md) |
38
+ | ๐Ÿ“„ **๋ฌธ์„œ ๋ณ€ํ™˜** | pptxยทxlsxยทpdfยทdocxยทfig ๋ฅผ ์ฝ๊ธฐ ์ „์— Markdown ์œผ๋กœ ๋ณ€ํ™˜ | ๋ฐœํ‘œ์ž๋ฃŒ ํ•œ ๊ฑด์— **51๋งŒ ํ† ํฐ** ์ ˆ์•ฝ |
39
+ | ๐Ÿ…ท **Harness** | ์ฆ๊ฑฐ ์—†๋Š” ์™„๋ฃŒ ๋ณด๊ณ ยท๊ฒ€์ฆ ์ƒ๋žต ์ฐจ๋‹จ (5์›์น™) | **๋น„์šฉ โˆ’18.6%** |
40
+ | โš™๏ธ **Ratchet** | ํ•œ ๋ฒˆ ๊ฒช์€ ์—๋Ÿฌ๋ฅผ ๋ฃฐ๋กœ ๊ณ ์ • | ๊ฐ™์€ ์‹ค์ˆ˜ ์žฌ๋ฐœ ์ฐจ๋‹จ |
41
+
42
+ ์„ค์น˜ ํ•œ ๋ฒˆ์ด๋ฉด ๋„ท ๋‹ค ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ธก โˆ’18.6%๋Š” Harness์™€ ratchet์˜ ๋ชซ์ด๊ณ , ๋ผ์šฐํŒ…๊ณผ ๋ฌธ์„œ ๋ณ€ํ™˜ ์ ˆ๊ฐ์•ก์€ ๊ทธ ์œ„์— ์–นํž™๋‹ˆ๋‹ค. ๋‘ ์ ˆ๊ฐ์•ก์€ ์„ฑ๊ฒฉ์ด ๋‹ฌ๋ผ์„œ ํ•œ ์ˆซ์ž๋กœ ํ•ฉ์น˜์ง€ ์•Š๊ณ , statusline ์ด ๊ฐ๊ฐ์˜ ์ค„๋กœ ๋ณด์—ฌ ์ฃผ๋ฉฐ ๊ธˆ์•ก์ด ํฐ ์ชฝ์„ ์œ„์— ๋†“์Šต๋‹ˆ๋‹ค.
43
+
44
+ ## ๋ชฉ์ฐจ
45
+
46
+ - **๋จผ์ € ๋ณผ ๊ฒƒ**: [์‹œ์ž‘ํ•˜๊ธฐ](#์‹œ์ž‘ํ•˜๊ธฐ) ยท [statusline ์ฝ๋Š” ๋ฒ•](#statusline-์ฝ๋Š”-๋ฒ•) ยท [์ฃผ์š” ๋ช…๋ น](#์ฃผ์š”-๋ช…๋ น)
47
+ - **์ ˆ๊ฐ ๊ธฐ๋Šฅ**: [๋ผ์šฐํŒ… ์ ˆ๊ฐ ์›์žฅ](#-์ ˆ๊ฐ์•ก์€-์ถ”์ •์ด-์•„๋‹ˆ๋ผ-์›์žฅ-๊ธฐ๋ก์ž…๋‹ˆ๋‹ค) ยท [route-scan](#-route-scan-์ด-๋ฐ˜๋ณต-์ž‘์—…์€-๋”-์‹ผ-ํ‹ฐ์–ด๋กœ-๋‚ด๋ ค๋„-๋ฉ๋‹ˆ๋‹ค) ยท [doc2md](#-doc2md-๋ฌธ์„œ๋ฅผ-์ฝ๊ธฐ-์ „์—-markdown-์œผ๋กœ-๋ฐ”๊ฟ‰๋‹ˆ๋‹ค) ยท [seed](#-seed-์„ค์น˜-์งํ›„๋ถ€ํ„ฐ-์œ„์ž„์ด-๊ฑธ๋ฆฌ๊ฒŒ-ํ•˜๋Š”-์‹œ์ž‘-๋ฃฐ) ยท [๋ฒค์น˜๋งˆํฌ](./docs/BENCHMARK.md)
48
+ - **๊ฐ€๋“œ๋ ˆ์ผ**: [Harness](#-harness-๋ชจ๋“œ) ยท [compact-window](#-compact-window-1m-์ปจํ…์ŠคํŠธ์˜-์ž๋™-์••์ถ•-์ง€์ -๊ณ ์ •) ยท [ํ•œ๊ตญ์–ด ๋ฌธ์ฒด](#-ํ•œ๊ตญ์–ด-๋ฌธ์ฒด-์ง€์นจ)
49
+ - **๋น„์šฉ ๊ฐ€์‹œํ™”ยทํ™˜๊ฒฝ**: [์ด๋ฒˆ ๋‹ฌ ์ง€์ถœยทLiteLLM ํ‚ค ์˜ˆ์‚ฐ](#litellm-5h7d-cap-๋Œ€์‹ -ํ‚ค-์˜ˆ์‚ฐ์„-๋ณด์—ฌ-์ค๋‹ˆ๋‹ค-v3350) ยท [๊ฒŒ์ดํŠธ์›จ์ด(BedrockยทVertex)](#-bedrockvertex-๊ฒฝ์œ -ํ™˜๊ฒฝ) ยท [ํ† ํฐ ๊ธ‰์ฆ ์›์ธ ์ฝ”๋“œ](#ํ† ํฐ-๊ธ‰์ฆ-์›์ธ-์ฝ”๋“œ) ยท [์‹ค์ธก ํšจ๊ณผ](#์‹ค์ œ-ํšจ๊ณผ-๋„์ž…-์ „ํ›„-๋ฆฌํฌํŠธ)
50
+
51
+ ## ์‹œ์ž‘ํ•˜๊ธฐ
52
+
53
+ **์‚ฌ์ „ ์ค€๋น„:** Node.js โ‰ฅ 18 (`node -v`๋กœ ํ™•์ธ ยท macOS `brew install node` ยท Windows `winget install OpenJS.NodeJS.LTS` ยท Linux/WSL์€ [nvm](https://github.com/nvm-sh/nvm) ๊ถŒ์žฅ)
54
+
55
+ ```bash
56
+ npm uninstall -g claude-cache-monitor # (๊ตฌ ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ž๋งŒ)
57
+ npm i -g claude-token-saver
58
+ ```
59
+
60
+ ์„ค์น˜ํ•˜๋ฉด Claude Code ํ™”๋ฉด ํ•˜๋‹จ์— statusline์ด ๊ณง๋ฐ”๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. `--ignore-scripts` ์˜ต์…˜์ด๋‚˜ sudo ์‚ฌ์šฉ ๋“ฑ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก์ด ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด `claude-token-saver install`์„ ์‹คํ–‰ํ•ด ์ง์ ‘ ๋“ฑ๋กํ•˜์‹ญ์‹œ์˜ค.
61
+
62
+ ์„ค์น˜ ํ•œ ๋ฒˆ์œผ๋กœ **statusline๊ณผ Skill, SessionStart ํ›…, ๐Ÿ…ท Harness(5์›์น™), ์ตœ์ดˆ route-scan์ด** ๋ชจ๋‘ ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. Harness์™€ ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ์ง€์นจ์€ **๋ฌด์—‡์ด ์ถ”๊ฐ€๋˜๋Š”์ง€ ๋ณด์—ฌ ์ค€ ๋’ค ์ผค์ง€ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.** Harness๋Š” `~/.claude/CLAUDE.md`์— ํ‘œ์‹œ๊ฐ€ ๋ถ™์€ ๋ธ”๋ก์œผ๋กœ **์ถ”๊ฐ€๋˜๋ฉฐ**, ๊ธฐ์กด์— ์ž‘์„ฑํ•ด ๋‘” ๋‚ด์šฉ์€ ๋ฐฑ์—…ํ•œ ๋’ค ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
63
+
64
+ ํ„ฐ๋ฏธ๋„์ด ์•„๋‹Œ ํ™˜๊ฒฝ(npm์˜ `postinstall`, CI, ํŒŒ์ดํ”„ ์ž…๋ ฅ)์—์„œ๋Š” ์งˆ๋ฌธ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๊ธฐ์กด ๊ธฐ๋ณธ๊ฐ’์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ ์—†์ด ์ง„ํ–‰ํ•˜๋ ค๋ฉด `--yes`๋‚˜ `--no-input`, ์•„์˜ˆ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด `CTS_NO_HARNESS=1 npm i -g claude-token-saver`๋ฅผ ์“ฐ์‹ญ์‹œ์˜ค. ์ด๋ฏธ ์ ์šฉํ•œ ์„ค์ •์„ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด `claude-token-saver harness uninit --global`์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
65
+
66
+ > โš ๏ธ sudo๋กœ ๊ธ€๋กœ๋ฒŒ ์„ค์น˜๋ฅผ ํ•˜๋ฉด Skill์ด ์‚ฌ์šฉ์ž ๊ณ„์ •์ด ์•„๋‹ˆ๋ผ root์˜ `~/.claude`์— ๋“ฑ๋ก๋˜๋Š” ํ•จ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. nvm์ด๋‚˜ fnm, Volta๋ฅผ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž ์˜์—ญ์— ์„ค์น˜ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
67
+
68
+ ### ์„ค์น˜ํ•˜๋ฉด ์ผœ์ง€๋Š” ๊ธฐ๋Šฅ๊ณผ ์ง์ ‘ ์ผœ์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ
69
+
70
+ ์„ค์น˜ ์‹œ์ ์— ๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์€ ์ „๋ถ€ ์ž๋™์œผ๋กœ ์ผœ์ง‘๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ๋‚จ๊ฒจ ๋‘” ํ•ญ๋ชฉ์€ Claude Code ์ž์ฒด์˜ ์„ค์ •์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์‚ฌ๋žŒ์ด ์ •ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค๋ฟ์ž…๋‹ˆ๋‹ค.
71
+
72
+ | ๊ธฐ๋Šฅ | ์„ค์น˜ ์งํ›„ ์ƒํƒœ | ๋„๋Š” ๋ฐฉ๋ฒ• |
73
+ |---|---|---|
74
+ | statusline (์ง„๋‹จ ์นฉยท์ ˆ๊ฐ ์›์žฅ) | ์ผœ์ง | `claude-token-saver uninstall` |
75
+ | `/claude-token-saver` Skill | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
76
+ | SessionStart ํ›… (route-scan ์žฌ๋ถ„์„) | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
77
+ | UserPromptSubmit ํ›… (brief ์ฃผ์ž…) | ์ผœ์ง | ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค |
78
+ | ์ตœ์ดˆ route-scan (์ตœ๊ทผ 14์ผ ๋กœ๊ทธ ๋ถ„์„) | ์„ค์น˜ ์ค‘ ์ฆ‰์‹œ 1ํšŒ ์‹คํ–‰ | ํ•ด๋‹น ์—†์Šต๋‹ˆ๋‹ค |
79
+ | ๐Ÿ…ท Harness 5์›์น™ (`~/.claude/CLAUDE.md`) | ์ผœ์ง (ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ๋‚ด์šฉ์„ ๋ณด์—ฌ ์ฃผ๊ณ  ํ•œ ๋ฒˆ ๋ฌป์Šต๋‹ˆ๋‹ค) | `harness uninit --global` ยท `CTS_NO_HARNESS=1` |
80
+ | doc2md ํ›… (ReadยทEditยทWriteยทํ”„๋กฌํ”„ํŠธ) | ์ผœ์ง | `doc2md off` ยท `CTS_NO_DOC2MD=1` |
81
+ | doc2md ๋ณ€ํ™˜๊ธฐ(markitdown venv) | ํ„ฐ๋ฏธ๋„์—์„œ ์„ค์น˜ ์—ฌ๋ถ€๋ฅผ ๋ฌป๊ณ , ๋น„๋Œ€ํ™”ํ˜• ์„ค์น˜์—์„œ๋Š” ๋ช…๋ น๋งŒ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค | `doc2md install-converter` ๋กœ ๋‚˜์ค‘์— ์„ค์น˜ |
82
+ | ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ์ง€์นจ | ์‹œ์Šคํ…œ ๋กœ์ผ€์ผ์ด ํ•œ๊ตญ์–ด๋ฉด ์ผœ์ง (ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ๋ฌป์Šต๋‹ˆ๋‹ค) | `korean off` ยท `CTS_NO_KOREAN=1` |
83
+ | compact-window ๊ฒฝ๊ณ  ์นฉ | ์ผœ์ง | `compact-window off` |
84
+ | ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด ์นฉ | ์ผœ์ง | `CTS_NO_UPDATE_CHECK=1` |
85
+ | **compact-window ๊ฐ’ ๊ณ ์ •** (`autoCompactWindow` 500k) | **๊บผ์ง โ€” ์ง์ ‘ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค** | `compact-window set --global` ๋˜๋Š” `--project` |
86
+ | **๋ชจ๋ธ ํ”ผํŒ… ๋ฃฐ ์Šน์ธ** (`ratchet-model.md` ์œ„์ž„ ๋ฃฐ) | **ํ›„๋ณด๋งŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค** | `route-scan rules` ๋กœ ํ™•์ธํ•˜๊ณ  ์Šน์ธยท์‚ญ์ œ |
87
+ | `handoff` (ํ•œ๋„ ์ž„๋ฐ• ์‹œ ์ž‘์—… ๋ฐฑ์—…) | ํ•„์š”ํ•  ๋•Œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค | ํ•ด๋‹น ์—†์Šต๋‹ˆ๋‹ค |
88
+
89
+ `compact-window set` ์€ Claude Code ์˜ `settings.json` ์— ๊ฐ’์„ ์ ๊ณ , ์ „์—ญ๊ณผ ํ”„๋กœ์ ํŠธ ์ค‘ ์–ด๋””์— ์ ์„์ง€๋Š” ์‚ฌ๋žŒ์ด ์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํ”ผํŒ… ๋ฃฐ๋„ ๊ฐ™์€ ์ด์œ ๋กœ ์Šน์ธ ๋‹จ๊ณ„๋ฅผ ๋‚จ๊ฒจ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ž‘์—…์„ ๋” ์‹ผ ํ‹ฐ์–ด์— ๋งก๊ธธ์ง€๋Š” ์‚ฌ์šฉ์ž์˜ ํŒ๋‹จ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
90
+
91
+
92
+ ## ๐Ÿ”€ ์ ˆ๊ฐ์•ก์€ ์ถ”์ •์ด ์•„๋‹ˆ๋ผ ์›์žฅ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค
93
+
94
+ ์œ„์ž„๋œ ์‹คํ–‰ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ด๋ ‡๊ฒŒ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
95
+
96
+ ```
97
+ ๊ธฐ์ค€ ๋ชจ๋ธ ์‹คํ–‰ ๋ชจ๋ธ ์ฐจ์•ก
98
+ claude-opus-5 โ†’ haiku-4-5 = $0.57
99
+ (๋ฃฐ ์Šน๊ฒฉ ์ „ (์‹ค์ œ๋กœ (๊ฐ™์€ ํ† ํฐ๋Ÿ‰์—
100
+ ์ด ์œ ํ˜•์„ ์ฒ˜๋ฆฌํ•œ ๋‘ ๋ชจ๋ธ ๊ฐ€๊ฒฉํ‘œ๋ฅผ
101
+ ์ฒ˜๋ฆฌํ•˜๋˜ ๋ชจ๋ธ) ๋ชจ๋ธ) ๊ฐ๊ฐ ์ ์šฉ)
102
+ ```
103
+
104
+ ```bash
105
+ $ claude-token-saver route-scan savings # ๋ชจ๋“  ๊ธˆ์•ก์„ ๋ฃฐ ๋‹จ์œ„๊นŒ์ง€ ์—ญ์ถ”์ 
106
+
107
+ ๐Ÿ”€ ๋ผ์šฐํŒ… ์ ˆ๊ฐ ๋ˆ„์  $2.09 (์ตœ๊ทผ 7์ผ $1.40 ยท 30์ผ $2.09)
108
+
109
+ ๋ชจ๋ธ ์ด๋™๋ณ„:
110
+ claude-fable-5 โ†’ claude-sonnet-5 โ€” 1ํšŒ, $0.72
111
+ claude-opus-5 โ†’ claude-haiku-4-5 โ€” 1ํšŒ, $0.57
112
+
113
+ ์‹คํ–‰๋ณ„ (์ตœ๊ทผ์ˆœ):
114
+ 2026-08-22 $0.51 claude-fable-5 โ†’ claude-haiku-4-5
115
+ ๋ฃฐ: T2|paste|-Users-me-projects-my-app
116
+ ```
117
+
118
+ **์ง‘๊ณ„์—์„œ ๋นผ๋Š” ๊ฒƒ๋“ค**: ์ •์งํ•œ ์ˆซ์ž๊ฐ€ ์ž‘์€ ์ˆซ์ž๋ณด๋‹ค ๋‚ซ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
119
+
120
+ - ๋“ฑ๋ก๋œ ๋ฃฐ์ด ๋‹ด๋‹นํ•˜์ง€ ์•Š๋Š” ์œ„์ž„(`Explore`, ์ง์ ‘ ๋งŒ๋“  ์—์ด์ „ํŠธ, ํ”Œ๋Ÿฌ๊ทธ์ธ ์—์ด์ „ํŠธ): ์ด ๋„๊ตฌ๊ฐ€ ๋ผ์šฐํŒ…ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
121
+ - ๊ฐ€๊ฒฉํ‘œ๊ฐ€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ชจ๋ธ๋ช…: ํ‹€๋ฆฐ ๊ธˆ์•ก์„ ์“ฐ๋А๋‹ˆ ๊ทธ ์‹คํ–‰์„ ๋บ๋‹ˆ๋‹ค.
122
+
123
+ ---
124
+
125
+ ## โšก ๊ทธ ๋ฐ–์— statusline์ด ์žก์•„ ์ฃผ๋Š” ๊ฒƒ
126
+
127
+ | | |
128
+ |---|---|
129
+ | ๐Ÿšจ **ํ•œ๋„ ์ดˆ๊ณผ ์˜ˆ๋ฐฉ** | 5์‹œ๊ฐ„ยท7์ผ rate-limit ์œˆ๋„๊ฐ€ 90%์— ๋‹ฟ์œผ๋ฉด ๊ฒฝ๊ณ ํ•˜๊ณ , `handoff`๋กœ ์ž‘์—…์„ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค |
130
+ | ๐Ÿง  **์บ์‹œ ๋‚ญ๋น„ ๊ฐ์ง€** | ํžˆํŠธ์œจยทTTLยท1M ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ์ง€ํ•ด ํ† ํฐ ๊ธ‰์ฆ ์›์ธ์„ ์ฝ”๋“œ๋กœ ์ง„๋‹จํ•ฉ๋‹ˆ๋‹ค |
131
+ | ๐Ÿ’ต **๋น„์šฉ ๊ฐ€์‹œํ™”** | ์ด๋ฒˆ ๋‹ฌ ์ง€์ถœ(`๐Ÿ’ต Sep $42`)์„ ์ƒ์‹œ ํ‘œ์‹œํ•˜๊ณ , LiteLLM ๊ฒŒ์ดํŠธ์›จ์ด์—์„œ๋Š” ํ‚ค ์˜ˆ์‚ฐ ๊ฒŒ์ด์ง€(`๐Ÿ”‘ budget 34% $34/$100`)๋กœ 5h/7d cap ์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค ([์•„๋ž˜](#litellm-5h7d-cap-๋Œ€์‹ -ํ‚ค-์˜ˆ์‚ฐ์„-๋ณด์—ฌ-์ค๋‹ˆ๋‹ค-v3350)) |
132
+ | ๐Ÿ‡ฐ๐Ÿ‡ท **ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ๊ต์ •** | ํ•œ๊ตญ์–ด ํ™˜๊ฒฝ์ด๋ฉด ์ž๋™์œผ๋กœ ์ผœ์ง‘๋‹ˆ๋‹ค ([์•„๋ž˜](#-ํ•œ๊ตญ์–ด-๋ฌธ์ฒด-์ง€์นจ)) |
133
+
134
+ ## ๋ผ์šฐํ„ฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค: 60์ดˆ ์„ค๋ช…
135
+
136
+ ์ด ๋„๊ตฌ๋Š” ์š”์ฒญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ€๋กœ์ฑ„์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
137
+ **์„ธ์…˜์ด ๋๋‚œ ๋’ค์—** ๋กœ์ปฌ ๊ธฐ๋ก์„ ์ฝ์–ด์„œ ๋น„์‹ผ ๋ชจ๋ธ์ด ๋ฐ˜๋ณตํ•ด์„œ ์ฒ˜๋ฆฌํ•ด ์˜จ ์‰ฌ์šด ์œ ํ˜•์„ ์ฐพ์•„๋‚ด๊ณ ,
138
+ ๊ทธ ์œ ํ˜•์€ **๋‹ค์Œ ์„ธ์…˜๋ถ€ํ„ฐ** ๋” ์‹ผ ๋ชจ๋ธ์ด ๋งก๋„๋ก ๋ฃฐ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ๋ฃฐ์˜ ์ ์šฉ ๋ฒ”์œ„๋Š” ๊ธ€๋กœ๋ฒŒ๊ณผ ํ”„๋กœ์ ํŠธ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
139
+
140
+ ### ์‹ค์‹œ๊ฐ„ ๋ชจ๋ธ ๋ผ์šฐํŒ…์ด ์˜คํžˆ๋ ค ๋น„์šฉ์„ ํ‚ค์šฐ๋Š” ์ด์œ 
141
+
142
+ ์„ธ์…˜ ๋„์ค‘์— ๋ชจ๋ธ์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด ์ด ๋„๊ตฌ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.
143
+
144
+ ํ”„๋กฌํ”„ํŠธ ์บ์‹œ๋Š” **๋ชจ๋ธ๋ณ„๋กœ ๋”ฐ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.** ๊ทธ๋ž˜์„œ ์„ธ์…˜ ์ค‘๊ฐ„์— ๋” ์‹ผ ๋ชจ๋ธ๋กœ ์ „ํ™˜ํ•˜๋ฉด ์ƒˆ ๋ชจ๋ธ์€ ๋นˆ ์บ์‹œ์—์„œ ์‹œ์ž‘ํ•˜๊ณ , ๊ทธ๋•Œ๊นŒ์ง€ ์Œ“์ธ ๋Œ€ํ™” ์ „์ฒด๋ฅผ ์ •๊ฐ€๋กœ ๋‹ค์‹œ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ ํžˆํŠธ๋Š” ์›๋ž˜ ์ž…๋ ฅ๊ฐ€์˜ 10๋ถ„์˜ 1 ์ˆ˜์ค€์ด๋ฏ€๋กœ, ๋Œ€ํ™”๊ฐ€ 2๋งŒ ํ† ํฐ๋งŒ ๋„˜์–ด๊ฐ€๋„ **์ „ํ™˜ ํ•œ ๋ฒˆ์— ๊ทธ๋‚  ์•„๋‚€ ๊ธˆ์•ก์ด ํ†ต์งธ๋กœ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.** ์‹ผ ๋ชจ๋ธ๋กœ ์˜ฎ๊ฒผ๋Š”๋ฐ ์ฒญ๊ตฌ์„œ๋Š” ๋” ์ปค์ง€๋Š”, ์‹ค์‹œ๊ฐ„ ๋ผ์šฐํŒ…์˜ ๋Œ€ํ‘œ์ ์ธ ์—ญ์„ค์ž…๋‹ˆ๋‹ค.
145
+
146
+ ์‹ค์ œ๋กœ ๋ผ์šฐํŒ… ์ œํ’ˆ์„ ๋งŒ๋“ค๋˜ ํŒ€๋“ค์ด ๊ฐ™์€ ์ด์œ ๋กœ ๊ธฐ๋Šฅ์„ ๊ป์Šต๋‹ˆ๋‹ค: [LLM ๋ผ์šฐํ„ฐ๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ง์ ‘ ๊ป์Šต๋‹ˆ๋‹ค #Shorts](https://www.youtube.com/shorts/SK-GoAABjbg)
147
+
148
+ ์ด ๋„๊ตฌ๋Š” ๊ทธ๋ž˜์„œ ๋ฉ”์ธ ์„ธ์…˜์˜ ๋ชจ๋ธ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. **์„œ๋ธŒ์—์ด์ „ํŠธ ์œ„์ž„๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ** ๋ฉ”์ธ ์„ธ์…˜์˜ ์บ์‹œ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๊ณ , ์œ„์ž„๋œ ์ž‘์—…๋งŒ ๋ณ„๋„ ์ปจํ…์ŠคํŠธ์—์„œ ์‹ผ ๋ชจ๋ธ์ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ ˆ๊ฐ์•ก์ด ์บ์‹œ ์†์‹ค๋กœ ์ƒ์‡„๋˜์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.
149
+
150
+ ```bash
151
+ npm i -g claude-token-saver@latest
152
+ claude-token-saver route-scan # ์ง€๋‚œ ์„ธ์…˜์—์„œ ์œ„์ž„ ํ›„๋ณด ์ถ”์ถœ (LLM ํ˜ธ์ถœ ์—†์Œ)
153
+ claude-token-saver route-scan rules # ์Šน๊ฒฉ๋œ ๋ฃฐ ํ™•์ธ ยท rm <N> ์œผ๋กœ ์‚ญ์ œ
154
+ claude-token-saver route-scan savings # ์œ„์ž„์œผ๋กœ ์ ˆ๊ฐํ•œ ๊ธˆ์•ก์˜ ๊ทผ๊ฑฐ๋ฅผ ์ „์ˆ˜ ํ™•์ธ
155
+ ```
156
+
157
+ ํŒ์ • ๊ธฐ์ค€์„ ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ฒค์น˜๋งˆํฌ๊ฐ€ ์•„๋‹ˆ๋ผ **์‚ฌ์šฉ์ž ๋ณธ์ธ์˜ ์ตœ๊ทผ 14์ผ ๋ถ„ํฌ(p25/p75)** ๋กœ ์žก์Šต๋‹ˆ๋‹ค.
158
+ ์œ„์ž„ํ•œ ๋’ค์— ์‹ค์ œ๋กœ ์„ฑ๊ณตํ–ˆ๋Š”์ง€๊นŒ์ง€ ์ธก์ •ํ•˜๋Š” rule-health๋Š” [v3.9.0](#v390-2026-08-01)์— ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.
159
+
160
+ ---
161
+
162
+ ## statusline ์ฝ๋Š” ๋ฒ•
163
+
164
+ ์ ˆ๊ฐ ์›์žฅ์— ๊ธฐ๋ก์ด ์Œ“์ด๋ฉด statusline์ด **๋‘ ์ค„๋กœ** ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ ์ค„์—๋Š” ๋ผ์šฐํŒ… ์ ˆ๊ฐ์•ก๋งŒ ํ‘œ์‹œํ•˜๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ง„๋‹จ ์นฉ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
165
+
166
+ ```
167
+ ๐Ÿ”€ Routing saved $2.09 | fableโ†’sonnet 1ร— $0.72 ยท opusโ†’haiku 1ร— $0.57
168
+ โš  Ctx 500k+ ยท ๐Ÿ…ท 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
169
+ ```
170
+
171
+ ์›์žฅ์ด ๋น„์–ด ์žˆ์œผ๋ฉด, ๋‹ค์‹œ ๋งํ•ด ์•„์ง ์‹ค์ธก๋œ ์œ„์ž„์ด ์—†์œผ๋ฉด ์ฒซ์งธ ์ค„์„ ๊ทธ๋ฆฌ์ง€ ์•Š๊ณ  ์ข…์ „์ฒ˜๋Ÿผ ํ•œ ์ค„๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ํ™˜๊ฒฝ(๊ตฌ๋ฒ„์ „ macOS Claude Code)์—์„œ ์ฒซ์งธ ์ค„๋งŒ ํ‘œ์‹œ๋œ๋‹ค๋ฉด `--single-line` ์˜ต์…˜์œผ๋กœ ํ•œ ์ค„ ๋ ˆ์ด์•„์›ƒ์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.
172
+
173
+ | ์„ธ๊ทธ๋จผํŠธ | ์˜๋ฏธ |
174
+ |---|---|
175
+ | `๐Ÿ”€` **์ฒซ์งธ ์ค„** | ๋ผ์šฐํŒ…์œผ๋กœ ์ ˆ๊ฐํ•œ ๋ˆ„์  ๊ธˆ์•ก๊ณผ ๋ชจ๋ธ ์ด๋™ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. ๋‚ด์—ญ ํ•ฉ๊ณ„๋Š” ๋ˆ„์  ๊ธˆ์•ก๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๊ณ , ๋ชจ๋ธ๋ช…์€ ๊ณ„์—ด๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค(`opusโ†’haiku`). ๊ทผ๊ฑฐ๋Š” `route-scan savings` ๋กœ ์ „๋ถ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค |
176
+ | `๐Ÿ“„` **๋‘˜์งธ ์ค„** | doc2md ๋ฌธ์„œ ๋ณ€ํ™˜์ด ์ ˆ๊ฐํ•œ ๋ˆ„์  ๊ธˆ์•ก๊ณผ ํ˜•์‹๋ณ„ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. ๋ผ์šฐํŒ…๊ณผ ๋ฌธ์„œ ๋ณ€ํ™˜ ์ค‘ ๊ธˆ์•ก์ด ํฐ ์ชฝ์ด ์ฒซ์งธ ์ค„์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค |
177
+ | `๐Ÿค–` | ํ˜„์žฌ ๋ชจ๋ธ |
178
+ | `๐Ÿ…ท 5/5` | harness ์›์น™ ์ ์ˆ˜ ([Harness ๋ชจ๋“œ](#-harness-๋ชจ๋“œ)) |
179
+ | `๐Ÿง ` | ์บ์‹œ ํžˆํŠธ์œจ (85%+ ๋…น์ƒ‰) |
180
+ | `โณ` | ์บ์‹œ TTL ์นด์šดํŠธ๋‹ค์šด์ž…๋‹ˆ๋‹ค. ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ์บ์‹œ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ์—†์„ ๋•Œ๋„ ์ดˆ ๋‹จ์œ„๋กœ ์ค„์–ด๋“œ๋Š” ํ‘œ์‹œ๋Š” Claude Code v2.1.97 ์ด์ƒ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค (์•„๋ž˜ [์นด์šดํŠธ๋‹ค์šด์ด ๋ฉˆ์ถฐ ๋ณด์ผ ๋•Œ](#๋™์ž‘-์›๋ฆฌ--ํ™˜๊ฒฝ) ์ฐธ๊ณ ) |
181
+ | `โœฆ current` / `๐Ÿ“… weekly` | 5์‹œ๊ฐ„ / 7์ผ rate-limit ์œˆ๋„ ์‚ฌ์šฉ๋ฅ  + ๋ฆฌ์…‹ ์‹œ๊ฐ |
182
+ | `๐Ÿ“ฆ` | ์ปจํ…์ŠคํŠธ ์‚ฌ์šฉ๋ฅ ์ž…๋‹ˆ๋‹ค(์˜ˆ: `Ctx 68% of 1M`). ์‚ฌ์šฉ๋ฅ ์— ๋”ฐ๋ผ ๋…น์ƒ‰ยท๋…ธ๋ž€์ƒ‰ยท๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ๋ชจ๋ธ์€ 1M ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ธฐ๋ณธ์ด๊ณ  ๋ณ„๋„ ์š”๊ธˆ์ด ๋ถ™์ง€ ์•Š์ง€๋งŒ, ํ† ํฐ๋Ÿ‰ ์ž์ฒด๊ฐ€ ํ„ด๋‹น ๋น„์šฉ๊ณผ 5์‹œ๊ฐ„ยท7์ผ ํ•œ๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ์†Œ๋ชจ์‹œํ‚ต๋‹ˆ๋‹ค |
183
+ | `๐Ÿ’ต Sep $42` | **์ด๋ฒˆ ๋‹ฌ 1์ผ 00์‹œ(๋กœ์ปฌ) ์ดํ›„ ์ง€์ถœ ์ถ”์ •์น˜**์ž…๋‹ˆ๋‹ค. ์„ธ์…˜ ๋กœ๊ทธ์— ์„ธ์…˜๋ณ„ ๋ชจ๋ธ ๋‹จ๊ฐ€๋ฅผ ์ ์šฉํ•ด ํ•ฉ์‚ฐํ•˜๋ฉฐ, 5h/7d cap ์ด ์—†๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ํ™˜๊ฒฝ์—์„œ๋„ ํ•ญ์ƒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค (v3.35.0) |
184
+ | `๐Ÿ”‘ budget` | **LiteLLM ๊ฒŒ์ดํŠธ์›จ์ด ํ‚ค์˜ ์˜ˆ์‚ฐ ๊ฒŒ์ด์ง€**์ž…๋‹ˆ๋‹ค. stdin ์— rate_limits ๊ฐ€ ์˜ค์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ ํ‚ค์˜ `max_budget` ๋Œ€๋น„ `spend` ๋ฅผ `๐Ÿ”‘ budget โ–ฐโ–ฑ 34% $34/$100` ํ˜•ํƒœ๋กœ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค (v3.35.0, [์•„๋ž˜](#-bedrockvertex-๊ฒฝ์œ -ํ™˜๊ฒฝ)) |
185
+ | `๐Ÿ’ฐ` | ํ”„๋กฌํ”„ํŠธ ์บ์‹œ๊ฐ€ ์ ˆ์•ฝํ•ด ์ค€ ๋ˆ„์  ๊ธˆ์•ก์ž…๋‹ˆ๋‹ค. ์ฒซ์งธ ์ค„์˜ `๐Ÿ”€`(๋ชจ๋ธ ๋ผ์šฐํŒ… ์ ˆ๊ฐ์•ก)์™€๋Š” **์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜์น˜์ž…๋‹ˆ๋‹ค** |
186
+ | `v3.24.0` | ์ง€๊ธˆ ์‹คํ–‰ ์ค‘์ธ claude-token-saver์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์ตœ์‹ ์ด๋ฉด ํšŒ์ƒ‰์œผ๋กœ ์ค„ ๋์— ์กฐ์šฉํžˆ ๋†“์ž…๋‹ˆ๋‹ค |
187
+ | `โฌ† v3.24.0 โ†’ 3.25.0` | ์ƒˆ ๋ฒ„์ „์ด ๋ฐฐํฌ๋˜์–ด ์žˆ๋‹ค๋Š” ํ‘œ์‹œ์ž…๋‹ˆ๋‹ค. ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•œ ์นฉ์ด๋ฏ€๋กœ ์ค„ ์•ž์ชฝ์œผ๋กœ ์˜ฌ๋ผ์˜ต๋‹ˆ๋‹ค ([์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด](#-์—…๋ฐ์ดํŠธ-์•ˆ๋‚ด)) |
188
+
189
+ ๋ฌธ์ œ๊ฐ€ ๊ฐ์ง€๋˜๋ฉด **๊ฒฝ๊ณ  ์นฉ์„ ์ค„ ๋งจ ์•ž์—** ๋ถ™์ž…๋‹ˆ๋‹ค.
190
+
191
+ ```
192
+ ๐Ÿšจ 5H โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–“ 94% ๐Ÿ”„ 12:36 ยท ๐Ÿ…ท 5/5 ยท ๐Ÿค– Opus 4.8 ยท ๐Ÿง  Cache hit 72.1% ยท โš  Cache miss ยท ๐Ÿ“… weekly โ–“โ–‘โ–‘โ–‘โ–‘โ–‘ 12% ๐Ÿ”„ Sun 14:26 ยท ๐Ÿ“ฆ Ctx 200k ยท last 1d
193
+ ```
194
+
195
+ ์นฉ์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. `๐Ÿšจ 5H/7D NN%`(ํ•œ๋„ ์ž„๋ฐ•) ยท `โš  Ctx 500k+`(๋‹จ์ผ ์š”์ฒญ์ด ์‹ค์ œ๋กœ 500k๋ฅผ ์ดˆ๊ณผ) ยท `โš  Cache miss` ยท `โš  Input spike` ยท `โš  Output heavy` ยท `โš  Call surge` ยท `โš  Rebuild churn` ยท `โš  5m TTL`. ๋‘ ์œˆ๋„๊ฐ€ ๋™์‹œ์— 90%๋ฅผ ๋„˜์œผ๋ฉด ๋ฆฌ์…‹์ด ๋” ์ž„๋ฐ•ํ•œ ์ชฝ์„ ๐Ÿšจ๋กœ ์˜ฌ๋ฆฌ๊ณ , ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ๋นจ๊ฐ„ ์„ธ๊ทธ๋จผํŠธ๋กœ ๊ณ„์† ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค (v2.16.0 ์ด์ƒ).
196
+
197
+ ### ๊ฒฝ๊ณ  ์นฉ์ด ๋–ด์„ ๋•Œ
198
+
199
+ Claude Code ์•ˆ์—์„œ `/claude-token-saver` Skill์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ์นฉ์— ์ ํžŒ ๋ฌธ๊ตฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋งํ•˜๊ธฐ๋งŒ ํ•ด๋„("5H cap ๋–ด์–ด", "cache miss") Skill์ด ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด **์›์ธ ์ฝ”๋“œ์™€ ๋‹จ๊ณ„๋ณ„ ํ•ด๊ฒฐ ๋ช…๋ น์„** ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ํ•œ๋„๊ฐ€ ์ž„๋ฐ•ํ•œ ์ƒํ™ฉ์—์„œ๋Š” `claude-token-saver handoff`๋กœ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์— ๋ฐฑ์—…ํ•œ ๋’ค ์ƒˆ ์„ธ์…˜์—์„œ ์ด์–ด๊ฐ€๋Š” ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
200
+
201
+ ## ์ฃผ์š” ๋ช…๋ น
202
+
203
+ ์…ธ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (Claude Code ์•ˆ์—์„œ๋Š” `/claude-token-saver` Skill ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ):
204
+
205
+ | ๋ช…๋ น | ์„ค๋ช… |
206
+ |---|---|
207
+ | `claude-token-saver` | ์ตœ๊ทผ 1์ผ ์ง„๋‹จ ๋ฆฌํฌํŠธ (`--days N` / `--hours N`) |
208
+ | `claude-token-saver last` | ๊ฐ€์žฅ ์ตœ๊ทผ ๊ฒฝ๊ณ  1๊ฑด + ์ฒ˜๋ฐฉ |
209
+ | `claude-token-saver history` | ์ตœ๊ทผ 7์ผ ๊ฒฝ๊ณ  ์ „์ด ๋กœ๊ทธ |
210
+ | `claude-token-saver handoff` | ์ž‘์—… ์ƒํƒœ๋ฅผ `HANDOFF-*.md`๋กœ ๋ฐฑ์—… (์บก ์ž„๋ฐ• ์‹œ) |
211
+ | `claude-token-saver mode [keywords...]` | ์ถœ๋ ฅ ์„ค์ • (`icon`/`text`, `ko`/`en`, `1h`~`30d` ์œˆ๋„ ๋“ฑ) |
212
+ | `claude-token-saver harness ...` | ๐Ÿ…ท Harness ๊ด€๋ฆฌ (์•„๋ž˜ ์ฐธ๊ณ ) |
213
+ | `claude-token-saver route-scan` | ์ƒ์œ„ ๋ชจ๋ธ์ด ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•œ ์‰ฌ์šด ์ž‘์—…์„ ๊ฐ์ง€ํ•ด haiku ์œ„์ž„ ๋žซ์ณ‡ ๋ฃฐ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค (์•„๋ž˜ ์ฐธ๊ณ ) |
214
+ | `claude-token-saver route-scan savings` | ๋ผ์šฐํŒ… ์ ˆ๊ฐ ์›์žฅ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ด๋™๋ณ„ ํ•ฉ๊ณ„์™€ ์‹คํ–‰๋ณ„ ๋‚ด์—ญ์„ ํ•จ๊ป˜ ๋ณด์—ฌ ์ฃผ๋ฉฐ, ํ‘œ์‹œ๋˜๋Š” ๊ธˆ์•ก์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค |
215
+ | `claude-token-saver compact-window` | 1M ์ปจํ…์ŠคํŠธ๋ฅผ ์“ฐ๋ฉด์„œ ์ž๋™ ์••์ถ• ์ฐฝ์ด ์„ค์ •๋˜์ง€ ์•Š์•˜์œผ๋ฉด ๊ฒฝ๊ณ ํ•˜๊ณ , `set`์œผ๋กœ 40๋งŒ์— ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค (์•„๋ž˜ ์ฐธ๊ณ ) |
216
+ | `claude-token-saver korean on\|off\|status` | ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ์ง€์นจ์„ ์„ธ์…˜ ์‹œ์ž‘ ์‹œ ์ฃผ์ž…ํ•˜๊ณ , ์“ฐ๊ธฐ ์‹œ์  ๊ฒ€์‚ฌ๋ฅผ ํ•จ๊ป˜ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค (์•„๋ž˜ ์ฐธ๊ณ ) |
217
+ | `claude-token-saver cohesion on\|off\|status\|show` | ์˜์–ด ๋ฌธ์žฅ ์—ฐ๊ฒฐ(์‘์ง‘์„ฑ) ์ง€์นจ์„ ์„ธ์…˜ ์‹œ์ž‘ ์‹œ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค |
218
+ | `claude-token-saver korean lint block\|warn\|off` | ์“ฐ๊ธฐ ์‹œ์  ๊ฒ€์‚ฌ๊ฐ€ ์œ„๋ฐ˜์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ์ •ํ•ฉ๋‹ˆ๋‹ค |
219
+ | `claude-token-saver korean lint scope all\|prose` | ๊ฒ€์‚ฌ ๋ฒ”์œ„๋ฅผ ๋ชจ๋“  ํ…์ŠคํŠธ ํŒŒ์ผ๊ณผ ๋ฌธ์„œ ์ „์šฉ ์‚ฌ์ด์—์„œ ๊ณ ๋ฆ…๋‹ˆ๋‹ค |
220
+ | `claude-token-saver doc2md on\|off` | ์ฒจ๋ถ€ ๋ฌธ์„œ๋ฅผ ๋ชจ๋ธ์ด ์ฝ๊ธฐ ์ „์— Markdown ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค (์•„๋ž˜ ์ฐธ๊ณ ) |
221
+ | `claude-token-saver doc2md <ํŒŒ์ผ>` | ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ์ง์ ‘ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ง„๋‹จ ์šฉ๋„์ด๋ฉฐ ์‹คํŒจ ์ด์œ ๋ฅผ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค |
222
+ | `claude-token-saver mode ttl=5m\|1h\|auto` | ์บ์‹œ TTL ๋ฒ„ํ‚ท์„ ์ง์ ‘ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’ `auto`๋Š” ์‹ค์ธก๊ฐ’์„ ๋จผ์ € ๋ณด๊ณ , ์‹ค์ธก๊ฐ’์ด ์—†์œผ๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด ์—ฌ๋ถ€๋กœ ํŒ์ •ํ•ฉ๋‹ˆ๋‹ค |
223
+ | `claude-token-saver --version` | ์„ค์น˜๋œ ๋ฒ„์ „์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค |
224
+ | `claude-token-saver update-check` | ์ƒˆ ๋ฒ„์ „์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (`--refresh`๋กœ ์ฆ‰์‹œ ์กฐํšŒ, `--dismiss`๋กœ ๊ทธ ๋ฒ„์ „ ์•ˆ๋‚ด ๋„๊ธฐ) |
225
+ | `claude-token-saver upgrade` | ์„ค์น˜ ๊ฒฝ๋กœ์— ๋งž๋Š” ๋ช…๋ น์œผ๋กœ ์ตœ์‹  ๋ฒ„์ „์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค (`--print`๋กœ ์‹คํ–‰ ์—†์ด ๋ช…๋ น๋งŒ ํ™•์ธ) |
226
+ | `claude-token-saver install` | Skillยทstatusline ์ˆ˜๋™ ๋“ฑ๋ก |
227
+ | `claude-token-saver uninstall [--purge]` | ๋“ฑ๋กํ•œ ํ›…ยทstatuslineยทSkill ์ œ๊ฑฐ. ๊ธฐ๋ก๋œ ์ ˆ๊ฐ์•ก์€ ๋‚จ๊ธฐ๋ฉฐ, `--purge` ๋ฅผ ๋ถ™์ด๋ฉด ์ƒํƒœ ๋””๋ ‰ํ„ฐ๋ฆฌ๊นŒ์ง€ ์ง€์›๋‹ˆ๋‹ค |
228
+
229
+ ์ถœ๋ ฅ ์–ธ์–ด๋Š” ์„ค์น˜ํ•  ๋•Œ ํ•œ ๋ฒˆ ์ •ํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ ์„ค์น˜ํ•˜๋ฉด ์‹œ์Šคํ…œ ๋กœ์ผ€์ผ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ œ์‹œํ•˜๊ณ  ํ•œ๊ตญ์–ด๋ฅผ ์“ธ์ง€ ๋ฌผ์–ด๋ณด๋ฉฐ, ๋น„๋Œ€ํ™”ํ˜• ์„ค์น˜์—์„œ๋Š” ๋กœ์ผ€์ผ ํŒ์ •์„ ๊ทธ๋Œ€๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ๊ธฐ๋ก๋˜๋ฉด ์—…๊ทธ๋ ˆ์ด๋“œํ•ด๋„ ๋‹ค์‹œ ๋ฌป์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ฐ”๊ฟ€ ๋•Œ๋Š” `mode ko`๋‚˜ `mode en`์„ ์“ฐ๊ณ , ์Šคํฌ๋ฆฝํŠธ์—์„œ ์„ค์น˜ํ•  ๋•Œ๋Š” `CTS_LANG=ko` ๋˜๋Š” `CTS_LANG=en`์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. statusline์˜ ์นฉ์€ ์–ธ์ œ๋‚˜ ๊ธฐํ˜ธ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์˜ต์…˜์€ [์˜๋ฌธ README](./README.md#options)๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.
230
+
231
+ ## โฌ† ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด
232
+
233
+ statusline์€ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๋„์šธ ์ˆ˜ ์—†๊ณ , 300๋ฐ€๋ฆฌ์ดˆ๋งˆ๋‹ค ๋‹ค์‹œ ๊ทธ๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ฆฌ๋Š” ์‹œ์ ์— ๋„คํŠธ์›Œํฌ๋ฅผ ์“ธ ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•ˆ๋‚ด๋ฅผ ๋‘ ์ง€์ ์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค.
234
+
235
+ - **statusline์€ ์•Œ๋ฆฌ๊ธฐ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.** ์ตœ์‹  ๋ฒ„์ „์ด๋ฉด ์ค„ ๋์— `v3.24.0`์„ ํšŒ์ƒ‰์œผ๋กœ ์กฐ์šฉํžˆ ํ‘œ์‹œํ•˜๊ณ , ์ƒˆ ๋ฒ„์ „์ด ์žˆ์œผ๋ฉด `โฌ† v3.24.0 โ†’ 3.25.0`์„ ์ค„ ์•ž์ชฝ์— ๋…ธ๋ž€์ƒ‰์œผ๋กœ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ๋นจ๊ฐ„์ƒ‰์€ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡๋„ ๊ณ ์žฅ ๋‚œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
236
+ - **๋ฌป๋Š” ์ผ์€ ์„ธ์…˜ ์‹œ์ž‘์—์„œ ํ•ฉ๋‹ˆ๋‹ค.** ์ƒˆ ์„ธ์…˜์ด๋‚˜ `/clear` ์‹œ์ ์— SessionStart ํ›…์ด "์ƒˆ ๋ฒ„์ „์ด ์žˆ์œผ๋‹ˆ ์‚ฌ์šฉ์ž์—๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œํ• ์ง€ ๋ฌผ์–ด๋ณด๋ผ"๋Š” ํ•œ ์ค„์„ ๋ชจ๋ธ์—๊ฒŒ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™•์ธํ•œ ๋’ค์—๋งŒ `claude-token-saver upgrade`๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฌป์ง€ ์•Š๊ณ  ์„ค์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
237
+ - **๊ฑฐ์ ˆ์€ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.** ์‚ฌ์šฉ์ž๊ฐ€ ์›์น˜ ์•Š์œผ๋ฉด `claude-token-saver update-check --dismiss`๋กœ ๊ทธ ๋ฒ„์ „์„ ๋ฌป์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋” ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ๋ฐฐํฌ๋˜๋ฉด ๋‹ค์‹œ ๋ฌป์Šต๋‹ˆ๋‹ค. statusline ์นฉ์€ ๊ทธ๋Œ€๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์ ˆํ•œ ๊ฒƒ์€ ์งˆ๋ฌธ์ด์ง€, ์ƒˆ ๋ฒ„์ „์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
238
+
239
+ ๋ฒ„์ „ ์กฐํšŒ๋Š” 24์‹œ๊ฐ„์— ํ•œ ๋ฒˆ, ๋ถ„๋ฆฌ๋œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋งŒ ํŒŒ์ผ์— ๋‚จ๊น๋‹ˆ๋‹ค(`update-check.json`). ์ด ๋ฐฉ์‹์€ npm์˜ `update-notifier`๊ฐ€ ์“ฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๊ฐ€ ๋Š๊ฒจ ์žˆ์–ด๋„ ์‹คํŒจ ์‹œ๊ฐ์„ ๊ธฐ๋กํ•ด ๋‘๋ฏ€๋กœ ๋งค ๋ Œ๋”๋งˆ๋‹ค ์žฌ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™•์ธ ์ž์ฒด๋ฅผ ๋„๋ ค๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ `CTS_NO_UPDATE_CHECK=1` ๋˜๋Š” `NO_UPDATE_NOTIFIER`๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
240
+
241
+ ## ๐Ÿ…ท Harness ๋ชจ๋“œ
242
+
243
+ ๋‹ค์„ฏ ์›์น™(Ratchet ยท Evidence ยท PEV ยท Structured Task ยท Default Safe Path)์„ ํ•œ ์ค„ ๋ช…๋ น์œผ๋กœ `CLAUDE.md`์— ์…‹์—…ํ•˜๊ณ  statusline์ด `๐Ÿ…ท 5/5`๋กœ ์ ์ˆ˜ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด `๐Ÿ…ทโš  ratchet?` ์•Œ๋ฆผ์ด ๋– ์„œ ๋ฃฐ๋กœ ์Šน๊ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
244
+
245
+ ```bash
246
+ claude-token-saver harness init # ์ด ํ”„๋กœ์ ํŠธ์— ์…‹์—…
247
+ claude-token-saver harness init --global # ~/.claude/CLAUDE.md, ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ ์šฉ
248
+ claude-token-saver harness check # ํ˜„์žฌ ์ ์ˆ˜ (๊ธ€๋กœ๋ฒŒ fallback ์ธ์ •)
249
+ claude-token-saver harness analyze # ํ›… ์—†์ด๋„ ์ˆ˜๋™์œผ๋กœ ์ „์‚ฌ ๋ถ„์„์„ ์‹คํ–‰ํ•ด harness-state.json ๊ฐฑ์‹ 
250
+ claude-token-saver harness promote <N> --project|--global # ๊ฒฝ๊ณ  #N โ†’ ratchet ๋ฃฐ (์Šค์ฝ”ํ”„ ํ•„์ˆ˜)
251
+ claude-token-saver harness promote "<๋ฃฐ ํ…์ŠคํŠธ>" --project|--global # ๋‚ด๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ๋ฃฐ๋„ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ๋“ฑ๋ก
252
+ claude-token-saver harness pull # ํŒจํ‚ค์ง€ ๋™๋ด‰ ํ๋ ˆ์ด์…˜ ๋ฃฐ โ†’ ๋‚ด ๊ธ€๋กœ๋ฒŒ ๋žซ์ณ‡์— ๋“ฑ๋ก (opt-in, ์ค‘๋ณต ์Šคํ‚ต)
253
+ claude-token-saver harness list / rm <N> # ๋ฃฐ ์กฐํšŒ / ์‚ญ์ œ (์ž๋™ .bak)
254
+ claude-token-saver harness off | on # ๐Ÿ…ท ํ‘œ์‹œ ํ† ๊ธ€
255
+ ```
256
+
257
+ - `promote`๋Š” non-TTY ํ™˜๊ฒฝ(์Šคํฌ๋ฆฝํŠธ๋‚˜ LLM ํ˜ธ์ถœ)์—์„œ `--project` ๋˜๋Š” `--global` ํ”Œ๋ž˜๊ทธ๊ฐ€ **๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.** ์ ์šฉ ๋ฒ”์œ„๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌป์ง€ ์•Š์€ ์ฑ„ ๊ฒฐ์ •๋˜๋Š” ์‚ฌ๊ณ ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•œ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.
258
+ - `pull`์€ ํŒจํ‚ค์ง€์— ๋™๋ด‰๋œ **์ œ์ž‘์ž ํ๋ ˆ์ด์…˜ ๋žซ์ณ‡ ๋ฃฐ**(`presets/ratchet-rules.json`, ์‹ค์ œ ๋ฐ˜๋ณต ์‚ฌ๊ณ ์—์„œ ์Šน๊ฒฉ๋œ ๋ฒ”์šฉ ๋ฃฐ๋งŒ)์„ ๋‚ด ๊ธ€๋กœ๋ฒŒ ๋žซ์ณ‡(`~/.claude/ratchet.md`)์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜(`install`)๋‚˜ `init`์€ ์•„๋ฌด๊ฒƒ๋„ ์ž๋™ ์ฃผ์ž…ํ•˜์ง€ ์•Š์œผ๋ฉฐ, `pull`์€ ํ•ญ์ƒ opt-in์ด๊ณ  ์žฌ์‹คํ–‰ํ•ด๋„ ์ค‘๋ณต์ด ์—†์Šต๋‹ˆ๋‹ค(๋ฉฑ๋“ฑ). ๋งˆ์Œ์— ์•ˆ ๋“œ๋Š” ๋ฃฐ์€ `harness rm`์œผ๋กœ ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
259
+ - `seed`๋Š” ๊ฐ™์€ ํ”„๋ฆฌ์…‹์„ **ํ•œ ๊ฑด์”ฉ** ๋ฌผ์–ด๋ณด๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. `pull`์ด ๋žซ์ณ‡ ๋ฃฐ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋“ฑ๋กํ•˜๋Š” ๋ช…๋ น์ธ ๋ฐ ๋ฐ˜ํ•ด, `seed`๋Š” ๋ชจ๋ธ ํ”ผํŒ… ํ”„๋ฆฌ์…‹๊นŒ์ง€ ํฌํ•จํ•ด ์„ค์น˜ยท์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ์ฒซ ์„ธ์…˜์—์„œ ํ•œ ๊ฑด์”ฉ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค ([์•„๋ž˜](#-seed-์„ค์น˜-์งํ›„๋ถ€ํ„ฐ-์œ„์ž„์ด-๊ฑธ๋ฆฌ๊ฒŒ-ํ•˜๋Š”-์‹œ์ž‘-๋ฃฐ)).
260
+ - ๐Ÿ…ทโš  ๋Ÿฐํƒ€์ž„ ๊ฒฝ๊ณ (`ratchet?` `no-evidence` `PEV-skip`)๋Š” 30๋ถ„ ํ›„ ์ž๋™ ๋งŒ๋ฃŒ๋˜๊ณ , ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ ์„ธ์…˜๋„ ํ”„๋กœ์ ํŠธ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งค์นญ๋ฉ๋‹ˆ๋‹ค. PEV-skip์€ ๋ณ€๊ฒฝ์„ฑ ๋„๊ตฌ(Edit/Write/Bash)๋งŒ ์นด์šดํŠธํ•ด ์ฝ๊ธฐ ์œ„์ฃผ ์„ธ์…˜์—์„œ๋Š” ๋ฐœ๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (v2.16.0+).
261
+
262
+ <details>
263
+ <summary>โš ๏ธ <code>harness rm</code>์€ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค: ์‚ญ์ œ ์ „ ํ™•์ธ ์‚ฌํ•ญ</summary>
264
+
265
+ ratchet์˜ ๊ฐ€์น˜๋Š” **ํ•œ ๋ฐฉํ–ฅ ๋ˆ„์ **์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃฐ์„ ๊ฐ€๋ณ๊ฒŒ ์ง€์šฐ๋ฉด ๊ฐ™์€ ์‹ค์ˆ˜๊ฐ€ ๋‹ค์‹œ ์ƒˆ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
266
+
267
+ - **๋ฃฐ์ด ๋„ˆ๋ฌด ๊ด‘๋ฒ”์œ„ํ•ด์„œ ์ •์ƒ ์ผ€์ด์Šค๋„ ๋ง‰๋‚˜?** โ†’ โŒ ์‚ญ์ œ โœ… ์กฐ๊ฑด์„ ์ขํ˜€ ๋‹ค๋“ฌ๊ธฐ (์˜ˆ: `"ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€"` โ†’ `"ํ…Œ์ŠคํŠธ ์™ธ ์ฝ”๋“œ์—์„œ ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€"`)
268
+ - **๋ฃฐ์ด ๋„ˆ๋ฌด ์ข์•„ ๊ฑฐ์˜ ๋ฐœ๋™ ์•ˆ ๋˜๋‚˜?** โ†’ โŒ ์‚ญ์ œ โœ… ๊ทธ๋ƒฅ ๋‘๊ธฐ (๋น„์šฉ 0)
269
+ - **์ •๋ง ์ž˜๋ชป๋œ ๋ฃฐ์ด๋ผ ํ™•์‹ ?** โ†’ โœ… ๊ทธ๋•Œ๋งŒ ์‚ญ์ œ
270
+
271
+ ์‚ญ์ œ ์‹œ `.bak`์ด ๋‚จ์ง€๋งŒ **๊ทธ ๋ฃฐ์ด ๋ฐ•ํžŒ ์„ธ์…˜ ์ปจํ…์ŠคํŠธ(์™œ)๋Š” ๋ณต์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.**
272
+ </details>
273
+
274
+
275
+ ## ๐Ÿ“ฆ compact-window: 1M ์ปจํ…์ŠคํŠธ์˜ ์ž๋™ ์••์ถ• ์ง€์  ๊ณ ์ •
276
+
277
+ Claude Code๋Š” `min(autoCompactWindow, ๋ชจ๋ธ ์ตœ๋Œ€ ์ฐฝ)`์— ๊ฐ€๊นŒ์›Œ์ง€๋ฉด ๋Œ€ํ™”๋ฅผ ์ž๋™ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค. 1M ์ฐฝ์„ ์“ฐ๋ฉด ์ด ๊ฐ’์ด ์žกํ˜€ ์žˆ์ง€ ์•Š์€ ํ•œ 80๋งŒ ํ† ํฐ ๊ทผ์ฒ˜๊นŒ์ง€ ๊ฐ€์„œ์•ผ ์••์ถ•์ด ๊ฑธ๋ฆฌ๊ณ , ๊ทธ์ „๊นŒ์ง€ ๋ชจ๋“  ์š”์ฒญ์ด ์ „์ฒด ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ต์งธ๋กœ ์žฌ๊ณผ๊ธˆํ•ฉ๋‹ˆ๋‹ค. **1M์€ ๋„ˆ๋ฌด ํฌ๋‹ˆ 40๋งŒ~70๋งŒ ๋ฒ”์œ„๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.** ํฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ์šฉ ์—ฌ์œ ๋Š” 200k ์„ธ์…˜์˜ 2~3.5๋ฐฐ๋กœ ๋‚จ๊ธฐ๋ฉด์„œ ๊ผฌ๋ฆฌ๋งŒ ์ž˜๋ผ๋ƒ…๋‹ˆ๋‹ค.
278
+
279
+ **๊ถŒ์žฅ ๋ฒ”์œ„ ์•ˆ์ด๋ฉด ๊ฒฝ๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.** 40๋งŒ์€ ์ ˆ๊ฐ์ด ์••์ถ• ํšŸ์ˆ˜๋ฅผ ์ด๊ธฐ๋Š” ํ•˜ํ•œ์ด๊ณ , ๊ธด ์„ธ์…˜์€ ๊ทธ๋ณด๋‹ค ์—ฌ์œ ๊ฐ€ ๋” ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฏธ์„ค์ •์ด๊ฑฐ๋‚˜ 70๋งŒ์„ ๋„˜์„ ๋•Œ๋งŒ ์•Œ๋ฆฝ๋‹ˆ๋‹ค(๊ทธ๋ณด๋‹ค ๋‚ฎ๊ฒŒ ์žก์€ ๊ฑด ๋” ๊ณต๊ฒฉ์ ์œผ๋กœ ์•„๋ผ๊ฒ ๋‹ค๋Š” ์„ ํƒ์ด๋ผ ๊ทธ๋ƒฅ ๋‘ก๋‹ˆ๋‹ค).
280
+
281
+ **200k ์ปจํ…์ŠคํŠธ๋Š” ๊ฒฝ๊ณ  ๋Œ€์ƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.** ์ฐฝ์ด ์ด๋ฏธ 200k ์ดํ•˜์ด๋ฏ€๋กœ ์ด ์„ค์ •์œผ๋กœ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
282
+
283
+ ```bash
284
+ claude-token-saver compact-window # ํ˜„์žฌ ์ƒํƒœ (๋ชจ๋ธยท์ฐฝยท์„ค์ •๊ฐ’ยท์ถœ์ฒ˜)
285
+ claude-token-saver compact-window set --global # ~/.claude/settings.json ์— 50๋งŒ ๊ณ ์ • (๋ฒ”์œ„ ์ค‘๊ฐ„)
286
+ claude-token-saver compact-window set --project # <root>/.claude/settings.json ์— ๊ณ ์ •
287
+ claude-token-saver compact-window set --global --value 600k # ๊ฐ’ ์ง์ ‘ ์ง€์ • (10๋งŒ~1M)
288
+ claude-token-saver compact-window off | on # ๊ฒฝ๊ณ  ํ‘œ์‹œ ํ† ๊ธ€
289
+ ```
290
+
291
+ - 1M ๋ชจ๋ธ์ธ๋ฐ ๋ฏธ์„ค์ •์ด๊ฑฐ๋‚˜ 40๋งŒ์„ ๋„˜์œผ๋ฉด statusline์— `๐Ÿ…ทโš  compact-window?`๊ฐ€ ๋œจ๊ณ , ์„ธ์…˜ ๋ธŒ๋ฆฌํ•‘์ด ๋“ฑ๋ก ๋ช…๋ น๊นŒ์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
292
+ - ์ ์šฉ ๋ฒ”์œ„(`--global` ๋˜๋Š” `--project`)๋Š” `set`์—์„œ **๋ฐ˜๋“œ์‹œ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.** ๊ธ€๋กœ๋ฒŒ ์„ค์ • ํŒŒ์ผ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌป์ง€ ์•Š๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์ผ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.
293
+ - ๊ธฐ์กด `settings.json`์˜ ๋‹ค๋ฅธ ํ‚ค๋Š” ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•˜๊ณ  `.bak`์„ ๋‚จ๊น๋‹ˆ๋‹ค. JSON์ด ๊นจ์ ธ ์žˆ์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์“ฐ์ง€ ์•Š๊ณ  ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
294
+ - ์…ธ์— `CLAUDE_CODE_AUTO_COMPACT_WINDOW`๊ฐ€ export๋ผ ์žˆ์œผ๋ฉด ๊ทธ์ชฝ์ด settings.json๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค (`set`์ด ์ด ๊ฒฝ์šฐ๋ฅผ ๊ฐ์ง€ํ•ด ์•Œ๋ ค์ค๋‹ˆ๋‹ค).
295
+
296
+ ## ๐Ÿ”€ route-scan: "์ด ๋ฐ˜๋ณต ์ž‘์—…์€ ๋” ์‹ผ ํ‹ฐ์–ด๋กœ ๋‚ด๋ ค๋„ ๋ฉ๋‹ˆ๋‹ค"
297
+
298
+ ์„ธ์…˜ ๋กœ๊ทธ์—์„œ ์ƒ์œ„ ๋ชจ๋ธ(opus/fable)์ด ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•ด ์˜จ ์‰ฌ์šด ์ž‘์—…์„ ์ฐพ์•„ **haiku/sonnet ์œ„์ž„ ๋ฃฐ๋กœ ์Šน๊ฒฉ**์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ „ ๊ณผ์ • ๋กœ์ปฌ, ํ† ํฐ ๋น„์šฉ 0.
299
+
300
+ - **T2 โ†’ haiku:** ํƒ์ƒ‰๊ณผ ์กฐํšŒ, ๋‹จ์ˆœ ์‹คํ–‰์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์—๋Ÿฌ๊ฐ€ ์—†๊ณ  ๋ณ€๊ฒฝ๋„ ๊ฑฐ์˜ ์—†๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.
301
+ - **T1 โ†’ sonnet:** ๋นŒ๋“œ์™€ ์ƒํƒœ ์ ๊ฒ€์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์ด ์ ๊ณ  ์—๋Ÿฌ๊ฐ€ 1๊ฑด ์ดํ•˜์ธ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
302
+ - **T0 ์œ ์ง€:** ์—๋Ÿฌ๊ฐ€ ๋ฐ˜๋ณต๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ์ด ๋งŽ๊ฑฐ๋‚˜ ์„ค๊ณ„์™€ ๋ถ„์„์ด ํ•„์š”ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์„ธ์…˜ ๋ชจ๋ธ์ด ๊ณ„์† ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
303
+
304
+ ํ•ต์‹ฌ ์„ค๊ณ„๋Š” ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค:
305
+ 1. ๋‚œ์ด๋„๋ฅผ ํ…์ŠคํŠธ๋กœ ์ถ”์ธกํ•˜์ง€ ์•Š๊ณ  **์‹ค์ œ ๊ฒฐ๊ณผ๋กœ ํŒ์ •ํ•ฉ๋‹ˆ๋‹ค.** ๋„๊ตฌ ์—๋Ÿฌ์™€ ๋ณ€๊ฒฝ์„ ์ผ์œผํ‚จ ๋„๊ตฌ์˜ ์ˆ˜, ์ถœ๋ ฅ ํ† ํฐ์„ ๊ทผ๊ฑฐ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค.
306
+ 2. ์ž„๊ณ„๊ฐ’์€ **์‚ฌ์šฉ์ž์˜ ์ตœ๊ทผ 14์ผ ๋กœ๊ทธ ๋ถ„ํฌ์—์„œ ์ž๋™์œผ๋กœ ๋ณด์ •ํ•ฉ๋‹ˆ๋‹ค.** ๊ณ ์ •๋œ ์ƒ์ˆ˜๋Š” ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ณง ์–ด๊ธ‹๋‚˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
307
+ 3. ์Šน๊ฒฉ๋œ ๋ฃฐ์€ ๋„๊ตฌ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ณ„๋„ ํŒŒ์ผ(`.claude/ratchet-model.md`)์—์„œ **์ž๋™์œผ๋กœ ๊ฐฑ์‹ ๋˜๋ฉฐ,** ์œ„์ž„ํ•œ ๋’ค ์—๋Ÿฌ์œจ์ด ๋†’์•„์ง€๋ฉด `โš  rule-health`๋กœ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋ฃฐ์ด ๋‚ก์•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์Šค์Šค๋กœ ์•Œ๋ฆฌ๋Š” ์…ˆ์ž…๋‹ˆ๋‹ค.
308
+
309
+ ```bash
310
+ claude-token-saver route-scan # ์Šค์บ” (24h ์บ์‹œ) + ํ‹ฐ์–ด๋ณ„ ํ›„๋ณด ์ถœ๋ ฅ
311
+ claude-token-saver harness promote R1 --project # ํ›„๋ณด R1์„ ๋ชจ๋ธ ํ”ผํŒ… ๋ฃฐ๋กœ ๋“ฑ๋ก
312
+ claude-token-saver route-scan dismiss 1 # ๊ด€์‹ฌ ์—†์œผ๋ฉด ๋ฌด์‹œ (์žฌ์Šค์บ”์—๋„ ์•ˆ ๋œธ)
313
+ claude-token-saver route-scan rules # ๋“ฑ๋ก๋œ ๋ชจ๋ธ ํ”ผํŒ… ๋ฃฐ ๋ชฉ๋ก (rm <N>์œผ๋กœ ์ œ๊ฑฐ)
314
+ claude-token-saver route-scan savings # ์ ˆ๊ฐ ์›์žฅ: ์–ด๋А ๋ฃฐ์ด ์–ด๋–ค ๋ชจ๋ธ์—์„œ ์–ด๋–ค ๋ชจ๋ธ๋กœ ์˜ฎ๊ฒผ๋Š”์ง€
315
+ ```
316
+
317
+ `route-scan savings`๋Š” statusline์˜ `๐Ÿ”€ Routing saved` ํ•œ ์ค„ ๋’ค์— ์žˆ๋Š” ๊ทผ๊ฑฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ด๋™๋ณ„ ํ•ฉ๊ณ„์™€ ์‹คํ–‰๋ณ„ ๋‚ด์—ญ์ด ํ•จ๊ป˜ ๋‚˜์˜ค๋ฏ€๋กœ, ๊ธˆ์•ก์ด ์–ด๋””์„œ ๋‚˜์™”๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
318
+
319
+ ```
320
+ ๐Ÿ”€ ๋ผ์šฐํŒ… ์ ˆ๊ฐ ๋ˆ„์  $2.09 (์ตœ๊ทผ 7์ผ $1.40 ยท 30์ผ $2.09)
321
+
322
+ ๋ชจ๋ธ ์ด๋™๋ณ„:
323
+ claude-fable-5 โ†’ claude-sonnet-5 โ€” 1ํšŒ, $0.72
324
+ claude-opus-5 โ†’ claude-haiku-4-5 โ€” 1ํšŒ, $0.57
325
+ ```
326
+
327
+ ๋” ์•Œ์•„๋ณด๊ธฐ: **ํ‹ฐ์–ด ๊ธฐ์ค€ยท๋ฆฌ์„œ์น˜ ๊ทผ๊ฑฐ** โ†’ [docs/TIER_CRITERIA.md](./docs/TIER_CRITERIA.md) ยท **๋ฃฐ ํŒŒ์ผ ๊ตฌ์กฐยท์Šค์บ” ํŠธ๋ฆฌ๊ฑฐยท์„œ๋ธŒ์—์ด์ „ํŠธ ์ค€๋น„** โ†’ [docs/ROUTE_SCAN.md](./docs/ROUTE_SCAN.md)
328
+
329
+ ### ๊ฒŒ์ดํŠธ์›จ์ด(BedrockยทLiteLLM) ๊ฒฝ์œ  ํ™˜๊ฒฝ
330
+
331
+ ์‚ฌ๋‚ด ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ฑฐ์น˜๋ฉด ๋กœ๊ทธ์˜ ๋ชจ๋ธ๋ช… ํ•„๋“œ์— ์ถ”๋ก  ํ”„๋กœํŒŒ์ผ ARN์ด ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ฌธ์ž์—ด์—๋Š” `opus`ยท`haiku` ๊ฐ™์€ ๋‹จ์„œ๊ฐ€ ์—†์–ด์„œ ์˜ˆ์ „ ๋ฒ„์ „์€ ์ด๊ฒƒ์„ ์ „๋ถ€ Sonnet์œผ๋กœ ์ฝ์—ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ **T1(โ†’sonnet) ์œ„์ž„ ๋ฃฐ์ด ํ•˜๋‚˜๋„ ์ œ์•ˆ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ ˆ๊ฐ ์ง‘๊ณ„๊ฐ€ 0**์ด์—ˆ์Šต๋‹ˆ๋‹ค.
332
+
333
+ v3.10.0๋ถ€ํ„ฐ๋Š” ํ”„๋กœํŒŒ์ผ ID๋ฅผ ์—ญํ• (mainยทopusยทsonnetยทhaiku)๋กœ ๋˜๋Œ๋ฆฐ ๋’ค `ANTHROPIC_DEFAULT_*_MODEL` ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธํ•œ ๋ณ„์นญ์œผ๋กœ ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งคํ•‘์€ ๋ถ€๋ชจ ์„ธ์…˜์˜ `Task` ํ˜ธ์ถœ๊ณผ ์„œ๋ธŒ์—์ด์ „ํŠธ ๊ธฐ๋ก์„ `toolUseId`๋กœ ์กฐ์ธํ•ด ์Šค์Šค๋กœ ํ•™์Šตํ•˜๋ฉฐ, ๊ด€์ธก์ด 3๊ฑด ๋ฏธ๋งŒ์ด๊ฑฐ๋‚˜ ์—ญํ•  ํŒ์ •์ด 80% ๋ฏธ๋งŒ์œผ๋กœ ๊ฐˆ๋ฆฌ๋ฉด **์ถ”์ธกํ•˜์ง€ ์•Š๊ณ  `unknown`์œผ๋กœ ๋‘๊ณ  ์œ„์ž„ ์ง‘๊ณ„์—์„œ ์ œ์™ธ**ํ•ฉ๋‹ˆ๋‹ค.
334
+
335
+ ์ž๋™ ํ•™์Šต์ด ๋‹ฟ์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋™ ๊ฒฝ๋กœ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. `<userDataDir>/profile-map.json`์— ์•„๋ž˜์ฒ˜๋Ÿผ ์ ์œผ๋ฉด ๋˜๊ณ , ๊ณ„์ • ID์™€ ๋ฆฌ์ „์€ `*`๋กœ ๊ฐ€๋ ค๋„ ๋งค์นญ๋ฉ๋‹ˆ๋‹ค.
336
+
337
+ ```jsonc
338
+ {
339
+ "modelAliases": {
340
+ "arn:aws:bedrock:*:*:application-inference-profile/<PROFILE_ID>": "claude-opus-5",
341
+ "prod-large": "claude-opus-5", // ์‚ฌ๋‚ด ๋ณ„์นญ๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค
342
+ "team-*": "claude-haiku-4-5"
343
+ }
344
+ }
345
+ ```
346
+
347
+ **๋ชจ๋ธ๋ช…์— `opus`ยท`sonnet`ยท`haiku`ยท`fable` ์ด ๋“ค์–ด ์žˆ์ง€ ์•Š์€ ์‚ฌ๋‚ด ๋ณ„์นญ**(`prod-large`, `team-fast` ๋“ฑ)๋„ ์ด ํ‘œ๋กœ ๋งคํ•‘ํ•˜์‹ญ์‹œ์˜ค. Bedrock(`anthropic.claude-opus-4-5-v1:0`)ยทVertex(`claude-opus-4-5@20251101`)ยท1M ์ ‘๋ฏธ์‚ฌ(`claude-sonnet-4-5[1m]`) ๊ฐ™์ด ๊ณ„์—ด๋ช…์ด ๋‚จ์•„ ์žˆ๋Š” ํ˜•ํƒœ๋Š” ๊ทธ๋Œ€๋กœ ์ธ์‹๋˜์ง€๋งŒ, ๊ณ„์—ด๋ช…์ด ์‚ฌ๋ผ์ง„ ๋ณ„์นญ์€ ๊ฐ€๊ฒฉํ‘œ๊ฐ€ ์•Œ์•„๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ผ์šฐํŒ… ์ ˆ๊ฐ ๊ณ„์‚ฐ์€ **ํ‹€๋ฆฐ ๊ธˆ์•ก์„ ๋‚ด๋†“๋Š” ๋Œ€์‹  ๊ทธ ์‹คํ–‰์„ ์ง‘๊ณ„์—์„œ ์ œ์™ธ**ํ•˜๋ฉฐ(๋น„๊ต ์–‘์ชฝ ๋ชจ๋‘ ์ธ์‹ ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค), ์œ„ ํ‘œ์— ํ•œ ์ค„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค์‹œ ์ง‘๊ณ„์— ๋“ค์–ด์˜ต๋‹ˆ๋‹ค.
348
+
349
+ ์ด ํŒŒ์ผ์—๋Š” ์‚ฌ๋‚ด ์‹๋ณ„์ž๊ฐ€ ํ‰๋ฌธ์œผ๋กœ ๋‚จ์œผ๋ฏ€๋กœ ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์“ฐ์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ํŒŒ์ผ์ด ์•„์˜ˆ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๊ณ  ๊ธฐ์กด ๋™์ž‘์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
350
+
351
+ ## ๐ŸŒฑ seed: ์„ค์น˜ ์งํ›„๋ถ€ํ„ฐ ์œ„์ž„์ด ๊ฑธ๋ฆฌ๊ฒŒ ํ•˜๋Š” ์‹œ์ž‘ ๋ฃฐ
352
+
353
+ ๋ชจ๋ธ ํ”ผํŒ… ๋žซ์ณ‡(`ratchet-model.md`)์€ **๋นˆ ํŒŒ์ผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.** route-scan์ด ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์—์„œ ๊ฐ™์€ ์œ ํ˜•์˜ ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ด€์ธกํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ํ›„๋ณด๋ฅผ ์Šน์ธํ•ด์•ผ ๋ฃฐ์ด ์ƒ๊น๋‹ˆ๋‹ค. ์ฆ‰ ๊ฐ“ ์„ค์น˜ํ•œ ์ƒํƒœ์—์„œ๋Š” ์œ„์ž„์ด ํ•œ ๊ฑด๋„ ๊ฑธ๋ฆฌ์ง€ ์•Š๊ณ , ๊ทธ ์ƒํƒœ๊ฐ€ ๋ฉฐ์น  ์ด์–ด์ง‘๋‹ˆ๋‹ค. ์ •์ž‘ ์ ˆ๊ฐ ํšจ๊ณผ๊ฐ€ ๊ฐ€์žฅ ํด ์‹œ๊ธฐ์ž…๋‹ˆ๋‹ค.
354
+
355
+ `seed`๋Š” ํŒจํ‚ค์ง€์— ๋™๋ด‰๋œ ํ”„๋ฆฌ์…‹์œผ๋กœ ๊ทธ ๊ณต๋ฐฑ์„ ๋ฉ”์›๋‹ˆ๋‹ค.
356
+
357
+ | ํ”„๋ฆฌ์…‹ | ๋‚ด์šฉ | ํŒŒ์ผ |
358
+ |---|---|---|
359
+ | ๋ชจ๋ธ ํ”ผํŒ… 9๊ฑด | ๋ช…๋ น ์‹คํ–‰ยทํƒ์ƒ‰ยท์ƒํƒœ ํ™•์ธยท๋ถ™์—ฌ๋„ฃ์€ ๋กœ๊ทธ ์งˆ๋ฌธยท์ฝ๊ธฐ ์š”์•ฝ, ๊ฐ ์œ ํ˜•์˜ T2(haiku)์™€ T1(sonnet) ๋ฃฐ | `presets/model-rules.json` |
360
+ | ๋žซ์ณ‡ 6๊ฑด | ์‹ค์ œ ๋ฐ˜๋ณต ์‚ฌ๊ณ ์—์„œ ์Šน๊ฒฉ๋œ ๋ฒ”์šฉ ๋ฃฐ | `presets/ratchet-rules.json` |
361
+
362
+ **๋“ฑ๋ก ์ ˆ์ฐจ:** ์„ค์น˜๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ์ฒซ ์„ธ์…˜์—์„œ SessionStart ํ›…์ด ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋ฆฌ์…‹์„ ๋ชจ๋ธ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ , ๋ชจ๋ธ์ด **ํ•œ ๊ฑด์”ฉ ์ˆœ์„œ๋Œ€๋กœ** ๋“ฑ๋ก ์—ฌ๋ถ€๋ฅผ ๋ฌป์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ตํ•˜๋ฉด ๊ณง๋ฐ”๋กœ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
363
+
364
+ ```bash
365
+ claude-token-saver seed # ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋ฆฌ์…‹๊ณผ ์‘๋‹ต ๊ธฐ๋ก
366
+ claude-token-saver seed accept <id> --global|--project # ํ•œ ๊ฑด ๋“ฑ๋ก (์ ์šฉ ๋ฒ”์œ„ ํ•„์ˆ˜)
367
+ claude-token-saver seed accept all --global # ์‚ฌ์šฉ์ž๊ฐ€ "์ „๋ถ€ ๋“ฑ๋ก"์ด๋ผ๊ณ  ๋‹ตํ•œ ๊ฒฝ์šฐ
368
+ claude-token-saver seed skip <id> # ๊ฑฐ์ ˆ โ€” ๋‹ค์‹œ ๋ฌป์ง€ ์•Š์Šต๋‹ˆ๋‹ค
369
+ claude-token-saver seed reset # ์‘๋‹ต ๊ธฐ๋ก์„ ์ง€์›Œ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ์ œ์•ˆ ๋Œ€์ƒ์œผ๋กœ
370
+ ```
371
+
372
+ - **์Šน์ธ ์—†์ด๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ธฐ๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.** ๊ฑฐ์ ˆํ•œ ๋ฃฐ์€ ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„์—๋„ ๋‹ค์‹œ ๋ฌป์ง€ ์•Š๊ณ , ์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ ์ถ”๊ฐ€๋œ ํ”„๋ฆฌ์…‹๋งŒ ๋‹ค์Œ ์„ธ์…˜์— ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค.
373
+ - ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ๊ฐ™์€ ์œ ํ˜•(๊ฐ™์€ ํ‹ฐ์–ดยท์นดํ…Œ๊ณ ๋ฆฌ)์˜ ๋ฃฐ์„ ์ง์ ‘ ์Šน์ธํ•ด ๋‘์—ˆ๋‹ค๋ฉด ๊ทธ ํ”„๋ฆฌ์…‹์€ ์ œ์•ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
374
+ - ํ”„๋ฆฌ์…‹์œผ๋กœ ๋“ฑ๋กํ•œ ๋ฃฐ์€ **๋‚จ์˜ ํ†ต๊ณ„๋ฅผ ๋‚ด ๊ฒƒ์ฒ˜๋Ÿผ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.** ๋“ฑ๋ก ์งํ›„์—๋Š” `preset (curated)`๋กœ ์ ํžˆ๊ณ , ์ดํ›„ ์Šค์บ”์—์„œ ์‹ค์ œ ๋ฐœํ™”์™€ ์œ„์ž„ ๊ฒฐ๊ณผ๊ฐ€ ์ธก์ •๋˜๋ฉด ๊ทธ ์ˆ˜์น˜๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ์œ„์ž„ ์—๋Ÿฌ์œจ์ด ๊ธฐ์ค€์„ ๋„˜์œผ๋ฉด ๋‹ค๋ฅธ ๋ฃฐ๊ณผ ๋˜‘๊ฐ™์ด ์žฌ๊ฒ€ํ†  ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค.
375
+ - ์ ์šฉ ๋ฒ”์œ„๋Š” `--global`๊ณผ `--project` ์ค‘ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ›… ํ™˜๊ฒฝ์€ non-TTY๋ผ CLI๊ฐ€ ์ง์ ‘ ๋ฌผ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋ชจ๋ธ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™•์ธํ•œ ๋’ค ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ถ™์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
376
+
377
+ ## ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ๋ฌธ์ฒด ์ง€์นจ
378
+
379
+ Claude๊ฐ€ ํ•œ๊ตญ์–ด๋กœ ์“ธ ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ฒด ๊ฒฐํ•จ(๋ฌธ์žฅ ์„ฑ๋ถ„ ์ƒ๋žต, ๋ช…์‚ฌํ˜• ์ข…๊ฒฐ, ๋ฒˆ์—ญ์ฒด, ์— ๋Œ€์‹œ ๋‚จ์šฉ)์„ ๊ต์ •ํ•˜๋Š” ์ง€์นจ์„ **์„ธ์…˜ ์‹œ์ž‘ ์‹œ ํ•œ ๋ฒˆ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.**
380
+
381
+ ```bash
382
+ claude-token-saver korean on # ์ผœ๊ธฐ (๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ ์šฉ)
383
+ claude-token-saver korean status # ์ƒํƒœยท๋น„์šฉยท์ถœ์ฒ˜ ํ™•์ธ
384
+ claude-token-saver korean show # ์ง€์นจ ์›๋ฌธ ์ถœ๋ ฅ
385
+ claude-token-saver korean off # ๋„๊ธฐ
386
+ ```
387
+
388
+ Claude Code์˜ output style๋กœ๋„ ๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, output style์€ **์ „์—ญ ์Šฌ๋กฏ ํ•˜๋‚˜**๋ผ์„œ ์ผœ๋Š” ์ˆœ๊ฐ„ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์„ ๋ชป ์“ฐ๊ฒŒ ๋˜๊ณ  ๋จธ์‹ ๋งˆ๋‹ค ๋”ฐ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ง€์นจ์„ ํŒจํ‚ค์ง€์— ๋‹ด๊ณ  ์ด๋ฏธ ์„ค์น˜๋œ SessionStart ํ›…์œผ๋กœ ์ „๋‹ฌํ•˜๋ฏ€๋กœ, **CLI๊ฐ€ ์„ค์น˜๋œ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋˜๋ฉฐ output style ์Šฌ๋กฏ์€ ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค.** `/clear` ์ดํ›„์—๋„ ํ›…์ด ๋‹ค์‹œ ์‹คํ–‰๋˜์–ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
389
+
390
+ ๋น„์šฉ์€ **์„ธ์…˜๋‹น ์•ฝ 1,500 ํ† ํฐ์ด๋ฉฐ ๋งค ํ„ด์ด ์•„๋‹ˆ๋ผ ์„ธ์…˜ ์‹œ์ž‘์— ํ•œ ๋ฒˆ๋งŒ** ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์š”์ฒญ๋ถ€ํ„ฐ๋Š” ํ”„๋กฌํ”„ํŠธ ์บ์‹œ์— ์˜ฌ๋ผ๊ฐ€๋ฏ€๋กœ ์ถ”๊ฐ€ ๋ถ€๋‹ด์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผœ์ ธ ์žˆ์œผ๋ฉด statusline์— `โœ๏ธ` ์นฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
391
+
392
+ ### ์ ์šฉ ์ „ํ›„ ๋น„๊ต
393
+
394
+ ์Šฌ๋ž™ ๋ด‡์ด `claude -p`๋กœ ์ €์žฅ์†Œ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์Šค๋ ˆ๋“œ์— ๋‹ตํ•˜๋Š” ์‹ค์ œ ํŒŒ์ดํ”„๋ผ์ธ(yaml-sns-agent)์—์„œ, ์ง€์นจ๋งŒ ๊ป๋‹ค ์ผœ๊ณ  ๊ฐ™์€ ์งˆ๋ฌธ์„ ๋˜์ง„ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์งˆ๋ฌธ์€ "๋ Œ๋”๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ ์›์ธ์„ ์–ด๋–ป๊ฒŒ ์ขํžˆ๋Š”์ง€ ํ•œ๊ตญ์–ด 3๋ฌธ์žฅ์œผ๋กœ ์„ค๋ช…ํ•ด๋ผ"์˜€์Šต๋‹ˆ๋‹ค.
395
+
396
+ **์ด์ „** (์ง€์นจ ๊บผ์ง)
397
+
398
+ > ๋ Œ๋” ์‹คํŒจ ์›์ธ ์ขํžˆ๊ธฐ 3๋‹จ๊ณ„: ๋จผ์ € `hn:still --check`๋กœ ์Šคํ‹ธ์ด ๋ช…์„ธ๋ณด๋‹ค ์ตœ์‹ ์ธ์ง€(FRESH/STALE) ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. STALE์ด๋ฉด ์žฌ์ƒ์„ฑ ์•ˆ ํ•ด์„œ ์˜› ์ž์‚ฐ์œผ๋กœ ๋ Œ๋” ์‹œ๋„ํ•œ ๊ฒŒ ์›์ธ. ๋‹ค์Œ caption-blocks๊ฐ€ ์ตœ์‹  ๋‚˜๋ ˆ์ด์…˜๊ณผ ๋‹จ์–ด์—ด ์ผ์น˜ํ•˜๋Š”์ง€ ์ง์ ‘ ๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค. TTS ์žฌ์ƒ์„ฑ ํ›„ blocks ์žฌ์ƒ์„ฑ ๋น ์ง€๋ฉด ์ž๋ง‰ยท์Œ์„ฑ ์–ด๊ธ‹๋‚˜ ๋ Œ๋” ๊นจ์ง.
399
+
400
+ **์ดํ›„** (์ง€์นจ ์ผœ์ง)
401
+
402
+ > ๋จผ์ € `hn:still --check` ๋Œ๋ ค ์Šคํ‹ธ์ด ๋ช…์„ธ๋ณด๋‹ค ์ตœ์‹ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. STALE์ด๋ฉด ์žฌ์ƒ์„ฑ ์•ˆ ํ•ด์„œ ์ƒ๊ธด ๋ฌธ์ œ.
403
+ >
404
+ > ๋‹ค์Œ caption-blocks๊ฐ€ captions.json ๋‹จ์–ด์—ด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๋ณธ๋‹ค. ๋‚ด๋ ˆ์ด์…˜ ์žฌTTS ํ›„ blocks ์žฌ์ƒ์„ฑ ๋น ์ง€๋ฉด ์˜› ์ž๋ง‰์ด ์ƒˆ ์Œ์„ฑ ์œ„์— ๋œฌ๋‹ค.
405
+
406
+ ๋ฐ”๋€ ์ง€์ ์€ ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ฒซ์งธ, ์— ๋Œ€์‹œ๋กœ ์ด์–ด ๋ถ™์ด๋˜ ์ ˆ์ด ๋งˆ์นจํ‘œ๋กœ ๋Š์–ด์ ธ ํ•œ ๋ฌธ์žฅ์ด ํ•œ ๊ฐ€์ง€ ์‚ฌ์‹ค๋งŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, "ํ™•์ธ", "๋Œ€์กฐ", "๋ Œ๋” ๊นจ์ง" ๊ฐ™์€ ๋ช…์‚ฌํ˜• ์ข…๊ฒฐ์ด "ํ™•์ธํ•œ๋‹ค", "๋ณธ๋‹ค", "๋œฌ๋‹ค"์ฒ˜๋Ÿผ ์„œ์ˆ ์–ด๋กœ ๋ฐ”๋€Œ์–ด ๋ฌด์—‡์„ ํ•˜๋ผ๋Š” ๊ฒƒ์ธ์ง€๊ฐ€ ๋ถ„๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค. ์…‹์งธ, "์ž๋ง‰ยท์Œ์„ฑ ์–ด๊ธ‹๋‚˜"์ฒ˜๋Ÿผ ์กฐ์‚ฌ๊ฐ€ ๋น ์กŒ๋˜ ์ง€์ ์— ์กฐ์‚ฌ๊ฐ€ ๋Œ์•„์™€ ์–ด๋–ค ์„ฑ๋ถ„์ด ์ฃผ์–ด์ด๊ณ  ๋ชฉ์ ์–ด์ธ์ง€ ์ฝ๋Š” ์ฆ‰์‹œ ์žกํž™๋‹ˆ๋‹ค.
407
+
408
+ ๊ธฐ์ˆ ์  ๋‚ด์šฉ์€ ์–‘์ชฝ์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ง€์นจ์€ ํŒ๋‹จ์ด๋‚˜ ์ •ํ™•๋„๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฌธ์žฅ์˜ ์™„์„ฑ๋„์—๋งŒ ๊ด€์—ฌํ•˜๋ฏ€๋กœ, ๋‹ต์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ™์€ ๋‹ต์„ ๋‹ค์‹œ ์ฝ์ง€ ์•Š์•„๋„ ๋˜๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. ์Šฌ๋ž™์ฒ˜๋Ÿผ ์‚ฌ๋žŒ์ด ์Šคํฌ๋กคํ•˜๋ฉฐ ์ฝ๋Š” ์ฑ„๋„์—์„œ๋Š” ์ด ์ฐจ์ด๊ฐ€ ๋˜๋ฌป๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ณ , ๋˜๋ฌป์ง€ ์•Š๋Š” ๋งŒํผ ํ† ํฐ๋„ ์•„๋‚๋‹ˆ๋‹ค.
409
+
410
+ ### ๋ณด๊ฐ• ์ง€์นจ: ์‘์ง‘์„ฑ๊ณผ ๋ณด์ˆ˜์  ๊ต์ • ๊ทœ์น™ (v3.37.0)
411
+
412
+ ๋“ค์—ฌ์˜จ fluent-korean ๋ณธ๋ฌธ์€ ์›ํ˜• ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ๊ทธ ๋’ค๋กœ ์ˆ˜์ง‘ํ•œ ์ง€์นจ์€ ๋ณ„๋„ ํŒŒ์ผ(`presets/korean-style/supplement.md`)์— ๋‹ด์•„ ๊ฐ™์€ ์ฃผ์ž…์— ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค. ์ˆ˜์ง‘ ๊ธฐ์ค€์€ ๋ณด์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ํ•ญ์ƒ ๊ณ ์น˜๋Š” ํŽธ์ด ๋‚˜์€ ์กฐํ•ญ๋งŒ ์‹ค์—ˆ๊ณ , ์ถœ์ฒ˜๋Š” ๊ตญ๋ฆฝ๊ตญ์–ด์› ๊ณต๊ณต์–ธ์–ด ์ง€์นจ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฌธ์„œ ํ•œ๊ธ€ํ™” ๊ฐ€์ด๋“œ, ๊ทธ๋ฆฌ๊ณ  ํ•œ๊ตญ์–ด ํ…์ŠคํŠธ ์‘์ง‘์„ฑ์„ ๋‹ค๋ฃฌ ํ•™์ˆ  ๋…ผ๋ฌธ ์„ธ ํŽธ์ž…๋‹ˆ๋‹ค.
413
+
414
+ ์„ธ ์ธต์ด ๋”ํ•ด์ง‘๋‹ˆ๋‹ค.
415
+
416
+ - **๋ฒˆ์—ญํˆฌ**: ์ด์ค‘ ํ”ผ๋™, ์ผ๋ณธ์–ด์—์„œ ์˜จ ๊ตณ์€ ํ‘œํ˜„, `~์— ์žˆ์–ด์„œ`, ์˜์–ด have๋ฅผ ์ง์—ญํ•œ '๊ฐ€์ง€๋‹ค' ๋‚จ์šฉ. ๊ธฐ๊ณ„๊ฐ€ ํŒ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์“ฐ๊ธฐ ์‹œ์  ๊ฒ€์‚ฌ(์•„๋ž˜)์—๋„ ํ•จ๊ป˜ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
417
+ - **์ƒํˆฌ ํŒจํ„ด**: ์ž๋™์œผ๋กœ ๋ถ™๋Š” ์ˆ˜์‹์–ด("๋‹ค์–‘ํ•œ", "ํ•ต์‹ฌ์ ์ธ"), ํ‘œ์ง€ํŒ ๋ฌธ์žฅ, ์ˆ˜์‚ฌ์  ์งˆ๋ฌธ ๋’ค ์ฆ‰๋‹ต, ๊ทผ๊ฑฐ ์—†๋Š” ๊ธ์ • ๋งˆ๋ฌด๋ฆฌ.
418
+ - **์‘์ง‘์„ฑ**: ๋ฌธ์žฅ์ด ์ด์–ด์ง€๋Š” ๋ฐฉ์‹์ด๋ผ ์ •๊ทœ์‹์œผ๋กœ๋Š” ๊ฒ€์‚ฌํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ˆ์˜ ๋ฐฉํ–ฅ์„ ์ •ํ•œ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘์†์–ดยท์ง€์‹œ์–ด ๊ฐ™์€ ํ‘œ์ธต ์—ฐ๊ฒฐ ์žฅ์น˜๋Š” ๊ธ€์˜ ํ’ˆ์งˆ๊ณผ ์ƒ๊ด€์ด ์—†๊ฑฐ๋‚˜ ์˜คํžˆ๋ ค ๋ถ€์  ์ƒ๊ด€์ด๊ณ , ์•ž ๋ฌธ์žฅ์ด ๋‚ด๋†“์€ ์ •๋ณด๋ฅผ ๋‹ค์Œ ๋ฌธ์žฅ์ด ๋ฐ›์•„ ํ’€์–ด ์ฃผ๋Š” ์ƒ์ˆ ํ˜• ์—ฐ๊ฒฐ๋งŒ ์ •์  ์ƒ๊ด€์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€์นจ์€ ์—ฐ๊ฒฐ์ด ์–ด์ƒ‰ํ•  ๋•Œ ์ ‘์†์–ด๋ฅผ ๋”ํ•˜์ง€ ๋ง๊ณ  ์ •๋ณด์˜ ๋ฐฐ์—ด(์•„๋Š” ๊ฒƒ ๋จผ์ €, ์ƒˆ ๊ฒƒ ๋‚˜์ค‘)์„ ๊ณ ์น˜๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.
419
+
420
+ ์‘์ง‘์„ฑ ์ธต์˜ ์›์น™ ๋Œ€๋ถ€๋ถ„์€ ํ•œ๊ตญ์–ด์—๋งŒ ํ•ด๋‹นํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์ •๋ณด ์šฐ์„  ๋ฐฐ์—ด, ๋Œ€๋ช…์‚ฌ์˜ ๋‹จ์ผ ์ง€์‹œ, ๋ฌธ๋‹จ ์•ˆ ์ฃผ์–ด ์œ ์ง€, ๋น„์•ฝ์„ ์ž‡๋Š” ๋‹ค๋ฆฌ ๋ฌธ์žฅ, ์งง์€ ๋ฐ˜๋ณต ๋ฌธ์žฅ ๋ณ‘ํ•ฉ์€ ์˜์–ด ์‚ฐ๋ฌธ์—๋„ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋…ผ๋ฌธ์ด ํ•œ๊ตญ์–ด ํ•™์Šต์ž๋ฅผ ๋‹ค๋ค˜์„ ๋ฟ, ๊ฒ€์ฆ๋œ ์›์น™์€ ํ…์ŠคํŠธ์–ธ์–ดํ•™์˜ ํ‘œ์ค€ ์‘์ง‘์„ฑ ๋ชจํ˜•์ž…๋‹ˆ๋‹ค. ์˜์–ด ์‚ฐ์ถœ๋ฌผ์—๋Š” `claude-token-saver cohesion on`์ด ๊ฐ™์€ ๋‹ค์„ฏ ์›์น™์„ ์˜์–ด ๋ธ”๋ก์œผ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค (korean ์ง€์นจ์ด ์ผœ์ ธ ์žˆ์œผ๋ฉด ์ค‘๋ณต์ด๋ผ ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค).
421
+
422
+ ๋งˆ์ง€๋ง‰ ์ ˆ์€ ๊ณ ์น˜๋ฉด ์•ˆ ๋˜๋Š” ๊ฒƒ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ •์ฐฉ๋œ ์ „๋ฌธ ์šฉ์–ด, ๋ฌธ์–ด์ฒด, ์›๋ฌธ ์ธ์šฉ์ด ๊ทธ๊ฒƒ์ด๊ณ , ๊ฒ€์‚ฌ๊ฐ€ ๋‚ด๋Š” ์ง€์ ์€ ํŒ์ •์ด ์•„๋‹ˆ๋ผ ํ™•์ธ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.
423
+
424
+ ### ์“ฐ๊ธฐ ์‹œ์  ๊ฒ€์‚ฌ (v3.24.0)
425
+
426
+ ์ง€์นจ์„ ์„ธ์…˜ ์‹œ์ž‘์— ํ•œ ๋ฒˆ ๋„ฃ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์ง€์นจ์„ ํ•œ ๋ฒˆ ์ฝ๊ณ  ๊ทธ ๋’ค๋กœ ํŒŒ์ผ ์ˆ˜์‹ญ ๊ฐœ๋ฅผ ์“ฐ๋Š”๋ฐ, ๊ทธ๋™์•ˆ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‹ค์‹œ ์ฝ์–ด ๋ณด๋Š” ๋‹จ๊ณ„๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€์นจ์ด ์ผœ์ง„ ์„ธ์…˜์ด ๊ทœ์•ฝ์— ์–ด๊ธ‹๋‚˜๋Š” ๋ฌธ์žฅ์„ ๋ฌธ์„œ์— ๊ทธ๋Œ€๋กœ ์‹ค์–ด ๋ณด๋ƒˆ๊ณ , ์‚ฌ๋žŒ์ด ์™„์„ฑ๋ณธ์„ ์ฝ์„ ๋•Œ์—์•ผ ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค. 2026๋…„ 8์›”์— ์ ์šฉ ๋ฒ”์œ„ ๋ฌธ์žฅ์„ ๊ณ ์ณ์„œ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์žก์œผ๋ ค ํ–ˆ์ง€๋งŒ, ๋ฌธ์žฅ์„ ๊ณ ์ณ๋„ ๊ฒ€์‚ฌ ๋‹จ๊ณ„๊ฐ€ ์—†๋‹ค๋Š” ์กฐ๊ฑด์€ ๊ทธ๋Œ€๋กœ์˜€๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.
427
+
428
+ v3.24.0๋ถ€ํ„ฐ `korean on`์ด PostToolUse ํ›…์„ ํ•จ๊ป˜ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ๋ฐฉ๊ธˆ ์“ด ํŒŒ์ผ์„ ์—ด์–ด์„œ ๊ธฐ๊ณ„๋กœ ํŒ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐํ•ญ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ์œ„๋ฐ˜์ด ์žˆ์œผ๋ฉด ๋ชจ๋ธ์—๊ฒŒ ๋˜๋Œ๋ ค ๋ณด๋ƒ…๋‹ˆ๋‹ค. ํŒŒ์ผ์€ ์ด๋ฏธ ์ €์žฅ๋œ ๋’ค์ด๋ฏ€๋กœ ์žƒ๋Š” ๊ฒƒ์€ ์—†๊ณ , ๋ชจ๋ธ์ด ์ฆ‰์‹œ ๊ณ ์นฉ๋‹ˆ๋‹ค.
429
+
430
+ ```bash
431
+ claude-token-saver korean lint block # ๊ธฐ๋ณธ๊ฐ’. ์œ„๋ฐ˜์„ ๋˜๋Œ๋ ค ๋ณด๋‚ด ๊ณ ์น˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค
432
+ claude-token-saver korean lint warn # ์•Œ๋ฆฌ๊ธฐ๋งŒ ํ•˜๊ณ  ์ง„ํ–‰์„ ๋ง‰์ง€ ์•Š์Šต๋‹ˆ๋‹ค
433
+ claude-token-saver korean lint off # ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
434
+
435
+ claude-token-saver korean lint scope all # ๊ธฐ๋ณธ๊ฐ’. ์„ธ์…˜์ด ์“ด ๋ชจ๋“  ํ…์ŠคํŠธ ํŒŒ์ผ
436
+ claude-token-saver korean lint scope prose # ๋งˆํฌ๋‹ค์šดยทํ…์ŠคํŠธ ๋ฌธ์„œ๋งŒ
437
+
438
+ claude-token-saver korean lint docs/*.md # ์ด๋ฏธ ์ €์žฅ๋œ ํŒŒ์ผ์„ ์ง์ ‘ ๊ฒ€์‚ฌ
439
+ ```
440
+
441
+ ๊ฒ€์‚ฌ ํ•ญ๋ชฉ์€ ์‚ฌ๋žŒ์ด ํŒ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ๋“ค์ž…๋‹ˆ๋‹ค. ๋น„์œ  ์–ดํœ˜ 15์ข…(`~๋Š” ์ž๋ฆฌ`, `~์˜ ํ๋ฆ„`, `๋‹ฟ๋Š”๋‹ค`, `๊ฑท์–ด๋‚ด๋‹ค`, `๋ฐœ๋ชฉ์„ ์žก๋‹ค` ๋“ฑ), ๋ฒˆ์—ญ์ฒด ํ‘œ์ง€(`~์— ๋Œ€ํ•œ`, `~๋ฅผ ์œ„ํ•œ`, `~๋˜์–ด์ง€`), ๊ตฌ๋ถ„์ž(`โ€”`ยท`ใ…ก`ยท`|`), ํ•œ ๊ตฌ์— ์„ธ ๋ฒˆ ์ด์ƒ ์ด์–ด์ง€๋Š” ์กฐ์‚ฌ `์˜`, ๋ช…์‚ฌํ˜• ์ข…๊ฒฐ ๋’ค์˜ ๋งˆ์นจํ‘œ์ž…๋‹ˆ๋‹ค. ํŒ๋‹จ์ด ํ•„์š”ํ•œ ์กฐํ•ญ(์„ฑ๋ถ„ ์ƒ๋žต, ํ•œ์ž์–ด ์„ ํƒ)์€ ๊ทธ๋Œ€๋กœ ์ง€์นจ์ด ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
442
+
443
+ ๊ธฐ๋ณธ ๋ฒ”์œ„ `all`์€ ๋ฌธ์„œ๋ฟ ์•„๋‹ˆ๋ผ **์ฝ”๋“œ ์ฃผ์„๊ณผ ํ™”๋ฉด์— ๋‚˜๊ฐ€๋Š” ๋ฌธ์ž์—ด, ์ž๋ง‰ยทํ…œํ”Œ๋ฆฟ, ์ƒ์„ฑ ๊ฒฐ๊ณผ๋ฌผ๊นŒ์ง€** ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฒค๋”๋งํ•œ ์ง€์นจ ์›๋ฌธ์€ ์ฝ”๋“œ ์ฃผ์„์„ ์˜ˆ์™ธ๋กœ ๋‘์ง€๋งŒ, ์ฃผ์„๋„ ์‚ฌ๋žŒ์ด ์ฝ๊ณ  PDFยทHTML ๊ฐ™์€ ์‚ฐ์ถœ๋ฌผ์€ ๊ทธ ๋ฌธ์ž์—ด๋“ค๋กœ ์กฐ๋ฆฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ๋กœ ๋‘๋ฉด ์ •ํ™•ํžˆ ๋ฌธ์ œ๊ฐ€ ๋๋˜ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค์‹œ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ๊ฒ€์‚ฌ์—์„œ ๋น ์ง€๋Š” ๊ฒƒ์€ ์„ค์น˜๋œ ์˜์กด์„ฑ(`node_modules`), VCS ๋‚ด๋ถ€, ๋ฝ ํŒŒ์ผ, ๊ทธ๋ฆฌ๊ณ  ์ด์ง„ยท์ด๋ฏธ์ง€ ํŒŒ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. `dist`๋‚˜ `build` ๊ฐ™์€ ์‚ฐ์ถœ๋ฌผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์›๋ฌธ ๊ทœ์•ฝ๋Œ€๋กœ ๋ฌธ์„œ๋งŒ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด `korean lint scope prose`๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.
444
+
445
+ ์ฃผ์ž…๋ฌธ์˜ ์ ์šฉ ๋ฒ”์œ„ ์•ˆ๋‚ด๋„ ์ด ์„ค์ •์—์„œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ๋ฒ”์œ„์™€ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฒ”์œ„๊ฐ€ ๊ฐˆ๋ผ์ง€๋ฉด 8์›”๊ณผ ๊ฐ™์€ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
446
+
447
+ ### ํ•จ๊ป˜ ์ฃผ์ž…๋˜๋Š” ์ธ์ฝ”๋”ฉ ๊ทœ์น™ (v3.23.2)
448
+
449
+ ๋ฌธ์ฒด ์ง€์นจ๊ณผ ๋ณ„๋„๋กœ, **๋„๊ตฌ ํ˜ธ์ถœ ์ธ์ž์— ๋‹ด๋Š” ๋น„ASCII ๋ฌธ์ž์—ด์€ ๋ฆฌํ„ฐ๋Ÿด UTF-8๋กœ ์“ฐ๊ณ  `\uXXXX` ์œ ๋‹ˆ์ฝ”๋“œ ์ด์Šค์ผ€์ดํ”„๋กœ๋Š” ์“ฐ์ง€ ๋ง๋ผ**๋Š” ํ•œ ์ค„์ด ๊ฐ™์ด ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.
450
+
451
+ ๋ชจ๋ธ์ด Write๋‚˜ Edit์˜ ์ธ์ž์— ํ•œ๊ตญ์–ด๋ฅผ ์ด์Šค์ผ€์ดํ”„๋กœ ์ ์œผ๋ฉด, ๊ทธ ์ด์Šค์ผ€์ดํ”„๊ฐ€ ์ฝ”๋“œ ํฌ์ธํŠธ๋กœ ํ•ด์„๋˜์ง€ ์•Š๊ณ  `ํ•œ` ๊ฐ™์€ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฌผ์—๋Š” ๊นจ์ง„ ๊ธ€์ž๊ฐ€ ๋‚จ๊ณ , ๋ชจ๋ธ์€ ์ž๊ธฐ๊ฐ€ ์“ด ๊ฐ’๊ณผ ํŒŒ์ผ ๋‚ด์šฉ์ด ๋‹ค๋ฅด๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„์ฐจ๋ฆฌ์ง€ ๋ชปํ•œ ์ฑ„ ๋‹ค์Œ ํŽธ์ง‘์„ ์ด์–ด ๊ฐ‘๋‹ˆ๋‹ค. ์ด์Šค์ผ€์ดํ”„๋ฅผ ์“ฐ์ง€ ์•Š์œผ๋ฉด ์ด ๊ฒฝ๋กœ ์ž์ฒด๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‚ฌํ›„์— ๋ณต๊ตฌํ•˜๋Š” ๋Œ€์‹  ์ž…๋ ฅ ๋‹จ๊ณ„์—์„œ ๋ง‰์Šต๋‹ˆ๋‹ค.
452
+
453
+ ์ด ํ•œ ์ค„์€ fluent-korean ์›๋ฌธ์ด ์•„๋‹ˆ๋ผ claude-token-saver๊ฐ€ ์ง์ ‘ ์“ฐ๋Š” ์•ˆ๋‚ด ๋ฌธ๋‹จ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋ฌธ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ํ‘œ๊ธฐ ๋ฐฉ์‹์„ ์ •ํ•˜๋Š” ๊ทœ์น™์ด๊ณ , ๋ฒค๋”๋งํ•œ ์›๋ฌธ์€ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์›์น™์„ ์ง€์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ์ด์œ ๋กœ ์ฝ”๋“œ์™€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ์ ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ฒด ์˜ˆ์™ธ์™€ ๋‹ฌ๋ฆฌ, ์ด ๊ทœ์น™์—๋Š” ์˜ˆ์™ธ๋ฅผ ๋‘์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ธ์…˜๋‹น ์•ฝ 60 ํ† ํฐ์ด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.
454
+
455
+ > **๊ทผ๊ฑฐ**
456
+ > ๊ฐ™์€ ํ˜„์ƒ์ด Claude Code ์ €์žฅ์†Œ์— ๋ณด๊ณ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: [#12417 ์œ ๋‹ˆ์ฝ”๋“œ ์ฒ˜๋ฆฌ ํšŒ๊ท€](https://github.com/anthropics/claude-code/issues/12417), [#26141 Edit ๋„๊ตฌ๊ฐ€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์กฐ์šฉํžˆ ์†์ƒ์‹œํ‚ค๋Š” ๋ฌธ์ œ](https://github.com/anthropics/claude-code/issues/26141).
457
+
458
+ ### ์„ค์น˜ํ•  ๋•Œ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค
459
+
460
+ ์„ค์น˜ ๊ณผ์ •์—์„œ **์ง€์นจ์˜ ๋‚ด์šฉ๊ณผ ์„ธ์…˜๋‹น ๋น„์šฉ, ์ถœ์ฒ˜๋ฅผ ๋จผ์ € ๋ณด์—ฌ ์ค€ ๋‹ค์Œ ์ผค์ง€ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.** ์‹œ์Šคํ…œ ๋กœ์บ˜์ด ํ•œ๊ตญ์–ด์ด๋ฉด(`ko_KR` ๋“ฑ, macOS๋Š” ์‹œ์Šคํ…œ ์„ค์ •๊นŒ์ง€ ํ™•์ธ) ์งˆ๋ฌธ์˜ ๊ธฐ๋ณธ๊ฐ’์ด "์ผฌ"์ด ๋˜๊ณ , ํ•œ๊ตญ์–ด ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด "๋”"์ž…๋‹ˆ๋‹ค. ๋กœ์บ˜์€ ๋‹ต์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ๊ฐ’์ผ ๋ฟ์ด๋ฏ€๋กœ ์˜์–ด ๋กœ์บ˜์—์„œ ํ•œ๊ตญ์–ด๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์„ค์น˜ ์ค‘์— ๋ฐ”๋กœ ์ผค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
461
+
462
+ npm์˜ `postinstall`์ด๋‚˜ CI์ฒ˜๋Ÿผ ์‚ฌ๋žŒ์ด ๋ถ™์–ด ์žˆ์ง€ ์•Š์€ ์„ค์น˜์—์„œ๋Š” ์งˆ๋ฌธ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋กœ์บ˜ ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋ฉˆ์ถฐ ์„œ๋ฉด ์„ค์น˜ ์ž์ฒด๊ฐ€ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ๋กœ์บ˜์ด ํ•œ๊ตญ์–ด๊ฐ€ ์•„๋‹ˆ๋ฉด **์„ค์ •์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ฏธ๊ฒฐ์ •์œผ๋กœ ๋‚จ๊ฒจ ๋‘๋ฏ€๋กœ**, ๋‚˜์ค‘์— ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ๊ทธ๋•Œ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค. ์งˆ๋ฌธ ์—†์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋„˜๊ธฐ๋ ค๋ฉด `--yes`๋‚˜ `--no-input`์„, ๊ธฐ๋Šฅ ์ž์ฒด๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด `CTS_NO_KOREAN=1`์„ ์“ฐ์‹ญ์‹œ์˜ค. **ํ•œ ๋ฒˆ์ด๋ผ๋„ ์ง์ ‘ ์ผœ๊ฑฐ๋‚˜ ๋ˆ ๋’ค์—๋Š” ๊ทธ ์„ ํƒ์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ, ์—…๋ฐ์ดํŠธ ์„ค์น˜๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๊ฒฐ์ •์„ ๋˜๋Œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.**
463
+
464
+ > **์ถœ์ฒ˜์™€ ๋ผ์ด์„ ์Šค**
465
+ > ์ง€์นจ ์›๋ฌธ์€ [fluent-korean](https://github.com/snflkd/fluent-korean)์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. Copyright (c) 2026 snflkd, MIT License.
466
+ > ์›๋ฌธ์€ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜๊ณ  output style ํ”„๋ŸฐํŠธ๋งคํ„ฐ๋งŒ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด์„ ์Šค ์ „๋ฌธ์€ ํŒจํ‚ค์ง€์˜ `presets/korean-style/LICENSE-fluent-korean`์— ํ•จ๊ป˜ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
467
+
468
+ ## ๐Ÿ“„ doc2md: ๋ฌธ์„œ๋ฅผ ์ฝ๊ธฐ ์ „์— Markdown ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค
469
+
470
+ ๊ธฐํš์„œ์™€ ๋ณด๊ณ ์„œ๋Š” ๋Œ€๋ถ€๋ถ„ pptxยทxlsxยทpdfยทdocxยทfig ๋กœ ์˜ต๋‹ˆ๋‹ค. ์ด ํ˜•์‹๋“ค์„ ๊ทธ๋Œ€๋กœ ๋‹ค๋ฃจ๋ฉด ๋‘ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. Claude Code ๊ฐ€ ์ด์ง„ ํŒŒ์ผ์ด๋ผ๋ฉฐ ๊ฑฐ๋ถ€ํ•ด์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ชป ์ฝ๊ฑฐ๋‚˜, ์••์ถ•์„ ํ’€์–ด ๋ณธ๋ฌธ XML ์„ ์ฝ๋А๋ผ ํ† ํฐ์„ ํƒœ์šฐ๊ฑฐ๋‚˜. 30MB ์งœ๋ฆฌ ๋ฐœํ‘œ์ž๋ฃŒ ํ•˜๋‚˜๊ฐ€ XML ๋กœ๋Š” **54๋งŒ ํ† ํฐ**์ด๊ณ , 200k ์ปจํ…์ŠคํŠธ์—๋Š” ๋“ค์–ด๊ฐ€์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.
471
+
472
+ doc2md ๋Š” ๊ทธ ํŒŒ์ผ์„ ํ•œ ๋ฒˆ ๋ณ€ํ™˜ํ•ด ๋‘๊ณ  ์›๋ณธ ๋Œ€์‹  ๋ณ€ํ™˜๋ณธ์„ ์ฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฐœํ‘œ์ž๋ฃŒ๊ฐ€ 22,610 ํ† ํฐ์ด ๋ฉ๋‹ˆ๋‹ค.
473
+
474
+ **์ด ๊ธฐ๋Šฅ์€ ์˜ตํŠธ์ธ์ž…๋‹ˆ๋‹ค.** ์„ค์น˜๋งŒ์œผ๋กœ๋Š” ์ผœ์ง€์ง€ ์•Š๊ณ , ์•„๋ž˜ ๋‘ ๋ช…๋ น์„ ๋ชจ๋‘ ์‹คํ–‰ํ•ด์•ผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ›…๋งŒ ๋“ฑ๋กํ•˜๊ณ  ๋ณ€ํ™˜๊ธฐ๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
475
+
476
+ ์„ธ ๊ฐ€์ง€ ๊ฒฝ๋กœ๋ฅผ ๋ฎ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ ๊ฑธ๋ฆฌ๋Š” ์ง€์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
477
+
478
+ | ์ƒํ™ฉ | ๊ฐœ์ž… ์ง€์  |
479
+ |---|---|
480
+ | ํ”„๋กฌํ”„ํŠธ์— ๋ฌธ์„œ ๊ฒฝ๋กœ๋ฅผ ์ ์Œ (`@๊ฒฝ๋กœ`ยท๋”ฐ์˜ดํ‘œยท์ƒ๋Œ€ ๊ฒฝ๋กœ ๋ชจ๋‘) | `UserPromptSubmit`. ๋ณ€ํ™˜ํ•œ ๋’ค ๋ณ€ํ™˜๋ณธ ๊ฒฝ๋กœ๋ฅผ ์ปจํ…์ŠคํŠธ๋กœ ๋„ฃ์Šต๋‹ˆ๋‹ค |
481
+ | ์ž‘์—… ๋„์ค‘ ๋ฌธ์„œ๋ฅผ `Read` | pdf ๋Š” `PreToolUse(Read)` ๊ฐ€ ์žก์Šต๋‹ˆ๋‹ค. pptxยทxlsxยทdocx ๋Š” Claude Code ๊ฐ€ ์ด์ง„ ํŒŒ์ผ์ด๋ผ๋ฉฐ ํ›…๋ณด๋‹ค ๋จผ์ € ๊ฑฐ๋ถ€ํ•˜๋ฏ€๋กœ, ์„ธ์…˜ ์‹œ์ž‘ ์•ˆ๋‚ด๋ฌธ์ด ๋ชจ๋ธ์—๊ฒŒ `doc2md <๊ฒฝ๋กœ>` ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค |
482
+ | ๋ฌธ์„œ๋ฅผ ๋ฉ”์‹œ์ง€์— ์ง์ ‘ ์ฒจ๋ถ€ | **ํ›…์œผ๋กœ ์žก์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.** ์–ด๋–ค ํ›… ์ด๋ฒคํŠธ๋„ ์ฒจ๋ถ€ ๋‚ด์šฉ์„ ๋ฐ›์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜ ์‹œ์ž‘ ์•ˆ๋‚ด๋ฌธ์ด ๋‹ค์Œ๋ถ€ํ„ฐ ๊ฒฝ๋กœ๋กœ ๋‹ฌ๋ผ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์•ˆ๋‚ดํ•˜๋„๋ก ๋ชจ๋ธ์—๊ฒŒ ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค |
483
+
484
+ ๋‘ ๋ฒˆ์งธ ์ค„์˜ ์ œ์•ฝ์€ ์‹ค์ธก์œผ๋กœ ํ™•์ธํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. `.pdf` ๋ฅผ Read ํ•˜๋ฉด ํ›…์ด ์‹คํ–‰๋˜๊ณ , ๊ฐ™์€ ์„ธ์…˜์—์„œ `.pptx` ๋ฅผ Read ํ•˜๋ฉด ํ›… ๋กœ๊ทธ์— ์•„๋ฌด ๊ธฐ๋ก๋„ ๋‚จ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
485
+
486
+ ```bash
487
+ claude-token-saver doc2md on # ํ›… ๋“ฑ๋ก (๋ณ€ํ™˜๊ธฐ๋Š” ์ฒซ ๋ฌธ์„œ์—์„œ ์ž๋™ ์„ค์น˜)
488
+ claude-token-saver doc2md # ๋ณ€ํ™˜๊ธฐยทํ›… ๋“ฑ๋ก ์ƒํƒœ ํ™•์ธ
489
+ claude-token-saver doc2md ๋ณด๊ณ ์„œ.pptx # ์ง์ ‘ ๋ณ€ํ™˜ํ•ด ๊ฒฐ๊ณผ ํ™•์ธ
490
+ claude-token-saver doc2md install-converter # ์„ค์น˜๋ฅผ ๋ฏธ๋ฆฌ ๋๋‚ด ๋‘๊ณ  ์‹ถ์„ ๋•Œ๋งŒ
491
+ ```
492
+
493
+ **๋ณ€ํ™˜๊ธฐ๋Š” ์•Œ์•„์„œ ๊น”๋ฆฝ๋‹ˆ๋‹ค.** ํŒ€์— ๋ฐฐํฌํ•  ๋•Œ ๊ฐ์ž ์„ค์น˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด ๊ทธ ๋‹จ๊ณ„์—์„œ ๋น ์ง€๋Š” ์‚ฌ๋žŒ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌธ์„œ๊ฐ€ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ์‹œ์ ์— ๋ณ€ํ™˜๊ธฐ๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์„ค์น˜๋˜๊ณ , ์„ค์น˜๊ฐ€ ๋๋‚˜๋Š” ๋Œ€๋กœ ๊ณง๋ฐ”๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ธก์œผ๋กœ ์ฒซ ๋ฌธ์„œ๋Š” ์•ฝ 30์ดˆ(์„ค์น˜ 15์ดˆ + markitdown ์ตœ์ดˆ ์ž„ํฌํŠธ), ์ดํ›„๋กœ๋Š” ์ƒˆ ๋ฌธ์„œ 3.7์ดˆ, ์บ์‹œ ์ ์ค‘ 0.1์ดˆ์ž…๋‹ˆ๋‹ค. `.fig` ํŒŒ์„œ๋Š” ์ฒซ Figma ํŒŒ์ผ์—์„œ 0.5์ดˆ ๋งŒ์— ๊น”๋ฆฝ๋‹ˆ๋‹ค.
494
+
495
+ ์„ค์น˜๋Š” `install` ๋‹จ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ์ฒซ ์‚ฌ์šฉ ์‹œ์ ์— ํ•ฉ๋‹ˆ๋‹ค. venv ๊ฐ€ 47MB ๋ผ์„œ, ๋ฌธ์„œ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์€ ๋‚ผ ์ด์œ ๊ฐ€ ์—†๋Š” ๋น„์šฉ์ž…๋‹ˆ๋‹ค. ์ž๋™ ์„ค์น˜๋ฅผ ๋„๋ ค๋ฉด `CTS_DOC2MD_NO_AUTOINSTALL=1` ์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
496
+
497
+ **ํŒŒ์ด์ฌ 3.10 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.** markitdown ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์ด๊ณ , macOS ๊ธฐ๋ณธ `/usr/bin/python3` ๋Š” 3.9 ์ž…๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” PATH ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  3.10 ์ด์ƒ์ธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ๊ณจ๋ผ venv ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. 3.9 ๋กœ ๋งŒ๋“ค๋ฉด pip ๊ฐ€ markitdown ์„ 2019 ๋…„ ์ž๋ฆฌํ‘œ์‹œ์ž ๋ฆด๋ฆฌ์Šค(0.0.1a1)๋กœ ํ•ด์„ํ•ด์„œ, ์„ค์น˜๋Š” ์„ฑ๊ณตํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ชจ๋“  ๋ณ€ํ™˜์ด ์ž„ํฌํŠธ ๋‹จ๊ณ„์—์„œ ์ฃฝ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด ํ•จ์ •์„ ๋ฐŸ๊ณ  ์žก์•˜์Šต๋‹ˆ๋‹ค. 3.10 ์ด์ƒ์ด ์•„์˜ˆ ์—†์œผ๋ฉด ์„ค์น˜ ๋ช…๋ น์„ ์•ˆ๋‚ดํ•˜๋Š” ๋Œ€์‹  `brew install python` ์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.
498
+
499
+ ๋ณ€ํ™˜๊ธฐ๋Š” ๋„๊ตฌ ์ „์šฉ venv(`<์ƒํƒœ ๋””๋ ‰ํ„ฐ๋ฆฌ>/doc2md-venv`)์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํŒŒ์ด์ฌ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ , CLI๋ฅผ ์ง€์šฐ๋ฉด ํ•จ๊ป˜ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด๋ฏธ `uv tool` ์ด๋‚˜ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— markitdown ์ด ์žˆ์œผ๋ฉด ๊ทธ์ชฝ์„ ๋จผ์ € ์”๋‹ˆ๋‹ค.
500
+
501
+ ๋ณ€ํ™˜์€ [markitdown](https://github.com/microsoft/markitdown)์ด ๋‹ด๋‹นํ•˜๋ฉฐ, ์Šฌ๋ผ์ด๋“œ ๋ฒˆํ˜ธ์™€ ์ œ๋ชฉ ๊ณ„์ธต, ํ‘œ, ๋ฐœํ‘œ์ž ๋…ธํŠธ, ์‹œํŠธ ๊ตฌ๋ถ„์ด ๋ชจ๋‘ ๋‚จ์Šต๋‹ˆ๋‹ค. ํ•œ๊ธ€๋„ ๊นจ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
502
+
503
+ ๋ช‡ ๊ฐ€์ง€๋Š” ์˜๋„์ ์œผ๋กœ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
504
+
505
+ - **์ด๋ฏธ์ง€๋Š” ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.** markitdown ์ด ๋นˆ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ๊ณ , OCR ์€ ์‹ค์ธก์—์„œ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์„ ํ‹€๋ฆฌ๊ฒŒ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค(`c5.xlarge` ๋ฅผ `c.xlarge` ๋กœ). ์ด๋ฆ„ ์ž์ฒด๊ฐ€ ๋‚ด์šฉ์ธ ๋ฌธ์„œ์—์„œ๋Š” ํ…์ŠคํŠธ๊ฐ€ ์—†๋А๋‹ˆ๋งŒ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ์ด๋ฏธ์ง€๋Š” ์ง์ ‘ ์ฝ์Šต๋‹ˆ๋‹ค.
506
+ - **๋ณ€ํ™˜๊ธฐ๊ฐ€ ์—†์–ด๋„ ์•Œ๋ฆฌ์ง€ ์•Š๊ณ  ์ง€๋‚˜๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.** ์„ค์น˜ ๋ช…๋ น์„ ํ•œ ๋ฒˆ ์•ˆ๋‚ดํ•œ ๋’ค ์›๋ณธ `Read` ๋ฅผ ๊ทธ๋Œ€๋กœ ํ†ต๊ณผ์‹œํ‚ต๋‹ˆ๋‹ค. ๋งค๋ฒˆ ์•Œ๋ฆฌ๋ฉด ๊ทธ๊ฒƒ๋Œ€๋กœ ๋ฐฉํ•ด๊ฐ€ ๋˜๊ณ , ์•„๋ฌด ๋ง๋„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณ ์žฅ์„ ์ˆจ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. `doc2md` ๋ฅผ ์ธ์ž ์—†์ด ์‹คํ–‰ํ•˜๋ฉด ๋ณ€ํ™˜๊ธฐ์™€ ํ›… ๋“ฑ๋ก ์ƒํƒœ๋ฅผ ํ•œ ๋ฒˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
507
+ - **๋ณ€ํ™˜๋ณธ์€ ํ”„๋กœ์ ํŠธ ์•ˆ์— ๋‚จ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.** ๋„๊ตฌ์˜ ์ƒํƒœ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•„๋ž˜ ๊ถŒํ•œ `0700` ์œผ๋กœ ์ €์žฅํ•˜๋ฏ€๋กœ `.gitignore` ์— ๋ฌด์—‡์„ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ๋ช…์ด ๊ธ‰์—ฌยท๊ณ„์•ฝยท๊ฐœ์ธ์ •๋ณด ๊ฐ™์€ ํŒจํ„ด์— ๊ฑธ๋ฆฌ๋ฉด ์•„์˜ˆ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
508
+ - **์••์ถ• ํญํƒ„์€ ๋ง‰์Šต๋‹ˆ๋‹ค.** pptxยทxlsxยทdocx ๋Š” zip ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. ์„ ์–ธ๋œ ํฌ๊ธฐ๋ฅผ ๋จผ์ € ๊ฑธ๋Ÿฌ ๋‚ด๊ณ , ์„ ์–ธ์€ ์กฐ์ž‘๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ค์ œ ํ•ด์ œ ๋ฐ”์ดํŠธ๋„ ์ƒํ•œ๊ณผ ๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค.
509
+ - **์—‘์…€์€ ํ–‰ ์ˆ˜๋กœ ์ž๋ฆ…๋‹ˆ๋‹ค.** ๋ณ€ํ™˜ ์‹œ๊ฐ„์€ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ํ–‰ ์ˆ˜๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค(์‹ค์ธก: PDF 6.3MB 0.9์ดˆ, ์—‘์…€ 5.8MB 47.75์ดˆ). 5๋งŒ ํ–‰์„ ๋„˜์œผ๋ฉด ์•ž๋ถ€๋ถ„๋งŒ ๋ณ€ํ™˜ํ•˜๊ณ , **์ž˜๋ž๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ์ „์ฒด ํ–‰ ์ˆ˜๋ฅผ ์•ˆ๋‚ด์— ํ•จ๊ป˜ ์ ์Šต๋‹ˆ๋‹ค.**
510
+
511
+ ### ๋” ๊นŠ์€ ๋‚ด์šฉ์€ ๋ณ„๋„ ๋ฌธ์„œ์— ์žˆ์Šต๋‹ˆ๋‹ค
512
+
513
+ ์ ˆ๊ฐ์•ก์„ ์–ด๋–ป๊ฒŒ ์‹ค์ธกํ•ด ์‚ฐ์ •ํ•˜๋Š”์ง€(PDF ์ฒจ๋ถ€ ๋Œ€๋น„, ์˜คํ”ผ์Šค XML ๋Œ€๋น„, `.fig` ๊ณ ์ • ๊ธฐ์ค€์„ ), ํ”ผ๊ทธ๋งˆ `.fig` ๋ณ€ํ™˜, ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ์˜ ๋ณต์‚ฌ๋ณธยท์Šคํฌ๋ฆฝํŠธ ์ ˆ์ฐจ, DRMยท์•”ํ˜ธ ๋ฌธ์„œ ํŒ๋ณ„, Windows ์ง€์› ์„ธ๋ถ€๋Š” [docs/DOC2MD.md](./docs/DOC2MD.md)๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ์š”์ง€๋Š” ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
514
+
515
+ - ์ ˆ๊ฐ ๊ธฐ์ค€์„ ์€ ํ•ญ์ƒ ์‹ค์ธก์น˜๋ณด๋‹ค **๋‚ฎ๊ฒŒ** ์žก์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ๋ฅผ ๋‹๋ณด์ด๊ฒŒ ํ•˜๋Š” ์ˆซ์ž๋ณด๋‹ค ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ๊ฐ€์น˜ ์žˆ์Šต๋‹ˆ๋‹ค.
516
+ - `.fig` ์ ˆ๊ฐ์ด ๊ฐ€์žฅ ํฝ๋‹ˆ๋‹ค. `Read` ๊ฐ€ ์ด์ง„ ํŒŒ์ผ์„ ๊ฑฐ๋ถ€ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ฝ์–ด ํšŒ๋‹น ์•ฝ 44,000 ํ† ํฐ์„ ํƒœ์šฐ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
517
+ - ์•”ํ˜ธ ๋ฌธ์„œ์™€ DRM ๋ฌธ์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ƒํƒœ๋กœ ํŒ๋ณ„ํ•ด ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ `Read` ๋ฅผ ๋ง‰์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž‘์—…์ด ์ค‘๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
518
+
519
+ ## ๐ŸŒ BedrockยทVertex ๊ฒฝ์œ  ํ™˜๊ฒฝ
520
+
521
+ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ฑฐ์น˜๋ฉด ์‘๋‹ต์ด ์บ์‹œ ์“ฐ๊ธฐ ํ•ฉ๊ณ„๋งŒ ๋‚ด๋ ค๋ณด๋‚ด๊ณ  5๋ถ„ยท1์‹œ๊ฐ„ ๋ฒ„ํ‚ท๋ณ„ ๋ถ„ํ•ด ๊ฐ’์€ ์ฑ„์šฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋„๊ตฌ๊ฐ€ "์บ์‹œ ์“ฐ๊ธฐ๊ฐ€ ์•„์ง ์—†๋‹ค"์™€ "์ด ์ œ๊ณต์ž๋Š” ์•Œ๋ ค ์ฃผ์ง€ ์•Š๋Š”๋‹ค"๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , ํŒ์ • ๋ถˆ๊ฐ€์ผ ๋•Œ 1์‹œ๊ฐ„์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์žก์•˜์Šต๋‹ˆ๋‹ค. Bedrock ์€ 5๋ถ„ ๋ฒ„ํ‚ท๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋‚จ์€ ์‹œ๊ฐ„์ด ์ตœ๋Œ€ 12๋ฐฐ๋กœ ๋ถ€ํ’€์–ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค.
522
+
523
+ v3.26.0๋ถ€ํ„ฐ ํŠธ๋žœ์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋ธ ID๋กœ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ฐ์ง€ํ•ด ๋‹ค์Œ์„ ๋ฐ”๋กœ์žก์Šต๋‹ˆ๋‹ค.
524
+
525
+ - ํŒ์ • ๋ถˆ๊ฐ€์ผ ๋•Œ์˜ ์นด์šดํŠธ๋‹ค์šด ๊ธฐ๋ณธ๊ฐ’์ด 5๋ถ„์ด ๋˜๊ณ , ๋ฒ„ํ‚ท ๋ผ๋ฒจ์ด `5m?` ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ธก๊ฐ’์€ `5m`, ์ถ”์ •์€ `5m?`, ๊ทผ๊ฑฐ ์—†์Œ์€ `?` ๋กœ ์„ธ ๋‹จ๊ณ„๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
526
+ - 5๋ถ„ ๋ฒ„ํ‚ท์—์„œ๋Š” ์นด์šดํŠธ๋‹ค์šด ์ƒ‰์ด ๋น„์œจ์ด ์•„๋‹ˆ๋ผ ์ ˆ๋Œ€ ์‹œ๊ฐ„์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. 5๋ถ„์˜ 30%๋Š” 90์ดˆ์—ฌ์„œ, ์ดˆ๋ก์ด ์ฃผ๋Š” ์—ฌ์œ ๊ฐ€ ์‹ค์ œ์™€ ์–ด๊ธ‹๋‚ฌ์Šต๋‹ˆ๋‹ค.
527
+ - `โš  5m TTL` ๊ฒฝ๊ณ ๊ฐ€ ์ด ํ™˜๊ฒฝ์—๋„ ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์กฐ์–ธ ๋ฌธ๊ตฌ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ตฌ๋… ํ”Œ๋žœ์„ ๋ฐ”๊ฟ”๋„ ํ•ด์†Œ๋˜์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์ด๋ฏ€๋กœ ํ”Œ๋žœ ์ „ํ™˜์„ ๊ถŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
528
+ - `Extra cost if 5m-only` ๋Š” 1์‹œ๊ฐ„ ์“ฐ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฌป์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ 5๋ถ„ ์ „์šฉ์ธ ํ™˜๊ฒฝ์—์„œ๋Š” ์งˆ๋ฌธ ์ž์ฒด๊ฐ€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์•„ `+$0` ์ด ์ž˜๋ชป ์ฝํ˜”์Šต๋‹ˆ๋‹ค.
529
+ - ์œ„์ž„ ๊ฑด์ด ๋ชจ๋ธ ID ํ•ด์„ ์‹คํŒจ๋กœ ๋ฒ„๋ ค์กŒ์œผ๋ฉด statusline ์— `๐Ÿ”€ N unresolved` ๋กœ ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” "์œ„์ž„ํ•œ ์  ์—†์Œ"๊ณผ ํ™”๋ฉด์ƒ ๊ตฌ๋ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
530
+ - ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ `foundation-model` ARN ์œผ๋กœ ์ง€์ •ํ•œ ๊ฒฝ์šฐ์—๋„ ๋ชจ๋ธ์„ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ๋‹ด๊ณ  ์žˆ์ง€ ์•Š์€ `application-inference-profile` ID ๋Š” ๊ทธ๋Œ€๋กœ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์„ ์ถ”์ธกํ•ด ๋„ฃ์œผ๋ฉด ์›์žฅ์— ํ‹€๋ฆฐ ๊ธˆ์•ก์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
531
+
532
+ ๊ฐ์ง€๊ฐ€ ํ‹€๋ฆฌ๋ฉด `claude-token-saver mode ttl=5m`(๋˜๋Š” `ttl=1h`)๋กœ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •๊ฐ’์ด ์‹ค์ธก๊ฐ’๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
533
+
534
+ ### LiteLLM: 5h/7d cap ๋Œ€์‹  ํ‚ค ์˜ˆ์‚ฐ์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค (v3.35.0)
535
+
536
+ LiteLLM ํ”„๋ก์‹œ๋กœ Bedrock ๋“ฑ์„ ์“ฐ๋ฉด Claude Code stdin ์— `rate_limits` ๊ฐ€ ์˜ค์ง€ ์•Š์•„ `โœฆ current`ยท`๐Ÿ“… weekly` ๊ฒŒ์ด์ง€๊ฐ€ ์•„์˜ˆ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  LiteLLM ์€ ํ‚ค๋ณ„ `max_budget` ๊ณผ `spend` ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ๊ทธ ๊ฐ’์„ ๊ฐ€์ ธ์™€ ๊ฐ™์€ ์ง€์ ์— ์˜ˆ์‚ฐ ๊ฒŒ์ด์ง€๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.
537
+
538
+ - ๊ฐ์ง€ ์กฐ๊ฑด: `ANTHROPIC_BASE_URL` ์ด ๊ณต์‹ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์•„๋‹ˆ๊ณ , `ANTHROPIC_AUTH_TOKEN`(๋˜๋Š” `ANTHROPIC_API_KEY`)์ด ์„ค์ •๋œ ํ™˜๊ฒฝ.
539
+ - ์กฐํšŒ๋Š” LiteLLM ์˜ `GET /key/info` ์™€ `GET /user/info` ๋กœ ํ•˜๊ณ , ํ˜ธ์ถœ ํ‚ค ์ž์‹ ์˜ ์ •๋ณด๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์˜ˆ์‚ฐ ์ถœ์ฒ˜๋Š” ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” **ํŒ€ ๋ฉค๋ฒ„์‹ญ ์˜ˆ์‚ฐ**(team_memberships ์˜ spendยทmax_budget)์„ ๋จผ์ € ๋ณด๊ณ , ์—†์œผ๋ฉด ํ‚ค ์ž์ฒด์˜ max_budget, ๊ทธ๋‹ค์Œ internal user ์˜ˆ์‚ฐ ์ˆœ์œผ๋กœ ๊ณ ๋ฆ…๋‹ˆ๋‹ค. ๋ Œ๋”๋Š” ์บ์‹œ ํŒŒ์ผ๋งŒ ์ฝ์œผ๋ฉฐ, ๊ฐฑ์‹ ์€ 5๋ถ„์— ํ•œ ๋ฒˆ ๋ถ„๋ฆฌ๋œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค (update-check ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ผ statusline ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค).
540
+ - `max_budget` ์ด ์—†๋Š” ๋ฌด์ œํ•œ ํ‚ค๋Š” ๊ฒŒ์ด์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋„ `๐Ÿ’ต` ์›” ์ง€์ถœ ์„ธ๊ทธ๋จผํŠธ๋Š” ์„ธ์…˜ ๋กœ๊ทธ ๊ธฐ๋ฐ˜์ด๋ผ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
541
+ - ์ƒํƒœ ํ™•์ธ: `claude-token-saver litellm-budget` (์บ์‹œ ์ถœ๋ ฅ) ยท `litellm-budget --refresh` (์ฆ‰์‹œ ์กฐํšŒ).
542
+
543
+ ์„ธ์…˜ ๊ธฐ๋ณธ ๋ชจ๋ธ์ด sonnet ์ด๋ฉด sonnet ์œ„์ž„ ๊ทœ์น™(T1)์€ ๊ตฌ์กฐ์ ์œผ๋กœ ์ ˆ๊ฐ์ด 0์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๊ธ‰์œผ๋กœ ๋‚ด๋ ค๋ณด๋‚ด ๋ด์•ผ ์ฐจ์•ก์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ ์ด๋Š” ์ •์ƒ ๋™์ž‘์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ `route-scan rules` ๊ฐ€ ์ด ๊ฒฝ์šฐ๋ฅผ "์•„์ง ์œ„์ž„ ์—†์Œ"๊ณผ ๊ฐ™์€ ๋ฌธ๊ตฌ๋กœ ํ‘œ์‹œํ•ด ๊ณ ์žฅ์ฒ˜๋Ÿผ ๋ณด์˜€์œผ๋ฏ€๋กœ, ์ด์ œ ํ˜„์žฌ ๊ธฐ๋ณธ ๋ชจ๋ธ ๊ธฐ์ค€์œผ๋กœ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋”ฐ๋กœ ์ ์Šต๋‹ˆ๋‹ค.
544
+
545
+ ## ํ† ํฐ ๊ธ‰์ฆ ์›์ธ ์ฝ”๋“œ
546
+
547
+ | ์ฝ”๋“œ | ์˜๋ฏธ |
548
+ |---|---|
549
+ | `LARGE_INPUT_PER_REQUEST` | ๋‹จ์ผ ์š”์ฒญ์˜ ์ž…๋ ฅ์ด 200k๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ํ„ด๋งˆ๋‹ค ๋‹ค์‹œ ๊ณผ๊ธˆ๋˜๊ณ  ํ•œ๋„ ์†Œ๋ชจ๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค |
550
+ | `LOW_HIT_RATE` | ์บ์‹œ ํžˆํŠธ์œจ 50% ๋ฏธ๋งŒ |
551
+ | `BUCKET_5M_DOMINANT` | ์บ์‹œ ์“ฐ๊ธฐ์˜ 70%+๊ฐ€ 5๋ถ„ ๋ฒ„ํ‚ท (Pro ํ”Œ๋žœ/Max ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ) |
552
+ | `HIGH_OUTPUT_RATIO` | ์ถœ๋ ฅ/์ž…๋ ฅ ๋น„์œจ 0.15 ์ดˆ๊ณผ (์ถœ๋ ฅ ๋‹จ๊ฐ€๋Š” ์ž…๋ ฅ์˜ 5๋ฐฐ) |
553
+ | `HIGH_REQUEST_COUNT` | ์š”์ฒญ ์ˆ˜๊ฐ€ ์ค‘์•™๊ฐ’์˜ 3๋ฐฐ+ (๋„๊ตฌ ํ˜ธ์ถœ ๋ฃจํ”„ ์˜์‹ฌ) |
554
+ | `FREQUENT_CACHE_REBUILD` | ์บ์‹œ ์žฌ์ž‘์„ฑ์ด ์ฝ๊ธฐ๋ณด๋‹ค ๋งŽ์Œ |
555
+
556
+ ๊ฐ ์ฝ”๋“œ๋งˆ๋‹ค OS๋ณ„ ํ•ด๊ฒฐ ๋ช…๋ น์ด ํ•จ๊ป˜ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
557
+
558
+ ## ์‹ค์ œ ํšจ๊ณผ: ๋„์ž… ์ „ํ›„ ๋ฆฌํฌํŠธ
559
+
560
+ ![claude-token-saver: harness์™€ ratchet ๋„์ž… ํšจ๊ณผ](./docs/harness-impact.png)
561
+
562
+ harness 5/5 + ratchet์„ ์‹ค์ œ ์ ์šฉํ•œ ์ „ํ›„ ๋น„๊ต์ž…๋‹ˆ๋‹ค (์ €์ž Claude Code ๋กœ๊ทธ, **์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ 1๊ฑด๋‹น** ์ •๊ทœํ™”, 2026-05-02 ๊ธฐ์ค€, Opus 4.7 ๊ฐ€๊ฒฉ):
563
+
564
+ | ๋ฉ”ํŠธ๋ฆญ | ๋„์ž… ์ „ (7์ผ/739msg) | ๋„์ž… ํ›„ (2์ผ/157msg) | ๋ณ€ํ™” |
565
+ |---|---:|---:|---:|
566
+ | ๋ฉ”์‹œ์ง€๋‹น ๋น„์šฉ | $2.345 | $1.910 | **โˆ’18.6%** |
567
+ | ๋ฉ”์‹œ์ง€๋‹น ์ถœ๋ ฅ ํ† ํฐ | 7,391 | 6,052 | โˆ’18.1% |
568
+ | ๋ฉ”์‹œ์ง€๋‹น assistant ์™•๋ณต | 9.73 | 8.83 | โˆ’9.2% |
569
+ | ๋ฉ”์‹œ์ง€๋‹น ๋„๊ตฌ ํ˜ธ์ถœ | 5.72 | 5.25 | โˆ’8.2% |
570
+
571
+ ๊ฐ™์€ ์š”์ฒญ์„ ๋” ์ ์€ ์™•๋ณต์œผ๋กœ ๋๋‚ธ๋‹ค = ์ฒซ ์‹œ๋„ ์ ์ค‘๋ฅ  โ†‘. PEVยทStructured Task๊ฐ€ ํ•œ ๋ฒˆ์— ๊ฐ€๊ฒŒ ๋งŒ๋“  ํšจ๊ณผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
572
+
573
+ <details>
574
+ <summary>์ธก์ • ๋ฐฐ๊ฒฝ: ์บ์‹œ ํžˆํŠธ์œจ์„ ์ œ์™ธํ•œ ์ด์œ ์™€ ํ‘œ๋ณธ์— ๊ด€ํ•œ ์ฃผ์˜ ์‚ฌํ•ญ</summary>
575
+
576
+ - ์ €์ž๋Š” Max ํ”Œ๋žœ(์บ์‹œ TTL 1์‹œ๊ฐ„)์ด๋ผ ํžˆํŠธ์œจ์ด ์ด๋ฏธ ~98%์— ์ˆ˜๋ ดํ•ด ๊ฐœ์„  ์—ฌ์ง€๊ฐ€ ์ž‘์•˜์Šต๋‹ˆ๋‹ค. **Pro ํ”Œ๋žœ(5๋ถ„ TTL) ์‚ฌ์šฉ์ž๋Š”** ๋งŒ๋ฃŒ ์ง์ „ handoff ์›Œํฌํ”Œ๋กœ ์กฐํ•ฉ์œผ๋กœ ํžˆํŠธ์œจ ์ž์ฒด๊ฐ€ ์˜ค๋ฅผ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
577
+ - ๋งŒ๋ฃŒ ์ง์ „ handoff ์›Œํฌํ”Œ๋กœ: statusline TTL ์นด์šดํŠธ๋‹ค์šด์„ ๋ณด๋‹ค๊ฐ€ ๋งŒ๋ฃŒ ์ง์ „ `claude-token-saver handoff`๋กœ ์ž‘์—… ์ƒํƒœ๋ฅผ ๋ฐฑ์—…ํ•˜๊ณ  ์ƒˆ ์บ์‹œ ์‚ฌ์ดํด์„ ์‹œ์ž‘. 1M ๊ฒฝ๊ณ ยทcap ์นฉ๋„ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ์ฒ˜๋ฆฌ.
578
+ - โš ๏ธ ๋„์ž… ํ›„ ๋ฐ์ดํ„ฐ๋Š” 2์ผ์น˜(157msg)๋กœ ํ†ต๊ณ„์  ์˜๋ฏธ๊ฐ€ ์•ฝํ•˜๊ณ , ์ฃผ๋ณ„ ์ž‘์—… ํ† ํ”ฝ ์ฐจ์ด๊ฐ€ ์„ž์—ฌ ์žˆ์–ด ๋„๊ตฌ ํšจ๊ณผ๋งŒ ๊นจ๋—์ด ๋ถ„๋ฆฌ๋˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค.
579
+ </details>
580
+
581
+ ## ๋™์ž‘ ์›๋ฆฌ ยท ํ™˜๊ฒฝ
582
+
583
+ Claude Code๋Š” ๋ชจ๋“  API ์‘๋‹ต์„ `~/.claude/projects/<dir>/<session>.jsonl`์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” `cache_read_input_tokens`, `cache_creation.ephemeral_5m/1h_input_tokens` ๋“ฑ์„ `requestId` ๊ธฐ์ค€์œผ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ ํ›„ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
584
+
585
+ Node.js โ‰ฅ 18 ยท macOS / Linux / Windows / WSL ยท **์˜์กด์„ฑ 0**.
586
+
587
+ <details>
588
+ <summary>์•Œ๋ ค์ง„ ํ™˜๊ฒฝ ์ด์Šˆ ยท ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜</summary>
589
+
590
+ **IntelliJ Claude Code plugin:** statusline ์œ„์ ฏ์ด ํ”„๋ ˆ์ž„์„ ์ž˜๋ชป ํ•ฉ์„ฑํ•ด `59:548` ๊ฐ™์€ ์ž”์žฌ๊ฐ€ ๋ณด์ด๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋ชจ์ง€ ์ถœ๋ ฅ์—์„œ๋งŒ). v2.8.5+๋Š” `TERMINAL_EMULATOR=JetBrains-JediTerm` ๊ฐ์ง€ ์‹œ ์ž๋™์œผ๋กœ text ๋ชจ๋“œ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.
591
+
592
+ **TTL ์นด์šดํŠธ๋‹ค์šด์ด ๋ฉˆ์ถฐ ๋ณด์ผ ๋•Œ:** ์นด์šดํŠธ๋‹ค์šด์ด ์ž…๋ ฅ ์—†์ด๋„ ์ดˆ ๋‹จ์œ„๋กœ ์ค„์–ด๋“ค๋ ค๋ฉด Claude Code ๊ฐ€ statusline ๋ช…๋ น์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ณ , ๊ทธ ์ฃผ๊ธฐ๋Š” `~/.claude/settings.json` ์˜ `statusLine.refreshInterval`(์ดˆ ๋‹จ์œ„, v2.1.97 ์ด์ƒ)์ด ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์ด ์—†์œผ๋ฉด ๋Œ€ํ™”๊ฐ€ ๊ฐฑ์‹ ๋  ๋•Œ๋งŒ ๋‹ค์‹œ ๊ทธ๋ ค์ ธ์„œ ๋ฉˆ์ถ˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„๋งˆ๋‹ค ๋™์ž‘์ด ๋‹ค๋ฅด๋ฉด ์„ธ ๊ฐ€์ง€๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. โ‘  ๊ทธ ๋จธ์‹ ์˜ Claude Code ๋ฒ„์ „์ด 2.1.97 ์ด์ƒ์ธ์ง€, โ‘ก ํ”„๋กœ์ ํŠธ `.claude/settings.json` ์ด๋‚˜ `settings.local.json` ์ด `statusLine` ์„ refreshInterval ์—†์ด ๋ฎ์–ด์“ฐ๊ณ  ์žˆ์ง€ ์•Š์€์ง€, โ‘ข statusline ๋ž˜ํผ๊ฐ€ PATH ์—์„œ `claude-token-saver` ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด ๋งค ๋ Œ๋”๋งˆ๋‹ค `npx` ํด๋ฐฑ์œผ๋กœ ์ˆ˜ ์ดˆ์”ฉ ๊ฑธ๋ฆฌ๊ณ  ์žˆ์ง€ ์•Š์€์ง€ (๋น„๋กœ๊ทธ์ธ ์…ธ์—์„œ nvm ์ด ๋กœ๋“œ๋˜์ง€ ์•Š๋Š” ํ„ฐ๋ฏธ๋„์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค). `claude-token-saver install` ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด refreshInterval ์„ 5์ดˆ๋กœ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค.
593
+
594
+ **claude-cache-monitor์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜:**
595
+ ```bash
596
+ npm uninstall -g claude-cache-monitor && npm i -g claude-token-saver
597
+ ```
598
+ `~/.claude/settings.json`์˜ `statusLine.command`๋„ `claude-token-saver โ€ฆ`๋กœ ๊ต์ฒดํ•˜์„ธ์š”.
599
+ </details>
600
+
601
+ ## ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ
602
+
603
+ ์ „์ฒด ๋‚ด์—ญ์€ [CHANGELOG.md](./CHANGELOG.md)๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ ๋ณ€๊ฒฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
604
+
605
+ - **v3.39.0**: `feedback` ์„œ๋ธŒ์ปค๋งจ๋“œ๊ฐ€ ํ„ฐ๋ฏธ๋„์ด๋‚˜ Claude ์„ธ์…˜์—์„œ ๋ฒ„๊ทธ ์ œ๋ณดยท๊ธฐ๋Šฅ ์ œ์•ˆ์„ ๋ฐ”๋กœ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. gh CLI๊ฐ€ ์žˆ์œผ๋ฉด ์ด์Šˆ ์ง์ ‘ ๋“ฑ๋ก, ์—†์œผ๋ฉด ๋กœ๊ทธ์ธ ์—†๋Š” ์ต๋ช… ์ œ์ถœ(๋ฆด๋ ˆ์ด๊ฐ€ ์ด์Šˆ๋กœ ์ž๋™ ๋“ฑ๋ก), ์˜คํ”„๋ผ์ธ์ด๋ฉด ๋กœ์ปฌ ์ €์žฅ. `install`์€ ๊ธฐ์กด statusline์ด ์žˆ์œผ๋ฉด ์กฐ์šฉํžˆ ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š๊ณ  ๊ต์ฒด ์—ฌ๋ถ€๋ฅผ ๋ฌป์Šต๋‹ˆ๋‹ค.
606
+ - **v3.38.0**: `cohesion on`์ด ์‘์ง‘์„ฑ ๋‹ค์„ฏ ์›์น™์„ ์˜์–ด ๋ธ”๋ก์œผ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์˜ตํŠธ์ธ์ด๊ณ , korean ์ง€์นจ์ด ์ผœ์ ธ ์žˆ์œผ๋ฉด ์ค‘๋ณต ์ฃผ์ž…์„ ๋ง‰์Šต๋‹ˆ๋‹ค.
607
+ - **v3.37.0**: ํ•œ๊ตญ์–ด ์ง€์นจ์— ๋ณด๊ฐ• ์ง€์นจ(supplement)์ด ๋ถ™์Šต๋‹ˆ๋‹ค. ๋ฒˆ์—ญํˆฌยท์ƒํˆฌ ํŒจํ„ดยท์‘์ง‘์„ฑ(๋ฌธ์žฅ ์ด์–ด์ง) ์กฐํ•ญ์ด๋ฉฐ, ์“ฐ๊ธฐ ์‹œ์  ๊ฒ€์‚ฌ์—๋„ ๋ฒˆ์—ญํˆฌ 5์ข…์ด ์ถ”๊ฐ€๋์Šต๋‹ˆ๋‹ค. ์‹คํŒŒ์ผ 255๊ฐœ ์‹ค์ธก์—์„œ ์˜คํƒ 1๊ฑด์œผ๋กœ ๊ฒ€์ฆํ–ˆ์Šต๋‹ˆ๋‹ค.
608
+ - **v3.35.0**: ์ด๋ฒˆ ๋‹ฌ 1์ผ 00์‹œ ์ดํ›„ ์ง€์ถœ ์ถ”์ •์น˜๋ฅผ `๐Ÿ’ต Sep $42` ์„ธ๊ทธ๋จผํŠธ๋กœ ์ƒ์‹œ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. LiteLLM ๊ฒŒ์ดํŠธ์›จ์ด ์‚ฌ์šฉ์ž๋Š” ํ‚ค์˜ max_budget/spend ๋ฅผ `๐Ÿ”‘ budget` ๊ฒŒ์ด์ง€๋กœ ๋ด…๋‹ˆ๋‹ค (5h/7d cap ์ด ์—†๋Š” BedrockยทLiteLLM ํ™˜๊ฒฝ ๋Œ€์‘).
609
+ - **v3.34.0**: seed ํ”„๋ฆฌ์…‹ ์ œ์•ˆ, ์„ค์น˜ ์‹œ ์ถœ๋ ฅ ์–ธ์–ด ์„ ํƒ, ์ปจํ…์ŠคํŠธ ๊ฒฝ๊ณ  500k ์ƒํ–ฅ. ์ƒ์„ธ๋Š” CHANGELOG ์ฐธ๊ณ .
610
+
611
+ ## ํ”ผ๋“œ๋ฐฑ
612
+
613
+ ๋ฒ„๊ทธ ์ œ๋ณด์™€ ๊ธฐ๋Šฅ ์ œ์•ˆ์€ GitHub ์ด์Šˆ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค: https://github.com/rootstudioyaml/sprag/issues
614
+
615
+ ๋ธŒ๋ผ์šฐ์ €๋‚˜ GitHub ๋กœ๊ทธ์ธ์ด ์–ด๋ ค์šด ํ™˜๊ฒฝ(์‚ฌ๋‚ด๋ง, ์„ธ์…˜ ๋„์ค‘)์ด๋ผ๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ ๋ฐ”๋กœ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๊ณ , Claude์—๊ฒŒ ๋Œ€์‹  ์ œ์ถœํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.
616
+
617
+ ```bash
618
+ claude-token-saver feedback "Bedrock์—์„œ 5m TTL ์นฉ์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š์•„์š”"
619
+ ```
620
+
621
+ `gh` CLI๊ฐ€ ์ธ์ฆ๋˜์–ด ์žˆ์œผ๋ฉด GitHub ์ด์Šˆ๋กœ ๋ฐ”๋กœ ๋“ฑ๋กํ•˜๊ณ , ์—†์œผ๋ฉด ๋กœ๊ทธ์ธ์ด ํ•„์š” ์—†๋Š” ์ต๋ช… ๊ฒฝ๋กœ๋กœ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค(github.com์ด ๋ง‰ํžŒ ์‚ฌ๋‚ด๋ง์—์„œ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค). `gh` ๊ฒฝ๋กœ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด `--anonymous`๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. ๋„๊ตฌ ๋ฒ„์ „๊ณผ OS ์ •๋ณด๋Š” ์ž๋™์œผ๋กœ ์ฒจ๋ถ€๋ฉ๋‹ˆ๋‹ค.
622
+
623
+ ๋ฒ„๊ทธ๋ฅผ ์ œ๋ณดํ•˜์‹ค ๋•Œ๋Š” ๋„๊ตฌ ๋ฒ„์ „(`claude-token-saver --version`)๊ณผ OS๋ฅผ ํ•จ๊ป˜ ์ ์–ด ์ฃผ์‹œ๊ณ , statusline์ด๋‚˜ ๊ฒฝ๊ณ  ๊ด€๋ จ ๋ฌธ์ œ๋ผ๋ฉด statusline ์ถœ๋ ฅ์ด๋‚˜ `claude-token-saver last` ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ถ™์—ฌ ์ฃผ์‹œ๋ฉด ์›์ธ์„ ๋นจ๋ฆฌ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
624
+
625
+ ## ๋ผ์ด์„ ์Šค
626
+
627
+ MIT
628
+
629
+ ---
630
+
631
+ ## ๋งŒ๋“  ๊ณณ
632
+
633
+ [![DeepPulse YouTube](https://img.shields.io/badge/YouTube-@DeepPulseKR-FF0000?logo=youtube&logoColor=white)](https://www.youtube.com/@DeepPulseKR)
634
+ [![DeepPulseEN YouTube](https://img.shields.io/badge/YouTube-@DeepPulseEN-FF0000?logo=youtube&logoColor=white)](https://www.youtube.com/@DeepPulseEN)
635
+ [![Homepage](https://img.shields.io/badge/Homepage-rootstudioyaml.github.io-2ea44f)](https://rootstudioyaml.github.io/)
636
+
637
+ AI ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ฑ„๋„ **DeepPulse**์—์„œ ๋งŒ๋“ค๊ณ  ์”๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ์˜ ๋ฐฐ๊ฒฝ๊ณผ ์‚ฌ์šฉ๋ฒ•์€ [์ถœ์‹œ ์˜์ƒ(60์ดˆ)](https://www.youtube.com/shorts/RaD8qMsPTnA)์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.