Play terminal mini-games while Claude thinks.
Hooks into Claude Code so a game launches automatically every time Claude runs a tool — and disappears the moment it's done. Your terminal is fully restored, nothing is lost.
████ █ ███ █ █ ███ █████
█ █ █ █ █ █ █ █ █
█ █ █████ █ █ █ █ ████
█ █ █ █ █ █ █ █ █
████ █████ █ █ ███ ███ █████
███ ████ ████ ███ ███ █████
█ █ █ █ █ █ █ █ █ █
█████ ████ █ █████ █ █ ████
█ █ █ █ █ █ █ █ █ █
█ █ █ █ ████ █ █ ███ █████
pipx install claude-arcade# One-time setup — adds hooks to ~/.claude/settings.json
claude-arcade setup
# Use Claude Code as normal
claude
# Bird Hunt launches automatically whenever Claude uses a tool.
# Your terminal is restored when Claude finishes.claude-arcade play # open the game menu
claude-arcade play bird # jump straight into Bird Hunt
claude-arcade play pong # jump straight into Pong| Game | Description | Folder |
|---|---|---|
| Bird Hunt | Shoot sprite birds flying across the screen | games/bird/ |
| Pong | Classic paddle battle vs the CPU | games/pong/ |
More games coming — see Contributing to add your own.
claude-arcade setup writes three hooks into ~/.claude/settings.json:
| Hook | Command | Effect |
|---|---|---|
PreToolUse |
claude-arcade start |
Launches game on the alternate screen buffer |
PostToolUse |
claude-arcade stop |
Stops game, restores terminal |
Stop |
claude-arcade stop |
Same — catches session end |
The game runs on the alternate screen buffer so Claude's output is preserved underneath.
claude-arcade unsetupsrc/claude_arcade/
├── cli.py entry point
├── splash.py splash screen + game picker menu
├── setup_hooks.py Claude Code hook management
├── constants.py shared runtime constants
└── games/
├── bird/
│ ├── game.py Bird Hunt logic
│ └── README.md
└── pong/
├── game.py Pong logic
└── README.md
See CONTRIBUTING.md for the full guide.
Quick summary — adding a new game:
- Create
src/claude_arcade/games/<name>/ - Add
game.pywith adef <name>_game(stdscr)function - Add
__init__.pyexporting it - Add
README.mdfor the game - Register it in
splash.py→GAMESlist andcli.py→_game_fn()
That's it — no other files need touching.
- macOS or Linux
- Python 3.9+
- Claude Code CLI
MIT