I built a Pikachu game inside Claude Code using Claude Mods
cc-pokedex: wild creatures above the Claude Code prompt. Where your prompt leads decides what shows up.

Prompt about the sea and something from the water may appear. Ask Claude to fix a crash and a
bug type may crawl out. Ask it to think through an architecture and a psychic type drifts in.
Throw balls to catch it, right above the prompt, while Claude keeps working. Nothing here asks
the model anything: encounters, throws and the dex cost zero tokens.
Catch one and it becomes your partner. It draws under the logo at startup, its name takes over
the spinner (Pikachu is sauteing... (12s)) and the turn footer (Pikachu baked for 3s), and
it sits above the prompt with its level. It gains xp when Claude finishes a turn, edits a file,
passes tests or commits, and it evolves at the levels you would expect.
Built on Claude Code function hooks ("Claude Mods"), early access: TypeScript that runs inside
Claude Code's own process. The API can change between releases.
Requirements
- Claude Code 2.1.269 or later with
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1.
- An interactive terminal session. Nothing draws in
claude -p, the desktop app or mobile.
- A terminal that reports the mouse, for clicking the board and the buttons.
Quick start
-
Turn function hooks on, in ~/.claude/settings.json:
{ "env": { "CLAUDE_CODE_ENABLE_FUNCTION_HOOKS": "1" } }
-
Load it for one session from this folder:
git clone https://github.com/deonmenezes/claude-mods-pokedex
claude --plugin-dir ./claude-mods-pokedex
Or install it as a marketplace plugin (the repo is its own marketplace):
claude plugin marketplace add deonmenezes/claude-mods-pokedex
claude plugin install cc-pokedex@cc-pokedex
-
Prompt normally. When a wild one appears you get a toast and a board above the prompt.
Click the board, or the throw ball button, or run /dex throw. Four balls per encounter.
-
/dex wild water forces an encounter so you can try it straight away. /dex wild pikachu
forces a species.
Commands
| Command | What it does |
| --- | --- |
| /dex | Dex count, partner and level, what is wild right now |
| /dex list | Everything caught, with rarity stars and counts |
| /dex partner <name> | Make a caught species your partner |
| /dex throw | Throw a ball (or click the board, or press Space after clicking it) |
| /dex run | Leave the encounter |
| /dex lure <name> | Set a lure: your next prompt that leads into that species' habitat brings it out |
| /dex show / /dex hide | Show or hide the partner strip above the prompt |
| /dex wild [kind or name] | Force an encounter, for trying it out |
| /dex release | Drop the partner |
Every form of /dex runs straight away, even while Claude is working.
Habitats
| Words in your prompt | Habitat | Examples |
| --- | --- | --- |
| water, sea, river, fish, boat, rain, stream | water | Squirtle, Magikarp, Psyduck, Lapras |
| land, grass, forest, tree, garden, plant | grass | Bulbasaur, Oddish, Bellsprout, Tangela |
| fire, hot, burn, flame, lava, cook | fire | Charmander, Vulpix, Growlithe, Moltres |
| electric, power, battery, thunder, charge | electric | Pikachu, Magnemite, Voltorb, Zapdos |
| rock, stone, mountain, cave, sand, dig | rock | Geodude, Onix, Diglett, Sandshrew |
| ice, snow, cold, freeze, winter | ice | Shellder, Jynx, Articuno |
| sky, fly, bird, wind, cloud | flying | Pidgey, Spearow, Zubat |
| bug, fix, crash, error, broken, failing | bug | Caterpie, Weedle, Scyther |
| delete, remove, kill, legacy, deprecated | ghost | Gastly, Haunter, Gengar |
| think, plan, design, research, explain | psychic | Abra, Drowzee, Mewtwo |
| build, compile, deploy, docker, ship, test | fighting | Machop, Machoke, Hitmonchan |
| anything else | the road | Rattata, Meowth, Eevee, Snorlax, Ditto |
A named habitat meets something 40% of the time, the road 10%. Rarity weights the pick and the
catch: common ★ 65%, uncommon ★★ 45%, rare ★★★ 28%, legendary ★★★★ 10% per ball. Mew only
answers a prompt that says both please and thank you.
The partner
Level n needs 2·n² xp. A finished turn gives 8, an edit 1, a passing test run 10, a commit 15,
a catch 20. Charmander becomes Charmeleon at 16 and Charizard at 36; the other chains follow the
games. An evolution also fills the dex entry of the new form.
The partner and the dex live in the plugin's store, so every session shares them.
Why the logo itself does not change
Function hooks can redraw a fixed list of components: the user and assistant messages, tool rows,
the spinner, the turn footer, the notice lines under the logo, the prompt hint, the band above the
prompt and panes. The logo is not on that list yet, so the partner draws beside the first notice
line under it instead. If a Logo render site lands, swapping the sprite in is a one-hook change.
Develop
bun test # rules: habitats, picks, throws, levels, evolutions
claude plugin validate .claude-plugin/plugin.json # lists hooked events, $ calls and surface modules
bunx -p typescript tsc -p . # types against .claude/types (from /plugin-types)
Two rules for board files: never name a local variable h, and write Client module paths as
string literals.
A fan project. The creature names belong to Nintendo, Game Freak and Creatures Inc.; the sprites
are original terminal art, and nothing here is affiliated with or endorsed by them.