RunTime(์ ์ด๋ฆ TokenCat)์ ๋ง๋ค๋ฉด์ ์ ํ ์ค๊ณ, ์ฐ ์ซ์, ๊ฒช์ ๋ฌธ์ ๋ฅผ ๋ชจ์๋ค. ์ฌ์ฉ๋ฒ์ README์ ์๋ค.
- ๊ธฐ๊ฐ: 2026.07๋ถํฐ. ์ดํ ๋์ ๊ธฐํ์ ์์ฑ, M0~M3, v1.1, ์คํ์์ค ๋ฐฐํฌ๊น์ง ํ๊ณ ์ดํ ๋ฌ๋ยท๋ฏธ๋๊ฒ์ยท์์ยท์ ๋ฐ์ดํธ๋ฅผ ๋ํ๋ค.
- ์คํ: Swift 5.9, SwiftUI + AppKit(NSStatusItem), SPM, macOS 13+
- UX ์ฐธ๊ณ : RunCat(๋ฉ๋ด๋ฐ ๋ฌ๋์ ๋คํฌ ํ์ค๋ฒ), ๋ฅ์บฃ(๋ฌด์ง๊ฐ ๊ผฌ๋ฆฌ)
- ์ฝ๋ฉํ๋ค๊ฐ ์์ ์ ์ฎ๊ธฐ์ง ์๊ณ ๋ ์ง๊ธ ํ ํฐ์ ์ผ๋ง๋ ์ฐ๊ณ ์๋์ง ๋ฌ๋ ์๋๋ก ๋๋ผ๊ฒ ํ๋ค.
- ํด๋ฆญ ํ ๋ฒ์ผ๋ก 5์๊ฐ ์ธ์ ์ฌ์ฉ๋, ์ฃผ๊ฐ ์ฌ์ฉ๋, ์ค๋ ํ ํฐ๊ณผ ์ถ์ ๋น์ฉ, ์ด๊ธฐํ ์๊ฐ์ ๋ณธ๋ค.
- ํ๋๊ฐ ๊ฐ๊น์์ง๋ฉด(80%/95%) ๋ฌ๋ ๋ชจ์ต๊ณผ macOS ์๋ฆผ์ผ๋ก ๋ฏธ๋ฆฌ ์๋ฆฐ๋ค.
- ํ์ง ์์ ๊ฒ: Windows/Linux ์ง์, ํ ๋จ์ ์ง๊ณ, ๊ณผ๊ฑฐ ํต๊ณ ์ฐจํธ, App Store ๋ฐฐํฌ
| ํญ๋ชฉ | ๊ฒฐ๊ณผ |
|---|---|
| ์ง๊ณ ์ ํ๋ | ๊ฒ์ฆ ๋๊ตฌ ccusage blocks์ ๋์์ ๋์กฐ ์ค์ฐจ 0.00% (์๋์์น ๊ฒ์ฆ: ์ธก์ โ๋์กฐโ์ธก์ ) |
| ๊ณต์ ๊ฒ์ด์ง | ๋น๋ฌธ์ํ OAuth usage ์๋ํฌ์ธํธ ์ค์ธก ์ฐ๋ โ ๊ฒ์ด์ง๋ ๊ณต์ ๊ฐ๋ง ํ์ํด /usage์ ๋์ผ ๊ฐ |
| ์ฑ๋ฅ | ์ ํด CPU 0.05%, 30fps ์ง์ฃผ 0.5% (์์ฐ 0.5%), ๋ฉ๋ชจ๋ฆฌ 17~21MB (์์ฐ 50MB) โ ์ค์ธก |
| ํ์ง | ๋จ์ ํ
์คํธ 102๊ฐ (swift-testing, ./scripts/test.sh) โ ํ์ยท์ค๋ณต์ ๊ฑฐยท๋ธ๋กยท๊ฒ์ด์งยท์๋ฆผยทํฑ ํ๋จ, ๊ฒ์ ๊ท์น |
| ๋ฐ์ดํฐ ๊ฒ์ฆ | ์ค๋ฌผ JSONL 1,432๊ฑด ๋ถ์ โ ์ค๋ณต ๊ธฐ๋ก(์ต๋ 6์ค) ๋ฐ๊ฒฌ, ์ค๋ณต์ ๊ฑฐ ๋ฏธ์ ์ฉ ์ 2.9๋ฐฐ ๊ณผ๋์ง๊ณ ํ์ธ |
| ๋ฐฐํฌ | git clone + ./install.sh 3์ค ์ค์น (๋ก์ปฌ ๋น๋ โ Gatekeeper ์ฐจ๋จ ์์), MIT ์คํ์์ค |
์์น: ๋ฌธ์ยท์ถ์ธก๋ณด๋ค ์ค๋ฌผ ๋ฐ์ดํฐ ์ฐ์ . ๊ตฌํ ์ฒซ๋ (M0)์ ์คํ์ดํฌ๋ก ์ฌ๊ฒ์ฆํ๋ค.
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ์์ฒ ๋ฐ์ดํฐ | ~/.claude/projects/**/*.jsonl โ Claude Code๊ฐ ์ธ์
๋ณ ๋ํยทusage ๊ธฐ๋ก. assistant ๋ฉ์์ง์ message.usage(input/output/cache_creation/cache_read tokens), timestamp, message.model, requestId |
| ๊ฒ์ฆ๋ ์ ๋ก | ccusage(CLI)๊ฐ ๋์ผ JSONL์ ํ์ฑํด ์ผ๋ณ/์ธ์ /5์๊ฐ ๋ธ๋ก ๋ฆฌํฌํธ ์ ๊ณต โ ํ์ฑยท์ค๋ณต์ ๊ฑฐยท๋จ๊ฐ ๋ก์ง ์ฐธ์กฐ |
| 5์๊ฐ ๋ธ๋ก | ์ฒซ ํ๋ ์๊ฐ์ UTC ์ ์๋ก ๋ด๋ฆผ(floor)ํ ์์ ๋ถํฐ 5์๊ฐ ์ฐฝ (ccusage์ ๋์ผ ๊ท์น) |
| ์ฃผ๊ฐ ์ฌ์ฉ๋ | ๊ณต์ ๋ฆฌ์ ์๊ฐ์ ์๋ฉด ๊ทธ ์ฃผ๊ฐ ์ฐฝ, ๋ชจ๋ฅด๋ฉด ์ต๊ทผ 7์ผ ๋กค๋ง ํฉ๊ณ (๋ชจ๋ธ ๋น์ค ํ์์ฉ) |
| ๊ณต์ ์ฌ์ฉ๋ % (๊ฒ์ด์ง) | ๋น๋ฌธ์ํ OAuth usage ์๋ํฌ์ธํธ โ Claude Code๊ฐ ๋ก์ปฌ์ ์ ์ฅํ OAuth ํ ํฐ์ผ๋ก ์กฐํํ๋ฉด /usage์ ๋์ผํ ์ธ์
ยท์ฃผ๊ฐ %์ ๋ฆฌ์
์๊ฐ ์๋ต. ์น/๋ฐ์คํฌํฑ ์ฌ์ฉ๋๊น์ง ํฉ์ฐ๋ ๊ณ์ ๋จ์ ๊ณต์ ๋ฐ์ดํฐ๋ผ ํ๋ ์ ํยท์บ๋ฆฌ๋ธ๋ ์ด์
์์ด ์ ํ. ์ด์ฉ ๊ท์น: ํด๋ง 180์ด, ์ฌ๋ฐ๋ฅธ User-Agent ํ์(์์ผ๋ฉด 429 ์ง์), ํ ํฐ ๋ง๋ฃ ๋์ |
| ๊ณต์ ๊ฐ์ด ์์ ๋ | ์ฐ๋์ ๋๊ฑฐ๋ ์กฐํ์ ์คํจํ๋ฉด ์ธ์
ยท์ฃผ๊ฐ ๊ฒ์ด์ง๋ฅผ --๋ก ๋น์ฐ๊ณ ์ด์ ๋ฅผ ํ์. ๋ก์ปฌ ๊ธฐ๋ก์ผ๋ก %๋ฅผ ์ถ์ ํ์ง ์๋๋ค (์ฌ๋ก 4) |
| ์ฃผ์ | 2026-06-15๋ถํฐ ํ๋ก๊ทธ๋๋งคํฑ ์ฌ์ฉ(Agent SDK, claude -p)์ ๋ณ๋ ํฌ๋ ๋ง ํ โ v1์ entrypoint์ "sdk" ๋ง์ปค๋ก ๋ถ๋ฆฌ ํ์ |
์ญํ ๋ถ๋ด(ํ์ด๋ธ๋ฆฌ๋): ์ธ์ /์ฃผ๊ฐ ๊ฒ์ด์ง % = ๊ณต์ ์๋ํฌ์ธํธ(๊ณ์ ๋จ์, ์น ํฌํจ), ๊ณ ์์ด ์๋ยท์ค๋ ํ ํฐยท์คํํฌ๋ผ์ธ = ๋ก์ปฌ JSONL(์ด ๋จ์ ์ค์๊ฐ, Claude Code๋ถ). ๊ณต์ ๊ฐ์ด ์์ผ๋ฉด ๊ฒ์ด์ง๋ฅผ ๋น์ฐ๊ณ ๋ก์ปฌ ๊ฐ์ผ๋ก ์ฑ์ฐ์ง ์๋๋ค.
M0 ์คํ์ดํฌ์์ ๋ฐ๊ฒฌํ ๊ฒ (๋ฌธ์์ ์ค๋ฌผ์ ์ฐจ์ด)
- ๊ฐ์ ์๋ต์ด ์คํธ๋ฆฌ๋ฐ ์ฒญํฌ ๋จ์๋ก ์ต๋ 6์ค ์ค๋ณต ๊ธฐ๋ก โ
message.id + requestId์กฐํฉ์ผ๋ก ์ค๋ณต ์ ๊ฑฐ ํ์ (๋ฏธ์ ์ฉ ์ 2.9๋ฐฐ ๊ณผ๋์ง๊ณ). 1,432๊ฑด โ ๊ณ ์ 497๊ฑด ์ค์ธก. - usage๊ฐ ์ ๋ถ 0์ธ
<synthetic>๋ชจ๋ธ ๋ ์ฝ๋ ์กด์ฌ โ ๋ช ์์ ์คํต. - ๊ณต์ ์ธ์
๋ฆฌ์
์๊ฐ์ UTC ์ ์๊ฐ ์๋(์ค์ธก 11:50Z) โ ๊ฒ์ด์ง ๋ฆฌ์
์ ๊ณต์
resets_at, ๋ก์ปฌ ๋ธ๋ก ๊ณ์ฐ์ ์๋ยทํ ํฐ๋ ์ ์ฉ์ผ๋ก ๋ถ๋ฆฌ. - ์๋ต์ ์ ๋๊ฐ(ํ๋ ๋ฌ๋ฌ/ํ ํฐ) ์์ โ ๋ก์ปฌ ํ ํฐ์ผ๋ก %๋ฅผ ํ์ฐํ ์ ์๋ค (ํธ๋ฌ๋ธ์ํ ์ฌ๋ก 2, 4).
- ๋ฌ๋ 22์ข : ๋๋ฌผ 15์ข (๊ณ ์์ดยท๊ฐ์์งยทํ ๋ผยท์ฌ์ฐยทํญ๊ทยท์ค๋ฆฌยท๊ณต๋ฃกยท๊ณ ์ด๋์นยท๋ณ์๋ฆฌยท๊ฐ๊ตฌ๋ฆฌยทํ๋คยท๊ฑฐ๋ถ์ดยท๋ฌํฝ์ดยท๋ฌธ์ดยท๊ณ ๋) ๊ณผ ํํ์ง 7์ข (์ ๋ นยท์ฌ๋ผ์ยท๋ก๋ดยทUFOยท๋์ยท์ ๋์ฝยท๋๋๊ณค). ๋ชจ๋ ์ง์ ๊ทธ๋ฆฐ ๋ฒกํฐ ์บ๋ฆญํฐ๋ค.
- ๋ํ(ํ์, 2๊ด์ ๋ค๋ฆฌ, ๋์ด ๊ฐ๋์ด์ง๋ ๊ผฌ๋ฆฌ)์ผ๋ก ๊ทธ๋ฆฌ๊ณ ๋ฐ์ ๋
์ ์ง์๋ค ๋ค๋ฆฌ๋ ๊ถค์ ์ ๊ณ์ฐํ๋ค
(
Characters/). ๋ฉ๋ด๋ฐ๋ ๋จ์ ์ค๋ฃจ์ฃ, ํ์ค๋ฒยท์ค์ ์ ์ธ๊ณฝ์ ๊ณผ ๋ช ์์ ๋ฃ์ ์ปฌ๋ฌ. - ๋ฌ๋๋ง๋ค ์ ์์ธ์ ํค์ ๋ฌ๋ฆฌ๋ ๋์์ ํญ์ ์ฌ์ 36ร22 ์ค๊ณ ์นธ์ ๋น์ทํ๊ฒ ์ฑ์ฐ๋๋ก ์๋์ผ๋ก ํค์ด๋ค. ๋ณ์๋ฆฌยทํญ๊ท์ฒ๋ผ ์๊ฒ ๊ทธ๋ฆฐ ๋ฌ๋๋ ๋ฉ๋ด๋ฐ์์ ์ ๋ณด์ธ๋ค.
- ๋ฉ๋ด๋ฐ ํฌ๊ธฐ: ์ํ ๋ฒํผ(22pt)๋ณด๋ค ๋์ ๋ฉ๋ด๋ฐ ์ฐฝ(macOS 27์์ 30pt)๊น์ง ๋ฌ๋ ์นธ์ ๋ํ ๊ทธ๋ฆฐ๋ค. (30pt ์ฐฝ์ด๋ฉด ์ฝ 49ร30pt.) ์ค์ ์ ํฌ๊ธฐ๊ฐ ํฌ๊ฒ(๊ธฐ๋ณธ)๋ฉด ๋จธ๋ฆฌ ์ ํจ๊ณผ ์๋ฆฌ๋ฅผ ์ค์ฌ ์ต๋ 1.1๋ฐฐ๋ก ํค์ฐ๊ณ (์ ์๋ ๋ชธ๊ณผ ํ ๋๋ฆฌ๊ฐ ์นธ ๋์ด์ ๋ค์ด๊ฐ๋ ๋งํผ๊น์ง) ์นธ์ ๊ทธ๋งํผ ์์ผ๋ก ๋ํ๋ค. ํ๋ ์์ ๋ ์ด์ด์ ํฝ์ ํฌ๊ธฐ ๊ทธ๋๋ก ๊ทธ๋ ค ๋๋ ค ๋ถ์ด๋ฉฐ ํ๋ ค์ง์ง ์๊ฒ ํ๋ค.
- ์๋ฆผ ๋ฐฉ์ง: ๊ณต์ค์ ๋นยท๊นก์ถฉยท๊พธ๋ฒ ์ฒ๋ผ ์นธ ์์๋๋ฅผ ๋ฒ์ด๋๋ ์ฅ๋์ ๋ฐ๋ฅ์ ๊ธฐ์ค์ผ๋ก ์ค์ฌ ์นธ ์์ ๋ฃ๋๋ค (๋ฐ๋ ๋์ด๋ ํจ๊ป ์ค์ด ์ ์๋ฆฌ์ ๋ถ์ง ์๋๋ค. ํ์ค๋ฒ ๋ฌด๋๋ ๊ฐ๋ค). ๋ฐ๋ณต ๋์์ ํ ์ฃผ๊ธฐ ์ ์ฒด์ ๊ฐ์ ๋ง์ถค์ ๊ฑธ์ด ํ๋ ์๋ง๋ค ํฌ๊ธฐ๊ฐ ์ถ๋ ์ด์ง ์๋๋ค. ์ปฌ๋ฌ ๋ฌ๋๋ ๋ฉ๋ด๋ฐ์ ๋ฐ๋ ๋ฐ๊ธฐ์ 1pt ํ ๋๋ฆฌ๋ฅผ ๋๋ฌ ๊ฒ์ ๋จธ๋ฆฌยท์ท์ด ๋ฌปํ์ง ์๊ฒ ํ๋ค.
- ๊ทธ๋ฆผ ๋ฌ๋๋ ํฌ๋ช ํ ์ฌ๋ฐฑ์ ๋บ ์ค์ ๊ทธ๋ฆผ ์์ญ์ผ๋ก ํฌ๊ธฐ๋ฅผ ๋ง์ถ๋ค.
- ๋์ ํ ์ฃผ๊ธฐ๋ฅผ fps๋ก ์๊ฒ ๋๋ ๋ฏธ๋ฆฌ ๊ทธ๋ฆฐ๋ค. ์ค์ ์ ์์ง์: ์ ์ฝ 12 / ๋ถ๋๋ฝ๊ฒ 30 / ์ต๊ณ 60fps.
- ํ๋ ์์ Core Animation ํคํ๋ ์์ผ๋ก ์ฌ์ํด ์ฑ์ ์ํ๊ฐ ๋ฐ๋ ๋๋ง ๊นจ์ด๋๋ค (์ฌ๋ก 5).
- ์์ 9์ข : ์๋(๋ฉ๋ด๋ฐ ๊ธ์์)ยท๋ณธ๋ ์(์บ๋ฆญํฐ ๊ณ ์ ์)ยท์ฃผํฉยทํ๋ยท๋ถํยท์ด๋กยท๋ณด๋ผยท๋ ธ๋ยท๋ฌด์ง๊ฐ.
- ์ฅ๋ 22์ข : ๊นก์ถฉยท๊ณต์ค์ ๋นยท๋น๊ธยท๋๋ฆฌ๋ฒยทํํธยท๋ ธ๋ยท์ถคยท๊ธฐ์ง๊ฐยท๊น๋นกยท๋ถ๋ฅด๋ฅดยท์์ทจยท๋ฐ์งยท๊พธ๋ฒ ยท์ด์ง์ด์งยท์ยท์ค๋ฃฉ์ค๋ฃฉ (25~70์ด๋ง๋ค ํ๋), ๊ธฐ์ยทํํยท์ ๋จ(์ํ๊ฐ ๋ฐ๋ ๋), ๋ค์ฒยท์ฝํ์ ยท๊ฟ(์ ๋). ์ค์ ์์ ๋ ์ ์๋ค.
- ๋ด ๋ฌ๋: GIF๋ PNG(์ฌ๋ฌ ์ฅ์ด๋ฉด ํ์ผ ์ด๋ฆ ์์)๋ฅผ ๋ถ๋ฌ์ ๋ฌ๋๋ก ์ด๋ค. ํ ๋๋ฆฌ์ ๋ถ์ ๋จ์ ๋ฐฐ๊ฒฝ์ ์ง์ฐ๊ณ ์ด Mac์ Application Support์๋ง ์ ์ฅํ๋ค. ์ฌ์ฉ๋์ ๋ฐ๋ผ ๋นจ๋ผ์ง๊ณ ์ฅ๋๋ ๋๊ฐ์ด ํ๋ค.
- Petdex: ์ค์ โ ๋ฌ๋ โ Petdex์์ ์ฐพ๊ธฐ๋ก petdex.dev์ Codex ํซ(์ฝ 4,900๊ฐ)์ ๊ฒ์ํด ๊ณ ๋ฅธ ํซ๋ง ๋ด๋ ค๋ฐ๋๋ค. ์ํธ์์ ์ ์๊ธฐยท๋ฌ๋ฆฌ๊ธฐยท์ฌํยท๊ธฐ๋ค๋ฆฌ๊ธฐ ์ค์ ์๋ผ ๊ฐ๊ฐ ์ ์์ธยท๋ฌ๋ฆฌ๊ธฐยท์ง์นจยท์ ์ ์ฐ๊ณ , ์ ํ๋ค๊ธฐ ์ค์ ํํธยท๋ ธ๋ยท์ถคยท๋ฐ์ง ์ฅ๋์ ์ด๋ค. ์ ํ๋ค๊ธฐ๋ฅผ ์ฐ๊ธฐ ์ ์ ๋ฐ์ ํซ์ ์ง์ฐ๊ณ ๋ค์ ๋ฐ์ผ๋ฉด ์๊ธด๋ค. ํซ์ ์ฌ์ฉ์๊ฐ ์ฌ๋ฆฐ ํฌ์ํธ๋ผ ์ฑ์ ์ฃ์ง ์๋๋ค.
- ๊ฐ์ธ ํฉ:
Sources/RunTime/LocalPack/(.gitignore)์LocalRunnerPack์ ๋ฐ๋ฅด๋ ๋ฌ๋๋ฅผ ๋๋ฉด ๊ทธ Mac์์ ๋น๋ํ ์ฑ์๋ง ๋ํด์ง๋ค. ๊ทธ๋ฆผ ๋ฌ๋์ ํ๋ ์์Sources/RunTime/Assets/LocalPack/(์ญ์ .gitignore)์ ๋๋ฉด ์ฑ ๋ฒ๋ค์ ํจ๊ป ๋ค์ด๊ฐ๋ค. ์ ์๊ถ์ด ์๋ ์บ๋ฆญํฐ๋ฅผ ๊ณต๊ฐ ์ ์ฅ์์ ์ฃ์ง ์๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ฐ๋ ๊ฒฝ์ฐ๋ฅผ ์ํ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ค. - ๋คํฌ/๋ผ์ดํธ ๋ฉ๋ด๋ฐ ๋์: ๋์ ์์์ผ๋ก ๊ทธ๋ฆฐ ํ๋ ์์ ์ํ ์ ํ ์ 1ํ ๋์คํฐ๋ผ์ด์ฆ(ํ ๋ง ๋ณ๊ฒฝ ๊ฐ์ง ์ ์ฌ์์ฑ).
- ๋ฌ๋ ์ ์ฌ์ฉ๋ฅ ํ์(์ต์
, ๊ธฐ๋ณธ ๋): ์ธ์
ยท์ฃผ๊ฐยท๋์ ์ชฝ ์ค ์ ํ. ๊ณต์ ๊ฐ์ด ์์ผ๋ฉด
--%, 80%/95% ์ด์์ ์ฃผํฉ/๋นจ๊ฐ.
- ์ ํธ: burn rate = ์ต๊ทผ 60์ด ํ ํฐ ์๋ชจ๋(tokens/min), EMA(ฮฑ=0.3) ์ค๋ฌด๋ฉ.
- 5๋จ๊ณ ์ํ ๋จธ์ :
| ์ํ | ์กฐ๊ฑด (tokens/min) | ์ ๋๋ฉ์ด์ | ํ ์ฃผ๊ธฐ |
|---|---|---|---|
| ์ฌ๋ ์ค | 0 (5๋ถ ์ด์ ๋ฌดํ๋) | ์ ํฌ๋ ค ์ , ์จ์ฌ๊ธฐ + Z | 2.6์ด |
| ๊ฑท๋ ์ค | 1 ~ 2,000 | ๊ฑท๊ธฐ | 1.25์ด |
| ๋ฌ๋ฆฌ๋ ์ค | 2,000 ~ 10,000 | ๋ฌ๋ฆฌ๊ธฐ + ๋จผ์ง | 0.72์ด |
| ์ง์ฃผ ์ค | 10,000 ~ 30,000 | ๋ณดํญ ์ปค์ง + ๋ฐ๋ | 0.54์ด |
| ์ ๋ ฅ ์ง์ฃผ | 30,000+ | ๋ฌ๋ฆฌ๊ธฐ + ๋ฌด์ง๊ฐ ๊ผฌ๋ฆฌ + ๋ฐ์ง์ด | 0.44์ด |
- ์๊ณ๊ฐ์
Thresholds.swift์์ + ์ค์ ์์ ๋ฏผ๊ฐ๋(๋ฎ์/๋ณดํต/๋์) 3๋จ ์กฐ์ . - ํ๋ ์๋ฐ ์ค๋ฒ๋ผ์ด๋: ์ฌ์ฉ๋ฅ 80% ์ด์์ด๋ฉด ์ํ์ ๋ฌด๊ดํ๊ฒ ์ง์ณ ์์ ๋ฌ๋ (ํ๋ก์+๋๋ฐฉ์ธ), 95% ์ด์์ด๋ฉด ๋นจ๊ฐ ๋ฌ๋์ ๊น๋นก์ด๋ ๋๋ํ.
๋ฌ๋ ํด๋ฆญ โ NSPopover(๋คํฌ, ํญ 376pt).
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฌ๋๊ฐ ๋ฌ๋ฆฌ๋ ๋ฌด๋ (์๊ฐ๋๋ณ ํ๋) [๊ฒ์] โ โ ๋๋ฅด๋ฉด ์ฅ๋ + ๋งํ์ , [๊ฒ์]์ ๋ฏธ๋๊ฒ์
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๊ณ ์์ด ยท ๋ฌ๋ฆฌ๋ ์ค โ 8,420 ํ ํฐ/๋ถ โ ์ด๋ฆ์ ๋๋ฅด๋ฉด ๋ฌ๋ยท์์ยท๋์ ๋ฉ๋ด
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ธ์
5์๊ฐ ์ฃผ๊ฐ
42 % 61 %
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ
2์๊ฐ 18๋ถ ๋ค ์ด๊ธฐํ ๋ชฉ 16:44 ์ด๊ธฐํ
์ฝ 1์๊ฐ 12๋ถ ๋ค ํ๋ Claude Code 92% ยท ์ฑํ
8%
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ต๊ทผ 30๋ถ ์ต๊ณ 62K/๋ถ
โฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟโฟ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ค๋ 3.1M ํ ํฐ ์ฝ $12.40
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๊ณต์ ์ฌ์ฉ๋ ยท 2๋ถ ์ ๊ฐฑ์ โฅ โป โ โป
- ๊ฒ์ด์ง %๋ ๊ณต์ ๊ฐ๋ง ์ด๋ค. ์ ์๋ก ์ค๋ ๊ฐ์ ๊ทธ๋๋ก ๋ณด์ฌ ์ฃผ๊ณ ๋ก์ปฌ ๊ธฐ๋ก์ ์น์ง ์๋๋ค (์ฌ๋ก 4).
๊ณต์ ๊ฐ์ ๋ชป ๋ฐ์ผ๋ฉด
--๋ก ๋น์ฐ๊ณ , ๋น์ฉ์ "์ฝ $" โ ์ ์งํ UI๊ฐ ์ ๋ขฐ๋ฅผ ๋ง๋ ๋ค. - ์์ ์ํ๋ฅผ ์๋ฆด ๋๋ง: 80% ์ ๊น์ง ๋ฌด์ฑ์, 80% ์ฃผํฉ, 95% ๋นจ๊ฐ. ์ด๋ชจ์ง ์์ด ์ซ์์ ์งง์ ๋ฌธ๊ตฌ๋ง ๋๋ค.
- ๋ฌด๋: ์๊ฐ๋๋ณ ํ๋(์์นจยท๋ฎยท๋ ธ์ยท๋ฐค), ์๋์ ๋ง์ถฐ ์ฐยท๊ตฌ๋ฆยท๋ ์ด ๊ฒน๊ฒน์ด ํ๋ฅด๊ณ ์ ๋ ฅ ์ง์ฃผ ๋๋ ์ฐ์ฃผ ๋ฐฐ๊ฒฝ. ๋ฌ๋๋ฅผ ๋๋ฅด๋ฉด ์ฅ๋์ ์น๊ณ ๋ฉ๋ด๋ฐ ๋ฌ๋๋ ๊ฐ์ ์ฅ๋์ ํ๋ค. ํ๋ฉด ์ฃผ์ฌ์จ๋๋ก ๊ทธ๋ฆฌ๊ณ ํ์ค๋ฒ๊ฐ ๋ซํ๋ฉด ๋ฉ์ถ๋ค.
- ๋ฏธ๋๊ฒ์ "ํ ํฐ ๋ฌ๋": ๋ฌด๋ ์ค๋ฅธ์ชฝ ์ ๊ฒ์ ๋จ์ถ๋ก ์ผ ๋ค. ๊ณ ๋ฅธ ๋ฌ๋๊ฐ ์ฅ์ ๋ฌผ(๊ฐ์ยท๋ฒ์ฏยท์ ์ธ์ฅยท๋๋ฌดยท๊ฑธ์ด์ค๋ ๊ฒ์
๋๋ฆดยท๋ฐ์ฅ)์ ๋ฐ์ด๋๊ฑฐ๋ ์์ฌ ํผํ๊ณ ์ฝ์ธ์ ๋ชจ์๋ค. ์คํ์ด์คยทโยทํด๋ฆญ์ผ๋ก ์ ํ(๊ธธ๊ฒ ๋๋ฅด๋ฉด ๋์ด), โ๋ก ์์ด๊ธฐ,
esc๋ก ๋๊ฐ๋ค. ์๋๊ฐ ์ ์ ๋นจ๋ผ์ง๊ณ 100์ ๋ง๋ค ์ ์๊ฐ ๋ฐ์ง์ด๋ฉฐ, ์ต๊ณ ์ ์๋ ์ด Mac์ ์ ์ฅํ๋ค.
- ์์: ๋ฌด๋์ ํธ๋กํผ ๋จ์ถ๋ก ์์ํ(์ ์ฒดยท์ด๋ฒ ์ฃผ)๋ฅผ ์ฐ๋ค. ์์ํ ์ฐฝ์์ ์ฐธ์ฌ๋ฅผ ์ผ๊ณ ๋๋ค์์ ์ ํ๋ฉด, ์ด Mac์์ ์ต๊ทผ 7์ผ ๋์ ์ฌ๋ฆฐ ์ ์๋ณด๋ค ๋์ ๋ ์ ์๋ฅผ ์ฌ๋ฆฌ๊ณ (์ด๋ฒ ์ฃผ ์์๊ฐ ๋น์ง ์๊ฒ) ๊ฒ์ ์ค๋ฒ ํ๋ฉด์ "์ ์ฒด N์"๋ฅผ ๋ณด์ฌ ์ค๋ค. ์ฐธ์ฌ๋ ๊ธฐ๋ณธ์ผ๋ก ๊บผ์ ธ ์๋ค.
- ์์ ์์: ํ์ค๋ฒ๊ฐ ์ด๋ ค ์์ผ๋ฉด 30์ด๋ง๋ค, ์ฐธ์ฌ ์ค์ด๋ฉด ๋ซํ ์์ด๋ 10๋ถ๋ง๋ค ์์ฝ(
/v1/summary)์ ๋ฐ์ ์ง๋๋ฒ๊ณผ ๊ฒฌ์ค๋ค. ์ 1์, 1์์ ๊ธฐ๋ก ๊ฒฝ์ , ๋ด๊ฐ 1์๊ฐ ๋จ, ์ด๋ฒ ์ฃผ 1์ ๊ต์ฒด, ๋๊ฐ ๋๋ฅผ ์ถ์ํจ์ ๋ฌ๋๊ฐ ๋งํ์ ์ผ๋ก ์๋ ค ์ฃผ๊ณ , ์๋ฆฌ๋ฅผ ๋น์ด ์ฌ์ด ์๊ธด ์์์ ๋ค์์ ํ์ค๋ฒ๋ฅผ ์ด ๋ ์ฐจ๋ก๋ก ๋ค๋ ค์ค๋ค. ๊ฒ์ ์ค์๋ ํ์ด ๋๋ ๋ค์ ๋งํ๋ค. ์ฐธ์ฌํ์ง ์์ผ๋ฉด ์ค์น ID ์์ด ๊ณต๊ฐ ์ ๋ณด(1์์ ์์ ์ ์)๋ง ๋ฐ๋๋ค. - ๋ผ์ด๋ฒ: ๊ฒ์ ์ค ๋ด ์์ ์ฌ๋๋ค์ด ์ฐจ๋ก๋ก ๋ชฉํ๊ฐ ๋๋ค. ์์ชฝ์ "๋ค์ ๋ชฉํ ์ด๋ฆ ์ ์ (-๋จ์ ์ ์)"๊ฐ ๋จ๊ณ , ๊ทธ ์ ์์ ๋ฟ๋ ์ง์ ์ ๊น๋ฐ์ด ๋ค๊ฐ์ค๋ฉฐ, ๋์ผ๋ฉด "์ด๋ฆ ์ถ์!" ๋ฐฐ๋๊ฐ ๋ฌ๋ค. ์์ํ ์ฐฝ์ ์ด๋ ค ์๋ ๋์ 30์ด๋ง๋ค ์๋ก ๋ฐ๋๋ค.
- ์์ ์๋ฒ๋
server/leaderboard/(Cloudflare Workers + D1). ์ฑ์ด ์คํ์์ค๋ผ ์กฐ์์ ์์ ํ ๋ง์ ์๋ ์์ด์, ํ๋ ์ด ์๊ฐ ์์ ๊ท์น์ ๋ผ ์ ์๋ ์ ์(์ต๊ณ ์๋ยท์ ์์จยท์ฝ์ธ ์ํ์ผ๋ก ๊ณ์ฐ), ๊ฐ์ ์ฌ๋์ด 3์ด ์์ ๋ค์ ์ฌ๋ฆฌ๋ ์์ฒญ, ๊ฐ์ IP์์ 1๋ถ์ 6๋ฒ ๋๊ฒ ์ฌ๋ฆฌ๋ ์์ฒญ์ ๊ฑฐ๋ฅธ๋ค. IP๋ ๋ ๋ง๋ค ๋ฐ๋๋ ๊ฐ๊ณผ ํจ๊ป ํด์ํด ํ์๋ง ์ธ๊ณ 1์๊ฐ ๋ค ์ง์ด๋ค. ๊ท์น ์ซ์๋ ์ฑ(RunnerGame.rulesVersion)๊ณผ ์๋ฒ(rules.js)์ ๊ฐ์ด ๋๊ณ ์์ชฝ ํ ์คํธ๊ฐ ๊ฐ์ ๊ฐ์ ํ์ธํ๋ค. - ๊ท์น์
GameCore๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ฉด๊ณผ ๋ผ์ด ๋์๋ค. 1/120์ด ๊ณ ์ ๊ฐ๊ฒฉ ๋ฌผ๋ฆฌ, ์ฐฉ์ง ์ง์ ยท์ด๋ฅ ์งํ ์ ๋ ฅ ๋ณด์ , ์ต์ ์ ํ ๋์ด, ๋๊ทธ๋ฌ์ด ํ์ ์์. ํ์ ์์๋ ์บ๋ฆญํฐ์ ์๊ด์์ด ๊ฐ์ ์ด๋ค ๋ฌ๋๋ก ํด๋ ์กฐ๊ฑด์ด ๊ฐ๋ค. - ์ฅ์ ๋ฌผ ๊ฐ๊ฒฉ์ Chromium T-Rex Runner(BSD 3-Clause) ๊ณต์์ ๋ฐ๋ฅด๊ณ , ์ ํ ์๊ฐ์ผ๋ก ์ฐ ํํ์ ๋ํ๋ค. ๋ฌด์์ ์จ์ 40๊ฐ๋ก ๋ชจ๋ ์ฅ์ ๋ฌผ์ ๋๊ฑฐ๋ ์ง๋๊ฐ ์ ์๋์ง ํ ์คํธํ๋ค.
- ๊ทธ๋ฆผ๊ณผ ํจ๊ณผ์์ Kenney์ CC0 ์์
(Pixel Platformer, Digital Audio). ์ถ์ฒ๋
Assets/Game/CREDITS.txt.
- ๊ฒ์ด์ง ๋๊ธ์ ์ฐฝ(5์๊ฐ/์ฃผ๊ฐ)์ ๊ฒฝ๊ณผ ์๊ฐ โ ๋ง๋๊ฐ ๋๊ธ๋ณด๋ค ์์๋ฉด ์๊ฐ๋ณด๋ค ๋นจ๋ฆฌ ์ฐ๋ ์ค.
- "์ฝ N๋ถ ๋ค ํ๋"๋ ์ต๊ทผ 30๋ถ ๊ณต์ ์ธ์ %์ ์ค๋ฆ์ธ๋ก ๊ณ์ฐํ๊ณ , ์ด๊ธฐํ๊ฐ ๋จผ์ ์ค๋ฉด "์ด๊ธฐํ ์ ๊น์ง ์ฌ์ ".
- ์ฃผ๊ฐ ์๋๋ ์ฌ์ฉ์ฒ๊ฐ ๋ ์ด์์ด๋ฉด ๊ณต์ ์ฌ์ฉ์ฒ ๋น์ค(Claude Codeยท์ฑํ โฆ), ์๋๋ฉด ์ด ๊ธฐ๊ธฐ์ ๋ชจ๋ธ ๋น์ค.
- ์คํํฌ๋ผ์ธ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด ๊ทธ ๋ถ์ tokens/min, ์ผ๋ณ ์์ธ๋ ๋ชจ๋ธ ๊ณ์ด(OpusยทSonnetยทHaikuยทFable)๋ณ ๋ง๋.
๊ฐฑ์ ์ ๋ต
- ๊ณต์ % ํด๋ง 180์ด(429 ๋ฐฉ์ง ์์ ๊ฐ๊ฒฉ) + ํ์ค๋ฒ ์ฌ๋ ์๊ฐ ์ฆ์ 1ํ ์ฌ์กฐํ (์ง์ 30์ด ์ด๋ด๋ฉด ์๋ต).
- ์กฐํ ๋ค ๊ณต์ ์ฐฝ์ ๋ฆฌ์ ์๊ฐ์ด ์ง๋๋ฉด ์ด์ %๋ฅผ ๋ณด์ฌ ์ฃผ์ง ์๊ณ 0%๋ก ๋๊ณ , ์ ๊ฐ์ ๋ฐ์ ๋๊น์ง 30์ด ๊ฐ๊ฒฉ์ผ๋ก ๋ค์ ์กฐํํ๋ค.
- ์ธ์ /์ฃผ๊ฐ 80%ยท95% ๋๋ฌ ์ ๊ฐ 1ํ macOS ์๋ฆผ. ์: "์ธ์ ์ฌ์ฉ๋ 80%" / "ํ์ฌ ์๋๋ก ์ฝ 1์๊ฐ 12๋ถ ๋ค ํ๋์ ๋ฟ์ต๋๋ค." ์ฐฝ ๋ฆฌ์ ์ ๋ฐ์ก ๊ธฐ๋ก ์ด๊ธฐํ, 70โ96% ๊ฑด๋๋ฐ๋ฉด 95๋ง ๋ฐ์ก(์คํธ ๋ฐฉ์ง) โ ์ ์ฑ ์ ์์ ๋ก์ง์ผ๋ก ๋ถ๋ฆฌํด ๋จ์ ํ ์คํธ.
- 5์๊ฐ ๋ธ๋ก ๋ฆฌ์ ์ "์ธ์ ์ด๊ธฐํ" ์๋ฆผ (์ต์ , ๊ธฐ๋ณธ off).
- ์๋ฆผ๊ณผ ์ง์น ๊ณ ์์ด๋ ๊ณต์ ๊ฐ์ผ๋ก๋ง ํ๋จํ๋ค. ๊ณต์ ๊ฐ์ด ์์ผ๋ฉด(์์ ์งํยท์คํจ) ํ๊ฐํ์ง ์๋๋ค.
- ๊ณต์ ์ฐ๋ on/off (๋๊ฑฐ๋ ์กฐํ์ ์คํจํ๋ฉด ์ธ์ ยท์ฃผ๊ฐ ๊ฒ์ด์ง๋ฅผ ๋น์ด๋ค)
- ๋ฏผ๊ฐ๋ 3๋จ / ๋ฌ๋(22์ข + Petdex ํซ + ๋ด ๋ฌ๋, ์์ง์ด๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ์ผ, ์ด๋ฆ ๊ฒ์)ยท๋ฉ๋ด๋ฐ ํฌ๊ธฐ 2๋จยท์์ 9์ข / ์์ง์(12ยท30ยท60fps) / ๊ฐ๋ ์ฅ๋์น๊ธฐ / ๋ฉ๋ด๋ฐ ์ฌ์ฉ๋ฅ / ํ๋ยท์ ์ธ์ ์๋ฆผ / ๋ก๊ทธ์ธ ์ ์๋ ์์(SMAppService) / ํด๋ง ์ฃผ๊ธฐ(๊ธฐ๋ณธ 3์ด)
- ์ ๋ณด: ๋ฒ์ ๊ณผ ๋น๋ ์ปค๋ฐ(์ค์น๋ ์ฑ์ด ์ด๋ ์ปค๋ฐ์ธ์ง ํ์ธ์ฉ), ๋ฐ์ดํฐ ํด๋ ์ด๊ธฐ
์คํ: Swift 5.9+ ยท SwiftUI(ํ์ค๋ฒ/์ค์ ) + AppKit(NSStatusItem) ยท macOS 13+ ยท
SPM. ํ
์คํธ ๊ฐ๋ฅํ ์ฝ์ด(UsageCore ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ์ฑ ๊ณ์ธต ๋ถ๋ฆฌ.
RunTime/
โโโ Sources/GameCore/ # ๋ฏธ๋๊ฒ์ ๊ท์น (๋ฌผ๋ฆฌยท์ฅ์ ๋ฌผยท์ ์) โ ๊ฒ์ ํ
์คํธ 32๊ฐ์ ๋์
โโโ server/leaderboard/ # ๋ฏธ๋๊ฒ์ ์์ ์๋ฒ (Cloudflare Worker + D1, ๊ท์นยทํตํฉ ํ
์คํธ)
โโโ Sources/UsageCore/ # ์์ ๋ก์ง โ ๋จ์ ํ
์คํธ 70๊ฐ์ ๋์
โ โโโ JSONLWatcher.swift # ~/.claude/projects ์ฌ๊ท ๊ฐ์, ํ์ผ๋ณ ์คํ์
์ฆ๋ถ ํ์ฑ
โ โโโ JSONLParser.swift # ์คํค๋ง-๊ด์ฉ ํ์ฑ, <synthetic> ์คํต
โ โโโ UsageStore.swift # ์ค๋ณต์ ๊ฑฐ(message.id+requestId) + ์ง๊ณ(์ค๋/์ฃผ๊ฐ/๋ชจ๋ธ/์คํํฌ๋ผ์ธ)
โ โโโ BlockCalculator.swift # 5์๊ฐ ๋ธ๋ก(UTC floor)
โ โโโ BurnRateMeter.swift # 60์ด ์ฐฝ tokens/min + EMA
โ โโโ OAuthUsageProvider.swift# ๊ณต์ % ํด๋ง: ํ ํฐ ์บ์ + security ์๋ธํ๋ก์ธ์ค + ํ์ผ ํด๋ฐฑ
โ โโโ GaugeMath.swift # ๊ณต์ ๊ฐ ๊ฒ์ด์งยท์ฐฝ ์ด๊ธฐํ ์ฒ๋ฆฌ, ๊ณต์ ์ค๋ฆ์ธ๋ก ํ๋ ๋๋ฌ ์๊ฐ
โ โโโ UsageEvaluator.swift # ํฑ ํ๋จ: ๊ณต์ ๊ฐ ์ ํจ์ฑ(์ ์ 15๋ถ)ยท๊ฒ์ด์งยทํ๋ ๋จ๊ณ
โ โโโ WeeklyWindow.swift # ๋กค๋ง 7์ผ / ๊ณต์ ๋ฆฌ์
์๊ฐ์ 7์ผ ๋จ์๋ก ๊ตด๋ฆฌ๊ธฐ
โ โโโ UsageAlerts.swift # 80/95% ์๋ฆผ ์ ์ฑ
(์ฐฝ๋ณ 1ํ)
โโโ Sources/RunTime/
โ โโโ App/ # AppDelegate(NSStatusItem), UsageEngine, AppSettings
โ โโโ Characters/ # ๋ฌ๋ 22์ข
๋ฒกํฐ ๊ณจ๊ฒฉ(QuadrupedยทBirdยทReptileโฆ), ์ฅ๋ 22์ข
, ํจ๊ณผ, ๋ด ๋ฌ๋ยทPetdexยท๊ฐ์ธ ํฉ
โ โโโ SpriteEngine/ # SpriteAnimator(Core Animation ์ฌ์), MenuBarCanvas(์นธ ํฌ๊ธฐ), ํ๋ ์ ์์ฑ, ๋์คํฐ๋ผ์ด์ , ์ ๊ฒ ์ํธยท๋ฉ๋ด๋ฐ ์ ๊ฒ
โ โโโ UI/ # PopoverView, RunnerStage(๋ฌด๋), Theme, GaugeBar, Sparkline, SettingsView, RunnerPicker, PetdexBrowser
โ โโโ Game/ # GameSession(๋ฌด๋ ์ ํ ํ: ์
๋ ฅยทํจ๊ณผยท์ ์ํ), GameAssets, GameSound, GameShots(์ ๊ฒ)
โ โโโ Services/ # Notifier(UserNotifications), LaunchAtLogin(SMAppService)
โ โโโ Assets/ # PNG ๋ฃ์ผ๋ฉด ์๋ ๊ต์ฒด๋๋ ์คํ๋ผ์ดํธ ํด๋
โโโ docs/ # ๊ฐ๋ฐ ๊ธฐ๋ก (์ด ๋ฌธ์)
โโโ scripts/ # build-app.sh, setup-signing.sh, install.sh, make-icon.sh, test.sh
์ฑ๋ฅ ์์ฐ vs ์ค์ธก: ์ ํด CPU < 0.5% โ 0.05%(์ ์๋ ๋ฌ๋, ๊ธฐ๋ณธ 30fps ์ค์ ), ์ ๋ ฅ ์ง์ฃผ 30fps
0.5%, ๋ฉ๋ชจ๋ฆฌ(phys_footprint) < 50MB โ 17MB(๋น ๋ฐ์ดํฐ) / 21MB(ํ๋ฃจ 5์ฒ๋ง ํ ํฐ ์ค์ฌ์ฉ).
ํ์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ, ํ์ค์บ์ ์์ ์ 1ํ, ์ดํ ํ์ผ ์คํ์
๊ธฐ์ต ์ฆ๋ถ.
์ ํด ์ธก์ ์ CLAUDE_CONFIG_DIR๋ก ๋น ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ ๊ฒฉ๋ฆฌ ์ธ์คํด์ค๋ก, CPU๋ 30์ด ๋์ CPU ์๊ฐ์ผ๋ก ์ฐ๋ค.
๋์ ์คํ ๊ฒํ : Python + rumps๋ก ๋ฐ๋์ MVP ๊ฐ๋ฅํ๋ ์ ๋๋ฉ์ด์ fpsยท๋ฐฐํฌ์ ํ๊ณ โ Swift ์ฑํ. Electron์ ๋ฌ๋ ์ฑ ์ฉ๋๋ก ๋ฆฌ์์ค ๊ณผ๋ค๋ผ ๋ฐฐ์ .
Claude Code๋ macOS์์ OAuth ํ ํฐ์ ํค์ฒด์ธ ํญ๋ชฉ Claude Code-credentials(๋ก๊ทธ์ธ
ํค์ฒด์ธ)์ ์ ์ฅํ๋ค. ์ด ํญ๋ชฉ์ ACL๋ก ๋ณดํธ๋์ด ๋ค๋ฅธ ์ฑ์ด ์ฝ์ผ๋ฉด macOS๊ฐ ์ํธ
ํ๋กฌํํธ๋ฅผ ๋์ฐ๋ ๊ฒ์ด ์ ์ ๋์์ด๋ค. ๋ฐ๋ณต ์์ธ๊ณผ ๋์:
| ์์ธ | ๋์ ๊ท์น |
|---|---|
| ๋งค ํด๋ง(3๋ถ)๋ง๋ค ํค์ฒด์ธ ์ฝ๊ธฐ | ๊ธ์ง. ํ ํฐ์ ๋ฉ๋ชจ๋ฆฌ ์บ์, ๋ง๋ฃ(~60๋ถ) ์์๋ง ์ฌ์ฝ๊ธฐ โ ๋น๋ 1/20 |
| "ํ์ฉ"๋ง ํด๋ฆญ(1ํ์ฑ) | ์ฒซ ์คํ ์๋ด์์ "ํญ์ ํ์ฉ(Always Allow)" ๋๋ฅด๋๋ก ์๋ด |
| ๋น๋๋ง๋ค ์ฝ๋์๋ช ๋ณ๊ฒฝ(ad-hoc) โ "ํญ์ ํ์ฉ" ๋ฌดํจํ | ๊ฐ๋ฐ ์ค์๋ ๊ณ ์ ์๋ช identity ์ฌ์ฉ (self-signed ์ธ์ฆ์ ์์ฑยท๊ณ ์ ์คํฌ๋ฆฝํธ ์ ๊ณต) |
| ์ฑ์ด Security.framework ์ง์ ํธ์ถ | /usr/bin/security find-generic-password ... ์๋ธํ๋ก์ธ์ค โ ACL ๋์์ด Apple ์๋ช
๋ถ๋ณ ๋ฐ์ด๋๋ฆฌ๊ฐ ๋์ด ๋ฆฌ๋น๋ํด๋ ํ๋กฌํํธ ์ฌ๋ฐ ์์ (ํธ๋ ์ด๋์คํ๋ README ํ๊ณ์ ์ ์) |
| ๊ทธ๋๋ ํ๋กฌํํธ๊ฐ ์ซ์ ๊ฒฝ์ฐ | ํด๋ฐฑ ์์: โด ~/.claude/.credentials.json ํ์ผ ์ฐ์ (ํ๋กฌํํธ ์์) โต ํค์ฒด์ธ โถ ์คํจ ์ ๊ฒ์ด์ง๋ฅผ ๋น์ฐ๊ณ ์ด์ ํ์ |
์ ๋ ๊ธ์ง: security unlock-keychain ์๋ํ, ํค์ฒด์ธ ์ํธ ์ ์ฅยท์๋์
๋ ฅ โ
ํธํ์๊ณ ๋ณด์์ ๋ฌด๋๋จ๋ฆฌ๋ ์ํฐํจํด. OAuth ํ ํฐ์ ์ฝ๊ธฐ ์ ์ฉ, Anthropic ์ธ
์ด๋์๋ ์ ์กยท์ ์ฅยท๋ก๊น
ํ์ง ์๋๋ค. (Petdex ๋ชฉ๋ก๊ณผ ํซ ๊ทธ๋ฆผ์ Petdex์์ ์ฐพ๊ธฐ๋ฅผ ์ด ๋๋ง petdex.dev์์ ๋ฐ๊ณ , ์ด๋ ํ ํฐ์ด๋ ์ฌ์ฉ๋์ ๋ณด๋ด์ง ์๋๋ค.
๋ฏธ๋๊ฒ์ ์์๋ ์ฐธ์ฌ๋ฅผ ์ผ ๊ฒฝ์ฐ์๋ง ๋ฌด์์ ์ค์น IDยท๋๋ค์ยท์ ์ยท์ฝ์ธ ์ยทํ๋ ์ด ์๊ฐยท์ฑ ๋ฒ์ ์ ์์ ์๋ฒ๋ก ๋ณด๋ด๊ณ ,
์์ ์์์ ๋ฐ์ผ๋ ค๊ณ 10๋ถ๋ง๋ค ID์ ํจ๊ป ์์ ์์ฝ์ ๋ฐ๋๋ค. ์ฐธ์ฌํ์ง ์์๋ ํ์ค๋ฒ๋ฅผ ์ด๋ฉด 30์ด๋ง๋ค ID ์์ด ๊ณต๊ฐ ์์
์์ฝ์ ๋ฐ๋๋ค. ์์ํ ์ฐฝ์ "๋ด ๊ธฐ๋ก ์ง์ฐ๊ธฐ"๋ก ์๋ฒ์์ ์ง์ธ ์ ์๋ค.
์
๋ฐ์ดํธ ํ์ธ์ 30๋ถ๋ง๋ค GitHub API์ ๊ณต๊ฐ ์ ์ฅ์์ ์ปค๋ฐ ๋น๊ต๋ง ๋ฌป๊ณ , ์ฌ์ฉ์ ์ ๋ณด๋ ๋ณด๋ด์ง ์๋๋ค.)
TL;DR โ ํ ํฐ์ ์ฝ์ ๋๋ง๋ค ํค์ฒด์ธ ์ํธ ํ๋กฌํํธ๊ฐ ๋ฐ๋ณต๋๋ค. ์์ธ์ "๋ฒ๊ทธ"๊ฐ
์๋ ํค์ฒด์ธ ACL์ ์ ์ ๋ณด์ ๋์์ผ๋ก ๊ท์ ํ๊ณ , ์ ๊ทผ ๋น๋(๋ฉ๋ชจ๋ฆฌ ์บ์)ยท์น์ธ
๋ฐฉ์(ํญ์ ํ์ฉ ์๋ด)ยท์ฝ๋์๋ช
(๊ณ ์ identity + security ์๋ธํ๋ก์ธ์ค) 3๊ฐ ์ถ์ผ๋ก
๋ถํดํด ํ๋กฌํํธ๋ฅผ ์ต์ด 1ํ๋ก ์ค์๋ค. ํต์ฌ ๋ฐ๊ฒฌ: ACL์ ์ฝ๋์๋ช
๋จ์๋ก
์ ๋ขฐ๋ฅผ ๊ธฐ์ตํ๋ฏ๋ก ad-hoc ์๋ช
์ ๋น๋๋ง๋ค ์น์ธ์ด ๋ฌดํจํ๋๋ค โ ์๋ช
์ ๋ต์ ๋ฐฐํฌ๋ฟ
์๋๋ผ ๋ฐํ์ UX ๋ฌธ์ ๋ค. unlock-keychain ์๋ํ๋ฅ๋ ์๋์ ์ผ๋ก ๋ฐฐ์ .
(์์ธยท๋์ ์์ธ ํ๋ ยง6 ์ฐธ์กฐ)
TL;DR โ ๊ณต์ % ์์ ๋ก์ปฌ ์๋ชจ๋ถ์ ์น๋ ๋ณด๊ฐ ๊ฒ์ด์ง๊ฐ ๋ช ๋ถ ๋ง์ 100%๋ก ํญ์ฃผํ๋ฉฐ ๋นจ๊ฐ ๊ณ ์์ดยท95% ์คํ ์๋ฆผ์ ๋๊ณ , ํ์ค๋ฒ๋ฅผ ์ด๋ฉด(์ฌ์กฐํ) ์ ๊น ์ ์์ผ๋ก ๋์์ "ํด๋ฆญํด์ผ ๊ฐฑ์ ๋๋ ๋ฒ๊ทธ"์ฒ๋ผ ๋ณด์๋ค.
| ์ฝ๋์ ๊ฐ์ | ์ค์ธก | |
|---|---|---|
| ๊ณต์ 1%์ ํด๋นํ๋ ๋ก์ปฌ ํ ํฐ | 5,000 (ํ๋ ํ๋ 500Kรท100) | ์ฝ 60,000 (๋ธ๋ก 4M รท ๊ณต์ 63%) |
| 5๋ถ๊ฐ 30๋ง ํ ํฐ ์๋ชจ ์ ๋ณด๊ฐ | +60%p (ํญ์ฃผ) | +5.1%p |
์์ธ์ ๋จ์๊ฐ ๋ค๋ฅธ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ์์๋ก ํ์ฐํ ๊ฒ โ ๋ก์ปฌ ๋ก๊ทธ ํ ํฐ์ ์บ์
์ฝ๊ธฐ๊ฐ ์ง๋ฐฐํด ์ค์ ํ๋ ์์ง์ ์์ญ ๋ฐฐ ์ค์ผ์ผ์ด์๋ค. ํ์ฐ ๋น์จ์ ์ค์ธก
์ญ์ฐ(์กฐํ ์์ ์ฐฝ ํ ํฐ รท ๊ณต์ %)์ผ๋ก ๋ฐ๊พธ๊ณ , ์ญ์ฐ์ด ๋ถ์์ ํ ๊ตฌ๊ฐ(๊ณต์ 5%
๋ฏธ๋ง)์ ๋ณด๊ฐ์ ์๋ตํ๋ฉฐ, ์๋ฆผ์ ์์ฌ ์๊ฐ ์ถ์ ๋ ๊ฐ์ ์ค์ผ์ผ๋ก ์ผ์ํ(GaugeMath
๋ชจ๋ + ํ
์คํธ 6๊ฐ). ๊ฐ์ ์๋๋ฆฌ์ค์์ 123%โ100% ํญ์ฃผ๊ฐ **68.1%**๋ก ์ ํํด์ก๋ค.
๋ฐฐ์ด ์ : ์ด์ข
์์ค๋ฅผ ์์ ๋๋ ๋จ์๋ถํฐ ๊ฒ์ฆํ๊ณ , ๋ชจ๋ฅด๋ ํ์ฐ ๋น์จ์ ์์๋ก
๊ฐ์ ํ์ง ๋ง๊ณ ์์คํ
์ด ์ฃผ๋ ์ค์ธก์ผ๋ก ์บ๋ฆฌ๋ธ๋ ์ด์
ํ๋ผ.
(์ดํ ์ฌ๋ก 4์์ ๋ณด๊ฐ๊ณผ ์ถ์ ๋ชจ๋๋ฅผ ๋นผ๊ณ ๊ฒ์ด์ง๋ ๊ณต์ ๊ฐ๋ง ์ฐ๊ฒ ํ๋ค.)
TL;DR โ ๋ ๊ฐ๋ ์ฆ์. โ ์๋ก๊ณ ์นจ ๋ฒํผ์ด ๋์ํ์ง ์์: ํ์ค๋ฒ๋ฅผ ์ฌ๋ ์๊ฐ
๊ณต์ %๋ฅผ ์ด๋ฏธ ์กฐํํ๊ณ 30์ด ์ค๋กํ(429 ๋ฐฉ์ง)์ด ๊ฑธ๋ฆฌ๋ฏ๋ก, ์งํ ๋ฒํผ์ ๋๋ฌ๋
ํญ์ ์๋ต๋๋ค โ ์ฌ์ฉ์ ๋ช
์ ๋์์ ์ค๋กํ์ ์ฐํ(์ฐํ ๋ฐฉ์ง 5์ด๋ง ์ ์ง)ํ๋๋ก
๊ฒฝ๋ก๋ฅผ ๋ถ๋ฆฌ. โก ์ฅ์๊ฐ ์คํ ์ค ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์ง ์์ฌ: ๋ฉ๋ด๋ฐ ์ ์ฉ ์ฑ์ App Nap
๋์์ด๋ผ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ์ด๋จธ๊ฐ ์ง์ฐ๋ ์ ์๋๋ฐ, ์ ๋๋ฉ์ด์
ํ์ด๋จธ(๋ฉ์ธ ์ค๋ ๋)๋
๊ณ์ ๋์ "์ด์์๋๋ฐ ๋ฐ์ดํฐ๋ง ๋ฉ์ถ" ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค โ ProcessInfo.beginActivity๋ก
๋
๋ฐฉ์ง + os.log ๊ธฐ๋ฐ ์ง๋จ(3์ด ํฑ ์์ฝ, ๊ณต์ ์กฐํ ๊ฒฐ๊ณผ, ํฑ ์ง์ฐ ๊ฒฝ๊ณ )์ ๋ด์ฅํด
์ฌ๋ฐ ์ log stream ํ ์ค๋ก ํ์ธ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ๋ฐฐ์ด ์ : ์๋ ํด๋ง์ ๋ณดํธ
์ฅ์น(์ค๋กํ)๊ฐ ์ฌ์ฉ์ ๋ช
์ ๋์๊น์ง ์ผํค๋ฉด "๊ณ ์ฅ"์ผ๋ก ์ธ์๋๋ค โ ๊ฒฝ๋ก๋ฅผ ๋ถ๋ฆฌํ๊ณ ,
๊ด์ธก ๊ฐ๋ฅ์ฑ(logging)์ ์ ํ์ ๋ด์ฅํ๋ผ.
TL;DR โ ๊ฒ์ด์ง๋ ๊ณต์ % ์์ ์ด ๊ธฐ๊ธฐ์ ๋ก์ปฌ ์ฌ์ฉ๋ถ์ ์น์ด ๋ณด๊ฐํ๋ค. ์์ธ์ ๋ค์ฏ ๊ฐ์ง๋ก ๋๋ ๊ณ ์ณ ๋ณด๋ค๊ฐ, ๋ณด๊ฐ ์์ฒด๋ฅผ ๋นผ๊ณ ๊ณต์ ๊ฐ๋ง ์ฐ๋ ์ชฝ์ผ๋ก ์ ๋ฆฌํ๋ค.
| ์์ธ | ์ฆ์ | ๋์ |
|---|---|---|
| ๋ณด๊ฐ ๋น์จ์ ๋ก์ปฌ 5์๊ฐ ๋ธ๋ก(UTC ์ ์ ๋ด๋ฆผ)์ผ๋ก ๊ณ์ฐ | ๊ณต์ ์ฐฝ(์: 12:10~17:10)๊ณผ ์ด๊ธ๋ ๋ณด๊ฐ์ด ์ปค์ง๊ฑฐ๋ ์์์ง | ๋ณด๊ฐ ์ ๊ฑฐ |
| ์กฐํ ๋ค ์ฐฝ์ด ์ด๊ธฐํ๋ผ๋ ๋ค์ ์กฐํ๊น์ง ์ด์ %๋ฅผ ์ ์ง | ์ด๊ธฐํ ์งํ ์ต๋ 3๋ถ(์คํจ ์ 15๋ถ) 97% ๊ฐ์ ์ ๊ฐ๊ณผ ๋นจ๊ฐ ๊ฒฝ๊ณ | ๋ฆฌ์ ์๊ฐ์ด ์ง๋๋ฉด 0%, 30์ด ๊ฐ๊ฒฉ ์ฌ์กฐํ |
| ํ ํฐ ์๋ก ํ์ฐ (๋๋ถ๋ถ ๋จ๊ฐ๊ฐ ๋ฎ์ ์บ์ ์ฝ๊ธฐ) | ์์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ณด๊ฐ์ด ํ๋ค๋ฆผ | ๋ณด๊ฐ ์ ๊ฑฐ |
| ์ด ๊ธฐ๊ธฐ ๊ธฐ๋ก์ ์๋ ์ฌ์ฉ๋ถ (๋ค๋ฅธ ๊ธฐ๊ธฐยท์น) | ์ค์ธก 17๋ถ ๋์ ์ค์ 1%p๋น ๋น์ฉ์ด ์ฐฝ ํ๊ท ์ ์ธ์ 1.3๋ฐฐ, ์ฃผ๊ฐ 4.4๋ฐฐ | ๋ณด๊ฐ ์ ๊ฑฐ |
resets_at์ด ์กฐํ๋ง๋ค 1์ด ์์ชฝ์ผ๋ก ํ๋ค๋ฆผ (17:09:59.75 โ 17:10:00.47) |
์๋ฆผ ์ถ์ ๊ธฐ๊ฐ ๋งค ์กฐํ๋ฅผ ์ ์ฐฝ์ผ๋ก ๋ด 80%/95% ์๋ฆผ์ด ๋ฐ๋ณต๋ ์ ์์ | ์ฐฝ ์๋ณ์๋ฅผ ๋ถ ๋จ์๋ก ๋ฐ์ฌ๋ฆผ |
๋น์ฉ ํ์ฐ๊ณผ ๊ณต์ ์ฐฝ ์ ๋ ฌ๋ก ๋ณด๊ฐ ์ค์ฐจ๋ฅผ ์ธ์
4%p โ 1%p ์์ค๊น์ง ์ค์์ง๋ง, ๊ณต์ ๊ฐ์ ์กฐํ ์์ ์ ๋ ์ ํํ๊ณ
์กฐํ ์ฌ์ด ์ง์ฐ์ ์ต๋ 3๋ถ์ด๋ค. ๊ทธ๋์ ๊ฒ์ด์ง๋ ๊ณต์ ๊ฐ๋ง ์ฐ๊ณ , "์ฝ N๋ถ ๋ค ํ๋"๋ ์ต๊ทผ ๊ณต์ ๊ฐ์ ์ค๋ฆ์ธ๋ก
๊ณ์ฐํ๋ค. ๊ฐ์ ์ด์ ๋ก ๊ณต์ ๊ฐ์ด ์์ ๋ ํ๋ ํ๋๋ก ๊ณ์ฐํ๋ ์ถ์ ๋ชจ๋๋ ์ง์ ๋ค. ๊ฐ์ด ์์ผ๋ฉด --๋ก ๋น์ด๋ค.
๋ฐฐ์ด ์ : ์ ํํ ์์ฒ์ด ์์ผ๋ฉด, ๊ทธ ์ฌ์ด๋ฅผ ๋ฉ์ฐ๋ ์ถ์ ์ ์์ฒ๊ณผ ๋ฒ์ยท๋จ์๊ฐ ๊ฐ๋ค๊ณ ๋ณด์ฅํ ์ ์์
๋๋ง ์ด๋ค.
TL;DR โ ํ๋ ์์ ์๊ฒ ๋๋์ 30fps์์ CPU 18%(60fps 26%)๊ฐ ๋์๋ค. ์ค์น๋ผ ์๋ ์ด์ ๋น๋๋ 42%์๋ค.
ํ๋ ์๋ง๋ค NSStatusBarButton.image๋ฅผ ๋ฐ๊พธ๋ฉด ๋ฒํผ ์
์ ์ฒด๋ฅผ ๋ค์ ๊ทธ๋ฆฐ๋ค. ํ๋ ์์ ๋ฏธ๋ฆฌ ๋์คํฐ๋ผ์ด์ฆํด
CAKeyframeAnimation(keyPath: "contents")๋ก ๋๊ธฐ์ ์ฌ์์ ์์คํ
๋ ๋ ์๋ฒ๊ฐ ๋งก์ 0.5%(์ ์ ๋ 0.05%)๋ก
๋ด๋ ค๊ฐ๋ค. ๋ฒํผ ํฌ๊ธฐ์ ์ฌ์ฉ๋ฅ ๊ธ์ ๋ฐฐ์น๋ ํฌ๋ช
ํ ์๋ฆฌ ํ์ ์ด๋ฏธ์ง๋ก ์ก๊ณ ๋ฌ๋๋ ๊ทธ ์ ๋ ์ด์ด์์ ๋๋ค.
๋ฐฐ์ด ์ : ๋ฐ๋ณต ์ ๋๋ฉ์ด์
์ ์ฑ์ด ๋งค ํ๋ ์ ๊ทธ๋ฆฌ์ง ๋ง๊ณ ๋ ๋ ์๋ฒ์ ๋งก๊ธด๋ค.
| ๋จ๊ณ | ๊ณํ | ์๋ฃ ๊ธฐ์ค | ๊ฒฐ๊ณผ |
|---|---|---|---|
| M0 (0.5์ผ) | JSONL ์คํค๋ง ์ค๋ฌผ ๊ฒ์ฆ, ccusage ๋ธ๋ก ๋ก์ง ๋์กฐ, OAuth ์๋ํฌ์ธํธ ์ค์ธก | JSONL ์คํค๋ง ์ ๋ฆฌ + ํ์ ๋จ์ํ ์คํธ | โ ์ค๋ณต 6์คยทsynthetic ๋ฐ๊ฒฌ, ์๋ํฌ์ธํธ HTTP 200 ์ค์ธก |
| M1 MVP (2์ผ) | ๋ฉ๋ด๋ฐ ๋ฌ๋ + burn rate ์ฐ๋ + ์ต์ ํ์ค๋ฒ | ์ค์ฌ์ฉ ์ค ๊ณ ์์ด ์๋ ์ฒด๊ฐ ์ผ์น | โ |
| M2 (2์ผ) | ๊ณต์/์ฃผ๊ฐ ๊ฒ์ด์ง, ํ๋ ์ค์ ยท์บ๋ฆฌ๋ธ๋ ์ด์ , ์คํํฌ๋ผ์ธ | ccusage ์ค์ฐจ < 2% | โ ์ค์ฐจ 0.00% |
| M3 (1~2์ผ) | ์๋ฆผ, ์ง์น ๊ณ ์์ด, ์๋ ์์, ์๋ช , README | dmg ๋ฐฐํฌ ๊ฐ๋ฅ | โ + ์์ค ๋ฐฐํฌ(install.sh) ์ฑํ |
| v1.1 | ๋ฌ๋ ํ ๋ง 3์ข , ์ผ๋ณ ์์ธ, ๋ฌด์ง๊ฐ ์ ์ฉ ์์ ๊ฒฝ๋ก, ํ๋ก๊ทธ๋๋งคํฑ ๋ถ๋ฆฌ ํ์ | โ | โ |
| v1.2 | ๋ฒกํฐ ๋ฌ๋ 22์ข ยท์ฅ๋ 22์ข ยทํ์ค๋ฒ ๋ฌด๋ยท๋ด ๋ฌ๋, ๊ฒ์ด์ง ๊ณต์ ๊ฐ ์ ์ฉ | /usage ์ผ์น, ์ง์ฃผ CPU < 0.5% |
โ CPU 0.5%, ํ ์คํธ 70๊ฐ |
- Claude Code์์ ๋ํ ์ 3์ด ์ด๋ด์ ๊ณ ์์ด ์๋๊ฐ ๋ฐ์ํ๋ค (3์ด ์ฆ๋ถ ํด๋ง)
- 5๋ถ ๋ฌดํ๋ ์ ๊ณ ์์ด๊ฐ ์ ๋ ๋ค (์ํ๋จธ์ ํ ์คํธ + ์ค์ธก)
- ๊ณต์ ์ฐ๋ ์ํ์์ ์ธ์
/์ฃผ๊ฐ %๊ฐ
/usageํ์๊ฐ๊ณผ ์ผ์น (๋์ผ ์๋ํฌ์ธํธ, ๋ณด๊ฐ ์์) - ๊ณต์ ์ฐ๋ offยท์คํจ ์ ๊ฒ์ด์ง๋ฅผ
--๋ก ๋น์ฐ๊ณ ์ด์ ํ์ (๋ก์ปฌ ์ถ์ ์์) - ์ธ์
ํ ํฐ ํฉ๊ณ๊ฐ
ccusage blocksํ์ฌ ๋ธ๋ก๊ณผ ์ค์ฐจ 2% ์ด๋ด โ 0.00% - 80%/95% ์๋ฆผ์ด ๊ฐ 1ํ๋ง ๋ฐ์ก (์ ์ฑ ๋จ์ํ ์คํธ 7๊ฐ)
- ์ ํด CPU < 0.5% โ 0.05% ์ค์ธก (30fps ์ง์ฃผ 0.5%)
| ๋ฆฌ์คํฌ | ๋์ |
|---|---|
| ๋น๋ฌธ์ํ usage ์๋ํฌ์ธํธ ๋ณ๊ฒฝยท์ฐจ๋จ | ๊ฒ์ด์ง๋ฅผ ๋น์ฐ๊ณ ์ด์ ํ์(์ฑ์ด ์ฃฝ์ง ์์), ํด๋ง 180์ดยทUser-Agent ์ค์, ์๋ต ์คํค๋ง ๊ด์ฉ ํ์ฑ(limits[] ๋ฐฐ์ด ํด๋ฐฑ ํฌํจ). ํ ํฐ์ ๋ก์ปฌ ์ฝ๊ธฐ ์ ์ฉ |
| Claude Code์ JSONL ํฌ๋งท ๋ณ๊ฒฝ | ํ์ ์คํค๋ง-๊ด์ฉ(ํ๋ ๋๋ฝ ์ skip), ๋ฒ์ ๊ฐ์ง |
| ๊ณต์ ๊ฐ์ด ์์ ๋ ์ฌ์ฉ๋ฅ ์ ๋ชจ๋ฆ | ๊ฒ์ด์ง๋ฅผ --๋ก ๋น์ฐ๊ณ ์ํ ์ค์ ์ด์ ํ์. ์๋ยท์ค๋ ์ฌ์ฉ๋์ ๋ก์ปฌ ๊ธฐ๋ก์ผ๋ก ๊ณ์ ํ์ |
| ์บ๋ฆญํฐ ์ ์๊ถ | ๋ฌ๋๋ ์ ๋ถ ์ง์ ๊ทธ๋ฆฐ ๋ฒกํฐ(์ฅ๋ฅด ์ ํ๋ง ์ฐธ๊ณ ), ๋ฅ์บฃยท์ ๋ช ์บ๋ฆญํฐ ๋ฏธ์ฌ์ฉ. ๋ด ๋ฌ๋ ๊ทธ๋ฆผ์ ์ฑ์ ์ฃ์ง ์๊ณ ์ฌ์ฉ์ Mac์๋ง ์ ์ฅ |
| ํ๋ก๊ทธ๋๋งคํฑ ์ฌ์ฉ(๋ณ๋ ํฌ๋ ๋ง ํ) ํผ์ | entrypoint "sdk" ๋ง์ปค๋ก ๋ถ๋ฆฌ ํ์ + ๊ด์ฉ ํ๋ณ์์ ๋ฌธ์ ๋ช ์ |
| ๋ค์ ํ๋ก์ ํธ ํด๋๋ก ์์ ํ์ค์บ ์ง์ฐ | ํ์ผ mtime ํํฐ(์ต๊ทผ 8์ผ) + ์คํ์ ์ฆ๋ถ ํ์ฑ |
- ์ค๋ฌผ ์ฐ์ : ๋ฌธ์ยทํต๋ ๋์ ์ค์ JSONL 1,432๊ฑด์ ๋จผ์ ๋ถ์ํด ์ค๋ณต ๊ธฐ๋ก์ด๋ผ๋ ๊ฒฐ์ ์ ํจ์ ์ ์ฒซ๋ ๋ฐ๊ฒฌํ๋ค. ์คํ์ดํฌ ๋น์ฉ ๋ฐ๋์ ์ด ์ดํ ๋ชจ๋ ์ง๊ณ์ ์ ๋ขฐ๋ฅผ ๋ง๋ค์๋ค.
- ๋ณด์ ๋์๊ณผ ๋ฒ๊ทธ์ ๊ตฌ๋ถ: ํค์ฒด์ธ ํ๋กฌํํธ๋ฅผ ์ฐํํ์ง ์๊ณ OS ๊ท์น ์์์ ์ ๊ทผ ๋น๋ยท์ ๋ขฐ ๋จ์๋ฅผ ์ฌ์ค๊ณํ๋ค. ํธ๋ ์ด๋์คํ๋ ๋ฌธ์ํ๋ก ์ฌ์ฉ์์๊ฒ ์ ํ๊ถ์ ์คฌ๋ค.
- ์ด์ข ๋ฐ์ดํฐ ๊ฒฐํฉ์ ๋จ์ ๊ฒ์ฆ๋ถํฐ: ๊ฐ์ "ํ ํฐ"์ด๋ผ๋ ๊ณ์ ํ๋์ ๋ก๊ทธ์ ํ ํฐ์ ๋ค๋ฅธ ๋ฌผ๋ฆฌ๋ โ ๊ณ ์ ์์๋ก ํ์ฐํ์ง ์๊ณ , ์ ํํ ์์ฒ์ด ์์ผ๋ฉด ๊ทธ๊ฒ๋ง ์ด๋ค.
- ๊ด์ธก ๊ฐ๋ฅ์ฑ์ ์ ํ ๊ธฐ๋ฅ: "๊ฐฑ์ ์ด ์ ๋๋ค"๋ ๋ชจํธํ ์ ๋ณด๋ฅผ ์ํด ์ง๋จ ๋ก๊น
์
๋ด์ฅํ๋ค โ ๋ค์ ์ ๋ณด๋
log streamํ ์ค๋ก ์์ธ์ด ์ขํ์ง๋ค. - ์ ์งํ UI: ๊ณต์ ๊ฐ์ด ์์ผ๋ฉด ์ซ์๋ฅผ ์ง์ด๋ด์ง ์๊ณ
--๋ก ๋น์ด๋ค. ์ ํ๋์ ํ๊ณ๋ฅผ ์จ๊ธฐ์ง ์๋ ๊ฒ์ด ์ ๋ขฐ๋ฅผ ๋ง๋ ๋ค.
- OAuth usage ์๋ํฌ์ธํธ ๋ ผ์(Claude-Code-Usage-Monitor #202): Maciek-roboblog/Claude-Code-Usage-Monitor#202
- ๊ณต์ % ํธ๋ ์ด ์ฑ ์ ๋ก(usage-monitor-for-claude): https://github.com/jens-duttke/usage-monitor-for-claude
- ccusage 5์๊ฐ ๋ธ๋ก ๋ฆฌํฌํธ: https://ccusage.com/guide/blocks-reports
- ์ค์๊ฐ ๋ชจ๋ํฐ ์ ๋ก(Claude-Code-Usage-Monitor): https://github.com/Maciek-roboblog/Claude-Code-Usage-Monitor
- Claude Code ํ๋ ํด์ค(2026): https://www.morphllm.com/claude-code-usage-limits
- ์ฌ์ฉ๋ ํ์ธ ๊ฐ์ด๋(/usage): https://sessionwatcher.com/guides/how-to-check-claude-code-usage
- RunCat (UX ๋ ํผ๋ฐ์ค): https://kyome.io/runcat/
- Chromium T-Rex Runner (๋ฏธ๋๊ฒ์ ์ฅ์ ๋ฌผ ๊ฐ๊ฒฉยท์๋ ๊ท์น, BSD 3-Clause): https://chromium.googlesource.com/chromium/src/+/main/components/neterror/resources/
- Kenney ์์ (๋ฏธ๋๊ฒ์ ๊ทธ๋ฆผยทํจ๊ณผ์, CC0): https://kenney.nl/assets/pixel-platformer ยท https://kenney.nl/assets/digital-audio