์ฌ๋ฌ ํ๋ซํผ์์ AI ์ฝ๋ฉ ์ด์์คํดํธ์ ํ ํฐ ์ฌ์ฉ๋๊ณผ ๋น์ฉ์ ์ถ์ ํ๋ ๊ณ ์ฑ๋ฅ CLI ๋๊ตฌ ๋ฐ ์๊ฐํ ๋์๋ณด๋
Tip
v2 ์ถ์ โ ๋ค์ดํฐ๋ธ Rust TUI, ํฌ๋ก์ค ํ๋ซํผ ์ง์ ๋ฑ.
์ ๋ ๋งค์ฃผ ์๋ก์ด ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ๊ณต๊ฐํฉ๋๋ค. ๋์น์ง ๋ง์ธ์.
| GitHub์์ @junhoyeo๋ฅผ ํ๋ก์ฐํ๊ณ ๋ ๋ง์ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ณด์ธ์. AI, ์ธํ๋ผ ๋ฑ ๋ค์ํ ๋ถ์ผ๋ฅผ ๋ค๋ฃน๋๋ค. |
|---|
| Overview | Models |
|---|---|
![]() |
![]() |
| Daily Summary | Stats |
|---|---|
![]() |
![]() |
| Frontend (3D Contributions Graph) | Wrapped 2025 |
|---|---|
![]() |
![]() |
bunx tokscale submit๋ฅผ ์คํํ์ฌ ์ฌ์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ๋๋ณด๋์ ์ ์ถํ๊ณ ๊ณต๊ฐ ํ๋กํ์ ๋ง๋์ธ์!
Tokscale์ ์๋ ํ๋ซํผ๋ค์ ํ ํฐ ์๋น๋์ ์์งํ๊ณ ๋ถ์ํด ํ ๋์ ๋ณผ ์ ์๋๋ก ํด ์ค๋๋ค.
| ๋ก๊ณ | ํด๋ผ์ด์ธํธ | ๋ฐ์ดํฐ ์์น | ์ง์ ์ฌ๋ถ |
|---|---|---|---|
![]() |
OpenCode | ~/.local/share/opencode/opencode.db (1.2+) ๋๋ ~/.local/share/opencode/storage/message/ |
โ ์ง์ |
![]() |
Claude Code | ~/.claude/projects/ |
โ ์ง์ |
![]() |
OpenClaw | ~/.openclaw/agents/ (+ ๋ ๊ฑฐ์: .clawdbot, .moltbot, .moldbot) |
โ ์ง์ |
![]() |
Codex CLI | ~/.codex/sessions/ |
โ ์ง์ |
![]() |
Gemini CLI | ~/.gemini/tmp/*/chats/*.json |
โ ์ง์ |
![]() |
Cursor IDE | ~/.config/tokscale/cursor-cache/๋ฅผ ํตํ API ๋๊ธฐํ |
โ ์ง์ |
![]() |
Amp (AmpCode) | ~/.local/share/amp/threads/ |
โ ์ง์ |
![]() |
Droid (Factory Droid) | ~/.factory/sessions/ |
โ ์ง์ |
![]() |
Pi | ~/.pi/agent/sessions/ |
โ ์ง์ |
![]() |
Kimi CLI | ~/.kimi/sessions/ |
โ ์ง์ |
![]() |
Qwen CLI | ~/.qwen/projects/ |
โ ์ง์ |
![]() |
Roo Code | ~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/tasks/ (+ server: ~/.vscode-server/data/User/globalStorage/rooveterinaryinc.roo-cline/tasks/) |
โ ์ง์ |
![]() |
Kilo | ~/.config/Code/User/globalStorage/kilocode.kilo-code/tasks/ (+ server: ~/.vscode-server/data/User/globalStorage/kilocode.kilo-code/tasks/) |
โ ์ง์ |
![]() |
Mux | ~/.mux/sessions/ |
โ ์ง์ |
![]() |
Kilo CLI | ~/.local/share/kilo/kilo.db |
โ ์ง์ |
![]() |
Crush | $XDG_DATA_HOME/crush/projects.json (ํ๋ก์ ํธ ๋ ์ง์คํธ๋ฆฌ, ๊ธฐ๋ณธ๊ฐ: ~/.local/share/crush/projects.json) |
โ ์ง์ |
![]() |
Synthetic | hf: ๋ชจ๋ธ/synthetic provider ๊ฐ์ง๋ก ๋ค๋ฅธ ์์ค์์ ์ฌ๊ท์ (+ Octofriend: ~/.local/share/octofriend/sqlite.db) |
โ ์ง์ |
๐ LiteLLM์ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ์ค์๊ฐ ๋น์ฉ ๊ณ์ฐ์ ์ ๊ณตํฉ๋๋ค. ๊ตฌ๊ฐ๋ณ ๊ฐ๊ฒฉ ๋ชจ๋ธ(๋์ฉ๋ ์ปจํ ์คํธ ๋ฑ)๊ณผ ์บ์ ํ ํฐ ํ ์ธ๋ ์ง์ํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ **์นด๋ฅด๋ค์ผํ ์ฒ๋(Kardashev Scale)**์์ ์๊ฐ์ ๋ฐ์์ต๋๋ค. ์นด๋ฅด๋ค์ผํ ์ฒ๋๋ ๋ฌธ๋ช ์ ๊ธฐ์ ์์ค์ ์๋์ง ์๋น๋์ผ๋ก ๋ถ๋ฅํฉ๋๋ค. ์ ํ I ๋ฌธ๋ช ์ ํ์ฑ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์๋์ง๋ฅผ ํ์ฉํ๊ณ , ์ ํ II๋ ํญ์ฑ์ ์ ์ฒด ์ถ๋ ฅ์ ํฌ์ฐฉํ๋ฉฐ, ์ ํ III๋ ์ํ ์ ์ฒด์ ์๋์ง๋ฅผ ํต์ ํฉ๋๋ค.
AI ์ง์ ๊ฐ๋ฐ ์๋์ ํ ํฐ์ ์๋ก์ด ์๋์ง์ ๋๋ค. ํ ํฐ์ ์ฐ๋ฆฌ์ ์ฌ๊ณ ๋ ฅ์ ๊ตฌ๋ํ๊ณ , ์์ฐ์ฑ์ ๋์ด๋ฉฐ, ์ฐฝ์์ ๊ฒฐ๊ณผ๋ฌผ์ ์ด๋์ด๋ ๋๋ค. ์นด๋ฅด๋ค์ผํ ์ฒ๋๊ฐ ์ฐ์ฃผ์ ๊ท๋ชจ์์ ์๋์ง ์๋น๋ฅผ ์ถ์ ํ๋ฏ, Tokscale์ AI ์ฆ๊ฐ ๊ฐ๋ฐ์ ๋จ๊ณ๋ฅผ ์ฌ๋ผ๊ฐ๋ฉฐ ํ ํฐ ์๋น๋ฅผ ์ธก์ ํ๊ณ ์๊ฐํํฉ๋๋ค. ๊ฐ๋ณ๊ฒ ์ฐ๋ ์ฌ์ฉ์๋ ๋งค์ผ ์๋ฐฑ๋ง ๊ฐ์ ํ ํฐ์ ์๋นํ๋ ํ์ ์ ์ ๋ , Tokscale์ "๋ด๊ฐ ์ด๋์์ ๋ฌด์์ ์ผ๋ง๋ ์ฐ๊ณ ์๋์ง"๋ฅผ ๋ถ๋ช ํ๊ฒ ๋ณด์ฌ์ค๋๋ค.
- ๊ฐ์
- ๊ธฐ๋ฅ
- ์ค์น
- ์ฌ์ฉ๋ฒ
- ํ๋ก ํธ์๋ ์๊ฐํ
- ์์ ํ๋ซํผ
- Wrapped 2025
- ๊ฐ๋ฐ
- ์ง์ ํ๋ซํผ
- ์ธ์ ๋ฐ์ดํฐ ๋ณด์กด
- ๋ฐ์ดํฐ ์์ค
- ๊ฐ๊ฒฉ
- ๊ธฐ์ฌ
- ๊ฐ์ฌ์ ๊ธ
- ๋ผ์ด์ ์ค
- ์ธํฐ๋ํฐ๋ธ 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๋ฅผ ์ค์นํฉ๋๋ค.
๋ก์ปฌ ๊ฐ๋ฐ ๋๋ ์์ค์์ ๋น๋ํ๋ ๊ฒฝ์ฐ:
# ์ ์ฅ์ ํด๋ก
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 ๋ชจ๋๋ ๋ค์์ ์ ๊ณตํฉ๋๋ค:
- 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์กฐํ ์ ๋ต:
๊ฐ๊ฒฉ ์กฐํ๋ ๋ค๋จ๊ณ ํด์ ์ ๋ต์ ์ฌ์ฉํฉ๋๋ค:
- ์ ํํ ์ผ์น - LiteLLM/OpenRouter ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์กฐํ
- ๋ณ์นญ ํด์ - ์น์ํ ์ด๋ฆ ํด์ (์:
big-pickleโglm-4.7) - ํฐ์ด ์ ๋ฏธ์ฌ ์ ๊ฑฐ - ํ์ง ํฐ์ด ์ ๊ฑฐ (
gpt-5.2-xhighโgpt-5.2) - ๋ฒ์ ์ ๊ทํ - ๋ฒ์ ํ์ ์ฒ๋ฆฌ (
claude-3-5-sonnetโclaude-3.5-sonnet) - ํ๋ก๋ฐ์ด๋ ์ ๋์ฌ ๋งค์นญ - ์ผ๋ฐ ์ ๋์ฌ ์๋ (
anthropic/,openai/๋ฑ) - Cursor ๋ชจ๋ธ ๊ฐ๊ฒฉ - LiteLLM/OpenRouter์ ์์ง ์๋ ๋ชจ๋ธ์ ํ๋์ฝ๋ฉ ๊ฐ๊ฒฉ (์:
gpt-5.3-codex) - ํผ์ง ๋งค์นญ - ๋ถ๋ถ ๋ชจ๋ธ ์ด๋ฆ์ ๋ํ ๋จ์ด ๊ฒฝ๊ณ ๋งค์นญ
ํ๋ก๋ฐ์ด๋ ์ฐ์ ์์:
์ฌ๋ฌ ์ผ์น ํญ๋ชฉ์ด ์์ ๋ ์๋ณธ ๋ชจ๋ธ ์ ์์ฌ๊ฐ ๋ฆฌ์ ๋ฌ๋ณด๋ค ์ฐ์ ๋ฉ๋๋ค:
| ์ฐ์ (์๋ณธ) | ํ์์ (๋ฆฌ์ ๋ฌ) |
|---|---|
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 logoutCursor 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 ์ธ์ ํ ํฐ ์ป๋ ๋ฐฉ๋ฒ:
- ๋ธ๋ผ์ฐ์ ์์ https://www.cursor.com/settings ์ด๊ธฐ
- ๊ฐ๋ฐ์ ๋๊ตฌ ์ด๊ธฐ (F12)
- ์ต์
A - Network ํญ: ํ์ด์ง์์ ์๋ฌด ๋์์ ํ๊ณ ,
cursor.com/api/*์ ๋ํ ์์ฒญ์ ์ฐพ์, Request Headers์์Cookieํค๋๋ฅผ ํ์ธํ๊ณ ,WorkosCursorSessionToken=๋ค์ ๊ฐ๋ง ๋ณต์ฌ - ์ต์
B - Application ํญ: Application โ Cookies โ
https://www.cursor.com์ผ๋ก ์ด๋,WorkosCursorSessionToken์ฟ ํค๋ฅผ ์ฐพ์ ๊ฐ ๋ณต์ฌ (์ฟ ํค ์ด๋ฆ์ด ์๋ ๊ฐ)
โ ๏ธ ๋ณด์ ๊ฒฝ๊ณ : ์ธ์ ํ ํฐ์ ๋น๋ฐ๋ฒํธ์ฒ๋ผ ์ทจ๊ธํ์ธ์. ์ ๋ ๊ณต๊ฐ์ ์ผ๋ก ๊ณต์ ํ๊ฑฐ๋ ๋ฒ์ ๊ด๋ฆฌ์ ์ปค๋ฐํ์ง ๋ง์ธ์. ํ ํฐ์ Cursor ๊ณ์ ์ ๋ํ ์ ์ฒด ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
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์ ์ ํฉํฉ๋๋ค.
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
tokscale sources tokscale sources --json ```
CI/CD ํตํฉ ์์:
```bash
- 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 devhttp://localhost:3000์ ์ด์ด ์์ ํ๋ซํผ์ ์ ๊ทผํ์ธ์.
Tokscale์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ๋ค๋ฅธ ๊ฐ๋ฐ์์ ๊ฒฝ์ํ ์ ์๋ ์์ ํ๋ซํผ์ ํฌํจํฉ๋๋ค.
- ๋ฆฌ๋๋ณด๋ - ๋ชจ๋ ํ๋ซํผ์์ ๊ฐ์ฅ ๋ง์ ํ ํฐ์ ์ฌ์ฉํ๋ ์ฌ๋ ํ์ธ
- ์ฌ์ฉ์ ํ๋กํ - ๊ธฐ์ฌ ๊ทธ๋ํ์ ํต๊ณ๊ฐ ์๋ ๊ณต๊ฐ ํ๋กํ
- ๊ธฐ๊ฐ ํํฐ๋ง - ์ ์ฒด ๊ธฐ๊ฐ, ์ด๋ฒ ๋ฌ, ์ด๋ฒ ์ฃผ ํต๊ณ ์กฐํ
- GitHub ํตํฉ - GitHub ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ
- ๋ก์ปฌ ๋ทฐ์ด - ์ ์ถํ์ง ์๊ณ ๋น๊ณต๊ฐ๋ก ๋ฐ์ดํฐ ์กฐํ
GitHub ํ๋กํ README์ Tokscale ๊ณต๊ฐ ํต๊ณ๋ฅผ ์ง์ ์๋ฒ ๋ํ ์ ์์ต๋๋ค:
[](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
shields.io ์คํ์ผ์ ๋ ๊ฐ๊ฒฐํ ๋ฑ์ง๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค:
<username>์ GitHub ์ฌ์ฉ์๋ช ์ผ๋ก ๊ต์ฒดํ์ธ์- ์ ํ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ:
metric=tokens(๊ธฐ๋ณธ๊ฐ),metric=cost, ๋๋metric=rankstyle=flat(๊ธฐ๋ณธ๊ฐ) ๋๋style=flat-squaresort=tokens(๊ธฐ๋ณธ๊ฐ) ๋๋sort=cost๋ญํน ๊ธฐ์ค ์ ์ดcompact=1๊ฐ๊ฒฐํ ์ซ์ ํ๊ธฐ ์ฌ์ฉ (์:1.2M,$3.4K)label=<ํ ์คํธ>์ผ์ชฝ ๋ผ๋ฒจ ์ปค์คํ color=<hex>์ค๋ฅธ์ชฝ ๋ฐฐ๊ฒฝ์ ์ปค์คํ (์:color=ff5733)
- ์์:
https://tokscale.ai/api/badge/<username>/svg?metric=cost&compact=1https://tokscale.ai/api/badge/<username>/svg?metric=rank&sort=cost&style=flat-square
- ๋ก๊ทธ์ธ -
tokscale login์ ์คํํ์ฌ GitHub๋ก ์ธ์ฆ - ์ ์ถ -
tokscale submit์ ์คํํ์ฌ ์ฌ์ฉ๋ ๋ฐ์ดํฐ ์ ๋ก๋ - ์กฐํ - ์น ํ๋ซํผ์ ๋ฐฉ๋ฌธํ์ฌ ํ๋กํ๊ณผ ๋ฆฌ๋๋ณด๋ ํ์ธ
์ ์ถ๋ ๋ฐ์ดํฐ๋ ๋ ๋ฒจ 1 ๊ฒ์ฆ์ ๊ฑฐ์นฉ๋๋ค:
- ์ํ์ ์ผ๊ด์ฑ (ํฉ๊ณ ์ผ์น, ์์ ์์)
- ๋ฏธ๋ ๋ ์ง ์์
- ํ์ ํ๋ ์กด์ฌ
- ์ค๋ณต ๊ฐ์ง
Spotify Wrapped์์ ์๊ฐ์ ๋ฐ์, AI ์ฝ๋ฉ ์ด์์คํดํธ ์ฌ์ฉ๋์ ์์ฝํ ์๋ฆ๋ค์ด ์ฐ๊ฐ ๋ฆฌ๋ทฐ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
bunx tokscale@latest wrapped |
bunx tokscale@latest wrapped --clients |
bunx tokscale@latest wrapped --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 tuipackages/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 | โ ์ง์ |
Tokscale์ Windows๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. TUI์ CLI๋ macOS/Linux์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค.
Windows ์ค์น:
# Bun ์ค์น (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"
# tokscale ์คํ
bunx tokscale@latestAI ์ฝ๋ฉ ๋๊ตฌ๋ค์ ํฌ๋ก์ค ํ๋ซํผ ์์น์ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋๋ถ๋ถ์ ๋๊ตฌ๋ ๋ชจ๋ ํ๋ซํผ์์ ๋์ผํ ์๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค:
| ๋๊ตฌ | 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๋ฑ)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Tokscale์ ๋ค์ ์์น์ ์ค์ ์ ์ ์ฅํฉ๋๋ค:
- ์ค์ :
%USERPROFILE%\.config\tokscale\settings.json - ์บ์:
%USERPROFILE%\.cache\tokscale\ - Cursor ์๊ฒฉ ์ฆ๋ช
:
%USERPROFILE%\.config\tokscale\cursor-credentials.json
๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๋ถ AI ์ฝ๋ฉ ์ด์์คํดํธ๋ ์ค๋๋ ์ธ์ ํ์ผ์ ์๋์ผ๋ก ์ญ์ ํฉ๋๋ค. ์ ํํ ์ถ์ ์ ์ํด ์ฌ์ฉ ๊ธฐ๋ก์ ๋ณด์กดํ๋ ค๋ฉด ์ ๋ฆฌ ๊ธฐ๊ฐ์ ๋นํ์ฑํํ๊ฑฐ๋ ์ฐ์ฅํ์ธ์.
| ํ๋ซํผ | ๊ธฐ๋ณธ๊ฐ | ์ค์ ํ์ผ | ๋นํ์ฑํ ์ค์ | ์ถ์ฒ |
|---|---|---|---|---|
| Claude Code | ~/.claude/settings.json |
"cleanupPeriodDays": 9999999999 |
๋ฌธ์ | |
| Gemini CLI | ๋นํ์ฑํ๋จ | ~/.gemini/settings.json |
"general.sessionRetention.enabled": false |
๋ฌธ์ |
| Codex CLI | ๋นํ์ฑํ๋จ | N/A | ์ ๋ฆฌ ๊ธฐ๋ฅ ์์ | #6015 |
| OpenCode | ๋นํ์ฑํ๋จ | N/A | ์ ๋ฆฌ ๊ธฐ๋ฅ ์์ | #4980 |
๊ธฐ๋ณธ๊ฐ: 30์ผ ์ ๋ฆฌ ๊ธฐ๊ฐ
~/.claude/settings.json์ ์ถ๊ฐ:
{
"cleanupPeriodDays": 9999999999
}๋งค์ฐ ํฐ ๊ฐ (์:
9999999999์ผ โ 2700๋ง ๋ )์ ์ค์ ํ๋ฉด ์ฌ์ค์ ์ ๋ฆฌ๊ฐ ๋นํ์ฑํ๋ฉ๋๋ค.
๊ธฐ๋ณธ๊ฐ: ์ ๋ฆฌ ๋นํ์ฑํ๋จ (์ธ์ ์ด ์๊ตฌ ๋ณด์กด)
์ ๋ฆฌ๋ฅผ ํ์ฑํํ๋ค๊ฐ ๋นํ์ฑํํ๋ ค๋ฉด ~/.gemini/settings.json์์ ์ ๊ฑฐํ๊ฑฐ๋ enabled: false๋ก ์ค์ :
{
"general": {
"sessionRetention": {
"enabled": false
}
}
}๋๋ ๋งค์ฐ ๊ธด ๋ณด์กด ๊ธฐ๊ฐ ์ค์ :
{
"general": {
"sessionRetention": {
"enabled": true,
"maxAge": "9999999d"
}
}
}๊ธฐ๋ณธ๊ฐ: ์๋ ์ ๋ฆฌ ์์ (์ธ์ ์ด ์๊ตฌ ๋ณด์กด)
Codex CLI๋ ๋ด์ฅ ์ธ์
์ ๋ฆฌ๊ฐ ์์ต๋๋ค. ~/.codex/sessions/์ ์ธ์
์ ๋ฌด๊ธฐํ ์ ์ง๋ฉ๋๋ค.
์ฐธ๊ณ : ์ด์ ๋ํ ๊ธฐ๋ฅ ์์ฒญ์ด ์์ต๋๋ค: #6015
๊ธฐ๋ณธ๊ฐ: ์๋ ์ ๋ฆฌ ์์ (์ธ์ ์ด ์๊ตฌ ๋ณด์กด)
OpenCode๋ ๋ด์ฅ ์ธ์
์ ๋ฆฌ๊ฐ ์์ต๋๋ค. ~/.local/share/opencode/storage/์ ์ธ์
์ ๋ฌด๊ธฐํ ์ ์ง๋ฉ๋๋ค.
์ฐธ๊ณ : #4980 ์ฐธ์กฐ
์์น: ~/.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/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/sessions/*.jsonl
token_count ์ด๋ฒคํธ๊ฐ ์๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ์:
{"type": "event_msg", "payload": {"type": "token_count", "info": {"last_token_usage": {"input_tokens": 1234, "output_tokens": 567}}}}์์น: ~/.gemini/tmp/{projectHash}/chats/*.json
๋ฉ์์ง ๋ฐฐ์ด์ ํฌํจํ ์ธ์ ํ์ผ:
{
"sessionId": "xxx",
"messages": [
{"type": "gemini", "model": "gemini-2.5-pro", "tokens": {"input": 1234, "output": 567, "cached": 890, "thoughts": 123}}
]
}์์น: ~/.config/tokscale/cursor-cache/ (Cursor API๋ฅผ ํตํด ๋๊ธฐํ)
Cursor ๋ฐ์ดํฐ๋ ์ธ์
ํ ํฐ์ ์ฌ์ฉํ์ฌ Cursor API์์ ๊ฐ์ ธ์ ๋ก์ปฌ์ ์บ์๋ฉ๋๋ค. ์ธ์ฆํ๋ ค๋ฉด tokscale cursor login์ ์คํํ์ธ์. ์ค์ ์๋ด๋ Cursor IDE ๋ช
๋ น์ด๋ฅผ ์ฐธ์กฐํ์ธ์.
์์น: ~/.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/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/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/projects/{PROJECT_PATH}/chats/{CHAT_ID}.jsonl
ํ์: JSONL โ ์ค๋น ํ๋์ JSON ๊ฐ์ฒด, ๊ฐ๊ฐ type, model, timestamp, sessionId, usageMetadata ํ๋ ํฌํจ.
ํ ํฐ ํ๋ (usageMetadata์์):
promptTokenCountโ ์ ๋ ฅ ํ ํฐcandidatesTokenCountโ ์ถ๋ ฅ ํ ํฐthoughtsTokenCountโ ์ถ๋ก /์ฌ๊ณ ํ ํฐcachedContentTokenCountโ ์บ์๋ ์ ๋ ฅ ํ ํฐ
์์น:
- ๋ก์ปฌ:
~/.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\"}"
}์์น:
- ๋ก์ปฌ:
~/.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์ด๋ฒคํธ๋ง ๊ณ์ฐtextJSON์์tokensIn,tokensOut,cacheReads,cacheWrites,cost,apiProtocolํ์ฑ- ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ธ์ ํ
api_conversation_history.json์์ ๋ชจ๋ธ/์์ด์ ํธ ๋ฉํ๋ฐ์ดํฐ ๋ณด๊ฐ
์์น:
~/.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์ ์ํด ์๋์ผ๋ก ์์ ์ธ์
์ ํฉ์ฐ๋๋ฏ๋ก ์ค๋ณต ์ง๊ณ๊ฐ ์์ต๋๋ค
์์น: ~/.local/share/kilo/kilo.db
Kilo CLI๋ OpenCode์ ์ ์ฌํ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ฐ ๋ฉ์์ง ํ์๋ ๋ชจ๋ธ ๋ฐ ๊ณต๊ธ์ ์์ฑ๊ณผ ํจ๊ป ๋ฉ์์ง๋ณ ํ ํฐ ๋ถ๋ฅ(์ ๋ ฅ, ์ถ๋ ฅ, ์บ์ ์ฝ๊ธฐ/์ฐ๊ธฐ, ์ถ๋ก )๊ฐ ํฌํจ๋ฉ๋๋ค.
์์น: $XDG_DATA_HOME/crush/projects.json๋ฅผ ํตํด ๋ฐ๊ฒฌ๋๋ ํ๋ก์ ํธ๋ณ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค (๊ธฐ๋ณธ๊ฐ: ~/.local/share/crush/projects.json)
Crush๋ ํ๋ก์ ํธ๋ณ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค(crush.db)์ ์ฌ์ฉ๋์ ์ ์ฅํฉ๋๋ค. Crush๋ ์ ๋ขฐํ ์ ์๋ ๋ฉ์์ง๋ณ ๋๋ ๋ชจ๋ธ๋ณ ํ ํฐ ์ง๊ณ๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก, Tokscale์ ๋ฃจํธ ์ธ์
์ ์ธ์
์์ค ๋น์ฉ ํฉ๊ณ๋ง ๊ฐ์ ธ์ต๋๋ค. ๋ ์ฝ๋๋ model=session-total๋ก ํ์๋๋ฉฐ ํ ํฐ ๋ถ๋ฅ๋ 0์
๋๋ค.
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 ํ ํฐ ์ด์)
๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค! ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
- ์ ์ฅ์ ํฌํฌ
- ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ (
git checkout -b feature/amazing-feature) - ๋ณ๊ฒฝ ์ฌํญ ์์ฑ
- ํ
์คํธ ์คํ (
cd packages/core && bun run test:all) - ๋ณ๊ฒฝ ์ฌํญ ์ปค๋ฐ (
git commit -m 'Add amazing feature') - ๋ธ๋์น์ ํธ์ (
git push origin feature/amazing-feature) - Pull Request ์ด๊ธฐ
- ๊ธฐ์กด ์ฝ๋ ์คํ์ผ ๋ฐ๋ฅด๊ธฐ
- ์๋ก์ด ๊ธฐ๋ฅ์ ํ ์คํธ ์ถ๊ฐ
- ํ์์ ๋ฐ๋ผ ๋ฌธ์ ์ ๋ฐ์ดํธ
- ์ปค๋ฐ์ ์ง์ค์ ์ด๊ณ ์์์ ์ผ๋ก ์ ์ง
- ์๊ฐ์ ์ค ccusage, viberank, Isometric Contributions
- ํฐ๋ฏธ๋ UI ํ๋ ์์ํฌ Ratatui
- ๋ฐ์ํ ๋ ๋๋ง์ ์ํ Solid.js
- ๊ฐ๊ฒฉ ๋ฐ์ดํฐ๋ฅผ ์ํ LiteLLM
- Rust/Node.js ๋ฐ์ธ๋ฉ์ ์ํ napi-rs
- 2D ๊ทธ๋ํ ์ฐธ์กฐ๋ฅผ ์ํ github-contributions-canvas
MIT ยฉ Junho Yeo
์ด ํ๋ก์ ํธ๊ฐ ํฅ๋ฏธ๋กญ๋ค๋ฉด **์คํ(โญ)**๋ฅผ ๋๋ฌ์ฃผ์ธ์.
GitHub์์ ์ ๋ฅผ ํ๋ก์ฐํ๊ณ ํจ๊ป ๋น๋ํด๋ ์ข์์. (์ด๋ฏธ 1.1k+๋ช
์ด ํ์นํด ์์ด์!)



























