Classic desktop games as Claude Code mods, played in a pane while Claude works.
1 ▆▆ ▆▆ ▆▆
2 ⚑ ▆▆ ▆▆
2 ▆▆ ▆▆ ▆▆
1 1 ▆▆ ▆▆
1 1 1 1 ▆▆ ⚑
▆▆ ▆▆ 2 2 1 1 1 ▆▆ ▆▆
▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆
▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆
▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆ ▆▆
▄▄▄▄▄▄▄
● ● Mines 8 · Time 0:17 · Best 0:42 · By Reporails
ω 34 safe cells left.
▀▀▀▀▀▀▀
| Game | What it is |
|---|---|
minefield |
Minesweeper. Click or use the keys to clear the board, with a best time and a face that watches the cursor and glances over at the transcript now and then. Run /mines. |
brickfall |
A loud brick breaker after Arkanoid: steer with the mouse, catch thirteen kinds of capsule (laser, split, lightning, giant ball, barrier...) and gems toward a FEVER, set off chains of volt bricks, over a shimmering iridescent backdrop. A real picture in kitty and Ghostty, block characters elsewhere. Run /bricks. |
doom |
Doom, as Freedoom on the doomgeneric engine: a real picture in kitty and Ghostty, block characters elsewhere. Walk with the keys, turn with the mouse or the keys. Prebuilt engines for Linux, macOS and Windows; played on Linux so far. Run /doom. |
Each game is its own plugin, so you install only the ones you want.
In a Claude Code session:
/plugin marketplace add reporails/arcade
/plugin install minefield@reporails-arcade
Or from your shell, then /reload-plugins in any session already open:
claude plugin marketplace add reporails/arcade
claude plugin install minefield@reporails-arcadeThen run the game's command, such as /mines.
- Claude Code 2.1.287 or later, where mods are on by default. Each game's README says what to check if one does not start.
- A terminal, or the Claude Code desktop app. VS Code and
claude -phave nothing to draw a board on; the game says so. - For the side pane and the mouse, the fullscreen layout: start Claude Code with
CLAUDE_CODE_NO_FLICKER=1. Without it the pane sits above the prompt and the games are played with the keys alone.
These mods draw a pane and keep their state in their own store. They hook no tool or attachment and read nothing the model sees. Run claude plugin validate <game> to list exactly what a game hooks and calls, before any of its code runs.
minefieldhooks no prompt and makes no network calls.brickfallhooks no prompt and makes no network calls; the game runs inside the mod.doomruns its engine as a child process and talks to it on your machine only, over a Unix socket or 127.0.0.1 with a per-run token. While you play it hooks the prompt box, so game keys that land there go to Doom instead; type/to have the prompt back. Its engine is GPL-2.0-or-later and its game data BSD; see its README.
What the model does read is your CLAUDE.md and the rest of your instructions. To see which of them Claude actually follows: reporails.com.
The games are strict TypeScript. Each game folder is a complete plugin:
claude --plugin-dir ./minefield # play it from the checkout
claude -p "/plugin-types" < /dev/null # write the typings for your Claude Code build into .claude/types/
npx -p typescript@5.9.3 tsc -p . # typecheck every game and its tests
claude plugin validate --strict ./minefield # what it hooks and calls, and anything the engine would refuse
claude plugin test ./minefield # its tests/plugin-types runs without a login on 2.1.285, behind CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1; from 2.1.287 claude -p asks for one. So CI (.github/workflows/check.yml) runs on every push to main and every pull request, in two jobs: the typecheck, validation and tests on 2.1.285, and the validation and tests again on 2.1.288, where mods are on by default. The typings are generated, never committed: Claude Code's own license does not allow redistributing them.
A new game is a new folder plus one entry in .claude-plugin/marketplace.json.
MIT. Made by Reporails, diagnostics for the instructions that steer Claude Code.

