Claude Code, played as an adventure: soundtrack, hero and quest log.
Important
miod's music only works on macOS.
I'm an engineer, but these days I solve the boring problems entirely by vibe coding. Somewhere along the way I felt I had lost the creativity and curiosity I used to have when writing code myself.
So I started thinking about how to make vibe coding fun again. codyssey turns a Claude Code session into a little adventure: while the agent does the work, you hear it as music, watch a pixel knight fight through it, and read it back as a quest log.
It's three mods in one plugin, and each one turns on and off on its own.
Three Claude Code mods in one plugin.
Generative music written on the spot while Claude works. No music files, no library, no AI model.
- Every task picks its own flavour (lo-fi, chiptune, ambient, jazzy and 8 more), key, chord progression, tempo, sound and theme.
- The mood follows what the agent is doing: reading sounds airy, editing bright, testing focused, shipping triumphant, failing tense until a command passes.
- The faster it spends tokens, the busier the music.
- Above the prompt, one line shows the mood, flavour, key, tempo and energy, with a wave under it that scrolls with the music:
A pixel knight walks a narrow strip above the prompt while Claude works.
- Every tool call is an encounter: reading finds a scroll, editing a file fights its monster (slime, goblin, skeleton, orc, spider), web searches raise bats and ghosts, and subagents send a skeleton.
- A failed command costs a heart. A test that passes after a failure summons the Bug Dragon.
- Committing, pushing or opening a PR opens a treasure chest.
- Every two minutes of play a boss comes: King Slime, Ogre, Lich, Demon, then the Shadow King.
- Monsters and bosses grow tougher as the knight levels up.
- Kills bring gold and xp, and xp brings levels. Progress carries from task to task within a session; a new session starts a new knight. The knight makes camp while you're away.
What you can meet on the road:
The knight picks a weapon at random for every strike:
Thrown weapons only open a fight. Once a monster has been hit and is coming in close, the knight switches to the sword, axe or lance. Each weapon is one file in hooks/knightod/game/weapons/, with its range, power and how often it's picked.
How the game works:
Restyles the transcript so the story is easier to follow.
- Tool calls become one-liners, and their results show only when they fail.
- Claude's replies stand out from the tool noise.
- Two styles. game (the default): each tool call wears a badge (☰ SCOUT, ⚒ FORGE, ⚔ FIGHT, ☄ MAGIC, ♞ ALLY, ⚗ POTION), Claude speaks from a nameplate, your prompts sit in a ◆ YOU box, and finished background tasks arrive as ⚑ QUEST rows. plain: the same quiet transcript without the badges.
Needs Claude Code 2.1.290 or newer.
claude plugin marketplace add delexw/codyssey
claude plugin install codyssey@codysseyThen start a new session. All three mods start on.
If you loaded miod, knightod or scrollod on their own before (from delexw/miod, or a folder in CLAUDE_CODE_PLUGIN_DIRS), remove those first, or their commands are registered twice.
All three come in the one plugin, and each turns on and off with its own command:
- Turn one off: /miod off,/knightod offor/scrollod off, andonto bring it back. The choice is remembered in later sessions.
- Game style: scrollod starts in the game style. Switch to the plain look with /scrollod style plain; it stays plain in later sessions until you pick/scrollod style game.
/miod is the music on or off?
/miod off stop the music
/miod on play again from the next task
/miod wave list the wave looks: bars, line, mirror, dots, pulse
/miod wave dots switch the wave to the dots look
/knightod this session's game: level, hearts, kills, gold, bosses
/knightod off put the knight away
/knightod on send the knight out again
/knightod reset start over with a new knight
/scrollod on or off, and which style
/scrollod off show the transcript as Claude Code draws it
/scrollod on restyle it again
/scrollod style plain the quieter plain look
/scrollod style game back to badges, nameplates and quest rows
Each mod lives in its own folder under hooks/, and hooks/register.tsx turns all three on.
- miod: each mood is one row in hooks/miod/moods.ts, each flavour one row inhooks/miod/flavours.ts, each sound style one entry inhooks/miod/styles.ts, and each wave look one file inhooks/miod/waves/.
- knightod: each weapon is one file in hooks/knightod/game/weapons/; monsters and bosses are sprites inhooks/knightod/sprites/; which tool raises which encounter is inhooks/knightod/game/cues.ts, and the boss order and timing inhooks/knightod/game/bosses.ts.
- scrollod: the game style's badges are in hooks/scrollod/badge.ts, and the styles inhooks/scrollod/style.ts.
Then check it:
claude plugin validate .
claude plugin test .Run a checkout without installing it with claude --plugin-dir <path to this repo>.
- miod's music only plays on macOS, where Claude Code plays it through afplay.
- miod's sound is simple chiptune-style tones.
- codyssey only sees the session it's loaded in.