Use your tokens to raise, evolve, and collect Pokémon! 🥚
414
stars
332
commits
Swift
primary language
Sep 10, 2026
updated
Your AI coding tokens, hatched into Pokémon — right in your menu bar.
PokeTokenBar 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, Pi Agent & omp — 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 / weekly limits, read straight from your local logs.
Token usage is read directly from local Claude Code, Codex, Gemini CLI, Antigravity, OpenCode, Hermes Agent, Cursor, Grok CLI, Copilot CLI, Kiro CLI, Pi Agent, and omp data (
totalTokens= input + output + cache, local date) — no external CLI needed. Unofficial, non-commercial Pokémon fan project — see License & disclaimer.
![]() |
🐾 Let it live on your desktopMove 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. |
In your menu barAn animated Gen-V sprite lives next to today's total tokens (compact, e.g.200.7M). Add today's cost ($) or official limit % — or turn everything off for a character-only bar.
| ![]() |
![]() |
✨ Once in a rare while — ShinyShiny 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. |
A Pokédex worth fillingThe Pokédex 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 Catch log keeps the individuals: newest first, each with its full evolution line, rarity, nature, and capture date. | ![]() ![]() |
![]() |
Tune it your wayMenu-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/critical thresholds, and companion event notifications. Full KO / EN / JA / ES / FR / PT UI and Pokémon names. |
🍬 Fill a limit, earn a Rare CandyMax out a 5-hour or weekly usage limit and you're handed a Rare Candy — one per 5-hour cap, five per weekly. Spend it from the new Bag tab to grow your current Pokémon: the moment you're rate-limited becomes the moment you level up. | ![]() |
![]() |
🛒 A shop that runs on your usageThe tokens you've already used are your currency. Spend them in the new Shop tab on Rare Candy to grow your current Pokémon, a Mint to re-roll its nature, a Shiny Charm 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 Pokémon Egg, an Uncommon Egg that always hatches Uncommon or better, and a Rare Egg that always hatches Rare or better. Legendaries stay in the pool for both graded eggs, so a guaranteed hatch can still surprise you. |
📊 Official limits, now for Antigravity tooAntigravity 2.0 and the IDE report real quota, not an estimate. Gemini models and Claude & GPT models each get their own 5-hour and weekly buckets with reset countdowns, alongside Claude Code and Codex. Read quietly in the background — no Keychain prompt, and the session refreshes itself. | ![]() |
![]() |
📁 Logs somewhere unusual? Point at themIf a tool keeps its sessions outside the built-in paths, add your own roots under Settings → Advanced — comma or newline separated,* wildcards, with a live count of how many extra folders currently match. Every provider keeps its own list, so one tool's folders are never handed to another tool's parser, and your custom roots are added to the built-in ones rather than replacing them.
|
🔑 Official limits without the KeychainIf the cached limit token expires, official Claude limits used to freeze until a refresh — and that press could raise a Keychain password prompt. Paste a claude.ai session key under Settings → Advanced instead: limits then come straight from claude.ai with no Keychain access at all, auto-polling keeps them fresh, and the key is validated the moment you save it. | ![]() |
![]() |
🧮 One session log, several modelsPi and its forks (like omp) can route more than one model through a single session log. Usage is now attributed to the real model id instead of a flat "pi", and when a day spans several models the popover breaks today's tokens down per model, biggest first. |
| Tool | Tracked | Official limits |
|---|---|---|
| Claude Code | today · 5h block · week · month | ✅ 5h / weekly |
| Codex | today · week · month | ✅ 5h / weekly |
| Gemini CLI | today · week · month | — |
| Antigravity | today · 5h block · week · month | ✅ 5h / weekly |
| OpenCode | today · 5h block · week · month | — |
| Hermes Agent | today · 5h block · week · month | — |
| Cursor | today · 5h block · week · month | — |
| Grok CLI | today · 5h block · week · month | — |
| Copilot CLI | today · 5h block · week · month | — |
| Kiro CLI | today · 5h block · week · month | — (estimated) |
| Pi Agent | today · 5h block · week · month | — |
| omp (oh-my-pi) | today · 5h block · week · month | — |
All read locally — no external usage CLI required. Adding a tool is one provider file (see CONTRIBUTING.md).
macOS 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, Kiro CLI, Pi Agent, and omp data, with no external usage CLI required.
brew install --cask chattymin/tap/poke-token-bar
ad-hoc/self-signed; the cask strips the quarantine attribute on install.
Prefer not to use Homebrew? Download PokeTokenBar.zip from the latest release, unzip it, and drag PokeTokenBar.app into /Applications.
Because the app is ad-hoc/self-signed (not notarized under an Apple Developer account), Gatekeeper shows an "unidentified developer" warning on first launch. Clear it once, either way:
PokeTokenBar.app → Open → Open again in the dialog.xattr -dr com.apple.quarantine /Applications/PokeTokenBar.app(The Homebrew cask strips quarantine for you, so it needs no extra step.)
swift build # debug
swift test # unit tests
./scripts/build-app.sh # release → PokeTokenBar.app → /Applications
| Source | Used for | Notes |
|---|---|---|
~/.claude/projects/**/*.jsonl | Claude Code daily/blocks/weekly/monthly | read directly; deduped by message id; cached incrementally |
~/.gemini/tmp/**/chats/*.json(l) | Gemini CLI daily/monthly | session records (tokens per message); weekly = daily sum |
~/.gemini/antigravity/conversations/*.db~/.gemini/antigravity-cli/conversations/*.db~/.gemini/antigravity-ide/conversations/*.db | Antigravity daily/blocks/weekly/monthly | SQLite read-only; per-call usage from the Cascade protobuf blob; supports Antigravity 2.0/Core, CLI & IDE; its own provider, not folded into Gemini; a subscription, so no cost is estimated |
~/.codex/sessions/**/*.jsonl | Codex daily/monthly | token_count events; weekly = daily sum |
~/.local/share/opencode/opencode.db | OpenCode daily/blocks/weekly/monthly | SQLite read-only; legacy storage/message JSON is also supported |
~/.hermes/state.db | Hermes Agent daily/blocks/weekly/monthly | SQLite read-only; session token totals and persisted cost |
~/Library/Application Support/Cursor/User/globalStorage/state.vscdb | Cursor daily/blocks/weekly/monthly | SQLite read-only fallback (cursorDiskKV bubble tokenCount); when signed in, primary source is cursor.com dashboard API (see Privacy) |
cursor.com (dashboard API) | Cursor daily/blocks/weekly/monthly | unofficial JSON endpoint (get-filtered-usage-events); session from cursorAuth/accessToken in state.vscdb or CURSOR_SESSION_TOKEN; refetches when the provider reloads; on network error falls back to an account-scoped disk cache up to 6 h old; disable with CURSOR_USAGE_API=0 |
~/.grok/sessions/**/updates.jsonl | Grok CLI daily/blocks/weekly/monthly | 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 |
~/.copilot/session-store.db | Copilot CLI daily/blocks/weekly/monthly | SQLite read-only; one assistant_usage_events row per API call; honours $COPILOT_HOME; input_tokens already contains the cached prompt, so cache reads/writes are subtracted; premium-request billing, so no cost is estimated |
~/Library/Application Support/kiro-cli/data.sqlite3~/.kiro/sessions/cli/*.jsonl~/.kiro/sessions/<ws>/<session>/messages.jsonl | Kiro CLI daily/blocks/weekly/monthly | Pre-2.20 SQLite plus 2.20+ / --v3 JSONL; neither store records real token counts, so input is a bytes÷4 estimate of accumulated conversation text resent on every turn; usage_summary credits are not converted to USD; a /cleard SQLite conversation's already-counted tokens stay counted until the app restarts; honours $KIRO_CLI_HOME and $KIRO_HOME |
~/.pi/agent/sessions/**/*.jsonl | Pi Agent daily/blocks/weekly/monthly | Direct persisted usage from all projects; $PI_CODING_AGENT_DIR and $PI_CODING_AGENT_SESSION_DIR overrides supported; output already includes reasoning (not counted twice); forked history deduplicated by entry ID; no cost is reported |
~/.omp/agent/sessions/**/*.jsonl | omp (oh-my-pi) daily/blocks/weekly/monthly | pi-format session JSONL; every assistant usage event is summed (rewound branches are already billed) and subagent session files count too, since their tokens are not folded into the parent; honours $OMP_CODING_AGENT_DIR; per-event cost is trusted when reported; bridge/ conversion copies are skipped because their originals are already counted at the source |
Keychain / ~/.claude/.credentials.json → api.anthropic.com | Claude official 5h/weekly % | unofficial endpoint; the Keychain is read only when you press refresh — auto-polling never reads it |
codex app-server | Codex official 5h/weekly % | local child process; account snapshot only, no model turn |
PokéAPI — pokeapi.co, graphql.pokeapi.co | Pokémon species & evolution | runtime fetch; cached locally, never bundled |
raw.githubusercontent.com/PokeAPI/sprites | Pokémon & item sprites | runtime fetch; cached under Application Support, never bundled |
status.claude.com, status.openai.com | provider incident banner | statuspage summary; display only — turn it off in Settings |
api.github.com | update check | latest release tag; on launch and when the popover opens |
If a provider's logs live outside those built-in paths, add the folder in Settings → Advanced → Additional scan folders. Pick the provider first — each folder is parsed only by that provider, so pointing a Gemini field at Claude logs would mis-attribute tokens. Extra folders are added to the built-in locations; they never replace them.
pokeapi.co and graphql.pokeapi.co (species/evolution), raw.githubusercontent.com (sprites), api.anthropic.com (Claude official limits), claude.ai (Claude official limits when you save an optional claude.ai session key in Settings — the key only, no prompts or project paths), cursor.com (Cursor usage summary when you are signed into Cursor locally — session credential only, no prompts or project paths), cloudcode-pa.googleapis.com and daily-cloudcode-pa.googleapis.com (Antigravity official limits) plus oauth2.googleapis.com (their token refresh), 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 logs, prompts, or project paths — only the request itself (Cursor sends your session cookie to fetch your own usage rows, same as the web dashboard).~/.claude/.credentials.json is present, each poll re-reads it, so an in-place /login to another account is picked up without pressing refresh. The token is held in memory only — the app creates no Keychain item of its own. If there is no credentials file, limits stay on the cached token until it expires or you refresh. Turn it off in Settings — the limits section simply hides.~/Library/Application Support/PokeTokenBar/. The app binary and its release artifacts contain no Pokémon assets.Contributions of all sizes are welcome — see CONTRIBUTING.md for how to build, test, and open a pull request.
MIT — see 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.
PokeTokenBar 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.
Provided "as is", without warranty of any kind. This notice is not legal advice.
Swift
98.4%
Shell
1.6%
Use your tokens to raise, evolve, and collect Pokémon! 🥚
414
stars
332
commits
Swift
primary language
Sep 10, 2026
updated
Your AI coding tokens, hatched into Pokémon — right in your menu bar.
PokeTokenBar 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, Pi Agent & omp — 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 / weekly limits, read straight from your local logs.
Token usage is read directly from local Claude Code, Codex, Gemini CLI, Antigravity, OpenCode, Hermes Agent, Cursor, Grok CLI, Copilot CLI, Kiro CLI, Pi Agent, and omp data (
totalTokens= input + output + cache, local date) — no external CLI needed. Unofficial, non-commercial Pokémon fan project — see License & disclaimer.
![]() |
🐾 Let it live on your desktopMove 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. |
In your menu barAn animated Gen-V sprite lives next to today's total tokens (compact, e.g.200.7M). Add today's cost ($) or official limit % — or turn everything off for a character-only bar.
| ![]() |
![]() |
✨ Once in a rare while — ShinyShiny 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. |
A Pokédex worth fillingThe Pokédex 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 Catch log keeps the individuals: newest first, each with its full evolution line, rarity, nature, and capture date. | ![]() ![]() |
![]() |
Tune it your wayMenu-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/critical thresholds, and companion event notifications. Full KO / EN / JA / ES / FR / PT UI and Pokémon names. |
🍬 Fill a limit, earn a Rare CandyMax out a 5-hour or weekly usage limit and you're handed a Rare Candy — one per 5-hour cap, five per weekly. Spend it from the new Bag tab to grow your current Pokémon: the moment you're rate-limited becomes the moment you level up. | ![]() |
![]() |
🛒 A shop that runs on your usageThe tokens you've already used are your currency. Spend them in the new Shop tab on Rare Candy to grow your current Pokémon, a Mint to re-roll its nature, a Shiny Charm 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 Pokémon Egg, an Uncommon Egg that always hatches Uncommon or better, and a Rare Egg that always hatches Rare or better. Legendaries stay in the pool for both graded eggs, so a guaranteed hatch can still surprise you. |
📊 Official limits, now for Antigravity tooAntigravity 2.0 and the IDE report real quota, not an estimate. Gemini models and Claude & GPT models each get their own 5-hour and weekly buckets with reset countdowns, alongside Claude Code and Codex. Read quietly in the background — no Keychain prompt, and the session refreshes itself. | ![]() |
![]() |
📁 Logs somewhere unusual? Point at themIf a tool keeps its sessions outside the built-in paths, add your own roots under Settings → Advanced — comma or newline separated,* wildcards, with a live count of how many extra folders currently match. Every provider keeps its own list, so one tool's folders are never handed to another tool's parser, and your custom roots are added to the built-in ones rather than replacing them.
|
🔑 Official limits without the KeychainIf the cached limit token expires, official Claude limits used to freeze until a refresh — and that press could raise a Keychain password prompt. Paste a claude.ai session key under Settings → Advanced instead: limits then come straight from claude.ai with no Keychain access at all, auto-polling keeps them fresh, and the key is validated the moment you save it. | ![]() |
![]() |
🧮 One session log, several modelsPi and its forks (like omp) can route more than one model through a single session log. Usage is now attributed to the real model id instead of a flat "pi", and when a day spans several models the popover breaks today's tokens down per model, biggest first. |
| Tool | Tracked | Official limits |
|---|---|---|
| Claude Code | today · 5h block · week · month | ✅ 5h / weekly |
| Codex | today · week · month | ✅ 5h / weekly |
| Gemini CLI | today · week · month | — |
| Antigravity | today · 5h block · week · month | ✅ 5h / weekly |
| OpenCode | today · 5h block · week · month | — |
| Hermes Agent | today · 5h block · week · month | — |
| Cursor | today · 5h block · week · month | — |
| Grok CLI | today · 5h block · week · month | — |
| Copilot CLI | today · 5h block · week · month | — |
| Kiro CLI | today · 5h block · week · month | — (estimated) |
| Pi Agent | today · 5h block · week · month | — |
| omp (oh-my-pi) | today · 5h block · week · month | — |
All read locally — no external usage CLI required. Adding a tool is one provider file (see CONTRIBUTING.md).
macOS 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, Kiro CLI, Pi Agent, and omp data, with no external usage CLI required.
brew install --cask chattymin/tap/poke-token-bar
ad-hoc/self-signed; the cask strips the quarantine attribute on install.
Prefer not to use Homebrew? Download PokeTokenBar.zip from the latest release, unzip it, and drag PokeTokenBar.app into /Applications.
Because the app is ad-hoc/self-signed (not notarized under an Apple Developer account), Gatekeeper shows an "unidentified developer" warning on first launch. Clear it once, either way:
PokeTokenBar.app → Open → Open again in the dialog.xattr -dr com.apple.quarantine /Applications/PokeTokenBar.app(The Homebrew cask strips quarantine for you, so it needs no extra step.)
swift build # debug
swift test # unit tests
./scripts/build-app.sh # release → PokeTokenBar.app → /Applications
| Source | Used for | Notes |
|---|---|---|
~/.claude/projects/**/*.jsonl | Claude Code daily/blocks/weekly/monthly | read directly; deduped by message id; cached incrementally |
~/.gemini/tmp/**/chats/*.json(l) | Gemini CLI daily/monthly | session records (tokens per message); weekly = daily sum |
~/.gemini/antigravity/conversations/*.db~/.gemini/antigravity-cli/conversations/*.db~/.gemini/antigravity-ide/conversations/*.db | Antigravity daily/blocks/weekly/monthly | SQLite read-only; per-call usage from the Cascade protobuf blob; supports Antigravity 2.0/Core, CLI & IDE; its own provider, not folded into Gemini; a subscription, so no cost is estimated |
~/.codex/sessions/**/*.jsonl | Codex daily/monthly | token_count events; weekly = daily sum |
~/.local/share/opencode/opencode.db | OpenCode daily/blocks/weekly/monthly | SQLite read-only; legacy storage/message JSON is also supported |
~/.hermes/state.db | Hermes Agent daily/blocks/weekly/monthly | SQLite read-only; session token totals and persisted cost |
~/Library/Application Support/Cursor/User/globalStorage/state.vscdb | Cursor daily/blocks/weekly/monthly | SQLite read-only fallback (cursorDiskKV bubble tokenCount); when signed in, primary source is cursor.com dashboard API (see Privacy) |
cursor.com (dashboard API) | Cursor daily/blocks/weekly/monthly | unofficial JSON endpoint (get-filtered-usage-events); session from cursorAuth/accessToken in state.vscdb or CURSOR_SESSION_TOKEN; refetches when the provider reloads; on network error falls back to an account-scoped disk cache up to 6 h old; disable with CURSOR_USAGE_API=0 |
~/.grok/sessions/**/updates.jsonl | Grok CLI daily/blocks/weekly/monthly | 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 |
~/.copilot/session-store.db | Copilot CLI daily/blocks/weekly/monthly | SQLite read-only; one assistant_usage_events row per API call; honours $COPILOT_HOME; input_tokens already contains the cached prompt, so cache reads/writes are subtracted; premium-request billing, so no cost is estimated |
~/Library/Application Support/kiro-cli/data.sqlite3~/.kiro/sessions/cli/*.jsonl~/.kiro/sessions/<ws>/<session>/messages.jsonl | Kiro CLI daily/blocks/weekly/monthly | Pre-2.20 SQLite plus 2.20+ / --v3 JSONL; neither store records real token counts, so input is a bytes÷4 estimate of accumulated conversation text resent on every turn; usage_summary credits are not converted to USD; a /cleard SQLite conversation's already-counted tokens stay counted until the app restarts; honours $KIRO_CLI_HOME and $KIRO_HOME |
~/.pi/agent/sessions/**/*.jsonl | Pi Agent daily/blocks/weekly/monthly | Direct persisted usage from all projects; $PI_CODING_AGENT_DIR and $PI_CODING_AGENT_SESSION_DIR overrides supported; output already includes reasoning (not counted twice); forked history deduplicated by entry ID; no cost is reported |
~/.omp/agent/sessions/**/*.jsonl | omp (oh-my-pi) daily/blocks/weekly/monthly | pi-format session JSONL; every assistant usage event is summed (rewound branches are already billed) and subagent session files count too, since their tokens are not folded into the parent; honours $OMP_CODING_AGENT_DIR; per-event cost is trusted when reported; bridge/ conversion copies are skipped because their originals are already counted at the source |
Keychain / ~/.claude/.credentials.json → api.anthropic.com | Claude official 5h/weekly % | unofficial endpoint; the Keychain is read only when you press refresh — auto-polling never reads it |
codex app-server | Codex official 5h/weekly % | local child process; account snapshot only, no model turn |
PokéAPI — pokeapi.co, graphql.pokeapi.co | Pokémon species & evolution | runtime fetch; cached locally, never bundled |
raw.githubusercontent.com/PokeAPI/sprites | Pokémon & item sprites | runtime fetch; cached under Application Support, never bundled |
status.claude.com, status.openai.com | provider incident banner | statuspage summary; display only — turn it off in Settings |
api.github.com | update check | latest release tag; on launch and when the popover opens |
If a provider's logs live outside those built-in paths, add the folder in Settings → Advanced → Additional scan folders. Pick the provider first — each folder is parsed only by that provider, so pointing a Gemini field at Claude logs would mis-attribute tokens. Extra folders are added to the built-in locations; they never replace them.
pokeapi.co and graphql.pokeapi.co (species/evolution), raw.githubusercontent.com (sprites), api.anthropic.com (Claude official limits), claude.ai (Claude official limits when you save an optional claude.ai session key in Settings — the key only, no prompts or project paths), cursor.com (Cursor usage summary when you are signed into Cursor locally — session credential only, no prompts or project paths), cloudcode-pa.googleapis.com and daily-cloudcode-pa.googleapis.com (Antigravity official limits) plus oauth2.googleapis.com (their token refresh), 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 logs, prompts, or project paths — only the request itself (Cursor sends your session cookie to fetch your own usage rows, same as the web dashboard).~/.claude/.credentials.json is present, each poll re-reads it, so an in-place /login to another account is picked up without pressing refresh. The token is held in memory only — the app creates no Keychain item of its own. If there is no credentials file, limits stay on the cached token until it expires or you refresh. Turn it off in Settings — the limits section simply hides.~/Library/Application Support/PokeTokenBar/. The app binary and its release artifacts contain no Pokémon assets.Contributions of all sizes are welcome — see CONTRIBUTING.md for how to build, test, and open a pull request.
MIT — see 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.
PokeTokenBar 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.
Provided "as is", without warranty of any kind. This notice is not legal advice.
Swift
98.4%
Shell
1.6%