[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94857":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":9,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":16,"hasPages":16,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":18,"readmeContent":19,"aiSummary":20,"trendingCount":14,"starSnapshotCount":14,"syncStatus":21,"lastSyncTime":9,"discoverSource":22},94857,"PokeTokenBar","chattymin\u002FPokeTokenBar","chattymin","Use your tokens to raise, evolve, and collect Pokémon! 🥚",null,"https:\u002F\u002Fgithub.com\u002Fchattymin\u002FPokeTokenBar","Swift",97,36,0,41.7,false,"main","2026-08-24 04:01:22","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"assets\u002Ficon.png\" width=\"128\" alt=\"PokeTokenBar icon\">\n\n# PokeTokenBar\n\n**Your AI coding tokens, hatched into Pokémon — right in your menu bar.**\n\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fchattymin\u002FPokeTokenBar?color=444d56&label=release)](https:\u002F\u002Fgithub.com\u002Fchattymin\u002FPokeTokenBar\u002Freleases)\n[![macOS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FmacOS-14%2B-0969da)](https:\u002F\u002Fwww.apple.com\u002Fmacos\u002F)\n[![Swift](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSwift-6-f05138)](https:\u002F\u002Fswift.org)\n[![Homebrew](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHomebrew-cask-8957e5)](#homebrew)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-3fb950)](LICENSE)\n[![Sponsor](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSponsor-%E2%99%A5-ea4aaa?logo=githubsponsors&logoColor=white)](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fchattymin)\n\n**English** · [한국어](README.ko.md) · [日本語](README.ja.md)\n\n\u003C\u002Fdiv>\n\nPokeTokenBar turns the AI coding tokens you're already burning — Claude Code, Codex, Gemini CLI, Antigravity, OpenCode, Hermes Agent, Cursor, Grok CLI, Copilot CLI & Kiro CLI — into a growing **Pokémon companion** in your macOS menu bar. Spend tokens, hatch an egg, evolve it through its real evolution line, graduate it into your Pokédex, and start again. Underneath the companion it's a precise usage tracker — today's spend, cost, and official 5-hour \u002F weekly limits, read straight from your local logs.\n\n> Token usage is read directly from local Claude Code, Codex, Gemini CLI, Antigravity, OpenCode, Hermes Agent, Cursor, Grok CLI, Copilot CLI, and Kiro CLI data (`totalTokens` = input + output + cache, local date) — no external CLI needed. Unofficial, non-commercial Pokémon fan project — see [License & disclaimer](#license--disclaimer).\n\n## Why\n\n- **The usage tracker you actually enjoy opening.** Your spend raises a Pokémon that hatches, evolves, graduates, and fills a Pokédex — and every shiny is a reason to check back.\n- See today's token spend & cost at a glance — no dashboard, no browser tab.\n- Track official **5-hour \u002F weekly** limits with reset countdowns and a burn-rate forecast for when you'll hit them.\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"assets\u002Fscreenshot-home.gif\" width=\"420\" alt=\"Popover home — companion, today's tokens, official limits\">\n\u003C\u002Fdiv>\n\n## How it works\n\n1. 🥚 **Code as usual.** The tokens you burn in Claude Code, Codex, Gemini CLI, Antigravity, OpenCode, Hermes Agent, Cursor, Grok CLI, Copilot CLI, or Kiro CLI incubate an egg — nothing extra to run.\n2. 🐣 **Hatch.** Eggs hatch into Pokémon with real evolution lines from [PokéAPI](https:\u002F\u002Fpokeapi.co\u002F) — any Gen 1–5 line (329 possible starts), weighted by the official capture rate: commons hatch often, a legendary is a 1-in-129 event. It appears in your **Pokédex** immediately while you raise it. Every hatch rolls one of 25 natures — and once in a rare while, the egg hatches **✨ Shiny**.\n3. ⚡ **Evolve.** Keep coding and it grows through its actual evolution tree (1\u002F2\u002F3 stages, branching), with a little flash celebration at each step.\n4. 🎓 **Graduate & collect.** Final form + threshold permanently archives it in your **Pokédex** — rarer takes longer (≈3 days common → ≈24 days legendary at heavy use) — and a fresh egg arrives.\n5. 🍬 **Max out, get a candy.** Fill a 5-hour or weekly usage limit and you earn **Rare Candy** — spend it from the **Bag** to grow your current Pokémon.\n6. 🛒 **Spend at the Shop.** Every token you've used is spendable currency — buy **Rare Candy**, a **Mint** that re-rolls your Pokémon's nature, a **Shiny Charm** that permanently raises your shiny odds, or an egg to send off your current companion and start over. Eggs come in three grades: a plain **Pokémon Egg**, an **Uncommon Egg** guaranteed to hatch Uncommon or better, and a **Rare Egg** guaranteed to hatch Rare or better.\n\n## Tour\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"45%\" align=\"center\">\u003Cimg src=\"assets\u002Ffloating-pet.gif\" width=\"340\" alt=\"Floating desktop pet with a hover callout and right-click menu\">\u003C\u002Ftd>\n\u003Ctd width=\"55%\" valign=\"middle\">\n\u003Ch3>🐾 Let it live on your desktop\u003C\u002Fh3>\nMove your companion out of the menu bar and onto the desktop, at any size from 48 to 192px. Hover it for today's usage, click to open the popover, right-click for a menu, drag it wherever you like — and limit alerts can appear as a speech bubble above it.\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"55%\" valign=\"middle\">\n\u003Ch3>In your menu bar\u003C\u002Fh3>\nAn animated Gen-V sprite lives next to today's total tokens (compact, e.g. \u003Ccode>200.7M\u003C\u002Fcode>). Add today's cost (\u003Ccode>$\u003C\u002Fcode>) or official limit \u003Ccode>%\u003C\u002Fcode> — or turn everything off for a character-only bar.\n\u003C\u002Ftd>\n\u003Ctd width=\"45%\" align=\"center\">\u003Cimg src=\"assets\u002Fmenubar.gif\" width=\"240\" alt=\"Menu bar\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"45%\" align=\"center\">\u003Cimg src=\"assets\u002Fshiny-banner.gif\" width=\"340\" alt=\"Normal vs shiny\">\u003C\u002Ftd>\n\u003Ctd width=\"55%\" valign=\"middle\">\n\u003Ch3>✨ Once in a rare while — Shiny\u003C\u002Fh3>\nShiny hatches keep their distinct colors through every evolution — menu bar, home card, evolution line. In the Pokédex a ✨ sits next to the dex number, and tapping the cell swaps in the shiny colors. A dedicated notification makes sure you don't miss the moment.\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"55%\" valign=\"middle\">\n\u003Ch3>A Pokédex worth filling\u003C\u002Fh3>\nThe \u003Cb>Pokédex\u003C\u002Fb> folds every species you've owned into one cell — 24 per page in dex-number order, and a ✨ on the ones you own shiny. The \u003Cb>Catch log\u003C\u002Fb> keeps the individuals: newest first, each with its full evolution line, rarity, nature, and capture date.\n\u003C\u002Ftd>\n\u003Ctd width=\"45%\" align=\"center\">\u003Cimg src=\"assets\u002Fscreenshot-collection-pokedex.png\" width=\"300\" alt=\"Pokédex — one cell per species\">\u003Cbr>\u003Cbr>\u003Cimg src=\"assets\u002Fscreenshot-collection-catchlog.png\" width=\"300\" alt=\"Catch log — one row per Pokémon raised\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"45%\" align=\"center\">\u003Cimg src=\"assets\u002Fsettings.png\" width=\"300\" alt=\"Settings\">\u003C\u002Ftd>\n\u003Ctd width=\"55%\" valign=\"middle\">\n\u003Ch3>Tune it your way\u003C\u002Fh3>\nMenu-bar items, refresh interval (1–15 min or manual), launch at login, a Keychain opt-out that just hides the limits section, limit alerts with warning\u002Fcritical thresholds, and companion event notifications. Full \u003Cb>KO \u002F EN \u002F JA\u003C\u002Fb> UI and Pokémon names.\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"55%\" valign=\"middle\">\n\u003Ch3>🍬 Fill a limit, earn a Rare Candy\u003C\u002Fh3>\nMax out a 5-hour or weekly usage limit and you're handed a \u003Cb>Rare Candy\u003C\u002Fb> — one per 5-hour cap, five per weekly. Spend it from the new \u003Cb>Bag\u003C\u002Fb> tab to grow your current Pokémon: the moment you're rate-limited becomes the moment you level up.\n\u003C\u002Ftd>\n\u003Ctd width=\"45%\" align=\"center\">\u003Cimg src=\"assets\u002Fscreenshot-bag.png\" width=\"300\" alt=\"Rare Candy and Mint in the Bag\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"45%\" align=\"center\">\u003Cimg src=\"assets\u002Fscreenshot-shop.png\" width=\"300\" alt=\"Token Shop — Mint, Rare Candy, Pokémon Egg, Uncommon Egg, Shiny Charm, Rare Egg\">\u003C\u002Ftd>\n\u003Ctd width=\"55%\" valign=\"middle\">\n\u003Ch3>🛒 A shop that runs on your usage\u003C\u002Fh3>\nThe tokens you've already used are your currency. Spend them in the new \u003Cb>Shop\u003C\u002Fb> tab on \u003Cb>Rare Candy\u003C\u002Fb> to grow your current Pokémon, a \u003Cb>Mint\u003C\u002Fb> to re-roll its nature, a \u003Cb>Shiny Charm\u003C\u002Fb> that permanently raises your shiny hatch odds, or an egg to send off your companion and start over. Eggs come in three grades — a plain \u003Cb>Pokémon Egg\u003C\u002Fb>, an \u003Cb>Uncommon Egg\u003C\u002Fb> that always hatches Uncommon or better, and a \u003Cb>Rare Egg\u003C\u002Fb> that always hatches Rare or better. Legendaries stay in the pool for both graded eggs, so a guaranteed hatch can still surprise you.\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Also in the box\n\n- **Interactive floating pet** — hover for today's usage, click to open the main window, right-click for a menu; limit alerts can pop up as speech bubbles.\n- **Per-service tabs** — when two or more of Claude Code, Codex, Gemini CLI, Antigravity, OpenCode, Hermes Agent, Cursor, Grok CLI, Copilot CLI, and Kiro CLI are detected, compact tabs switch between them; today's total stays combined.\n- **Official limits** — Claude & Codex 5-hour \u002F weekly utilization with reset countdowns, right under today's numbers.\n- **Burn-rate forecast** — projects when the current 5h window hits 100%.\n- **In-app updates** — one-click update check; current version shown in Settings.\n\n## Works with\n\n| Tool | Tracked | Official limits |\n|---|---|---|\n| **Claude Code** | today · 5h block · week · month | ✅ 5h \u002F weekly |\n| **Codex** | today · week · month | ✅ 5h \u002F weekly |\n| **Gemini CLI** | today · week · month | — |\n| **Antigravity** | today · 5h block · week · month | — |\n| **OpenCode** | today · 5h block · week · month | — |\n| **Hermes Agent** | today · 5h block · week · month | — |\n| **Cursor** | today · 5h block · week · month | — |\n| **Grok CLI** | today · 5h block · week · month | — |\n| **Copilot CLI** | today · 5h block · week · month | — |\n| **Kiro CLI** | today · 5h block · week · month | — (estimated) |\n\nAll read locally — no external usage CLI required. Adding a tool is one provider file (see [CONTRIBUTING.md](CONTRIBUTING.md)).\n\n## Install\n\n### Requirements\n\nmacOS 14+ (Apple Silicon or Intel). That's it — token usage is read directly from local Claude Code, Codex, Gemini CLI, Antigravity, OpenCode, Hermes Agent, Cursor, Grok CLI, Copilot CLI, and Kiro CLI data, with no external usage CLI required.\n\n### Homebrew\n\n```bash\nbrew install --cask chattymin\u002Ftap\u002Fpoke-token-bar\n```\n\nad-hoc\u002Fself-signed; the cask strips the quarantine attribute on install.\n\n### Manual install (without Homebrew)\n\nPrefer not to use Homebrew? Download `PokeTokenBar.zip` from the [latest release](https:\u002F\u002Fgithub.com\u002Fchattymin\u002FPokeTokenBar\u002Freleases\u002Flatest), unzip it, and drag `PokeTokenBar.app` into `\u002FApplications`.\n\nBecause the app is ad-hoc\u002Fself-signed (not notarized under an Apple Developer account), Gatekeeper shows an \"unidentified developer\" warning on first launch. Clear it once, either way:\n\n- **Finder:** right-click (or Control-click) `PokeTokenBar.app` → **Open** → **Open** again in the dialog.\n- **Terminal:** `xattr -dr com.apple.quarantine \u002FApplications\u002FPokeTokenBar.app`\n\n(The Homebrew cask strips quarantine for you, so it needs no extra step.)\n\n### Build from source\n\n```bash\nswift build                  # debug\nswift test                   # unit tests\n.\u002Fscripts\u002Fbuild-app.sh       # release → PokeTokenBar.app → \u002FApplications\n```\n\n## Data sources\n\n| Source | Used for | Notes |\n|---|---|---|\n| `~\u002F.claude\u002Fprojects\u002F**\u002F*.jsonl` | Claude Code daily\u002Fblocks\u002Fweekly\u002Fmonthly | read directly; deduped by message id; cached incrementally |\n| `~\u002F.gemini\u002Ftmp\u002F**\u002Fchats\u002F*.json(l)` | Gemini CLI daily\u002Fmonthly | session records (`tokens` per message); weekly = daily sum |\n| `~\u002F.gemini\u002Fantigravity-cli\u002Fconversations\u002F*.db` | Antigravity daily\u002Fblocks\u002Fweekly\u002Fmonthly | SQLite read-only; per-call usage from the Cascade protobuf blob; its own provider, not folded into Gemini; a subscription, so no cost is estimated |\n| `~\u002F.codex\u002Fsessions\u002F**\u002F*.jsonl` | Codex daily\u002Fmonthly | `token_count` events; weekly = daily sum |\n| `~\u002F.local\u002Fshare\u002Fopencode\u002Fopencode.db` | OpenCode daily\u002Fblocks\u002Fweekly\u002Fmonthly | SQLite read-only; legacy `storage\u002Fmessage` JSON is also supported |\n| `~\u002F.hermes\u002Fstate.db` | Hermes Agent daily\u002Fblocks\u002Fweekly\u002Fmonthly | SQLite read-only; session token totals and persisted cost |\n| `~\u002FLibrary\u002FApplication Support\u002FCursor\u002FUser\u002FglobalStorage\u002Fstate.vscdb` | Cursor daily\u002Fblocks\u002Fweekly\u002Fmonthly | SQLite read-only; `cursorDiskKV` bubble entries with `tokenCount` |\n| `~\u002F.grok\u002Fsessions\u002F**\u002Fupdates.jsonl` | Grok CLI daily\u002Fblocks\u002Fweekly\u002Fmonthly | `turn_completed` records (per-turn `usage`, server-reported cost); honours `$GROK_HOME`; subagent sessions are skipped because their tokens are already folded into the parent turn |\n| `~\u002F.copilot\u002Fsession-store.db` | Copilot CLI daily\u002Fblocks\u002Fweekly\u002Fmonthly | SQLite read-only; one `assistant_usage_events` row per API call; honours `$COPILOT_HOME`; `input_tokens` already contains the cached prompt, so cache reads\u002Fwrites are subtracted; premium-request billing, so no cost is estimated |\n| `~\u002FLibrary\u002FApplication Support\u002Fkiro-cli\u002Fdata.sqlite3` | Kiro CLI daily\u002Fblocks\u002Fweekly\u002Fmonthly | SQLite read-only; conversation history JSON (`conversations`\u002F`conversations_v2`); Kiro's local database never records real token counts, and there is no server-side session, so input is a bytes÷4 **estimate** of the accumulated conversation text resent on every turn (output likewise from the real streamed response size); a `\u002Fclear`d or compacted conversation's already-counted tokens stay counted until the app restarts; no cost is estimated |\n| Keychain \u002F `~\u002F.claude\u002F.credentials.json` → `api.anthropic.com` | Claude official 5h\u002Fweekly % | unofficial endpoint; the Keychain is read **only when you press refresh** — auto-polling never reads it |\n| `codex app-server` | Codex official 5h\u002Fweekly % | local child process; account snapshot only, no model turn |\n| [PokéAPI](https:\u002F\u002Fpokeapi.co\u002F) — `pokeapi.co`, `graphql.pokeapi.co` | Pokémon species &amp; evolution | runtime fetch; cached locally, never bundled |\n| `raw.githubusercontent.com\u002FPokeAPI\u002Fsprites` | Pokémon &amp; item sprites | runtime fetch; cached under Application Support, never bundled |\n| `status.claude.com`, `status.openai.com` | provider incident banner | statuspage summary; display only — turn it off in Settings |\n| `api.github.com` | update check | latest release tag; on launch and when the popover opens |\n\n## Privacy & permissions\n\n- **On-device.** Token usage is read directly from local Claude Code, Codex, Gemini CLI, Antigravity, OpenCode, Hermes Agent, Cursor, Grok CLI, Copilot CLI, and Kiro CLI data. The app never uploads usage or runs model turns.\n- **Outbound requests.** The app is not fully offline. It talks to seven hosts: `pokeapi.co` and `graphql.pokeapi.co` (species\u002Fevolution), `raw.githubusercontent.com` (sprites), `api.anthropic.com` (Claude official limits), `status.claude.com` and `status.openai.com` (incident banner — off switch in Settings), and `api.github.com` (update check). **None of them carry your usage, tokens, prompts, or project paths** — only the request itself.\n- **Keychain (optional).** The Claude OAuth credential is read **only when you press a refresh button** (Settings, or the limits row in the popover). Automatic polling never touches the Keychain, so it never raises a password prompt; when available, the credential is taken from `~\u002F.claude\u002F.credentials.json` instead. The token is held in memory only — the app creates no Keychain item of its own. Once the token expires, limits stay visible but stale until you refresh. Turn it off in Settings — the limits section simply hides.\n- **Pokémon assets** are fetched at runtime from PokéAPI and cached only under `~\u002FLibrary\u002FApplication Support\u002FPokeTokenBar\u002F`. The app binary and its release artifacts contain no Pokémon assets.\n\n## Contributors\n\nContributions of all sizes are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) for how to build, test, and open a pull request.\n\n[![Contributors](https:\u002F\u002Fcontrib.rocks\u002Fimage?repo=chattymin\u002FPokeTokenBar)](https:\u002F\u002Fgithub.com\u002Fchattymin\u002FPokeTokenBar\u002Fgraphs\u002Fcontributors)\n\n## License & disclaimer\n\n**MIT** — see [LICENSE](LICENSE). The MIT license covers this project's original source code only; it grants no rights to any third-party trademarks, artwork, or data accessed through the app.\n\nPokeTokenBar is an **unofficial, non-commercial fan project**. It is **not affiliated with, endorsed, sponsored, or approved by Nintendo, Game Freak, Creatures Inc., or The Pokémon Company.** \"Pokémon\" and all related names, characters, and imagery are trademarks and copyrights of their respective owners. This project claims no ownership of, and asserts no rights over, any Pokémon intellectual property.\n\n- **The app binary and its release artifacts bundle no Pokémon assets.** Pokémon species data and sprites are fetched **at runtime** from the public [PokéAPI](https:\u002F\u002Fpokeapi.co) and cached locally on the user's own device; sprite images served via PokéAPI remain the property of their respective owners.\n- Any Pokémon imagery in this repository's documentation (screenshots\u002FGIFs) is shown solely to illustrate the app's functionality.\n- The app is provided free of charge for **personal, non-commercial use only.**\n- If you are a rights holder with any concern about this project, please open an issue or contact the maintainer, and we will respond promptly.\n\n*Provided \"as is\", without warranty of any kind. This notice is not legal advice.*\n","PokeTokenBar 是一款 macOS 菜单栏工具，将 AI 编程工具（如 Claude Code、Gemini CLI、Copilot CLI 等）的本地 token 消耗转化为 Pokémon 养成体验。它直接读取各类 AI 工具的日志文件，实时统计当日 token 使用量、成本及官方 5 小时\u002F每周配额，并以孵化蛋、进化、图鉴收集等游戏化方式呈现。核心特点是零外部依赖、纯本地解析、基于真实宝可梦进化树与捕获率加权生成，支持闪亮（Shiny）与性格等细节。适用于关注 AI 使用成本与配额、偏好轻量可视化追踪且使用多款本地 CLI 型 AI 编程助手的 macOS 开发者。",2,"trending"]