Pokémon Journey

Pokémon that live above your Claude Code prompt

A free Claude Code plugin. Your party roams a tiny pixel world while you work: they run when Claude is busy, cheer when your tests pass, faint when they fail, and evolve as you ship.

/plugin marketplace add JinHang02/claude-code-pokemon
/plugin install pokemon@claude-code-pokemon

Run both inside Claude Code, then start a new session. Needs Claude Code 2.1.287 or newer and a terminal with 24-bit color.

Pikachu, Charmander and Squirtle roaming a pixel meadow above the Claude Code prompt, running while Claude works and cheering with confetti

They react to your work

Nothing to set up. Your party watches what Claude is doing and reacts on its own.

The lead Pokémon with a thought bubble while the party hurries about
Claude is workingA thought bubble pops up over your lead while the party hurries about.
The party doing a double hop with a spin
Claude finishes a replyA double hop with a spin: your cue that it's your turn.
Confetti bursting over the party
Tests pass or a commit landsConfetti, and XP for everyone.
Charmander shuddering and sinking into the grass
Tests or a build failA battle-style faint: a shudder, a sink, a beat of silence, then back up.
A wild Pokémon stepping out of rustling grass while the party turns to look
A wild Pokémon appearsEvery 10 to 20 minutes the grass rustles and a visitor walks across. Click it to throw a Poké Ball (in Claude Code's fullscreen mode).
Small clones of the lead following it through the grass
Claude launches subagentsA little clone pops out of the grass for each one and follows along.

Only real failures make them faint. A grep that finds nothing isn't a failure, so a plain command has to fail three times in a row before anyone keels over. Leave Claude idle for five minutes and they doze off.

Even the spinner joins in, and each turn closes with a Poké Ball:

✻ Searching tall grass… (17m 46s · thinking)
◓ Caught for 18m 2s

Raise them into legends

Every Pokémon in your party earns XP from the work you and Claude get done.

Claude finishes a reply +2
A test run passes +5
A commit goes through +10

A test run and a commit in one command (npm test && git commit) earn both. Levels stop at Lv 100, as in the games.

The evolution screen: Vaporeon on a dark stage with light rays and sparkles, and a text box saying Congratulations! Your EEVEE evolved into VAPOREON!

What? Charmander is evolving! They evolve the way they do in the games:

  • at a level: Charmander at Lv 16
  • with a stone: Pikachu with a Thunder Stone, Eevee with a Water Stone
  • by trade: Onix with a Metal Coat, Haunter with a Linking Cord
  • with friendship, after 10 hours together: Pichu, Togepi, Riolu
  • by the clock: Rockruff into Midnight Lycanroc at night

Stones and trade items come from the PokéMart. Regional forms evolve the way their region does, and gender matters where it does in the games.

You decide when: a Pokémon that can evolve waits with gold motes rising around it until you run /pokemon evolve <name>, and picks its branch or form if it has more than one. /pokemon evolve auto lets them evolve by themselves.

Each evolution gets its own screen, as in the games: the old and new forms swap in silhouette, faster and faster, a burst of light, and Congratulations! Pick the one you grew up with: /pokemon evolution rays (the default, Gen 4–5), white (Gen 1–2) or gradient (Gen 3).

The screen waits for a wild visitor to leave, and needs a band at least 8 rows tall; below that the Pokémon flashes in place. On a narrow band its message shortens and keeps both names. The prompt keeps working meanwhile: a command that evolves another one answers at once, and its screen plays next.

905 Pokémon from Gen 1 to 8, 424 alternate forms, and a 1 in 32 chance of a shiny on every catch. Names are written as in the games, Farfetch'd, Mr. Mime, Nidoran♀, and you can type them without the punctuation.

Welcome to the PokéMart!

Your work pays in Pokédollars as well as XP. Click 🛒 ₽ in the band's corner and the Mart opens right there in the band: pick a tab, pick an item, set how many, buy. Thank you, come again!

Clicking 🛒 ₽ 24,560 opens the PokéMart in the band: a Fire Stone with its picture and description, the Hold items and Special tabs, then Water Stone ×3 for ₽9,000, Bought 3 × Water Stone!, ₽ 15,560, and x closes it back to the meadow
Bought 3 × Water Stone!Four tabs, each item with its picture and its description from the games, and a "Your party: Eevee → Vaporeon" line when it would evolve one of yours.

Earn ₽ as you ship

Claude finishes a reply ₽20
A test run passes ₽50
A commit goes through ₽100
You start with, as in Red and Blue ₽3,000

On the shelves

Ten evolution stones for ₽3,000. The trade items (Metal Coat, Dragon Scale, Up-Grade and the rest), the Linking Cord, Galar's apples and pots, the two Scrolls, Black Augurite, Peat Block, the Galarica Cuff and Wreath for ₽5,000. Rare Candy, a Lucky Egg for half as much XP again (rounded down), and a Soothe Bell that makes time together count one and a half times.

No clicks in your terminal? /pokemon buy fire stone 3 shops by typing. Clicking needs Claude Code's fullscreen mode, and the Mart takes its keys once you click into it. Type a command and it closes, and the command goes to your prompt. Enter right after a buy asks first, so nothing is bought twice by accident. It fits a band from 40 columns wide.

Typing /pokemon give water stone eevee: the reply says What? Eevee is evolving!, the band becomes a dark stage with light rays, Eevee flashes and swaps with Vaporeon in white silhouettes, a burst of light, the text box says Congratulations! Your EEVEE evolved into VAPOREON!, then the meadow is back with Vaporeon and a toast says What? Eevee evolved into Vaporeon!
What? Eevee is evolving!/pokemon give a stone or trade item and it works at once, on its own evolution screen. A hold item is held, one per Pokémon, and /pokemon bag shows who holds what.

Twenty landscapes, on your clock

Meadow, hills, mountains, lake or forest: a new one every hour, at dawn, day, dusk or night by your local time. This shows the time of day it is for you right now.

Who wanders by

Every 10 to 20 minutes a wild Pokémon steps out of the tall grass, and who it is depends on where and when you are. On average a Pidgey turns up about once in 190 visits and a Dratini about once in 1,900, ten Pidgey for every Dratini. Legendaries, mythicals and Ultra Beasts together come about once in 100 visits, and a Pokémon you've never seen is 2.5 times as likely. A fitting place makes a type 4 times as likely and a fitting hour twice, but anyone can still wander anywhere.

Click it to throw a Poké Ball, in Claude Code's fullscreen mode (/config). Catches join your party, twins welcome, or your PC box when it's full.

Where and when

  • by the lake: Water, Ice, Flying, Bug
  • in the mountains: Rock, Ground, Steel, Ice, Dragon, Fighting, Flying
  • on the hills: Ground, Normal, Fighting, Fire, Rock, Flying
  • at the forest's edge: Bug, Grass, Poison, Fairy, Normal, Dark
  • in the meadow: Normal, Grass, Bug, Electric, Fairy, Flying
  • at night: Ghost, Dark, Poison, Psychic, Fairy; by day: Fire, Grass, Bug, Normal
  • at dawn: Flying, Psychic; at dusk: Flying, Psychic, Ghost

Commands

Type them straight into Claude Code.

A battle HUD for your status line

Optional and separate from the plugin: a status line script with your model as a nametag, the context window left as an HP bar, and your effort as a level. Setup is in the README.

The status line: an OPUS 5.5 nametag, the project, ROUTE main, EXP tokens, Lv.XHIGH effort, a green HP bar and the session time

Questions

Does it slow Claude Code down?

Hardly. It draws about 20 frames a second while things move and drops to 5 when nothing does, and it never touches Claude's work. For the half minute or so a wild Pokémon can be aimed at, the band is drawn as coloured text and costs about 20 to 35% CPU against about 10%. Every command answers within a few seconds: one held up by a slow download says "Still working on it…" and tells what it did in a notification, or that a list is ready to run again.

Does it send my code anywhere?

No. It only downloads sprites and evolution data, then caches them. It looks at which commands Claude runs and whether they succeed, and none of that leaves your machine.

I installed it and nothing shows up.

It's a Claude Code mod, and mods are on by default from Claude Code 2.1.287, so update Claude Code if you're on an older version and start a new session. Then run /plugin: the line under the tabs should list pokemon among the active mods. Settings such as disableAllHooks, --safe-mode or an organization's policy can turn mods off. The party is drawn in a terminal, not in the Desktop app or the VS Code chat panel.

Which terminals work best?

iTerm2, Ghostty, kitty, WezTerm and Windows Terminal draw the pixel art crisply. In the VS Code or Cursor terminal, set terminal.integrated.minimumContrastRatio to 1. macOS Terminal.app works but shows thin lines between rows.

Can I use it in several windows at once?

Yes. They share one party, and all of them earn XP for it. Two windows changing it at once keep both changes; only two writes within the same few milliseconds can lose one. After upgrading, restart every open window: one still running an older version writes the save its own way, and 1.2.0 erases your Bag, held items and ₽.

What doesn't it do yet?

It's made on macOS and tested on Linux; Windows hasn't been tried yet. Clicks (Poké Balls, the ₽ button, the Mart) need Claude Code's fullscreen mode, and pixel-exact aim needs a terminal that reports where in a cell you clicked (kitty, Ghostty, iTerm2, WezTerm, foot). Pokémon end at Gen 8, so Gen 9 isn't in. The README has the full list.