Skip to content

Latest commit

ย 

History

History
1206 lines (874 loc) ยท 49.8 KB

File metadata and controls

1206 lines (874 loc) ยท 49.8 KB

Tokscale

์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ์˜ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋น„์šฉ์„ ์ถ”์ ํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ CLI ๋„๊ตฌ ๋ฐ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ

Tip

v2 ์ถœ์‹œ โ€” ๋„ค์ดํ‹ฐ๋ธŒ Rust TUI, ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์› ๋“ฑ.
์ €๋Š” ๋งค์ฃผ ์ƒˆ๋กœ์šด ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๋†“์น˜์ง€ ๋งˆ์„ธ์š”.

GitHub Follow GitHub์—์„œ @junhoyeo๋ฅผ ํŒ”๋กœ์šฐํ•˜๊ณ  ๋” ๋งŽ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”. AI, ์ธํ”„๋ผ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
Overview Models
TUI Overview TUI Models
Daily Summary Stats
TUI Daily Summary TUI Stats
Frontend (3D Contributions Graph) Wrapped 2025
Frontend (3D Contributions Graph) Wrapped 2025

bunx tokscale submit๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ๋”๋ณด๋“œ์— ์ œ์ถœํ•˜๊ณ  ๊ณต๊ฐœ ํ”„๋กœํ•„์„ ๋งŒ๋“œ์„ธ์š”!

๊ฐœ์š”

Tokscale์€ ์•„๋ž˜ ํ”Œ๋žซํผ๋“ค์˜ ํ† ํฐ ์†Œ๋น„๋Ÿ‰์„ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•ด ํ•œ ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ค๋‹ˆ๋‹ค.

