Generative music for Claude Code. Every task gets its own tune, and the mood follows what the agent is doing and how fast it spends tokens.
TypeScript
1
14 commits
updated Oct 7, 2026
[!IMPORTANT] Only tested on macOS. Not sure yet how it behaves on Linux or Windows.
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. miod is the first try: while the agent does the work, you get to hear it think, read, edit, fail and fix, with a little piece of music no one has heard before.
Feel free to add more moods, flavours and styles. Each mood is one row in hooks/moods.ts, each flavour one row in hooks/flavours.ts, each sound style one entry in hooks/styles.ts, and each wave look one file in hooks/waves/.
Feeling it's a bit too noisy? 🙉 No hard feelings. Just turn it off with /miod off.
A Claude Code mod (MIDI + mod) that writes music on the spot while Claude works. No music files, no library, no AI model.

Needs Claude Code 2.1.290 or newer, on macOS.
claude plugin marketplace add delexw/miod
claude plugin install miod@miod
Then start a new session.
/miod is it 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
Each row below is the mood's first variant. All 10 are in MOODS in hooks/moods.ts.
| The agent is… | When it uses… | Sounds |
|---|---|---|
| thinking | no tool | calm |
| reading | Read, Grep, Glob, MCP tools | airy |
| exploring | WebSearch, WebFetch | curious (lydian) |
| planning | TodoWrite, plan mode | hopeful (major pentatonic) |
| asking | AskUserQuestion | waiting, almost silent |
| editing | Edit, Write | bright (major) |
| running | Bash | driving beat |
| installing | npm, bun, pip, brew… install | patient (minor pentatonic) |
| testing | test, check, lint, tsc | focused (dorian), busy beat |
| shipping | git commit, push, merge, gh pr | triumphant (mixolydian) |
| deleting | rm -r, git reset --hard, git clean | ominous (phrygian), low drone |
| delegating | Agent | one harmony voice per subagent |
| failing | a Bash command that failed | tense (minor), until a command passes |
When several happen in one 8-beat phrase, the one higher in STRONGEST_FIRST (hooks/activity.ts) wins. A filling context window lifts the melody and, past 80%, adds a low drone.
The scales follow how musicians describe each mode (musical-u, Jiang et al. 2024).
MOODS in hooks/moods.ts.Activity and STRONGEST_FIRST in hooks/activity.ts, map tools or commands to it there, and give it a list of at least 10 variants in MOODS.FLAVOURS in hooks/flavours.ts. Each field nudges every mood: brighter or darker scale, busier or calmer, drums up or down, swing, bass line.SCALES or PROGRESSIONS in hooks/theory.ts.hooks/waves/ that exports a WaveLook (how many rows, and a draw function), then list it in WAVES in hooks/waves/index.ts.STYLES in hooks/styles.ts. It must return values between -1 and 1.Then check it:
claude plugin validate .
claude plugin test .
Run a checkout without installing it with claude --plugin-dir <path to this repo>.
afplay.Generative music for Claude Code. Every task gets its own tune, and the mood follows what the agent is doing and how fast it spends tokens.
TypeScript
1
14 commits
updated Oct 7, 2026
[!IMPORTANT] Only tested on macOS. Not sure yet how it behaves on Linux or Windows.
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. miod is the first try: while the agent does the work, you get to hear it think, read, edit, fail and fix, with a little piece of music no one has heard before.
Feel free to add more moods, flavours and styles. Each mood is one row in hooks/moods.ts, each flavour one row in hooks/flavours.ts, each sound style one entry in hooks/styles.ts, and each wave look one file in hooks/waves/.
Feeling it's a bit too noisy? 🙉 No hard feelings. Just turn it off with /miod off.
A Claude Code mod (MIDI + mod) that writes music on the spot while Claude works. No music files, no library, no AI model.

Needs Claude Code 2.1.290 or newer, on macOS.
claude plugin marketplace add delexw/miod
claude plugin install miod@miod
Then start a new session.
/miod is it 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
Each row below is the mood's first variant. All 10 are in MOODS in hooks/moods.ts.
| The agent is… | When it uses… | Sounds |
|---|---|---|
| thinking | no tool | calm |
| reading | Read, Grep, Glob, MCP tools | airy |
| exploring | WebSearch, WebFetch | curious (lydian) |
| planning | TodoWrite, plan mode | hopeful (major pentatonic) |
| asking | AskUserQuestion | waiting, almost silent |
| editing | Edit, Write | bright (major) |
| running | Bash | driving beat |
| installing | npm, bun, pip, brew… install | patient (minor pentatonic) |
| testing | test, check, lint, tsc | focused (dorian), busy beat |
| shipping | git commit, push, merge, gh pr | triumphant (mixolydian) |
| deleting | rm -r, git reset --hard, git clean | ominous (phrygian), low drone |
| delegating | Agent | one harmony voice per subagent |
| failing | a Bash command that failed | tense (minor), until a command passes |
When several happen in one 8-beat phrase, the one higher in STRONGEST_FIRST (hooks/activity.ts) wins. A filling context window lifts the melody and, past 80%, adds a low drone.
The scales follow how musicians describe each mode (musical-u, Jiang et al. 2024).
MOODS in hooks/moods.ts.Activity and STRONGEST_FIRST in hooks/activity.ts, map tools or commands to it there, and give it a list of at least 10 variants in MOODS.FLAVOURS in hooks/flavours.ts. Each field nudges every mood: brighter or darker scale, busier or calmer, drums up or down, swing, bass line.SCALES or PROGRESSIONS in hooks/theory.ts.hooks/waves/ that exports a WaveLook (how many rows, and a draw function), then list it in WAVES in hooks/waves/index.ts.STYLES in hooks/styles.ts. It must return values between -1 and 1.Then check it:
claude plugin validate .
claude plugin test .
Run a checkout without installing it with claude --plugin-dir <path to this repo>.
afplay.