Skip to content

Latest commit

ย 

History

History
1367 lines (986 loc) ยท 68.8 KB

File metadata and controls

1367 lines (986 loc) ยท 68.8 KB

Tokscale

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

Tip

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

GitHub Follow GitHub์—์„œ @junhoyeo๋ฅผ ํŒ”๋กœ์šฐํ•˜๊ณ  ๋” ๋งŽ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”. AI, ์ธํ”„๋ผ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
Discord link Discord์—์„œ ํ•จ๊ป˜ํ•ด์š” โ€” ์„ธ๊ณ„ ์ตœ๊ณ ์˜ ๋ฐ”์ด๋ฒ„๋“ค๊ณผ ์–ด์šธ๋ฆฌ์„ธ์š”.
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+, opencode-stable.db ๋“ฑ ๋ชจ๋“  ์ฑ„๋„ ํฌํ•จ) ๋˜๋Š” ~/.local/share/opencode/storage/message/ โœ… ์ง€์›
Claude Claude Code ~/.claude/projects/ โœ… ์ง€์›
OpenClaw OpenClaw ~/.openclaw/agents/ (+ ๋ ˆ๊ฑฐ์‹œ: .clawdbot, .moltbot, .moldbot) โœ… ์ง€์›
Codex Codex CLI ~/.codex/sessions/ โœ… ์ง€์›
Copilot GitHub Copilot CLI ~/.copilot/otel/*.jsonl (+ COPILOT_OTEL_FILE_EXPORTER_PATH) โœ… ์ง€์›
Hermes Agent Hermes Agent $HERMES_HOME/state.db (ํด๋ฐฑ: ~/.hermes/state.db) โœ… ์ง€์›
Gemini Gemini CLI $GEMINI_CLI_HOME/tmp/*/chats/*.json (ํด๋ฐฑ: ~/.gemini/tmp/*/chats/*.json) โœ… ์ง€์›
Cursor Cursor IDE ~/.config/tokscale/cursor-cache/๋ฅผ ํ†ตํ•œ API ๋™๊ธฐํ™” โœ… ์ง€์›
Amp Amp (AmpCode) ~/.local/share/amp/threads/ โœ… ์ง€์›
Codebuff Codebuff ~/.config/manicode/ (+ manicode-dev, manicode-staging; CODEBUFF_DATA_DIR๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ) โœ… ์ง€์›
Droid Droid (Factory Droid) ~/.factory/sessions/ โœ… ์ง€์›
Pi Pi ~/.pi/agent/sessions/ and ~/.omp/agent/sessions/ (Oh My Pi) โœ… ์ง€์›
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/) โœ… ์ง€์›
Kilo CLI Kilo CLI ~/.local/share/kilo/kilo.db โœ… ์ง€์›
Mux Mux ~/.mux/sessions/ โœ… ์ง€์›
Crush Crush $XDG_DATA_HOME/crush/projects.json (ํ”„๋กœ์ ํŠธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, ๊ธฐ๋ณธ๊ฐ’: ~/.local/share/crush/projects.json) โœ… ์ง€์›
Goose Goose ~/.local/share/goose/sessions/sessions.db (+ macOS Application Support, ๋ ˆ๊ฑฐ์‹œ Block/goose ๊ฒฝ๋กœ; GOOSE_PATH_ROOT๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ) โœ… ์ง€์›
Antigravity Google Antigravity tokscale antigravity sync๋กœ ~/.config/tokscale/antigravity-cache/sessions/*.jsonl์— ์บ์‹ฑ (๋กœ์ปฌ ์–ธ์–ด ์„œ๋ฒ„ RPC ์‚ฌ์šฉ) โœ… ์ง€์›
Trae Trae IDE / Trae Solo (๊ตญ์ œํŒ) tokscale trae sync๋กœ ~/.config/tokscale/trae-cache/sessions/*.json์— ์บ์‹ฑ (๊ณต์‹ API์˜ ๊ณ„์ • ๋‹จ์œ„ ์‚ฌ์šฉ๋Ÿ‰) โœ… ์ง€์›
Zed Agent Zed Agent ~/.local/share/zed/threads/threads.db (macOS: ~/Library/Application Support/Zed/threads/threads.db; Windows: %LOCALAPPDATA%/Zed/threads/threads.db; ํ˜ธ์ŠคํŒ…๋œ Zed ๋ชจ๋ธ ์ „์šฉ, ์™ธ๋ถ€ ACP ์—์ด์ „ํŠธ ์ œ์™ธ) โœ… ์ง€์›
Kiro Kiro ~/.kiro/sessions/cli/*.json (+ *.jsonl) ๋ฐ ~/.local/share/kiro-cli/data.sqlite3 (macOS: ~/Library/Application Support/kiro-cli/data.sqlite3) โœ… ์ง€์›
Gajae-Code gajae-code (gjc) ~/.gjc/agent/sessions/ (GJC_CODING_AGENT_DIR, GJC_CONFIG_DIR, PI_CONFIG_DIR๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ; Linux/macOS์—์„œ๋Š” $XDG_DATA_HOME/gjc/sessions/๋„ ํ™•์ธ) โœ… ์ง€์›
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 (๊ธฐ๋ณธ ๋ชจ๋“œ)
    • 6๊ฐœ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ทฐ: ๊ฐœ์š”, ๋ชจ๋ธ, ์ผ๋ณ„, ์‹œ๊ฐ„๋ณ„, ํ†ต๊ณ„, ์—์ด์ „ํŠธ (์„ ํƒ์  Minutely ๋ทฐ๋Š” minutelyTabEnabled๋กœ ํ™œ์„ฑํ™”)
    • ํ‚ค๋ณด๋“œ ๋ฐ ๋งˆ์šฐ์Šค ์ง€์›
    • 9๊ฐ€์ง€ ํ…Œ๋งˆ์˜ GitHub ์Šคํƒ€์ผ ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„
    • ์‹ค์‹œ๊ฐ„ ํ•„ํ„ฐ๋ง ๋ฐ ์ •๋ ฌ
    • ๊นœ๋นก์ž„ ์—†๋Š” ๋ Œ๋”๋ง
  • ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์ง€์› - OpenCode, Claude Code, Codex CLI, Copilot CLI, Cursor IDE, Gemini CLI, Amp, Codebuff, Droid, OpenClaw, Hermes Agent, Pi, Kimi CLI, Qwen CLI, Roo Code, Kilo, Mux, Kilo CLI, Crush, Goose, Antigravity, Zed, Kiro, Trae, Gajae-Code, Synthetic ์‚ฌ์šฉ๋Ÿ‰ ํ†ตํ•ฉ ์ถ”์ 
  • ์‹ค์‹œ๊ฐ„ ๊ฐ€๊ฒฉ ๋ฐ˜์˜ - LiteLLM์—์„œ ์ตœ์‹  ๊ฐ€๊ฒฉ์„ ๊ฐ€์ ธ์™€(๋””์Šคํฌ ์บ์‹œ 1์‹œ๊ฐ„) ๋น„์šฉ ๊ณ„์‚ฐ; OpenRouter ์ž๋™ ํด๋ฐฑ ๋ฐ ์‹ ๊ทœ ๋ชจ๋ธ์šฉ Cursor ๊ฐ€๊ฒฉ ์ง€์›
  • ์ƒ์„ธ ๋ถ„์„ - ์ž…๋ ฅ, ์ถœ๋ ฅ, ์บ์‹œ ์ฝ๊ธฐ/์“ฐ๊ธฐ, ์ถ”๋ก  ํ† ํฐ๊นŒ์ง€ ์ถ”์ 
  • ๋„ค์ดํ‹ฐ๋ธŒ Rust ์ฝ”์–ด - ๋ชจ๋“  ํŒŒ์‹ฑ๊ณผ ์ง‘๊ณ„๋ฅผ Rust๋กœ ์ฒ˜๋ฆฌํ•ด ์ตœ๋Œ€ 10๋ฐฐ ๋น ๋ฅธ ์„ฑ๋Šฅ
  • ์›น ์‹œ๊ฐํ™” - 2D ๋ฐ 3D ๋ทฐ์˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„
  • ์œ ์—ฐํ•œ ํ•„ํ„ฐ๋ง - ํ”Œ๋žซํผ, ๋‚ ์งœ ๋ฒ”์œ„ ๋˜๋Š” ์—ฐ๋„๋ณ„ ํ•„ํ„ฐ๋ง
  • JSON ๋‚ด๋ณด๋‚ด๊ธฐ - ์™ธ๋ถ€ ์‹œ๊ฐํ™” ๋„๊ตฌ/์ž๋™ํ™”์šฉ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  • ์†Œ์…œ ํ”Œ๋žซํผ - ์‚ฌ์šฉ๋Ÿ‰ ๊ณต์œ , ๋ฆฌ๋”๋ณด๋“œ ๊ฒฝ์Ÿ, ๊ณต๊ฐœ ํ”„๋กœํ•„ ์กฐํšŒ

์„ค์น˜

๋น ๋ฅธ ์‹œ์ž‘

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

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

# ๋ณ„์นญ ์„ค์น˜ ์—†์ด Deno ์‚ฌ์šฉ
deno x npm: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 ๋ชจ๋“œ๋Š” ๋‹ค์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • 6๊ฐœ ๋ทฐ: ๊ฐœ์š” (์ฐจํŠธ + ์ƒ์œ„ ๋ชจ๋ธ), ๋ชจ๋ธ, ์ผ๋ณ„, ์‹œ๊ฐ„๋ณ„, ํ†ต๊ณ„ (๊ธฐ์—ฌ ๊ทธ๋ž˜ํ”„), ์—์ด์ „ํŠธ
  • ํ‚ค๋ณด๋“œ ๋‚ด๋น„๊ฒŒ์ด์…˜:
    • โ†/โ†’/Tab/BackTab: ๋ทฐ ์ „ํ™˜
    • โ†‘/โ†“ ๋˜๋Š” Home/End: ๋ชฉ๋ก ํƒ์ƒ‰
    • Enter: ์ผ๋ณ„ ์ƒ์„ธ ๋ณด๊ธฐ (Daily ํƒญ) / ๊ทธ๋ž˜ํ”„ ์…€ ์„ ํƒ (Stats ํƒญ)
    • Esc ๋˜๋Š” Backspace: ๋‹ค์ด์–ผ๋กœ๊ทธ ๋‹ซ๊ธฐ / ์ƒ์„ธ ๋ณด๊ธฐ ๋‚˜๊ฐ€๊ธฐ
    • c/d/t: ๋น„์šฉ/๋‚ ์งœ/ํ† ํฐ๋ณ„ ์ •๋ ฌ
    • j: ์˜ค๋Š˜๋กœ ์ด๋™
    • s: ์†Œ์Šค ์„ ํƒ ๋‹ค์ด์–ผ๋กœ๊ทธ ์—ด๊ธฐ
    • g: ๊ทธ๋ฃน ๊ธฐ์ค€ ์„ ํƒ ๋‹ค์ด์–ผ๋กœ๊ทธ ์—ด๊ธฐ (๋ชจ๋ธ, ํด๋ผ์ด์–ธํŠธ+๋ชจ๋ธ, ํด๋ผ์ด์–ธํŠธ+ํ”„๋กœ๋ฐ”์ด๋”+๋ชจ๋ธ)
    • h: Daily/Hourly ์ฐจํŠธ ๋‹จ์œ„ ์ „ํ™˜ (Overview ํƒญ)
    • v: Table/Profile ๋ทฐ ์ „ํ™˜ (Hourly ํƒญ)
    • y: ์„ ํƒ๋œ ํ–‰์„ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ
    • p: 9๊ฐ€์ง€ ์ƒ‰์ƒ ํ…Œ๋งˆ ์ˆœํ™˜
    • r: ๋ฐ์ดํ„ฐ ์ƒˆ๋กœ๊ณ ์นจ; Shift+R๋กœ ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ ํ† ๊ธ€; +/-๋กœ ๊ฐ„๊ฒฉ ์กฐ์ •
    • e: JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
    • q ๋˜๋Š” Ctrl+C: ์ข…๋ฃŒ
  • ๋งˆ์šฐ์Šค ์ง€์›: ํƒญ, ๋ฒ„ํŠผ, ํ•„ํ„ฐ ํด๋ฆญ
  • ํ…Œ๋งˆ: 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

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

--client (๋‹จ์ถ•ํ˜• -c) ํ”Œ๋ž˜๊ทธ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฆฌํฌํŠธ ๋ฒ”์œ„๋ฅผ ์ขํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„๋œ ๊ฐ’๋„ ์ง€์›ํ•˜๊ณ , ๋ชจ๋“  ๋ฆฌํฌํŠธ ๋ช…๋ น์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค:

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

# ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„: ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ ๋™์‹œ ํ•„ํ„ฐ
tokscale --client opencode,claude

# ๋ฐ˜๋ณต: ๊ฐ™์€ ํšจ๊ณผ (์‰˜ alias์™€ ํ•จ๊ป˜ ์“ฐ๊ธฐ ์ข‹์Œ)
tokscale -c opencode -c claude

# Cursor IDE๋Š” ์‚ฌ์ „์— `tokscale cursor login` ํ•„์š”
tokscale --client cursor

# Synthetic (synthetic.new) ์€ ๋‹ค๋ฅธ ์—์ด์ „ํŠธ ์„ธ์…˜์—์„œ ๊ฒ€์ถœ๋จ
tokscale --client synthetic

# ๋‹ค๋ฅธ ํ•„ํ„ฐ์™€ ์กฐํ•ฉ
tokscale --client opencode,claude --week --json

๊ฐ€๋Šฅํ•œ ๊ฐ’: opencode, claude, codex, copilot, gemini, cursor, amp, codebuff, droid, openclaw, hermes, pi, kimi, qwen, roocode, kilocode, kilo, mux, crush, goose, antigravity, zed, kiro, trae, gjc, synthetic.

Deprecation ์•ˆ๋‚ด: ๊ธฐ์กด ๋‹จ์ผ ํด๋ผ์ด์–ธํŠธ ํ”Œ๋ž˜๊ทธ (--opencode, --claude, --codex ๋“ฑ)๋Š” ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์—ฌ์ „ํžˆ ๋™์ž‘ํ•˜์ง€๋งŒ --help์—์„œ ์ˆจ๊ฒจ์กŒ์œผ๋ฉฐ ๋‹ค์Œ ๋ฉ”์ด์ € ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ --client๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜์„ธ์š”. ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํ„ฐ๋ฏธ๋„์—์„œ ๋ ˆ๊ฑฐ์‹œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์ค„ ๊ฒฝ๊ณ ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

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

๋‚ ์งœ ํ•„ํ„ฐ๋Š” ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋ช…๋ น์–ด์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (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 --client claude --json
tokscale monthly --month --benchmark

์ฐธ๊ณ : ๋‚ ์งœ ํ•„ํ„ฐ๋Š” ๋กœ์ปฌ ํƒ€์ž„์กด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. --since์™€ --until ๋ชจ๋‘ ํ•ด๋‹น ๋‚ ์งœ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. v2.2.0 ์ฐธ๊ณ : ์„ธ์…˜ ํ™œ์„ฑ ์‹œ๊ฐ„์˜ ์ผ๋ณ„ ๋ฒ„ํ‚ท๋„ ๋กœ์ปฌ ํƒ€์ž„์กด์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, UTC๊ฐ€ ์•„๋‹Œ ํ™˜๊ฒฝ์—์„œ๋Š” ํ™œ์„ฑ ์‹œ๊ฐ„ ๋‚ ์งœ๊ฐ€ UTC ์ผ ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋กœ์ปฌ ํ† ํฐ/๋น„์šฉ ๋ฆฌํฌํŠธ ๋‚ ์งœ์™€ ๋งž์ถฐ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

# ๋ชจ๋ธ ๊ฐ€๊ฒฉ ์กฐํšŒ
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 --client 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 ๊ณ„์ •์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

Antigravity ๋ช…๋ น์–ด

Antigravity ๋™๊ธฐํ™”๋Š” ํ˜„์žฌ macOS์™€ Linux์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. Antigravity๊ฐ€ ํ™œ์„ฑํ™”๋œ ์—๋””ํ„ฐ๊ฐ€ ์‹คํ–‰ ์ค‘์ด๊ณ  ๋กœ์ปฌ ์–ธ์–ด ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๋งŒ ๋™์ž‘ํ•˜๋ฉฐ, tokscale์€ ํ•ด๋‹น ๋กœ์ปฌ ์–ธ์–ด ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ๋Ÿ‰์„ ์ฝ์–ด ์ •๊ทœํ™”๋œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋กœ์ปฌ์— ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.

# ์‹คํ–‰ ์ค‘์ธ Antigravity ์–ธ์–ด ์„œ๋ฒ„๋ฅผ tokscale์ด ์ธ์‹ํ•˜๋Š”์ง€ ํ™•์ธ
tokscale antigravity status

# ๋กœ์ปฌ Antigravity ์–ธ์–ด ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ๋Ÿ‰์„ tokscale ์บ์‹œ๋กœ ๋™๊ธฐํ™”
tokscale antigravity sync

# ์บ์‹œ๋œ Antigravity ์•„ํ‹ฐํŒฉํŠธ ์‚ญ์ œ
tokscale antigravity purge-cache

์บ์‹œ ์œ„์น˜: ~/.config/tokscale/antigravity-cache/

๋™์ž‘ ๋ฐฉ์‹: tokscale antigravity sync๋Š” ๋กœ์ปฌ Antigravity ์„ธ์…˜ ํ›„๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๋กœ์ปฌ ์–ธ์–ด ์„œ๋ฒ„ RPC์—์„œ ํ™•์ •๋œ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€, tokscale-core๊ฐ€ ๋‚˜์ค‘์— ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๊ทœํ™”๋œ JSONL ์•„ํ‹ฐํŒฉํŠธ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ตœ์‹ ์˜ Antigravity ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•˜๋ ค๋ฉด ๋ฆฌํฌํŠธ ์‹คํ–‰ ์ „์— sync๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜์„ธ์š”.

Trae ๋ช…๋ น์–ด

Trae(ByteDance์˜ AI IDE)๋Š” ๋‘ ๊ตญ์ œํŒ ์ œํ’ˆ๊ตฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋Š” ๊ณ„์ • ๋‹จ์œ„๋กœ ๊ณต์œ ๋˜๋ฏ€๋กœ tokscale์€ ํ•˜๋‚˜์˜ trae ํด๋ผ์ด์–ธํŠธ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค:

  • --variant ide โ€” Trae IDE (๊ตญ์ œํŒ)์˜ ์ž๊ฒฉ ์ฆ๋ช… ์‚ฌ์šฉ
  • --variant solo โ€” Trae Solo (๊ตญ์ œํŒ)์˜ ์ž๊ฒฉ ์ฆ๋ช… ์‚ฌ์šฉ

tokscale trae sync๋Š” ๊ณต์‹ query_user_usage_group_by_session API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์›๋ณธ JSON์„ ๋กœ์ปฌ ์บ์‹œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. --variant solo / --variant ide๋Š” login/logout์—์„œ ์ž๊ฒฉ ์ฆ๋ช… ์ถœ์ฒ˜๋ฅผ ์„ ํƒํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ, sync๋Š” ์ €์žฅ๋œ Trae ํ† ํฐ์œผ๋กœ ๋‹จ์ผ trae ๋ฆฌํฌํŠธ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

# ๋กœ๊ทธ์ธ (Trae ๋ฐ์Šคํฌํ†ฑ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž๊ฒฉ ์ฆ๋ช… ์ž๋™ ๊ฐ์ง€)
tokscale trae login

# ์ˆ˜๋™ JWT ์ž…๋ ฅ (storage.json์„ ์ž๋™ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์šฉ)
tokscale trae login --manual --variant solo

# ์–ด๋–ค ๋ณ€ํ˜•์— ์ž๊ฒฉ ์ฆ๋ช…์ด ์บ์‹œ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
tokscale trae status

# ์ตœ๊ทผ 30์ผ ์‚ฌ์šฉ๋Ÿ‰์„ ๋™๊ธฐํ™”
tokscale trae sync --since 30

# ํŠน์ • ๋ณ€ํ˜•์˜ ์บ์‹œ๋œ ์ž๊ฒฉ ์ฆ๋ช… ์‚ญ์ œ
tokscale trae logout --variant solo

์บ์‹œ ์œ„์น˜: ~/.config/tokscale/trae-cache/

๋™์ž‘ ๋ฐฉ์‹: tokscale์€ ๋ฐ์Šคํฌํ†ฑ ํด๋ผ์ด์–ธํŠธ์˜ iCubeAuthInfo://* blob(globalStorage/storage.json)์„ ๋ณตํ˜ธํ™”ํ•ด JWT๋ฅผ ์–ป๊ฑฐ๋‚˜, --manual๋กœ ๋ถ™์—ฌ ๋„ฃ์€ JWT๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ POST /trae/api/v1/pay/query_user_usage_group_by_session์„ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ํ˜ธ์ถœํ•˜๊ณ  ์›๋ณธ JSON์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  Trae ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•˜๋ ค๋ฉด ๋ฆฌํฌํŠธ ์‹คํ–‰ ์ „์— sync๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜์„ธ์š”.

์ค‘๊ตญํŒ: ์ค‘๊ตญํŒ(trae.com.cn)์€ ์˜๋„์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CN ๋ฐฑ์—”๋“œ๋Š” ์„ธ์…˜ ๋‹จ์œ„ ์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ API๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ œ๊ณต๋˜๋ฉด ์ง€์›์„ ์ถ”๊ฐ€ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

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

CLI Light

์„ค์ •

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

{
  "colorPalette": "blue",
  "includeUnusedModels": false,
  "defaultClients": ["opencode", "claude"]
}
์„ค์ • ํƒ€์ž… ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
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)
defaultClients string[] [] --client/-c ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์„ ๋•Œ ์ ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ ํ•„ํ„ฐ. --client์™€ ๋™์ผํ•œ ID๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค (์˜ˆ: ["opencode", "claude", "synthetic"]). ์•Œ ์ˆ˜ ์—†๋Š” ID๋Š” ์ž๋™์œผ๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. CLI ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์œผ๋ฉด ์ด ๋ชฉ๋ก์€ ์™„์ „ํžˆ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค โ€” ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
light.writeCache boolean false true์ด๋ฉด tokscale --light๊ฐ€ ๋ Œ๋”๋ง ์งํ›„ TUI ์บ์‹œ๋ฅผ ์›์ž์ ์œผ๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค. CLI ํ”Œ๋ž˜๊ทธ --write-cache / --no-write-cache๊ฐ€ ์‹คํ–‰๋ณ„๋กœ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
minutelyTabEnabled boolean false TUI์— ๋ถ„ ๋‹จ์œ„ Minutely ํƒญ์„ ํ‘œ์‹œํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘์— ๋ถ„ ๋‹จ์œ„ ์ง‘๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ„ ๋‹จ์œ„ ์„ธ๋ถ„ํ™”๋Š” ํ‹ˆ์ƒˆ/์ง„๋‹จ ๋ทฐ์ด๋ฉฐ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์—์„œ๋Š” ๋ถ„ ๋‹จ์œ„ ๋ฒ„์ผ€ํŒ…์— ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋Š” ๋น„์šฉ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Minutely ํƒญ ํ™œ์„ฑํ™”

Minutely ํƒญ์€ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ถ„ ๋‹จ์œ„๋กœ ํ‘œ์‹œํ•˜๋ฉฐ, ๋ฒ„์ŠคํŠธ ํŒจํ„ด ์ง„๋‹จ, ๋‹จ์ผ ์„ธ์…˜ ๋””๋ฒ„๊น…, autoRefreshEnabled์™€ ํ•จ๊ป˜ ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง์— ๊ฐ€์žฅ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถ„ ๋‹จ์œ„ ์ง‘๊ณ„๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘ ๋ชจ๋“  ํŒŒ์‹ฑ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ถˆํ•„์š”ํ•œ RAM๊ณผ CPU ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆจ๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ~/.config/tokscale/settings.json์—์„œ minutelyTabEnabled๋ฅผ true๋กœ ์„ค์ •ํ•˜์„ธ์š”:

{
  "minutelyTabEnabled": true
}

์žฌ์‹œ์ž‘ ํ›„ ํƒญ ์ŠคํŠธ๋ฆฝ์˜ Hourly์™€ Stats ์‚ฌ์ด์— Minutely ํƒญ์ด ๋‚˜ํƒ€๋‚˜๋ฉฐ, Tab / BackTab / Left / Right ๋‚ด๋น„๊ฒŒ์ด์…˜์ด ์ด๋ฅผ ์ˆœํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๋ฅผ ๋‹ค์‹œ false๋กœ ์„ค์ •ํ•˜๋ฉด ํƒญ์ด ์ˆจ๊ฒจ์ง€๊ณ  ์ง‘๊ณ„๋„ ๋‹ค์‹œ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

์บ์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ ˆ์ด์•„์›ƒ

์žฌ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ CLI/TUI/๊ฐ€๊ฒฉ/Wrapped ์บ์‹œ๋Š” ~/.config/tokscale/cache/ ์•„๋ž˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค (TOKSCALE_CONFIG_DIR๋ฅผ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ${TOKSCALE_CONFIG_DIR}/cache/). ํ†ตํ•ฉ ๋™๊ธฐํ™” ์•„ํ‹ฐํŒฉํŠธ๋Š” ~/.config/tokscale/antigravity-cache/ ๋ฐ ~/.config/tokscale/trae-cache/ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ๋ณ„ ์บ์‹œ ๋ฃจํŠธ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค:

  • tui-data-cache.json โ€” TUI ์‹œ์ž‘ ์บ์‹œ
  • source-message-cache.bin + source-message-cache.lock โ€” ์†Œ์Šค ๋ฉ”์‹œ์ง€ ์บ์‹œ์™€ ๋ฝ ํŒŒ์ผ
  • pricing-litellm.json / pricing-openrouter.json โ€” ๊ฐ€๊ฒฉ ์บ์‹œ
  • opencode-migration.json โ€” OpenCode ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ธฐ๋ก
  • fonts/, images/ โ€” Wrapped ์—์…‹ ์บ์‹œ

์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์‚ญ์ œํ•ด๋„ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•  ๋•Œ Tokscale์ด ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ณ  ์ฑ„์›๋‹ˆ๋‹ค.

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

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

๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
TOKSCALE_NATIVE_TIMEOUT_MS 300000 (5๋ถ„) nativeTimeoutMs ์„ค์ • ์˜ค๋ฒ„๋ผ์ด๋“œ
TOKSCALE_CONFIG_DIR unset ์„ค์ • ๋””๋ ‰ํ† ๋ฆฌ ๋ฃจํŠธ(settings.json, star-cache.json, cache/, antigravity-cache/, trae-cache/ ์œ„์น˜)๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๊ถŒ์žฅ; ์ƒ๋Œ€ ๊ฒฝ๋กœ๋Š” ํ”„๋กœ์„ธ์Šค CWD ๊ธฐ์ค€์œผ๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค. CI ์ƒŒ๋“œ๋ฐ•์Šค๋‚˜ ๋น„๊ธฐ๋ณธ ์œ„์น˜๋ฅผ ๊ณ ์ •ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •๋˜๋ฉด tokscale์€ macOS ๋ ˆ๊ฑฐ์‹œ ๊ฒฝ๋กœ(~/Library/Application Support/tokscale/)๋กœ ํด๋ฐฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
# ์˜ˆ์‹œ: ๋งค์šฐ ํฐ ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•œ ํƒ€์ž„์•„์›ƒ ์ฆ๊ฐ€
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, Copilot, Cursor, Gemini, Amp, Codebuff, Droid, OpenClaw, Hermes Agent, Pi, Kimi, Qwen, Roo Code, Kilo, Mux, Kilo CLI, Crush, Goose, Antigravity, Zed, Kiro, Trae, Gajae-Code, 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/index.ts

# ๋˜๋Š” ๋ ˆ๊ฑฐ์‹œ CLI ๋ชจ๋“œ ์‚ฌ์šฉ
cd packages/cli && bun src/index.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 --client 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 ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ • ๊ฐ€๋Šฅ (์†Œ์Šค)
Copilot CLI ~/.copilot/otel/ %USERPROFILE%\.copilot\otel\ OTEL ํŒŒ์ผ ๋‚ด๋ณด๋‚ด๊ธฐ ํ•„์š”; COPILOT_OTEL_FILE_EXPORTER_PATH๋„ ์ž๋™ ์ˆ˜์ง‘
Hermes Agent ~/.hermes/ %USERPROFILE%\.hermes\ HERMES_HOME ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ • ๊ฐ€๋Šฅ (์†Œ์Šค)
Gemini CLI ~/.gemini/ %USERPROFILE%\.gemini\ GEMINI_CLI_HOME ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ • ๊ฐ€๋Šฅ
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/ and ~/.omp/ %USERPROFILE%\.pi\ and %USERPROFILE%\.omp\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ (Pi ๋ฐ Oh My 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\ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•œ ๊ฒฝ๋กœ
Codebuff ~/.config/manicode/projects/ (+ manicode-dev, manicode-staging) %USERPROFILE%\.config\manicode\projects\ CODEBUFF_DATA_DIR ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ
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 ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์‚ฌ์šฉ
Goose ~/.local/share/goose/sessions/ (+ macOS Application Support, ๋ ˆ๊ฑฐ์‹œ Block ๊ฒฝ๋กœ) %USERPROFILE%\.local\share\goose\sessions\ GOOSE_PATH_ROOT ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ • ๊ฐ€๋Šฅ
Antigravity ~/.config/tokscale/antigravity-cache/sessions/ โ€” tokscale antigravity sync๋Š” ํ˜„์žฌ macOS/Linux์—์„œ๋งŒ ์ง€์›
Trae ~/.config/tokscale/trae-cache/sessions/ %APPDATA%\tokscale\trae-cache\sessions\ tokscale trae sync๋กœ ํ•œ ๋ฒˆ ๋™๊ธฐํ™”; ์„ค์น˜๋œ Trae IDE ๋˜๋Š” Trae Solo ๋ฐ์Šคํฌํ†ฑ ์•ฑ์—์„œ ์ž๊ฒฉ ์ฆ๋ช… ์ž๋™ ๋ฐœ๊ฒฌ
Gajae-Code ~/.gjc/agent/sessions/ %USERPROFILE%\.gjc\agent\sessions\ GJC_CODING_AGENT_DIR๋กœ ์„ค์ • ๊ฐ€๋Šฅ (GJC_CONFIG_DIR/PI_CONFIG_DIR๋„ ์ง€์›; Linux/macOS์—์„œ๋Š” $XDG_DATA_HOME/gjc/sessions/๋„ ํ™•์ธ)
Synthetic ๋‹ค๋ฅธ ์†Œ์Šค์—์„œ ์žฌ๊ท€์† ๋‹ค๋ฅธ ์†Œ์Šค์—์„œ ์žฌ๊ท€์† hf: ๋ชจ๋ธ ์ ‘๋‘์‚ฌ + synthetic provider ๊ฐ์ง€

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

Windows ์ „์šฉ ์„ค์ •

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

  • TUI ์„ค์ •: %APPDATA%\tokscale\settings.json (ํ”Œ๋žซํผ ๊ธฐ๋ณธ๊ฐ’. TOKSCALE_CONFIG_DIR๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ)
  • ์บ์‹œ: %APPDATA%\tokscale\cache\ (ํ†ตํ•ฉ ์บ์‹œ ๋ฃจํŠธ)
  • ๋ ˆ๊ฑฐ์‹œ ์บ์‹œ ๊ฒฝ๋กœ: ์ด์ „ ๋ฆด๋ฆฌ์Šค์˜ %USERPROFILE%\.cache\tokscale\ ๊ฐ™์€ ๋ถ„๋ฆฌ๋œ ๊ฒฝ๋กœ๊ฐ€ ์ƒˆ ๊ฒฝ๋กœ๋กœ ๋‹ค์‹œ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋  ๋•Œ๊นŒ์ง€ ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Cursor ์ž๊ฒฉ ์ฆ๋ช…: %USERPROFILE%\.config\tokscale\cursor-credentials.json
  • Trae ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ๋™๊ธฐํ™”๋œ ์‚ฌ์šฉ๋Ÿ‰: %APPDATA%\tokscale\trae-cache\
  • Tokscale ๊ณ„์ • ์ž๊ฒฉ ์ฆ๋ช…: %USERPROFILE%\.config\tokscale\credentials.json

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

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

ํ”Œ๋žซํผ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ํŒŒ์ผ ๋น„ํ™œ์„ฑํ™” ์„ค์ • ์ถœ์ฒ˜
Claude Code โš ๏ธ 30์ผ ~/.claude/settings.json "cleanupPeriodDays": 9999999999 ๋ฌธ์„œ
Gemini CLI ๋น„ํ™œ์„ฑํ™”๋จ $GEMINI_CLI_HOME/settings.json (ํด๋ฐฑ: ~/.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_CLI_HOME/settings.json (ํด๋ฐฑ: ~/.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 ํŒŒ์ผ๋กœ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

OpenCode๋Š” ๋นŒ๋“œ๋œ ๋ฆด๋ฆฌ์Šค ์ฑ„๋„์— ๋”ฐ๋ผ DB ํŒŒ์ผ๋ช…์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค: latest, beta ์ฑ„๋„์€ opencode.db๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์ฑ„๋„์€ opencode-<channel>.db (์˜ˆ: opencode-stable.db, opencode-nightly.db)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Tokscale์€ ๋ชจ๋“  ๋ณ€ํ˜•์„ ์Šค์บ”ํ•˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ์ฑ„๋„์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ํ†ตํ•ฉ๋œ ๋ทฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

{
  "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}}}}

Copilot CLI

์œ„์น˜: ~/.copilot/otel/*.jsonl ๋˜๋Š” COPILOT_OTEL_FILE_EXPORTER_PATH์— ๋ช…์‹œ๋œ ๊ฒฝ๋กœ

Copilot ์ง€์›์€ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ธ OpenTelemetry JSONL์„ ์ฝ์Šต๋‹ˆ๋‹ค. Copilot์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํ™œ์„ฑํ™”ํ•˜์„ธ์š”:

export COPILOT_OTEL_ENABLED=true
export COPILOT_OTEL_EXPORTER_TYPE=file
mkdir -p "$HOME/.copilot/otel"
export COPILOT_OTEL_FILE_EXPORTER_PATH="$HOME/.copilot/otel/copilot-otel-$(date +%Y%m%d-%H%M%S).jsonl"

PowerShell:

$otelDir = "$HOME/.copilot/otel"
New-Item -ItemType Directory -Force -Path $otelDir | Out-Null
$env:COPILOT_OTEL_ENABLED = "true"
$env:COPILOT_OTEL_EXPORTER_TYPE = "file"
$env:COPILOT_OTEL_FILE_EXPORTER_PATH = Join-Path $otelDir ("copilot-otel-{0}.jsonl" -f (Get-Date -Format "yyyyMMdd-HHmmss"))

ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ๋ช…์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ Copilot ์„ธ์…˜์ด ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ OTEL ๋กœ๊ทธ์— ๋ˆ„์ ๋˜์ง€ ์•Š๊ณ  ์ƒˆ ํŒŒ์ผ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

Tokscale์€ chat span์„ ํ† ํฐ ์ง‘๊ณ„์˜ ์ถœ์ฒ˜๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ๋„๊ตฌ span๊ณผ ๋ˆ„์  ๋ฉ”ํŠธ๋ฆญ์€ 1๋‹จ๊ณ„์—์„œ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค:

{"type":"span","name":"chat gpt-5.4-mini","attributes":{"gen_ai.operation.name":"chat","gen_ai.response.model":"gpt-5.4-mini","gen_ai.conversation.id":"session-id","gen_ai.usage.input_tokens":1234,"gen_ai.usage.output_tokens":567,"gen_ai.usage.cache_read.input_tokens":890,"gen_ai.usage.reasoning.output_tokens":123}}

Copilot์˜ OTEL ํŽ˜์ด๋กœ๋“œ๋Š” ํ˜„์žฌ ์•ˆ์ •์ ์ธ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, Copilot ํ–‰์€ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์†์„ฑ ์—†์ด ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Tokscale์€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ณด๊ณ ๋œ ๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ํ–‰์˜ ๊ฐ€๊ฒฉ์„ ์ฑ…์ •ํ•˜๋ฉฐ, github.copilot.cost๋ฅผ ์ง์ ‘ ์‹ ๋ขฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Gemini CLI

์œ„์น˜: $GEMINI_CLI_HOME/tmp/{projectHash}/chats/*.json (ํด๋ฐฑ: ~/.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 ๋ช…๋ น์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Antigravity

์œ„์น˜: ~/.config/tokscale/antigravity-cache/sessions/*.jsonl (๋กœ์ปฌ Antigravity ์–ธ์–ด ์„œ๋ฒ„ RPC๋ฅผ ํ†ตํ•ด ๋™๊ธฐํ™”)

Antigravity ๋ฐ์ดํ„ฐ๋Š” ๋ฃจํŠธ ๋ช…๋ น์—์„œ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Antigravity๊ฐ€ ํ™œ์„ฑํ™”๋œ ์—๋””ํ„ฐ๊ฐ€ ์—ด๋ ค ์žˆ๋Š” ๋™์•ˆ tokscale antigravity sync๋ฅผ ์‹คํ–‰ํ•ด ๋กœ์ปฌ ์บ์‹œ๋ฅผ ์ƒˆ๋กœ ๊ณ ์นœ ๋‹ค์Œ, ์บ์‹œ๋œ JSONL ์•„ํ‹ฐํŒฉํŠธ์— ๋Œ€ํ•ด ์ผ๋ฐ˜์ ์ธ tokscale ๋ฆฌํฌํŠธ์™€ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

Trae

์œ„์น˜: ~/.config/tokscale/trae-cache/sessions/*.json (๊ณต์‹ ์‚ฌ์šฉ๋Ÿ‰ API๋ฅผ ํ†ตํ•ด ๋™๊ธฐํ™”)

Trae ๋ฐ์ดํ„ฐ๋Š” ๋ฃจํŠธ ๋ช…๋ น์—์„œ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋จผ์ € tokscale trae login์„ ์‹คํ–‰ํ•œ ๋’ค, ๋ฆฌํฌํŠธ ์ „์— tokscale trae sync ๋˜๋Š” tokscale trae sync --since 30์„ ์‹คํ–‰ํ•˜์„ธ์š”. Tokscale์€ ๋™๊ธฐํ™”๋œ API dump๋ฅผ ์„ธ์…˜ ์ˆ˜์ค€ ๋ ˆ์ฝ”๋“œ๋กœ ํŒŒ์‹ฑํ•˜๊ณ  Trae๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๋น„์šฉ ํ•ฉ๊ณ„๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

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}}

Hermes Agent

์œ„์น˜: $HERMES_HOME/state.db (ํด๋ฐฑ: ~/.hermes/state.db)

Hermes๋Š” ์„ธ์…˜ ์ˆ˜์ค€ ์‚ฌ์šฉ๋Ÿ‰์„ SQLite sessions ํ…Œ์ด๋ธ”์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Tokscale์€ model์ด ์กด์žฌํ•˜๊ณ  ํ† ํฐ ๋˜๋Š” ๋น„์šฉ ํ•ฉ๊ณ„๊ฐ€ 0์ด ์•„๋‹Œ ํ–‰์„ ๊ฐ€์ ธ์˜ค๋ฉฐ, started_at์„ ํƒ€์ž„์Šคํƒฌํ”„๋กœ ์‚ฌ์šฉํ•˜๊ณ , message_count๋ฅผ ๋ณด์กดํ•˜๋ฉฐ, actual_cost_usd๋ฅผ estimated_cost_usd๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

Pi

์œ„์น˜: ~/.pi/agent/sessions/<encoded-cwd>/*.jsonl ๋ฐ ~/.omp/agent/sessions/<encoded-cwd>/*.jsonl (Oh My Pi)

์„ธ์…˜ ํ—ค๋”์™€ ๋ฉ”์‹œ์ง€ ํ•ญ๋ชฉ์„ ํฌํ•จํ•˜๋Š” 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์ž…๋‹ˆ๋‹ค.

Goose

์œ„์น˜: ~/.local/share/goose/sessions/sessions.db (~/Library/Application Support/goose/, ~/Library/Application Support/Block/goose/, ~/.local/share/Block/goose/๋„ ์Šค์บ”; GOOSE_PATH_ROOT๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ)

Goose๋Š” ์„ธ์…˜๋ณ„ ์‚ฌ์šฉ๋Ÿ‰์„ SQLite sessions.db์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Tokscale์€ model_config_json์—์„œ ๋ชจ๋ธ, provider_name์—์„œ ๊ณต๊ธ‰์ž, ๊ทธ๋ฆฌ๊ณ  ์„ธ์…˜๋ณ„๋กœ ๋ˆ„์ ๋œ ์ž…๋ ฅ/์ถœ๋ ฅ ํ† ํฐ ํ•ฉ๊ณ„๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ์ถ”๋ก  ํ† ํฐ์€ ํ•ด๋‹น ์ปฌ๋Ÿผ์ด ์ฑ„์›Œ์ ธ ์žˆ์„ ๋•Œ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค.

Codebuff

์œ„์น˜: ~/.config/manicode/projects/<project>/chats/<chatId>/chat-messages.json (manicode-dev ๋ฐ manicode-staging ์ฑ„๋„๋„ ์Šค์บ”; CODEBUFF_DATA_DIR๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ)

Codebuff(์ด์ „ Manicode)๋Š” ์ฑ„ํŒ…๋ณ„ JSON ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Tokscale์€ metadata.usage, metadata.codebuff.usage ๋ฐ run-state์˜ messageHistory[*].providerOptions ํด๋ฐฑ์—์„œ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์„ ํŒŒ์‹ฑํ•˜๋ฉฐ, ๋ถ€๋ถ„์ ์œผ๋กœ ๊ฐฑ์‹ ๋œ ์ตœ์‹  ํ•ญ๋ชฉ์ด ์‹ค์ œ ํ† ํฐ ์นด์šดํŠธ๋ฅผ ๊ฐ€์ง„ ์ด์ „ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌ์ง€ ์•Š๋„๋ก ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ณ„ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์—†์„ ๋•Œ๋Š” chat-id ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„, ๋งˆ์ง€๋ง‰์œผ๋กœ ํŒŒ์ผ mtime์œผ๋กœ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

Gajae-Code (gjc)

์œ„์น˜: ~/.gjc/agent/sessions/<project-slug>/*.jsonl (GJC_CODING_AGENT_DIR๋กœ ์—์ด์ „ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ; GJC_CONFIG_DIR/PI_CONFIG_DIR์— agent/sessions๋ฅผ ๋ถ™์ธ ๊ฒฝ๋กœ๋„ ํ™•์ธํ•˜๋ฉฐ, Linux/macOS์—์„œ๋Š” $XDG_DATA_HOME/gjc/sessions/๋กœ ๋‹จ์ถ•๋œ ๊ฒฝ๋กœ๋„ ์ง€์›). ๋ށ์Šค-2 ํŒจ์Šค๋ณ„ ์„œ๋ธŒ์—์ด์ „ํŠธ ์ „์‚ฌ๋ณธ(<slug>/<session>/N-*.jsonl)๋„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

์„ธ์…˜ ํ—ค๋”์™€ ๋ฉ”์‹œ์ง€ ํ•ญ๋ชฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ JSONL ํ˜•์‹์ž…๋‹ˆ๋‹ค. Tokscale์€ ์–ด์‹œ์Šคํ„ดํŠธ ๋ฉ”์‹œ์ง€๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ฉ”์‹œ์ง€๋‹น usage.cost.total(USD)์ด ์žˆ์œผ๋ฉด ๊ทธ ๊ฐ’์„ ์šฐ์„  ์‚ฌ์šฉํ•˜๊ณ , ์—†์„ ๋•Œ๋งŒ ํ† ํฐ์—์„œ ๋น„์šฉ์„ ์žฌ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค:

{"type":"session","id":"S1","timestamp":"2026-01-01T00:00:00.000Z","cwd":"/work/proj"}
{"type":"message","id":"M1","timestamp":"2026-01-01T00:00:01.000Z","message":{"role":"assistant","model":"claude-sonnet-4","provider":"anthropic","usage":{"input":1000,"output":500,"cacheRead":0,"cacheWrite":0,"totalTokens":1500,"cost":{"input":0.1,"output":0.2,"total":0.3}}}}

๋ฉ”์‹œ์ง€๋Š” <์„ธ์…˜ id>:<๋ฉ”์‹œ์ง€ id>๋กœ ์ค‘๋ณต ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค(๊ฒฐ์ •๋ก ์  ํด๋ฐฑ ํฌํ•จ). ์žฌ์‹คํ–‰๋œ ๋ށ์Šค-1/๋ށ์Šค-2 ์ „์‚ฌ๋ณธ์€ ํ•œ ๋ฒˆ๋งŒ ์ง‘๊ณ„๋ฉ๋‹ˆ๋‹ค. service_tier_change ํ•ญ๋ชฉ๊ณผ ์ž˜๋ชป๋œ ํ˜•์‹์˜ ์ค„์€ ์ค„ ๋‹จ์œ„๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

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 ์บ์‹œ: ~/.config/tokscale/cache/pricing-litellm.json
  • OpenRouter ์บ์‹œ: ~/.config/tokscale/cache/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+๋ช…์ด ํƒ‘์Šนํ•ด ์žˆ์–ด์š”!)