๋กœ๊ณ  ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ ์œ„์น˜ ์ง€์› ์—ฌ๋ถ€
OpenCode OpenCode ~/.local/share/opencode/opencode.db (1.2+) ๋˜๋Š” ~/.local/share/opencode/storage/message/ โœ… ์ง€์›
Claude Claude Code ~/.claude/projects/ โœ… ์ง€์›
OpenClaw OpenClaw ~/.openclaw/agents/ (+ ๋ ˆ๊ฑฐ์‹œ: .clawdbot, .moltbot, .moldbot) โœ… ์ง€์›
Codex Codex CLI ~/.codex/sessions/ โœ… ์ง€์›
Gemini Gemini CLI ~/.gemini/tmp/*/chats/*.json โœ… ์ง€์›
Cursor Cursor IDE ~/.config/tokscale/cursor-cache/๋ฅผ ํ†ตํ•œ API ๋™๊ธฐํ™” โœ… ์ง€์›
Amp Amp (AmpCode) ~/.local/share/amp/threads/ โœ… ์ง€์›
Droid Droid (Factory Droid) ~/.factory/sessions/ โœ… ์ง€์›
Pi Pi ~/.pi/agent/sessions/ โœ… ์ง€์›
Kimi Kimi CLI ~/.kimi/sessions/ โœ… ์ง€์›
Qwen Qwen CLI ~/.qwen/projects/ โœ… ์ง€์›
Roo Code Roo Code ~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/tasks/ (+ server: ~/.vscode-server/data/User/globalStorage/rooveterinaryinc.roo-cline/tasks/) โœ… ์ง€์›
Kilo Kilo ~/.config/Code/User/globalStorage/kilocode.kilo-code/tasks/ (+ server: ~/.vscode-server/data/User/globalStorage/kilocode.kilo-code/tasks/) โœ… ์ง€์›
Mux Mux ~/.mux/sessions/ โœ… ์ง€์›
Kilo CLI Kilo CLI ~/.local/share/kilo/kilo.db โœ… ์ง€์›
Crush Crush $XDG_DATA_HOME/crush/projects.json (ํ”„๋กœ์ ํŠธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, ๊ธฐ๋ณธ๊ฐ’: ~/.local/share/crush/projects.json) โœ… ์ง€์›
Synthetic Synthetic hf: ๋ชจ๋ธ/synthetic provider ๊ฐ์ง€๋กœ ๋‹ค๋ฅธ ์†Œ์Šค์—์„œ ์žฌ๊ท€์† (+ Octofriend: ~/.local/share/octofriend/sqlite.db) โœ… ์ง€์›

๐Ÿš… LiteLLM์˜ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ์‹ค์‹œ๊ฐ„ ๋น„์šฉ ๊ณ„์‚ฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๊ฐ„๋ณ„ ๊ฐ€๊ฒฉ ๋ชจ๋ธ(๋Œ€์šฉ๋Ÿ‰ ์ปจํ…์ŠคํŠธ ๋“ฑ)๊ณผ ์บ์‹œ ํ† ํฐ ํ• ์ธ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์™œ "Tokscale"์ธ๊ฐ€์š”?

์ด ํ”„๋กœ์ ํŠธ๋Š” **์นด๋ฅด๋‹ค์‡ผํ”„ ์ฒ™๋„(Kardashev Scale)**์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์นด๋ฅด๋‹ค์‡ผํ”„ ์ฒ™๋„๋Š” ๋ฌธ๋ช…์˜ ๊ธฐ์ˆ  ์ˆ˜์ค€์„ ์—๋„ˆ์ง€ ์†Œ๋น„๋Ÿ‰์œผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜• I ๋ฌธ๋ช…์€ ํ–‰์„ฑ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์—๋„ˆ์ง€๋ฅผ ํ™œ์šฉํ•˜๊ณ , ์œ ํ˜• II๋Š” ํ•ญ์„ฑ์˜ ์ „์ฒด ์ถœ๋ ฅ์„ ํฌ์ฐฉํ•˜๋ฉฐ, ์œ ํ˜• III๋Š” ์€ํ•˜ ์ „์ฒด์˜ ์—๋„ˆ์ง€๋ฅผ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.

AI ์ง€์› ๊ฐœ๋ฐœ ์‹œ๋Œ€์— ํ† ํฐ์€ ์ƒˆ๋กœ์šด ์—๋„ˆ์ง€์ž…๋‹ˆ๋‹ค. ํ† ํฐ์€ ์šฐ๋ฆฌ์˜ ์‚ฌ๊ณ ๋ ฅ์„ ๊ตฌ๋™ํ•˜๊ณ , ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋ฉฐ, ์ฐฝ์˜์  ๊ฒฐ๊ณผ๋ฌผ์„ ์ด๋Œ์–ด๋ƒ…๋‹ˆ๋‹ค. ์นด๋ฅด๋‹ค์‡ผํ”„ ์ฒ™๋„๊ฐ€ ์šฐ์ฃผ์  ๊ทœ๋ชจ์—์„œ ์—๋„ˆ์ง€ ์†Œ๋น„๋ฅผ ์ถ”์ ํ•˜๋“ฏ, Tokscale์€ AI ์ฆ๊ฐ• ๊ฐœ๋ฐœ์˜ ๋‹จ๊ณ„๋ฅผ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ํ† ํฐ ์†Œ๋น„๋ฅผ ์ธก์ •ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋ณ๊ฒŒ ์“ฐ๋Š” ์‚ฌ์šฉ์ž๋“  ๋งค์ผ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ํ† ํฐ์„ ์†Œ๋น„ํ•˜๋Š” ํŒŒ์›Œ ์œ ์ €๋“ , Tokscale์€ "๋‚ด๊ฐ€ ์–ด๋””์—์„œ ๋ฌด์—‡์„ ์–ผ๋งˆ๋‚˜ ์“ฐ๊ณ  ์žˆ๋Š”์ง€"๋ฅผ ๋ถ„๋ช…ํ•˜๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

๊ธฐ๋Šฅ

  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ TUI ๋ชจ๋“œ - Ratatui ๊ธฐ๋ฐ˜์˜ ํ„ฐ๋ฏธ๋„ UI (๊ธฐ๋ณธ ๋ชจ๋“œ)
    • 4๊ฐœ ๋ทฐ: ๊ฐœ์š”, ๋ชจ๋ธ, ์ผ๋ณ„, ํ†ต๊ณ„
    • ํ‚ค๋ณด๋“œ ๋ฐ ๋งˆ์šฐ์Šค ์ง€์›
    • 9๊ฐ€์ง€ ํ…Œ๋งˆ์˜ GitHub ์Šคํƒ€์ผ ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„
    • ์‹ค์‹œ๊ฐ„ ํ•„ํ„ฐ๋ง ๋ฐ ์ •๋ ฌ
    • ๊นœ๋นก์ž„ ์—†๋Š” ๋ Œ๋”๋ง
  • ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์ง€์› - OpenCode, Claude Code, Codex CLI, Cursor IDE, Gemini CLI, Amp, Droid, OpenClaw, Pi, Kimi CLI, Qwen CLI, Roo Code, Kilo, Mux, Kilo CLI, Crush, Synthetic ์‚ฌ์šฉ๋Ÿ‰ ํ†ตํ•ฉ ์ถ”์ 
  • ์‹ค์‹œ๊ฐ„ ๊ฐ€๊ฒฉ ๋ฐ˜์˜ - LiteLLM์—์„œ ์ตœ์‹  ๊ฐ€๊ฒฉ์„ ๊ฐ€์ ธ์™€(๋””์Šคํฌ ์บ์‹œ 1์‹œ๊ฐ„) ๋น„์šฉ ๊ณ„์‚ฐ; OpenRouter ์ž๋™ ํด๋ฐฑ ๋ฐ ์‹ ๊ทœ ๋ชจ๋ธ์šฉ Cursor ๊ฐ€๊ฒฉ ์ง€์›
  • ์ƒ์„ธ ๋ถ„์„ - ์ž…๋ ฅ, ์ถœ๋ ฅ, ์บ์‹œ ์ฝ๊ธฐ/์“ฐ๊ธฐ, ์ถ”๋ก  ํ† ํฐ๊นŒ์ง€ ์ถ”์ 
  • ๋„ค์ดํ‹ฐ๋ธŒ Rust ์ฝ”์–ด - ๋ชจ๋“  ํŒŒ์‹ฑ๊ณผ ์ง‘๊ณ„๋ฅผ Rust๋กœ ์ฒ˜๋ฆฌํ•ด ์ตœ๋Œ€ 10๋ฐฐ ๋น ๋ฅธ ์„ฑ๋Šฅ
  • ์›น ์‹œ๊ฐํ™” - 2D ๋ฐ 3D ๋ทฐ์˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„
  • ์œ ์—ฐํ•œ ํ•„ํ„ฐ๋ง - ํ”Œ๋žซํผ, ๋‚ ์งœ ๋ฒ”์œ„ ๋˜๋Š” ์—ฐ๋„๋ณ„ ํ•„ํ„ฐ๋ง
  • JSON ๋‚ด๋ณด๋‚ด๊ธฐ - ์™ธ๋ถ€ ์‹œ๊ฐํ™” ๋„๊ตฌ/์ž๋™ํ™”์šฉ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  • ์†Œ์…œ ํ”Œ๋žซํผ - ์‚ฌ์šฉ๋Ÿ‰ ๊ณต์œ , ๋ฆฌ๋”๋ณด๋“œ ๊ฒฝ์Ÿ, ๊ณต๊ฐœ ํ”„๋กœํ•„ ์กฐํšŒ

์„ค์น˜

๋น ๋ฅธ ์‹œ์ž‘

# npx๋กœ ๋ฐ”๋กœ ์‹คํ–‰
npx tokscale@latest

# ๋˜๋Š” bunx ์‚ฌ์šฉ
bunx tokscale@latest

# ๋ผ์ดํŠธ ๋ชจ๋“œ (ํ…Œ์ด๋ธ” ๋ Œ๋”๋ง๋งŒ)
npx tokscale@latest --light

์ด๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค! ๋ณ„๋„ ์„ค์ • ์—†์ด ๋ฐ”๋กœ ์™„์ „ํ•œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ TUI ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๊ตฌ์กฐ: tokscale์€ @tokscale/cli๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ณ„์นญ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค (swc์ฒ˜๋Ÿผ). ๋‘˜ ๋‹ค ๋„ค์ดํ‹ฐ๋ธŒ Rust ์ฝ”์–ด (@tokscale/core)๊ฐ€ ํฌํ•จ๋œ ๋™์ผํ•œ CLI๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • Node.js ๋˜๋Š” Bun
  • (์„ ํƒ) ์†Œ์Šค์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์„ ๋นŒ๋“œํ•˜๋ ค๋ฉด Rust ํˆด์ฒด์ธ

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

๋กœ์ปฌ ๊ฐœ๋ฐœ ๋˜๋Š” ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ:

# ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/junhoyeo/tokscale.git
cd tokscale

# Bun ์„ค์น˜ (์•„์ง ์„ค์น˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ)
curl -fsSL https://bun.sh/install | bash

# ์˜์กด์„ฑ ์„ค์น˜
bun install

# ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ CLI ์‹คํ–‰
bun run cli

์ฐธ๊ณ : bun run cli๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ์ž…๋‹ˆ๋‹ค. bunx tokscale๋กœ ์„ค์น˜ํ•˜๋ฉด ๋ช…๋ น์ด ์ง์ ‘ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์‚ฌ์šฉ๋ฒ• ์„น์…˜์€ ์„ค์น˜๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ช…๋ น์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ ๋นŒ๋“œ

๋„ค์ดํ‹ฐ๋ธŒ Rust ๋ชจ๋“ˆ์€ CLI ๋™์ž‘์— ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ ํŒŒ์ผ ์Šค์บ๋‹๊ณผ SIMD JSON ํŒŒ์‹ฑ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์•ฝ 10๋ฐฐ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค:

# ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”์–ด ๋นŒ๋“œ (์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ ์‹คํ–‰)
bun run build:core

์ฐธ๊ณ : bunx tokscale@latest๋กœ ์„ค์น˜ํ•˜๋ฉด ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์‚ฌ์ „ ๋นŒ๋“œ๋˜์–ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์—์„œ ๋นŒ๋“œ๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ ์‹œ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•

๊ธฐ๋ณธ ๋ช…๋ น์–ด

# ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ TUI ์‹คํ–‰ (๊ธฐ๋ณธ)
tokscale

# ํŠน์ • ํƒญ์œผ๋กœ TUI ์‹คํ–‰
tokscale models    # ๋ชจ๋ธ ํƒญ
tokscale monthly   # ์ผ๋ณ„ ๋ทฐ (์ผ๋ณ„ ๋ถ„์„ ํ‘œ์‹œ)

# ๋ ˆ๊ฑฐ์‹œ CLI ํ…Œ์ด๋ธ” ์ถœ๋ ฅ ์‚ฌ์šฉ
tokscale --light
tokscale models --light

# ๋ช…์‹œ์ ์œผ๋กœ TUI ์‹คํ–‰
tokscale tui

# ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฅผ JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
tokscale graph --output data.json

# JSON์œผ๋กœ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ (์Šคํฌ๋ฆฝํŒ…/์ž๋™ํ™”์šฉ)
tokscale --json                    # ๊ธฐ๋ณธ ๋ชจ๋ธ ๋ทฐ๋ฅผ JSON์œผ๋กœ
tokscale models --json             # ๋ชจ๋ธ ๋ถ„์„์„ JSON์œผ๋กœ
tokscale monthly --json            # ์›”๋ณ„ ๋ถ„์„์„ JSON์œผ๋กœ
tokscale models --json > report.json   # ํŒŒ์ผ๋กœ ์ €์žฅ

TUI ๊ธฐ๋Šฅ

์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ TUI ๋ชจ๋“œ๋Š” ๋‹ค์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • 4๊ฐœ ๋ทฐ: ๊ฐœ์š” (์ฐจํŠธ + ์ƒ์œ„ ๋ชจ๋ธ), ๋ชจ๋ธ, ์ผ๋ณ„, ํ†ต๊ณ„ (๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„)
  • ํ‚ค๋ณด๋“œ ๋‚ด๋น„๊ฒŒ์ด์…˜:
    • 1-4 ๋˜๋Š” โ†/โ†’/Tab: ๋ทฐ ์ „ํ™˜
    • โ†‘/โ†“: ๋ชฉ๋ก ํƒ์ƒ‰
    • c/d/t: ๋น„์šฉ/๋‚ ์งœ/ํ† ํฐ๋ณ„ ์ •๋ ฌ
    • s: ์†Œ์Šค ์„ ํƒ ๋‹ค์ด์–ผ๋กœ๊ทธ ์—ด๊ธฐ
    • g: ๊ทธ๋ฃน ๊ธฐ์ค€ ์„ ํƒ ๋‹ค์ด์–ผ๋กœ๊ทธ ์—ด๊ธฐ (๋ชจ๋ธ, ํด๋ผ์ด์–ธํŠธ+๋ชจ๋ธ, ํด๋ผ์ด์–ธํŠธ+ํ”„๋กœ๋ฐ”์ด๋”+๋ชจ๋ธ)
    • p: 9๊ฐ€์ง€ ์ƒ‰์ƒ ํ…Œ๋งˆ ์ˆœํ™˜
    • r: ๋ฐ์ดํ„ฐ ์ƒˆ๋กœ๊ณ ์นจ
    • e: JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
    • q: ์ข…๋ฃŒ
  • ๋งˆ์šฐ์Šค ์ง€์›: ํƒญ, ๋ฒ„ํŠผ, ํ•„ํ„ฐ ํด๋ฆญ
  • ํ…Œ๋งˆ: Green, Halloween, Teal, Blue, Pink, Purple, Orange, Monochrome, YlGnBu
  • ์„ค์ • ์ €์žฅ: ์„ค์ •์ด ~/.config/tokscale/settings.json์— ์ €์žฅ๋จ (์„ค์ • ์ฐธ์กฐ)

๊ทธ๋ฃน ๊ธฐ์ค€ ์ „๋žต

TUI์—์„œ g๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ --light/--json ๋ชจ๋“œ์—์„œ --group-by๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ํ–‰ ์ง‘๊ณ„ ๋ฐฉ์‹์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค:

์ „๋žต ํ”Œ๋ž˜๊ทธ TUI ๊ธฐ๋ณธ๊ฐ’ ํšจ๊ณผ
๋ชจ๋ธ --group-by model โœ… ๋ชจ๋ธ๋‹น ํ•œ ํ–‰ โ€” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์™€ ํ”„๋กœ๋ฐ”์ด๋” ๋ณ‘ํ•ฉ
ํด๋ผ์ด์–ธํŠธ + ๋ชจ๋ธ --group-by client,model ํด๋ผ์ด์–ธํŠธ-๋ชจ๋ธ ์Œ๋‹น ํ•œ ํ–‰
ํด๋ผ์ด์–ธํŠธ + ํ”„๋กœ๋ฐ”์ด๋” + ๋ชจ๋ธ --group-by client,provider,model ๊ฐ€์žฅ ์„ธ๋ถ„ํ™” โ€” ๋ณ‘ํ•ฉ ์—†์Œ

--group-by model (๊ฐ€์žฅ ํ†ตํ•ฉ)

ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๋ฐ”์ด๋” ๋ชจ๋ธ ๋น„์šฉ
OpenCode, Claude, Amp github-copilot, anthropic claude-opus-4-5 $2,424
OpenCode, Claude anthropic, github-copilot claude-sonnet-4-5 $1,332

--group-by client,model (CLI ๊ธฐ๋ณธ๊ฐ’)

ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๋ฐ”์ด๋” ๋ชจ๋ธ ๋น„์šฉ
OpenCode github-copilot, anthropic claude-opus-4-5 $1,368
Claude anthropic claude-opus-4-5 $970

--group-by client,provider,model (๊ฐ€์žฅ ์„ธ๋ถ„ํ™”)

ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๋ฐ”์ด๋” ๋ชจ๋ธ ๋น„์šฉ
OpenCode github-copilot claude-opus-4-5 $1,200
OpenCode anthropic claude-opus-4-5 $168
Claude anthropic claude-opus-4-5 $970

ํ”Œ๋žซํผ๋ณ„ ํ•„ํ„ฐ๋ง

# OpenCode ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --opencode

# Claude Code ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --claude

# Codex CLI ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --codex

# Gemini CLI ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --gemini

# Cursor IDE ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ (๋จผ์ € `tokscale cursor login` ํ•„์š”)
tokscale --cursor

# Kimi CLI ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --kimi

# Qwen CLI ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --qwen

# Amp ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --amp

# Droid ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --droid

# OpenClaw ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --openclaw

# Pi ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --pi

# Roo Code ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --roocode

# Kilo ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --kilocode

# Mux ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --mux

# Kilo CLI ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --kilo

# Crush ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --crush

# Synthetic (synthetic.new) ์‚ฌ์šฉ๋Ÿ‰๋งŒ ํ‘œ์‹œ
tokscale --synthetic

# ํ•„ํ„ฐ ์กฐํ•ฉ
tokscale --opencode --claude

๋‚ ์งœ ํ•„ํ„ฐ๋ง

๋‚ ์งœ ํ•„ํ„ฐ๋Š” ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋ช…๋ น์–ด์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (tokscale, tokscale models, tokscale monthly, tokscale graph):

# ๋น ๋ฅธ ๋‚ ์งœ ๋‹จ์ถ•ํ‚ค
tokscale --today              # ์˜ค๋Š˜๋งŒ
tokscale --week               # ์ตœ๊ทผ 7์ผ
tokscale --month              # ์ด๋ฒˆ ๋‹ฌ

# ์‚ฌ์šฉ์ž ์ •์˜ ๋‚ ์งœ ๋ฒ”์œ„ (ํฌํ•จ, ๋กœ์ปฌ ํƒ€์ž„์กด)
tokscale --since 2024-01-01 --until 2024-12-31

# ์—ฐ๋„๋ณ„ ํ•„ํ„ฐ
tokscale --year 2024

# ๋‹ค๋ฅธ ์˜ต์…˜๊ณผ ์กฐํ•ฉ
tokscale models --week --claude --json
tokscale monthly --month --benchmark

์ฐธ๊ณ : ๋‚ ์งœ ํ•„ํ„ฐ๋Š” ๋กœ์ปฌ ํƒ€์ž„์กด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. --since์™€ --until ๋ชจ๋‘ ํ•ด๋‹น ๋‚ ์งœ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ์กฐํšŒ

๋ชจ๋“  ๋ชจ๋ธ์˜ ์‹ค์‹œ๊ฐ„ ๊ฐ€๊ฒฉ์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค:

# ๋ชจ๋ธ ๊ฐ€๊ฒฉ ์กฐํšŒ
tokscale pricing "claude-3-5-sonnet-20241022"
tokscale pricing "gpt-4o"
tokscale pricing "grok-code"

# ํŠน์ • ํ”„๋กœ๋ฐ”์ด๋” ์†Œ์Šค ๊ฐ•์ œ ์ง€์ •
tokscale pricing "grok-code" --provider openrouter
tokscale pricing "claude-3-5-sonnet" --provider litellm

์กฐํšŒ ์ „๋žต:

๊ฐ€๊ฒฉ ์กฐํšŒ๋Š” ๋‹ค๋‹จ๊ณ„ ํ•ด์„ ์ „๋žต์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

  1. ์ •ํ™•ํ•œ ์ผ์น˜ - LiteLLM/OpenRouter ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ง์ ‘ ์กฐํšŒ
  2. ๋ณ„์นญ ํ•ด์„ - ์นœ์ˆ™ํ•œ ์ด๋ฆ„ ํ•ด์„ (์˜ˆ: big-pickle โ†’ glm-4.7)
  3. ํ‹ฐ์–ด ์ ‘๋ฏธ์‚ฌ ์ œ๊ฑฐ - ํ’ˆ์งˆ ํ‹ฐ์–ด ์ œ๊ฑฐ (gpt-5.2-xhigh โ†’ gpt-5.2)
  4. ๋ฒ„์ „ ์ •๊ทœํ™” - ๋ฒ„์ „ ํ˜•์‹ ์ฒ˜๋ฆฌ (claude-3-5-sonnet โ†” claude-3.5-sonnet)
  5. ํ”„๋กœ๋ฐ”์ด๋” ์ ‘๋‘์‚ฌ ๋งค์นญ - ์ผ๋ฐ˜ ์ ‘๋‘์‚ฌ ์‹œ๋„ (anthropic/, openai/ ๋“ฑ)
  6. Cursor ๋ชจ๋ธ ๊ฐ€๊ฒฉ - LiteLLM/OpenRouter์— ์•„์ง ์—†๋Š” ๋ชจ๋ธ์˜ ํ•˜๋“œ์ฝ”๋”ฉ ๊ฐ€๊ฒฉ (์˜ˆ: gpt-5.3-codex)
  7. ํผ์ง€ ๋งค์นญ - ๋ถ€๋ถ„ ๋ชจ๋ธ ์ด๋ฆ„์— ๋Œ€ํ•œ ๋‹จ์–ด ๊ฒฝ๊ณ„ ๋งค์นญ

ํ”„๋กœ๋ฐ”์ด๋” ์šฐ์„ ์ˆœ์œ„:

์—ฌ๋Ÿฌ ์ผ์น˜ ํ•ญ๋ชฉ์ด ์žˆ์„ ๋•Œ ์›๋ณธ ๋ชจ๋ธ ์ œ์ž‘์‚ฌ๊ฐ€ ๋ฆฌ์…€๋Ÿฌ๋ณด๋‹ค ์šฐ์„ ๋ฉ๋‹ˆ๋‹ค:

์šฐ์„  (์›๋ณธ) ํ›„์ˆœ์œ„ (๋ฆฌ์…€๋Ÿฌ)
xai/ (Grok) azure_ai/
anthropic/ (Claude) bedrock/
openai/ (GPT) vertex_ai/
google/ (Gemini) together_ai/
meta-llama/ fireworks_ai/

์˜ˆ์‹œ: grok-code๋Š” azure_ai/grok-code-fast-1 ($3.50/$17.50) ๋Œ€์‹  xai/grok-code-fast-1 ($0.20/$1.50)์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์…œ ํ”Œ๋žซํผ ๋ช…๋ น์–ด

# Tokscale ๋กœ๊ทธ์ธ (GitHub ์ธ์ฆ์„ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ € ์—ด๊ธฐ)
tokscale login

# ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž ํ™•์ธ
tokscale whoami

# ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ๋”๋ณด๋“œ์— ์ œ์ถœ
tokscale submit

# ํ•„ํ„ฐ์™€ ํ•จ๊ป˜ ์ œ์ถœ
tokscale submit --opencode --claude --since 2024-01-01

# ์ œ์ถœ๋  ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (๋“œ๋ผ์ด ๋Ÿฐ)
tokscale submit --dry-run

# ๋กœ๊ทธ์•„์›ƒ
tokscale logout

CLI Submit

Cursor IDE ๋ช…๋ น์–ด

Cursor IDE๋Š” ์„ธ์…˜ ํ† ํฐ์„ ํ†ตํ•œ ๋ณ„๋„์˜ ์ธ์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (์†Œ์…œ ํ”Œ๋žซํผ ๋กœ๊ทธ์ธ๊ณผ ๋‹ค๋ฆ„):

# Cursor ๋กœ๊ทธ์ธ (๋ธŒ๋ผ์šฐ์ €์—์„œ ์„ธ์…˜ ํ† ํฐ ํ•„์š”)
# --name์€ ์„ ํƒ์ด๋ฉฐ, ๋‚˜์ค‘์— ๊ณ„์ •์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ๋ฒจ์ž…๋‹ˆ๋‹ค
tokscale cursor login --name work

# Cursor ์ธ์ฆ ์ƒํƒœ ๋ฐ ์„ธ์…˜ ์œ ํšจ์„ฑ ํ™•์ธ
tokscale cursor status

# ์ €์žฅ๋œ Cursor ๊ณ„์ • ๋ชฉ๋ก
tokscale cursor accounts

# ํ™œ์„ฑ ๊ณ„์ • ์ „ํ™˜ (cursor-cache/usage.csv์— ๋™๊ธฐํ™”๋˜๋Š” ๊ณ„์ •)
tokscale cursor switch work

# ํŠน์ • ๊ณ„์ • ๋กœ๊ทธ์•„์›ƒ (๊ธฐ๋ก์€ ๋ณด๊ด€, ํ•ฉ์‚ฐ์—์„œ๋Š” ์ œ์™ธ)
tokscale cursor logout --name work

# ๋กœ๊ทธ์•„์›ƒ + ํ•ด๋‹น ๊ณ„์ • ์บ์‹œ ์‚ญ์ œ
tokscale cursor logout --name work --purge-cache

# ๋ชจ๋“  Cursor ๊ณ„์ • ๋กœ๊ทธ์•„์›ƒ (๊ธฐ๋ก์€ ๋ณด๊ด€, ํ•ฉ์‚ฐ์—์„œ๋Š” ์ œ์™ธ)
tokscale cursor logout --all

# ๋ชจ๋“  ๊ณ„์ • ๋กœ๊ทธ์•„์›ƒ + ์บ์‹œ ์‚ญ์ œ
tokscale cursor logout --all --purge-cache

์ž๊ฒฉ ์ฆ๋ช… ์ €์žฅ: Cursor ๊ณ„์ •๋“ค์€ ~/.config/tokscale/cursor-credentials.json์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋Š” ~/.config/tokscale/cursor-cache/์— ์บ์‹œ๋ฉ๋‹ˆ๋‹ค (ํ™œ์„ฑ ๊ณ„์ •์€ usage.csv, ์ถ”๊ฐ€ ๊ณ„์ •์€ usage.<account>.csv).

๊ธฐ๋ณธ์ ์œผ๋กœ tokscale์€ ์ €์žฅ๋œ ๋ชจ๋“  Cursor ๊ณ„์ •์˜ ์‚ฌ์šฉ๋Ÿ‰์„ ํ•ฉ์‚ฐํ•ฉ๋‹ˆ๋‹ค (cursor-cache/usage*.csv ์ „์ฒด). ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ํ™œ์„ฑ ๊ณ„์ •์€ cursor-cache/usage.csv์— ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ์•„์›ƒ ์‹œ์—๋Š” ์บ์‹œ๋œ ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ๋ก์„ cursor-cache/archive/๋กœ ์˜ฎ๊ฒจ ๋ณด๊ด€ํ•˜๋ฉฐ(๊ทธ๋ž˜์„œ ํ•ฉ์‚ฐ์—์„œ๋Š” ์ œ์™ธ๋จ), ์™„์ „ ์‚ญ์ œ๋ฅผ ์›ํ•˜๋ฉด --purge-cache๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

Cursor ์„ธ์…˜ ํ† ํฐ ์–ป๋Š” ๋ฐฉ๋ฒ•:

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ https://www.cursor.com/settings ์—ด๊ธฐ
  2. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์—ด๊ธฐ (F12)
  3. ์˜ต์…˜ A - Network ํƒญ: ํŽ˜์ด์ง€์—์„œ ์•„๋ฌด ๋™์ž‘์„ ํ•˜๊ณ , cursor.com/api/*์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์ฐพ์•„, Request Headers์—์„œ Cookie ํ—ค๋”๋ฅผ ํ™•์ธํ•˜๊ณ , WorkosCursorSessionToken= ๋’ค์˜ ๊ฐ’๋งŒ ๋ณต์‚ฌ
  4. ์˜ต์…˜ B - Application ํƒญ: Application โ†’ Cookies โ†’ https://www.cursor.com์œผ๋กœ ์ด๋™, WorkosCursorSessionToken ์ฟ ํ‚ค๋ฅผ ์ฐพ์•„ ๊ฐ’ ๋ณต์‚ฌ (์ฟ ํ‚ค ์ด๋ฆ„์ด ์•„๋‹Œ ๊ฐ’)

โš ๏ธ ๋ณด์•ˆ ๊ฒฝ๊ณ : ์„ธ์…˜ ํ† ํฐ์„ ๋น„๋ฐ€๋ฒˆํ˜ธ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜์„ธ์š”. ์ ˆ๋Œ€ ๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๋ฒ„์ „ ๊ด€๋ฆฌ์— ์ปค๋ฐ‹ํ•˜์ง€ ๋งˆ์„ธ์š”. ํ† ํฐ์€ Cursor ๊ณ„์ •์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ถœ๋ ฅ (--light ๋ฒ„์ „)

CLI Light

์„ค์ •

Tokscale์€ ์„ค์ •์„ ~/.config/tokscale/settings.json์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค:

{
  "colorPalette": "blue",
  "includeUnusedModels": false
}
์„ค์ • ํƒ€์ž… ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
colorPalette string "blue" TUI ์ƒ‰์ƒ ํ…Œ๋งˆ (green, halloween, teal, blue, pink, purple, orange, monochrome, ylgnbu)
includeUnusedModels boolean false ๋ฆฌํฌํŠธ์—์„œ ์ œ๋กœ ํ† ํฐ ๋ชจ๋ธ ํ‘œ์‹œ
autoRefreshEnabled boolean false TUI ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ ํ™œ์„ฑํ™”
autoRefreshMs number 60000 ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ ๊ฐ„๊ฒฉ (30000-3600000ms)
nativeTimeoutMs number 300000 ๋„ค์ดํ‹ฐ๋ธŒ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ ์ตœ๋Œ€ ์‹œ๊ฐ„ (5000-3600000ms)

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์„ค์ • ํŒŒ์ผ ๊ฐ’์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. CI/CD ๋˜๋Š” ์ผํšŒ์„ฑ ์‚ฌ์šฉ:

๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
TOKSCALE_NATIVE_TIMEOUT_MS 300000 (5๋ถ„) nativeTimeoutMs ์„ค์ • ์˜ค๋ฒ„๋ผ์ด๋“œ
# ์˜ˆ์‹œ: ๋งค์šฐ ํฐ ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•œ ํƒ€์ž„์•„์›ƒ ์ฆ๊ฐ€
TOKSCALE_NATIVE_TIMEOUT_MS=600000 tokscale graph --output data.json

์ฐธ๊ณ : ์˜๊ตฌ์ ์ธ ๋ณ€๊ฒฝ์€ ~/.config/tokscale/settings.json์—์„œ nativeTimeoutMs๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์ผํšŒ์„ฑ ์˜ค๋ฒ„๋ผ์ด๋“œ๋‚˜ CI/CD์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Headless ๋ชจ๋“œ

Tokscale์€ ์ž๋™ํ™”, CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Codex CLI headless ์ถœ๋ ฅ์˜ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์„ ์ง‘๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Headless ๋ชจ๋“œ๋ž€?

Codex CLI๋ฅผ JSON ์ถœ๋ ฅ ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•  ๋•Œ(์˜ˆ: `codex exec --json`), ์ผ๋ฐ˜ ์„ธ์…˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋Œ€์‹  ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ stdout์œผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. Headless ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ๋Ÿ‰์„ ์บก์ฒ˜ํ•˜๊ณ  ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ ์œ„์น˜: `~/.config/tokscale/headless/`

macOS์—์„œ๋Š” `TOKSCALE_HEADLESS_DIR`์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Tokscale์ด `~/Library/Application Support/tokscale/headless/`๋„ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.

Tokscale์€ ๋‹ค์Œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ž๋™์œผ๋กœ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค: ``` ~/.config/tokscale/headless/ โ””โ”€โ”€ codex/ # Codex CLI JSONL ์ถœ๋ ฅ ```

ํ™˜๊ฒฝ ๋ณ€์ˆ˜: `TOKSCALE_HEADLESS_DIR`์„ ์„ค์ •ํ•˜์—ฌ headless ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ```bash export TOKSCALE_HEADLESS_DIR="$HOME/my-custom-logs" ```

๊ถŒ์žฅ (์ž๋™ ์บก์ฒ˜):

๋„๊ตฌ ๋ช…๋ น์–ด ์˜ˆ์‹œ
Codex CLI `tokscale headless codex exec -m gpt-5 "implement feature"`

์ˆ˜๋™ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ (์„ ํƒ์‚ฌํ•ญ):

๋„๊ตฌ ๋ช…๋ น์–ด ์˜ˆ์‹œ
Codex CLI `codex exec --json "implement feature" > ~/.config/tokscale/headless/codex/ci-run.jsonl`

์ง„๋‹จ:

```bash

์Šค์บ” ์œ„์น˜ ๋ฐ headless ์นด์šดํŠธ ํ‘œ์‹œ

tokscale sources tokscale sources --json ```

CI/CD ํ†ตํ•ฉ ์˜ˆ์‹œ:

```bash

GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ

  • name: Run AI automation run: | mkdir -p ~/.config/tokscale/headless/codex codex exec --json "review code changes" \ > ~/.config/tokscale/headless/codex/pr-${{ github.event.pull_request.number }}.jsonl

๋‚˜์ค‘์— ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์ 

  • name: Report token usage run: tokscale --json ```

์ฐธ๊ณ : Headless ์บก์ฒ˜๋Š” Codex CLI๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. Codex๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด stdout์„ headless ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ ์‹œ๊ฐํ™”

ํ”„๋ก ํŠธ์—”๋“œ๋Š” GitHub ์Šคํƒ€์ผ์˜ ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

๊ธฐ๋Šฅ

  • 2D ๋ทฐ: ํด๋ž˜์‹ GitHub ๊ธฐ์—ฌ ์บ˜๋ฆฐ๋”
  • 3D ๋ทฐ: ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ฅธ ๋†’์ด์˜ ์•„์ด์†Œ๋ฉ”ํŠธ๋ฆญ 3D ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„
  • ๋‹ค์–‘ํ•œ ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ: GitHub, GitLab, Halloween, Winter ๋“ฑ
  • 3๊ฐ€์ง€ ํ…Œ๋งˆ ํ† ๊ธ€: Light / Dark / System (OS ์„ค์ • ๋”ฐ๋ฆ„)
  • GitHub Primer ๋””์ž์ธ: GitHub์˜ ๊ณต์‹ ์ƒ‰์ƒ ์‹œ์Šคํ…œ ์‚ฌ์šฉ
  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํˆดํŒ: ํ˜ธ๋ฒ„ ์‹œ ์ƒ์„ธ ์ผ๋ณ„ ๋ถ„์„ ํ‘œ์‹œ
  • ์ผ๋ณ„ ๋ถ„์„ ํŒจ๋„: ํด๋ฆญํ•˜์—ฌ ์†Œ์Šค๋ณ„, ๋ชจ๋ธ๋ณ„ ์„ธ๋ถ€์‚ฌํ•ญ ํ™•์ธ
  • ์—ฐ๋„ ํ•„ํ„ฐ๋ง: ์—ฐ๋„ ๊ฐ„ ํƒ์ƒ‰
  • ์†Œ์Šค ํ•„ํ„ฐ๋ง: ํ”Œ๋žซํผ๋ณ„ ํ•„ํ„ฐ (OpenCode, Claude, Codex, Cursor, Gemini, Amp, Droid, OpenClaw, Pi, Kimi, Qwen, Roo Code, Kilo, Mux, Kilo CLI, Crush, Synthetic)
  • ํ†ต๊ณ„ ํŒจ๋„: ์ด ๋น„์šฉ, ํ† ํฐ, ํ™œ๋™ ์ผ์ˆ˜, ์—ฐ์† ๊ธฐ๋ก
  • FOUC ๋ฐฉ์ง€: React ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์ „ ํ…Œ๋งˆ ์ ์šฉ (๊นœ๋นก์ž„ ์—†์Œ)

ํ”„๋ก ํŠธ์—”๋“œ ์‹คํ–‰

cd packages/frontend
bun install
bun run dev

http://localhost:3000์„ ์—ด์–ด ์†Œ์…œ ํ”Œ๋žซํผ์— ์ ‘๊ทผํ•˜์„ธ์š”.

์†Œ์…œ ํ”Œ๋žซํผ

Tokscale์€ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ๊ฒฝ์Ÿํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์…œ ํ”Œ๋žซํผ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ

  • ๋ฆฌ๋”๋ณด๋“œ - ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ ํ™•์ธ
  • ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ - ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„์™€ ํ†ต๊ณ„๊ฐ€ ์žˆ๋Š” ๊ณต๊ฐœ ํ”„๋กœํ•„
  • ๊ธฐ๊ฐ„ ํ•„ํ„ฐ๋ง - ์ „์ฒด ๊ธฐ๊ฐ„, ์ด๋ฒˆ ๋‹ฌ, ์ด๋ฒˆ ์ฃผ ํ†ต๊ณ„ ์กฐํšŒ
  • GitHub ํ†ตํ•ฉ - GitHub ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ
  • ๋กœ์ปฌ ๋ทฐ์–ด - ์ œ์ถœํ•˜์ง€ ์•Š๊ณ  ๋น„๊ณต๊ฐœ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ

GitHub ํ”„๋กœํ•„ ์ž„๋ฒ ๋“œ ์œ„์ ฏ

GitHub ํ”„๋กœํ•„ README์— Tokscale ๊ณต๊ฐœ ํ†ต๊ณ„๋ฅผ ์ง์ ‘ ์ž„๋ฒ ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

[![Tokscale Stats](https://tokscale.ai/api/embed/<username>/svg)](https://tokscale.ai/u/<username>)
  • <username>์„ GitHub ์‚ฌ์šฉ์ž๋ช…์œผ๋กœ ๊ต์ฒดํ•˜์„ธ์š”
  • ์„ ํƒ์  ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ:
    • theme=light ๋ผ์ดํŠธ ํ…Œ๋งˆ ์‚ฌ์šฉ
    • sort=tokens (๊ธฐ๋ณธ๊ฐ’) ๋˜๋Š” sort=cost ๋žญํ‚น ๊ธฐ์ค€ ์ œ์–ด
    • compact=1 ์ปดํŒฉํŠธ ๋ ˆ์ด์•„์›ƒ + ์ถ•์•ฝ ์ˆซ์ž ํ‘œ๊ธฐ๋ฒ• ์‚ฌ์šฉ (์˜ˆ: 1.2M, $3.4K)
  • ์˜ˆ์‹œ:
    • https://tokscale.ai/api/embed/<username>/svg?theme=light&sort=cost&compact=1

GitHub ํ”„๋กœํ•„ ๋ฑƒ์ง€

shields.io ์Šคํƒ€์ผ์˜ ๋” ๊ฐ„๊ฒฐํ•œ ๋ฑƒ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

![Tokscale Tokens](https://tokscale.ai/api/badge/<username>/svg)
  • <username>์„ GitHub ์‚ฌ์šฉ์ž๋ช…์œผ๋กœ ๊ต์ฒดํ•˜์„ธ์š”
  • ์„ ํƒ์  ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ:
    • metric=tokens (๊ธฐ๋ณธ๊ฐ’), metric=cost, ๋˜๋Š” metric=rank
    • style=flat (๊ธฐ๋ณธ๊ฐ’) ๋˜๋Š” style=flat-square
    • sort=tokens (๊ธฐ๋ณธ๊ฐ’) ๋˜๋Š” sort=cost ๋žญํ‚น ๊ธฐ์ค€ ์ œ์–ด
    • compact=1 ๊ฐ„๊ฒฐํ•œ ์ˆซ์ž ํ‘œ๊ธฐ ์‚ฌ์šฉ (์˜ˆ: 1.2M, $3.4K)
    • label=<ํ…์ŠคํŠธ> ์™ผ์ชฝ ๋ผ๋ฒจ ์ปค์Šคํ…€
    • color=<hex> ์˜ค๋ฅธ์ชฝ ๋ฐฐ๊ฒฝ์ƒ‰ ์ปค์Šคํ…€ (์˜ˆ: color=ff5733)
  • ์˜ˆ์‹œ:
    • https://tokscale.ai/api/badge/<username>/svg?metric=cost&compact=1
    • https://tokscale.ai/api/badge/<username>/svg?metric=rank&sort=cost&style=flat-square

์‹œ์ž‘ํ•˜๊ธฐ

  1. ๋กœ๊ทธ์ธ - tokscale login์„ ์‹คํ–‰ํ•˜์—ฌ GitHub๋กœ ์ธ์ฆ
  2. ์ œ์ถœ - tokscale submit์„ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ
  3. ์กฐํšŒ - ์›น ํ”Œ๋žซํผ์„ ๋ฐฉ๋ฌธํ•˜์—ฌ ํ”„๋กœํ•„๊ณผ ๋ฆฌ๋”๋ณด๋“œ ํ™•์ธ

๋ฐ์ดํ„ฐ ๊ฒ€์ฆ

์ œ์ถœ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ ˆ๋ฒจ 1 ๊ฒ€์ฆ์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค:

  • ์ˆ˜ํ•™์  ์ผ๊ด€์„ฑ (ํ•ฉ๊ณ„ ์ผ์น˜, ์Œ์ˆ˜ ์—†์Œ)
  • ๋ฏธ๋ž˜ ๋‚ ์งœ ์—†์Œ
  • ํ•„์ˆ˜ ํ•„๋“œ ์กด์žฌ
  • ์ค‘๋ณต ๊ฐ์ง€

Wrapped 2025

Wrapped 2025

Spotify Wrapped์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„, AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ ์‚ฌ์šฉ๋Ÿ‰์„ ์š”์•ฝํ•œ ์•„๋ฆ„๋‹ค์šด ์—ฐ๊ฐ„ ๋ฆฌ๋ทฐ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

bunx tokscale@latest wrapped bunx tokscale@latest wrapped --clients bunx tokscale@latest wrapped --agents --disable-pinned
Wrapped 2025 (Agents + Pin Sisyphus) Wrapped 2025 (Clients) Wrapped 2025 (Agents + Disable Pinned)

๋ช…๋ น์–ด

# ํ˜„์žฌ ์—ฐ๋„์˜ Wrapped ์ด๋ฏธ์ง€ ์ƒ์„ฑ
tokscale wrapped

# ํŠน์ • ์—ฐ๋„์˜ Wrapped ์ด๋ฏธ์ง€ ์ƒ์„ฑ
tokscale wrapped --year 2025

ํฌํ•จ ๋‚ด์šฉ

์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค:

  • ์ด ํ† ํฐ - ํ•ด๋‹น ์—ฐ๋„์˜ ์ด ํ† ํฐ ์†Œ๋น„๋Ÿ‰
  • ์ƒ์œ„ ๋ชจ๋ธ - ๋น„์šฉ ๊ธฐ์ค€ ์ƒ์œ„ 3๊ฐœ AI ๋ชจ๋ธ
  • ์ƒ์œ„ ํด๋ผ์ด์–ธํŠธ - ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ 3๊ฐœ ํ”Œ๋žซํผ (OpenCode, Claude Code, Cursor ๋“ฑ)
  • ๋ฉ”์‹œ์ง€ - ์ด AI ์ธํ„ฐ๋ž™์…˜ ์ˆ˜
  • ํ™œ๋™ ์ผ์ˆ˜ - ์ตœ์†Œ 1ํšŒ ์ด์ƒ AI ์ธํ„ฐ๋ž™์…˜์ด ์žˆ์—ˆ๋˜ ์ผ์ˆ˜
  • ๋น„์šฉ - LiteLLM ๊ฐ€๊ฒฉ ๊ธฐ์ค€ ์ถ”์ • ์ด๋น„์šฉ
  • ์—ฐ์† ๊ธฐ๋ก - ๊ฐ€์žฅ ๊ธด ์—ฐ์† ํ™œ๋™ ์ผ์ˆ˜
  • ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„ - ์—ฐ๊ฐ„ ํ™œ๋™์„ ๋ณด์—ฌ์ฃผ๋Š” ํžˆํŠธ๋งต

์ƒ์„ฑ๋œ PNG๋Š” ์†Œ์…œ ๋ฏธ๋””์–ด ๊ณต์œ ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ•จ๊ป˜ ์ฝ”๋”ฉ ์—ฌ์ •์„ ๊ณต์œ ํ•˜์„ธ์š”!

๊ฐœ๋ฐœ

๋น ๋ฅธ ์„ค์ •: ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์œ„ ์„ค์น˜ ์„น์…˜์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

# Bun (ํ•„์ˆ˜)
bun --version

# Rust (๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์šฉ)
rustc --version
cargo --version

์‹คํ–‰ ๋ฐฉ๋ฒ•

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์„ ๋”ฐ๋ฅธ ํ›„:

# ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ ๋นŒ๋“œ (์„ ํƒ์‚ฌํ•ญ์ด์ง€๋งŒ ๊ถŒ์žฅ)
bun run build:core

# ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ์‹คํ–‰ (TUI ์‹คํ–‰)
cd packages/cli && bun src/cli.ts

# ๋˜๋Š” ๋ ˆ๊ฑฐ์‹œ CLI ๋ชจ๋“œ ์‚ฌ์šฉ
cd packages/cli && bun src/cli.ts --light
๊ณ ๊ธ‰ ๊ฐœ๋ฐœ

ํ”„๋กœ์ ํŠธ ์Šคํฌ๋ฆฝํŠธ

์Šคํฌ๋ฆฝํŠธ ์„ค๋ช…
bun run cli ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ CLI ์‹คํ–‰ (Bun์œผ๋กœ TUI)
bun run build:core ๋„ค์ดํ‹ฐ๋ธŒ Rust ๋ชจ๋“ˆ ๋นŒ๋“œ (๋ฆด๋ฆฌ์Šค)
bun run build:cli CLI TypeScript๋ฅผ dist/๋กœ ๋นŒ๋“œ
bun run build core์™€ CLI ๋ชจ๋‘ ๋นŒ๋“œ
bun run dev:frontend ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

ํŒจํ‚ค์ง€๋ณ„ ์Šคํฌ๋ฆฝํŠธ (ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ):

  • packages/cli: bun run dev, bun run tui
  • packages/core: bun run build:debug, bun run test, bun run bench

์ฐธ๊ณ : ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ฐœ๋ฐœ ์‹œ Bun์„ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ

# ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ ํ…Œ์ŠคํŠธ (Rust)
cd packages/core
bun run test:rust      # Cargo ํ…Œ์ŠคํŠธ
bun run test           # Node.js ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
bun run test:all       # ๋‘˜ ๋‹ค

๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ ๊ฐœ๋ฐœ

cd packages/core

# ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ๋นŒ๋“œ (๋น ๋ฅธ ์ปดํŒŒ์ผ)
bun run build:debug

# ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ๋กœ ๋นŒ๋“œ (์ตœ์ ํ™”๋จ)
bun run build

# Rust ๋ฒค์น˜๋งˆํฌ ์‹คํ–‰
bun run bench

๊ทธ๋ž˜ํ”„ ๋ช…๋ น์–ด ์˜ต์…˜

# ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
tokscale graph --output usage-data.json

# ๋‚ ์งœ ํ•„ํ„ฐ๋ง (๋ชจ๋“  ๋‹จ์ถ•ํ‚ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
tokscale graph --today
tokscale graph --week
tokscale graph --since 2024-01-01 --until 2024-12-31
tokscale graph --year 2024

# ํ”Œ๋žซํผ๋ณ„ ํ•„ํ„ฐ
tokscale graph --opencode --claude

# ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋ฒค์น˜๋งˆํฌ ํ‘œ์‹œ
tokscale graph --output data.json --benchmark

๋ฒค์น˜๋งˆํฌ ํ”Œ๋ž˜๊ทธ

์„ฑ๋Šฅ ๋ถ„์„์„ ์œ„ํ•œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ํ‘œ์‹œ:

tokscale --benchmark           # ๊ธฐ๋ณธ ๋ทฐ์™€ ํ•จ๊ป˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ํ‘œ์‹œ
tokscale models --benchmark    # ๋ชจ๋ธ ๋ฆฌํฌํŠธ ๋ฒค์น˜๋งˆํฌ
tokscale monthly --benchmark   # ์›”๋ณ„ ๋ฆฌํฌํŠธ ๋ฒค์น˜๋งˆํฌ
tokscale graph --benchmark     # ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ ๋ฒค์น˜๋งˆํฌ

ํ”„๋ก ํŠธ์—”๋“œ์šฉ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ

# ์‹œ๊ฐํ™”์šฉ ๋ฐ์ดํ„ฐ ๋‚ด๋ณด๋‚ด๊ธฐ
tokscale graph --output packages/frontend/public/my-data.json

์„ฑ๋Šฅ

๋„ค์ดํ‹ฐ๋ธŒ Rust ๋ชจ๋“ˆ์€ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

์ž‘์—… TypeScript Rust ๋„ค์ดํ‹ฐ๋ธŒ ์†๋„ ํ–ฅ์ƒ
ํŒŒ์ผ ํƒ์ƒ‰ ~500ms ~50ms 10๋ฐฐ
JSON ํŒŒ์‹ฑ ~800ms ~100ms 8๋ฐฐ
์ง‘๊ณ„ ~200ms ~25ms 8๋ฐฐ
์ดํ•ฉ ~1.5์ดˆ ~175ms ~8.5๋ฐฐ

์•ฝ 1000๊ฐœ์˜ ์„ธ์…˜ ํŒŒ์ผ, 100k ๋ฉ”์‹œ์ง€ ๊ธฐ์ค€ ๋ฒค์น˜๋งˆํฌ

๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”

๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์€ ๋‹ค์Œ์„ ํ†ตํ•ด ์•ฝ 45% ๋ฉ”๋ชจ๋ฆฌ ์ ˆ๊ฐ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์ŠคํŠธ๋ฆฌ๋ฐ JSON ํŒŒ์‹ฑ (์ „์ฒด ํŒŒ์ผ ๋ฒ„ํผ๋ง ์—†์Œ)
  • ์ œ๋กœ ์นดํ”ผ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
  • ๋งต-๋ฆฌ๋“€์Šค๋ฅผ ํ†ตํ•œ ํšจ์œจ์ ์ธ ๋ณ‘๋ ฌ ์ง‘๊ณ„

๋ฒค์น˜๋งˆํฌ ์‹คํ–‰

# ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
cd packages/benchmarks && bun run generate

# Rust ๋ฒค์น˜๋งˆํฌ ์‹คํ–‰
cd packages/core && bun run bench

์ง€์› ํ”Œ๋žซํผ

๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ ๋Œ€์ƒ

ํ”Œ๋žซํผ ์•„ํ‚คํ…์ฒ˜ ์ƒํƒœ
macOS x86_64 โœ… ์ง€์›
macOS aarch64 (Apple Silicon) โœ… ์ง€์›
Linux x86_64 (glibc) โœ… ์ง€์›
Linux aarch64 (glibc) โœ… ์ง€์›
Linux x86_64 (musl) โœ… ์ง€์›
Linux aarch64 (musl) โœ… ์ง€์›
Windows x86_64 โœ… ์ง€์›
Windows aarch64 โœ… ์ง€์›

Windows ์ง€์›

Tokscale์€ Windows๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. TUI์™€ CLI๋Š” macOS/Linux์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Windows ์„ค์น˜:

# Bun ์„ค์น˜ (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"

# tokscale ์‹คํ–‰
bunx tokscale@latest

Windows์—์„œ์˜ ๋ฐ์ดํ„ฐ ์œ„์น˜

AI ์ฝ”๋”ฉ ๋„๊ตฌ๋“ค์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์œ„์น˜์— ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋„๊ตฌ๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

๋„๊ตฌ Unix ๊ฒฝ๋กœ Windows ๊ฒฝ๋กœ ์ถœ์ฒ˜
OpenCode ~/.local/share/opencode/ %USERPROFILE%\.local\share\opencode\ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด xdg-basedir ์‚ฌ์šฉ (์†Œ์Šค)
Claude Code ~/.claude/ %USERPROFILE%\.claude\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
OpenClaw ~/.openclaw/ (+ ๋ ˆ๊ฑฐ์‹œ: .clawdbot, .moltbot, .moldbot) %USERPROFILE%\.openclaw\ (+ ๋ ˆ๊ฑฐ์‹œ ๊ฒฝ๋กœ) ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
Codex CLI ~/.codex/ %USERPROFILE%\.codex\ CODEX_HOME ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ • ๊ฐ€๋Šฅ (์†Œ์Šค)
Gemini CLI ~/.gemini/ %USERPROFILE%\.gemini\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
Amp ~/.local/share/amp/ %USERPROFILE%\.local\share\amp\ OpenCode์™€ ๋™์ผํ•˜๊ฒŒ xdg-basedir ์‚ฌ์šฉ
Cursor API ๋™๊ธฐํ™” API ๋™๊ธฐํ™” API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ, %USERPROFILE%\.config\tokscale\cursor-cache\์— ์บ์‹œ
Droid ~/.factory/ %USERPROFILE%\.factory\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
Pi ~/.pi/ %USERPROFILE%\.pi\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
Kimi CLI ~/.kimi/ %USERPROFILE%\.kimi\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
Qwen CLI ~/.qwen/ %USERPROFILE%\.qwen\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
Roo Code ~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/tasks/ %USERPROFILE%\.config\Code\User\globalStorage\rooveterinaryinc.roo-cline\tasks\ VS Code globalStorage ์ž‘์—… ๋กœ๊ทธ
Kilo ~/.config/Code/User/globalStorage/kilocode.kilo-code/tasks/ %USERPROFILE%\.config\Code\User\globalStorage\kilocode.kilo-code\tasks\ VS Code globalStorage ์ž‘์—… ๋กœ๊ทธ
Mux ~/.mux/sessions/ %USERPROFILE%\.mux\sessions\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
Kilo CLI ~/.local/share/kilo/ %USERPROFILE%\.local\share\kilo\ OpenCode์™€ ๊ฐ™์ด xdg-basedir ์‚ฌ์šฉ
Crush $XDG_DATA_HOME/crush/ (๊ธฐ๋ณธ๊ฐ’: ~/.local/share/crush/) %USERPROFILE%\.local\share\crush\ (์„ค์ •๋œ ๊ฒฝ์šฐ %XDG_DATA_HOME%\crush\) ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ XDG ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์‚ฌ์šฉ
Synthetic ๋‹ค๋ฅธ ์†Œ์Šค์—์„œ ์žฌ๊ท€์† ๋‹ค๋ฅธ ์†Œ์Šค์—์„œ ์žฌ๊ท€์† hf: ๋ชจ๋ธ ์ ‘๋‘์‚ฌ + synthetic provider ๊ฐ์ง€

์ฐธ๊ณ : Windows์—์„œ ~๋Š” %USERPROFILE%๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค (์˜ˆ: C:\Users\์‚ฌ์šฉ์ž์ด๋ฆ„). ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ %APPDATA%์™€ ๊ฐ™์€ Windows ๊ธฐ๋ณธ ๊ฒฝ๋กœ ๋Œ€์‹  ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ Unix ์Šคํƒ€์ผ ๊ฒฝ๋กœ(.local/share ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Windows ์ „์šฉ ์„ค์ •

Tokscale์€ ๋‹ค์Œ ์œ„์น˜์— ์„ค์ •์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค:

  • ์„ค์ •: %USERPROFILE%\.config\tokscale\settings.json
  • ์บ์‹œ: %USERPROFILE%\.cache\tokscale\
  • Cursor ์ž๊ฒฉ ์ฆ๋ช…: %USERPROFILE%\.config\tokscale\cursor-credentials.json

์„ธ์…˜ ๋ฐ์ดํ„ฐ ๋ณด์กด

๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ๋ถ€ AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ๋Š” ์˜ค๋ž˜๋œ ์„ธ์…˜ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์ถ”์ ์„ ์œ„ํ•ด ์‚ฌ์šฉ ๊ธฐ๋ก์„ ๋ณด์กดํ•˜๋ ค๋ฉด ์ •๋ฆฌ ๊ธฐ๊ฐ„์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ์—ฐ์žฅํ•˜์„ธ์š”.

ํ”Œ๋žซํผ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ํŒŒ์ผ ๋น„ํ™œ์„ฑํ™” ์„ค์ • ์ถœ์ฒ˜
Claude Code โš ๏ธ 30์ผ ~/.claude/settings.json "cleanupPeriodDays": 9999999999 ๋ฌธ์„œ
Gemini CLI ๋น„ํ™œ์„ฑํ™”๋จ ~/.gemini/settings.json "general.sessionRetention.enabled": false ๋ฌธ์„œ
Codex CLI ๋น„ํ™œ์„ฑํ™”๋จ N/A ์ •๋ฆฌ ๊ธฐ๋Šฅ ์—†์Œ #6015
OpenCode ๋น„ํ™œ์„ฑํ™”๋จ N/A ์ •๋ฆฌ ๊ธฐ๋Šฅ ์—†์Œ #4980

Claude Code

๊ธฐ๋ณธ๊ฐ’: 30์ผ ์ •๋ฆฌ ๊ธฐ๊ฐ„

~/.claude/settings.json์— ์ถ”๊ฐ€:

{
  "cleanupPeriodDays": 9999999999
}

๋งค์šฐ ํฐ ๊ฐ’ (์˜ˆ: 9999999999์ผ โ‰ˆ 2700๋งŒ ๋…„)์„ ์„ค์ •ํ•˜๋ฉด ์‚ฌ์‹ค์ƒ ์ •๋ฆฌ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

Gemini CLI

๊ธฐ๋ณธ๊ฐ’: ์ •๋ฆฌ ๋น„ํ™œ์„ฑํ™”๋จ (์„ธ์…˜์ด ์˜๊ตฌ ๋ณด์กด)

์ •๋ฆฌ๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ๋‹ค๊ฐ€ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ~/.gemini/settings.json์—์„œ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ enabled: false๋กœ ์„ค์ •:

{
  "general": {
    "sessionRetention": {
      "enabled": false
    }
  }
}

๋˜๋Š” ๋งค์šฐ ๊ธด ๋ณด์กด ๊ธฐ๊ฐ„ ์„ค์ •:

{
  "general": {
    "sessionRetention": {
      "enabled": true,
      "maxAge": "9999999d"
    }
  }
}

Codex CLI

๊ธฐ๋ณธ๊ฐ’: ์ž๋™ ์ •๋ฆฌ ์—†์Œ (์„ธ์…˜์ด ์˜๊ตฌ ๋ณด์กด)

Codex CLI๋Š” ๋‚ด์žฅ ์„ธ์…˜ ์ •๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ~/.codex/sessions/์˜ ์„ธ์…˜์€ ๋ฌด๊ธฐํ•œ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค: #6015

OpenCode

๊ธฐ๋ณธ๊ฐ’: ์ž๋™ ์ •๋ฆฌ ์—†์Œ (์„ธ์…˜์ด ์˜๊ตฌ ๋ณด์กด)

OpenCode๋Š” ๋‚ด์žฅ ์„ธ์…˜ ์ •๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ~/.local/share/opencode/storage/์˜ ์„ธ์…˜์€ ๋ฌด๊ธฐํ•œ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : #4980 ์ฐธ์กฐ


๋ฐ์ดํ„ฐ ์†Œ์Šค

OpenCode

์œ„์น˜: ~/.local/share/opencode/opencode.db (v1.2+) ๋˜๋Š” storage/message/{sessionId}/*.json (๋ ˆ๊ฑฐ์‹œ)

OpenCode 1.2+๋Š” ์„ธ์…˜์„ SQLite์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Tokscale์€ SQLite๋ฅผ ๋จผ์ € ์ฝ๊ณ , ์ด์ „ ๋ฒ„์ „์˜ ๊ฒฝ์šฐ ๋ ˆ๊ฑฐ์‹œ JSON ํŒŒ์ผ๋กœ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ฉ”์‹œ์ง€ ํฌํ•จ ๋‚ด์šฉ:

{
  "id": "msg_xxx",
  "role": "assistant",
  "modelID": "claude-sonnet-4-20250514",
  "providerID": "anthropic",
  "tokens": {
    "input": 1234,
    "output": 567,
    "reasoning": 0,
    "cache": { "read": 890, "write": 123 }
  },
  "time": { "created": 1699999999999 }
}

Claude Code

์œ„์น˜: ~/.claude/projects/{projectPath}/*.jsonl

์–ด์‹œ์Šคํ„ดํŠธ ๋ฉ”์‹œ์ง€์˜ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” JSONL ํ˜•์‹:

{"type": "assistant", "message": {"model": "claude-sonnet-4-20250514", "usage": {"input_tokens": 1234, "output_tokens": 567, "cache_read_input_tokens": 890}}, "timestamp": "2024-01-01T00:00:00Z"}

Codex CLI

์œ„์น˜: ~/.codex/sessions/*.jsonl

token_count ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ˜•์‹:

{"type": "event_msg", "payload": {"type": "token_count", "info": {"last_token_usage": {"input_tokens": 1234, "output_tokens": 567}}}}

Gemini CLI

์œ„์น˜: ~/.gemini/tmp/{projectHash}/chats/*.json

๋ฉ”์‹œ์ง€ ๋ฐฐ์—ด์„ ํฌํ•จํ•œ ์„ธ์…˜ ํŒŒ์ผ:

{
  "sessionId": "xxx",
  "messages": [
    {"type": "gemini", "model": "gemini-2.5-pro", "tokens": {"input": 1234, "output": 567, "cached": 890, "thoughts": 123}}
  ]
}

Cursor IDE

์œ„์น˜: ~/.config/tokscale/cursor-cache/ (Cursor API๋ฅผ ํ†ตํ•ด ๋™๊ธฐํ™”)

Cursor ๋ฐ์ดํ„ฐ๋Š” ์„ธ์…˜ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ Cursor API์—์„œ ๊ฐ€์ ธ์™€ ๋กœ์ปฌ์— ์บ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ธ์ฆํ•˜๋ ค๋ฉด tokscale cursor login์„ ์‹คํ–‰ํ•˜์„ธ์š”. ์„ค์ • ์•ˆ๋‚ด๋Š” Cursor IDE ๋ช…๋ น์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

OpenClaw

์œ„์น˜: ~/.openclaw/agents/*/sessions/sessions.json (๋ ˆ๊ฑฐ์‹œ ๊ฒฝ๋กœ๋„ ์Šค์บ”: ~/.clawdbot/, ~/.moltbot/, ~/.moldbot/)

