delexw/miod

miod is a Claude Code mod that generates original MIDI music on the fly as the agent works, mapping moods to agent activity (thinking, editing, testing, shipping, failing) with a live status line and wave visualization.
delexw/miod

miod ("MIDI + mod") is a Claude Code plugin that composes generative music in real time while Claude works, with no music files, library or AI model involved.
Install (requires Claude Code 2.1.290+ on macOS):
claude plugin marketplace add delexw/miod
claude plugin install miod@miod
Commands: /miod (on/off status), /miod off, /miod on, /miod wave (list or switch wave looks).
Customization is via hooks files: MOODS and MOOD_SCALES in hooks/moods.ts, FLAVOURS in hooks/flavours.ts, SCALES and PROGRESSIONS in hooks/theory.ts, wave looks in hooks/waves/, and STYLES in hooks/styles.ts. Validation uses claude plugin validate . and claude plugin test ., or claude --plugin-dir <path> for a non-installed run.
Limitations: tested only on macOS (audio via afplay), simple chiptune-style tones, and it only hears the session it is loaded in.
请先查看作者 README 确认 marketplace 和插件名称;命令可能随仓库结构改变。
claude plugin marketplace add delexw/miod claude plugin install miod
[!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 shows the mood's first variant and its most likely scale. The variants are in MOODS and the scale weights in MOOD_SCALES, both 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, give it a list of at least 10 variants in MOODS and a row of scale weights in MOOD_SCALES.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 in hooks/theory.ts, then give it a weight in at least one mood's MOOD_SCALES row. A test fails if a scale belongs to no mood.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.