{"slug": "codyssey-turn-every-claude-code-session-into-a-little-adventure", "title": "codyssey: turn every Claude Code session into a little adventure", "summary": "Developer miod released codyssey, a Claude Code plugin that turns an agent session into a playable adventure with generative music, a pixel knight and a quest log, and it works only on macOS. The plugin bundles three independently toggleable mods: music generated on the spot with no music files or AI model, a knight that fights monsters tied to each tool call, and a quest log. The knight starts with 5 hearts, gains 1 xp and 1 to 3 gold per monster, and faces bosses at 2, 4, 6, 8 and 10 minutes of play.", "body_md": "Claude Code, played as an adventure: soundtrack, hero and quest log.\n\nImportant\n\nmiod's music only works on macOS.\n\nI'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.\n\nSo 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.\n\nIt's three mods in one plugin, and [each one turns on and off on its own](#pick-your-mods).\n\nThree Claude Code mods in one plugin.\n\nGenerative music written on the spot while Claude works. No music files, no library, no AI model.\n\n- Every task picks its own flavour (lo-fi, chiptune, ambient, jazzy and 8 more), key, chord progression, tempo, sound and theme.\n- The mood follows what the agent is doing: reading sounds airy, editing bright, testing focused, shipping triumphant, failing tense until a command passes.\n- The faster it spends tokens, the busier the music.\n- Above the prompt, one line shows the mood, flavour, key, tempo and energy, with a wave under it that scrolls with the music:\n\nA pixel knight walks a narrow strip above the prompt while Claude works.\n\n- 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.\n- A failed command costs a heart. A test that passes after a failure summons the Bug Dragon.\n- Committing, pushing or opening a PR opens a treasure chest.\n- Every two minutes of play a boss comes: King Slime, Ogre, Lich, Demon, then the Shadow King.\n- Monsters and bosses grow tougher as the knight levels up.\n- 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.\n\nWhat you can meet on the road:\n\n| When Claude… | The knight meets | What it brings | \n|---|---|---|\n| Reads or searches files (Read, Grep, Glob) | A scroll | Heals 1 heart | \n| Edits or writes a file | A Slime, Goblin, Skeleton, Orc or Spider (the file name picks which) | 1 xp and 1 to 3 gold, plus 1 xp and 1 gold for each extra heart | \n| Searches or fetches the web | A Bat or Ghost | Same as any monster | \n| Runs a command | A Goblin or Wolf | Same as any monster | \n| Hands work to a subagent | A Skeleton | Same as any monster | \n| Calls an MCP tool | A Slime | Same as any monster | \n| Runs a command that fails | A hit | Loses 1 heart | \n| Runs a passing test or check after a failure | The Bug Dragon, 4 hearts | 2 xp and 5 gold or more per heart | \n| Commits, pushes, merges, tags, or opens or merges a PR | A treasure chest | 5 to 24 gold | \n| Has been playing for 2, 4, 6, 8, then 10 minutes | King Slime (3 hearts), Ogre (4), Lich (5), Demon (6), Shadow King (7) | 2 xp and 5 gold or more per heart | \n\nThe knight picks a weapon at random for every strike:\n\n| Weapon | Range | Power | How often | How it hits | \n|---|---|---|---|---|\n| ⚔️ Sword | Close | 1 heart, or 2 with a special | Often | A slash. Now and then it becomes a glowing yellow special | \n| 🪓 Axe | Close | 2 hearts | Sometimes | A heavy chop | \n| 🔱 Lance | A little further | 1 heart | Sometimes | Reaches the monster a few steps early | \n| 🗡️ Dagger | Far | 1 heart | Sometimes | Thrown early, flies to the monster | \n| 🔥 Fireball | Furthest | 2 hearts | Rarely | Cast from far off, flies to the monster | \n\nThrown 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.\n\nHow the game works:\n\n| Mechanism | How it works | \n|---|---|\n| ❤️ Hearts | The knight starts with 5. Every monster and boss shows one heart and the number it has left beside it, like ♥3. Past 5 hearts, the knight's line shows the count too, like ♥7/12. | \n| 📈 Monsters level up | Monsters start with 1 heart and gain one every 3 knight levels. Bosses gain one every 2 knight levels, on top of their own. | \n| ⭐ Levels | Each level needs 8 more xp than the last. A new level adds a heart and heals the knight fully. | \n| 👹 Boss fights | A boss swings back and can wound the knight, but never lands the last blow. Some of the knight's strikes are specials that hit for 2. | \n| 💀 Falling | Losing the last heart to a failed command brings the knight back with full hearts and half the gold. | \n| ⚡ Speed | The knight walks faster the quicker Claude spends tokens: normal, then double from 30k tokens a minute, then triple from 80k. | \n| 📜 Progress | Level, hearts, kills, gold, quests, play time, bosses slain and falls add up from task to task, for the rest of the session. A new session starts a new knight. Between tasks the knight sits by a campfire. | \n| ⏸️ Pausing | If Claude ends its turn while a background command or subagent is still running, the knight shows ⏸ paused and stays on the road. When the last one finishes, the knight makes camp. | \n\nRestyles the transcript so the story is easier to follow.\n\n- Tool calls become one-liners, and their results show only when they fail.\n- Claude's replies stand out from the tool noise.\n- 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.\n\nNeeds Claude Code 2.1.290 or newer.\n\n```\nclaude plugin marketplace add delexw/codyssey\nclaude plugin install codyssey@codyssey\n```\n\nThen start a new session. All three mods start on.\n\nIf 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.\n\nAll three come in the one plugin, and each turns on and off with its own command:\n\n- **Turn one off:**`/miod off` ,`/knightod off` or`/scrollod off` , and`on` to bring it back. The choice is remembered in later sessions.\n- **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` .\n\n```\n/miod                    is the music on or off?\n/miod off                stop the music\n/miod on                 play again from the next task\n/miod wave               list the wave looks: bars, line, mirror, dots, pulse\n/miod wave dots          switch the wave to the dots look\n\n/knightod                this session's game: level, hearts, kills, gold, bosses\n/knightod off            put the knight away\n/knightod on             send the knight out again\n/knightod reset          start over with a new knight\n\n/scrollod                on or off, and which style\n/scrollod off            show the transcript as Claude Code draws it\n/scrollod on             restyle it again\n/scrollod style plain    the quieter plain look\n/scrollod style game     back to badges, nameplates and quest rows\n```\n\nEach mod lives in its own folder under `hooks/`, and `hooks/register.tsx` turns all three on.\n\n- **miod:** each mood is one row in`hooks/miod/moods.ts` , each flavour one row in`hooks/miod/flavours.ts` , each sound style one entry in`hooks/miod/styles.ts` , and each wave look one file in`hooks/miod/waves/` .\n- **knightod:** each weapon is one file in`hooks/knightod/game/weapons/` ; monsters and bosses are sprites in`hooks/knightod/sprites/` ; which tool raises which encounter is in`hooks/knightod/game/cues.ts` , and the boss order and timing in`hooks/knightod/game/bosses.ts` .\n- **scrollod:** the game style's badges are in`hooks/scrollod/badge.ts` , and the styles in`hooks/scrollod/style.ts` .\n\nThen check it:\n\n```\nclaude plugin validate .\nclaude plugin test .\n```\n\nRun a checkout without installing it with `claude --plugin-dir <path to this repo>`.\n\n- miod's music only plays on macOS, where Claude Code plays it through `afplay` .\n- miod's sound is simple chiptune-style tones.\n- codyssey only sees the session it's loaded in.", "url": "https://wpnews.pro/news/codyssey-turn-every-claude-code-session-into-a-little-adventure", "canonical_source": "https://github.com/delexw/codyssey", "published_at": "2026-10-09 08:56:40+00:00", "updated_at": "2026-10-09 09:22:45.828680+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools", "generative-ai"], "entities": ["codyssey", "Claude Code", "miod"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/codyssey-turn-every-claude-code-session-into-a-little-adventure", "markdown": "https://wpnews.pro/news/codyssey-turn-every-claude-code-session-into-a-little-adventure.md", "text": "https://wpnews.pro/news/codyssey-turn-every-claude-code-session-into-a-little-adventure.txt", "jsonld": "https://wpnews.pro/news/codyssey-turn-every-claude-code-session-into-a-little-adventure.jsonld"}}