JSONL ์„ธ์…˜ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ธ๋ฑ์Šค ํŒŒ์ผ:

{
  "agent:main:main": {
    "sessionId": "uuid",
    "sessionFile": "/path/to/session.jsonl"
  }
}

model_change ์ด๋ฒคํŠธ์™€ ์–ด์‹œ์Šคํ„ดํŠธ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋œ ์„ธ์…˜ JSONL ํ˜•์‹:

{"type":"model_change","provider":"openai-codex","modelId":"gpt-5.2"}
{"type":"message","message":{"role":"assistant","usage":{"input":1660,"output":55,"cacheRead":108928,"cost":{"total":0.02}},"timestamp":1769753935279}}

Pi

์œ„์น˜: ~/.pi/agent/sessions/<encoded-cwd>/*.jsonl

์„ธ์…˜ ํ—ค๋”์™€ ๋ฉ”์‹œ์ง€ ํ•ญ๋ชฉ์„ ํฌํ•จํ•˜๋Š” JSONL ํ˜•์‹:

{"type":"session","id":"pi_ses_001","timestamp":"2026-01-01T00:00:00.000Z","cwd":"/tmp"}
{"type":"message","id":"msg_001","timestamp":"2026-01-01T00:00:01.000Z","message":{"role":"assistant","model":"claude-3-5-sonnet","provider":"anthropic","usage":{"input":100,"output":50,"cacheRead":10,"cacheWrite":5,"totalTokens":165}}}

Kimi CLI

์œ„์น˜: ~/.kimi/sessions/{GROUP_ID}/{SESSION_UUID}/wire.jsonl

StatusUpdate ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜๋Š” wire.jsonl ํ˜•์‹:

{"type": "metadata", "protocol_version": "1.3"}
{"timestamp": 1770983426.420942, "message": {"type": "StatusUpdate", "payload": {"token_usage": {"input_other": 1562, "output": 2463, "input_cache_read": 0, "input_cache_creation": 0}, "message_id": "chatcmpl-xxx"}}}

Qwen CLI

์œ„์น˜: ~/.qwen/projects/{PROJECT_PATH}/chats/{CHAT_ID}.jsonl

ํ˜•์‹: JSONL โ€” ์ค„๋‹น ํ•˜๋‚˜์˜ JSON ๊ฐ์ฒด, ๊ฐ๊ฐ type, model, timestamp, sessionId, usageMetadata ํ•„๋“œ ํฌํ•จ.

ํ† ํฐ ํ•„๋“œ (usageMetadata์—์„œ):

  • promptTokenCount โ†’ ์ž…๋ ฅ ํ† ํฐ
  • candidatesTokenCount โ†’ ์ถœ๋ ฅ ํ† ํฐ
  • thoughtsTokenCount โ†’ ์ถ”๋ก /์‚ฌ๊ณ  ํ† ํฐ
  • cachedContentTokenCount โ†’ ์บ์‹œ๋œ ์ž…๋ ฅ ํ† ํฐ

Roo Code

์œ„์น˜:

  • ๋กœ์ปฌ: ~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/tasks/{TASK_ID}/ui_messages.json
  • ์„œ๋ฒ„ (์ตœ์„  ๋…ธ๋ ฅ): ~/.vscode-server/data/User/globalStorage/rooveterinaryinc.roo-cline/tasks/{TASK_ID}/ui_messages.json

๊ฐ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” ๋ชจ๋ธ/์—์ด์ „ํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ๋˜๋Š” <environment_details> ๋ธ”๋ก์ด ํฌํ•จ๋œ api_conversation_history.json์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ui_messages.json์€ UI ์ด๋ฒคํŠธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. Tokscale์€ ๋‹ค์Œ๋งŒ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค:

  • type == "say"
  • say == "api_req_started"

text ํ•„๋“œ๋Š” ํ† ํฐ/๋น„์šฉ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” JSON์ž…๋‹ˆ๋‹ค:

{
  "type": "say",
  "say": "api_req_started",
  "ts": "2026-02-18T12:00:00Z",
  "text": "{\"cost\":0.12,\"tokensIn\":100,\"tokensOut\":50,\"cacheReads\":20,\"cacheWrites\":5,\"apiProtocol\":\"anthropic\"}"
}

Kilo

์œ„์น˜:

  • ๋กœ์ปฌ: ~/.config/Code/User/globalStorage/kilocode.kilo-code/tasks/{TASK_ID}/ui_messages.json
  • ์„œ๋ฒ„ (์ตœ์„  ๋…ธ๋ ฅ): ~/.vscode-server/data/User/globalStorage/kilocode.kilo-code/tasks/{TASK_ID}/ui_messages.json

Kilo๋Š” Roo Code์™€ ๋™์ผํ•œ ์ž‘์—… ๋กœ๊ทธ ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Tokscale์€ ๋™์ผํ•œ ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • ui_messages.json์—์„œ say/api_req_started ์ด๋ฒคํŠธ๋งŒ ๊ณ„์‚ฐ
  • text JSON์—์„œ tokensIn, tokensOut, cacheReads, cacheWrites, cost, apiProtocol ํŒŒ์‹ฑ
  • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ธ์ ‘ํ•œ api_conversation_history.json์—์„œ ๋ชจ๋ธ/์—์ด์ „ํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด๊ฐ•

Mux

์œ„์น˜: ~/.mux/sessions/{WORKSPACE_ID}/session-usage.json

Mux๋Š” ์„ธ์…˜๋ณ„ ๋ˆ„์  ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์„ session-usage.json ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํŒŒ์ผ์—๋Š” ๋ชจ๋ธ๋ณ„ ํ† ํฐ ๋ถ„๋ฅ˜๊ฐ€ ํฌํ•จ๋œ byModel ๋งต์ด ์žˆ์Šต๋‹ˆ๋‹ค: input, cached (์บ์‹œ ์ฝ๊ธฐ), cacheCreate (์บ์‹œ ์“ฐ๊ธฐ), output, reasoning ๋ชจ๋ธ๋ช…์€ provider:model ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: anthropic:claude-opus-4-6) โ€” tokscale์€ ๋ชจ๋ธ ์‹๋ณ„์„ ์œ„ํ•ด provider ์ ‘๋‘์‚ฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค ํ•˜์œ„ ์—์ด์ „ํŠธ ์‚ฌ์šฉ๋Ÿ‰์€ Mux์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ƒ์œ„ ์„ธ์…˜์— ํ•ฉ์‚ฐ๋˜๋ฏ€๋กœ ์ค‘๋ณต ์ง‘๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค

Kilo CLI

์œ„์น˜: ~/.local/share/kilo/kilo.db

Kilo CLI๋Š” OpenCode์™€ ์œ ์‚ฌํ•œ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”์‹œ์ง€ ํ–‰์—๋Š” ๋ชจ๋ธ ๋ฐ ๊ณต๊ธ‰์ž ์†์„ฑ๊ณผ ํ•จ๊ป˜ ๋ฉ”์‹œ์ง€๋ณ„ ํ† ํฐ ๋ถ„๋ฅ˜(์ž…๋ ฅ, ์ถœ๋ ฅ, ์บ์‹œ ์ฝ๊ธฐ/์“ฐ๊ธฐ, ์ถ”๋ก )๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Crush

์œ„์น˜: $XDG_DATA_HOME/crush/projects.json๋ฅผ ํ†ตํ•ด ๋ฐœ๊ฒฌ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ณ„ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (๊ธฐ๋ณธ๊ฐ’: ~/.local/share/crush/projects.json)

Crush๋Š” ํ”„๋กœ์ ํŠธ๋ณ„ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(crush.db)์— ์‚ฌ์šฉ๋Ÿ‰์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Crush๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋ณ„ ๋˜๋Š” ๋ชจ๋ธ๋ณ„ ํ† ํฐ ์ง‘๊ณ„๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, Tokscale์€ ๋ฃจํŠธ ์„ธ์…˜์˜ ์„ธ์…˜ ์ˆ˜์ค€ ๋น„์šฉ ํ•ฉ๊ณ„๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ๋Š” model=session-total๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ํ† ํฐ ๋ถ„๋ฅ˜๋Š” 0์ž…๋‹ˆ๋‹ค.

Synthetic (synthetic.new)

Synthetic์€ ๊ธฐ์กด ์—์ด์ „ํŠธ ์„ธ์…˜์„ ํ›„์ฒ˜๋ฆฌํ•˜์—ฌ ์žฌ๊ท€์†ํ•ฉ๋‹ˆ๋‹ค. hf: ์ ‘๋‘์‚ฌ ๋ชจ๋ธ ID ๋˜๋Š” synthetic / glhf / octofriend provider๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ synthetic ์†Œ์Šค๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ~/.local/share/octofriend/sqlite.db๋ฅผ ๊ฐ์ง€ํ•ด ํ† ํฐ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ

Tokscale์€ LiteLLM์˜ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹ค์‹œ๊ฐ„ ๊ฐ€๊ฒฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๋™์  ํด๋ฐฑ: LiteLLM์— ์•„์ง ์—†๋Š” ๋ชจ๋ธ(์˜ˆ: ์ตœ๊ทผ ์ถœ์‹œ๋œ ๋ชจ๋ธ)์€ OpenRouter์˜ ์—”๋“œํฌ์ธํŠธ API์—์„œ ์ž๋™์œผ๋กœ ๊ฐ€๊ฒฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

Cursor ๋ชจ๋ธ ๊ฐ€๊ฒฉ: LiteLLM๊ณผ OpenRouter ๋ชจ๋‘์— ์—†๋Š” ์ตœ์‹  ๋ชจ๋ธ(์˜ˆ: gpt-5.3-codex)์€ Cursor ๋ชจ๋ธ ๋ฌธ์„œ์—์„œ ๊ฐ€์ ธ์˜จ ํ•˜๋“œ์ฝ”๋”ฉ ๊ฐ€๊ฒฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฒ„๋ผ์ด๋“œ๋Š” ๋ชจ๋“  ์—…์ŠคํŠธ๋ฆผ ์†Œ์Šค ๋‹ค์Œ์—, ํผ์ง€ ๋งค์นญ ์ด์ „์— ํ™•์ธ๋˜๋ฏ€๋กœ ์‹ค์ œ ์—…์ŠคํŠธ๋ฆผ ๊ฐ€๊ฒฉ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง€๋ฉด ์ž๋™์œผ๋กœ ์–‘๋ณดํ•ฉ๋‹ˆ๋‹ค.

์บ์‹ฑ: ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ๋Š” 1์‹œ๊ฐ„ TTL๋กœ ๋””์Šคํฌ์— ์บ์‹œ๋˜์–ด ๋น ๋ฅธ ์‹œ์ž‘์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค:

  • LiteLLM ์บ์‹œ: ~/.cache/tokscale/pricing-litellm.json
  • OpenRouter ์บ์‹œ: ~/.cache/tokscale/pricing-openrouter.json (์ง€์› ์ œ๊ณต์ž์˜ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ž‘์„ฑ์ž ๊ฐ€๊ฒฉ ์ •๋ณด๋ฅผ ์บ์‹œ)

๊ฐ€๊ฒฉ ํฌํ•จ ํ•ญ๋ชฉ:

  • ์ž…๋ ฅ ํ† ํฐ
  • ์ถœ๋ ฅ ํ† ํฐ
  • ์บ์‹œ ์ฝ๊ธฐ ํ† ํฐ (ํ• ์ธ)
  • ์บ์‹œ ์“ฐ๊ธฐ ํ† ํฐ
  • ์ถ”๋ก  ํ† ํฐ (o1๊ณผ ๊ฐ™์€ ๋ชจ๋ธ์šฉ)
  • ๊ตฌ๊ฐ„๋ณ„ ๊ฐ€๊ฒฉ (200k ํ† ํฐ ์ด์ƒ)

๊ธฐ์—ฌ

๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”:

  1. ์ €์žฅ์†Œ ํฌํฌ
  2. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ž‘์„ฑ
  4. ํ…Œ์ŠคํŠธ ์‹คํ–‰ (cd packages/core && bun run test:all)
  5. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ปค๋ฐ‹ (git commit -m 'Add amazing feature')
  6. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ (git push origin feature/amazing-feature)
  7. Pull Request ์—ด๊ธฐ

๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ผ์ธ

  • ๊ธฐ์กด ์ฝ”๋“œ ์Šคํƒ€์ผ ๋”ฐ๋ฅด๊ธฐ
  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
  • ํ•„์š”์— ๋”ฐ๋ผ ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ
  • ์ปค๋ฐ‹์€ ์ง‘์ค‘์ ์ด๊ณ  ์›์ž์ ์œผ๋กœ ์œ ์ง€

๊ฐ์‚ฌ์˜ ๊ธ€

๋ผ์ด์„ ์Šค

MIT ยฉ Junho Yeo

์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ํฅ๋ฏธ๋กญ๋‹ค๋ฉด **์Šคํƒ€(โญ)**๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”.
GitHub์—์„œ ์ €๋ฅผ ํŒ”๋กœ์šฐํ•˜๊ณ  ํ•จ๊ป˜ ๋นŒ๋“œํ•ด๋„ ์ข‹์•„์š”. (์ด๋ฏธ 1.1k+๋ช…์ด ํƒ‘์Šนํ•ด ์žˆ์–ด์š”!)

โšก