delexw/miod

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

See the code

README

miod logo: a honey-amber music note with code brackets

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.

What it is

A Claude Code mod (MIDI + mod) that writes music 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, scale (16 of them), chord progression, tempo, sound and theme.
  • The mood follows what the agent is doing. Every mood has 10 variants, and a new one is picked as the task goes: whenever the activity changes, and every 4 phrases. The task's flavour bends it too, so editing in a lo-fi task sounds nothing like editing in a chiptune one.
  • 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, coloured by mood:

miod's status line and moving wave

  • Tasks flow into each other: the next task fades in, in a related key. If no new task comes, a closing chord fades out at the end of the phrase.

Install

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.

Usage

/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

How the mood is picked

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
thinkingno toolcalm
readingRead, Grep, Glob, MCP toolsairy
exploringWebSearch, WebFetchcurious (lydian)
planningTodoWrite, plan modehopeful (major pentatonic)
askingAskUserQuestionwaiting, almost silent
editingEdit, Writebright (major)
runningBashdriving beat
installingnpm, bun, pip, brew… installpatient (minor pentatonic)
testingtest, check, lint, tscfocused (dorian), busy beat
shippinggit commit, push, merge, gh prtriumphant (mixolydian)
deletingrm -r, git reset --hard, git cleanominous (phrygian), low drone
delegatingAgentone harmony voice per subagent
failinga Bash command that failedtense (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).

Add a mood or style

  • Mood variant: add a row to that mood's list in MOODS in hooks/moods.ts.
  • New mood: add the name to 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.
  • Flavour: add a row to FLAVOURS in hooks/flavours.ts. Each field nudges every mood: brighter or darker scale, busier or calmer, drums up or down, swing, bass line.
  • Scale or chords: add to SCALES or PROGRESSIONS in hooks/theory.ts.
  • Wave look: add a file to hooks/waves/ that exports a WaveLook (how many rows, and a draw function), then list it in WAVES in hooks/waves/index.ts.
  • Style: add a wave function to 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>.

Limitations

  • Only tested on macOS, where Claude Code plays the audio through afplay.
  • The sound is simple chiptune-style tones.
  • miod only hears the session it's loaded in.
ai-agents
claude-code
claude-code-mod
claude-code-plugin
developer-tools
generative-music
midi
music
procedural-music
terminal
typescript
vibe-coding

delexw/miod

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

See the code

README

miod logo: a honey-amber music note with code brackets

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.

What it is

A Claude Code mod (MIDI + mod) that writes music 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, scale (16 of them), chord progression, tempo, sound and theme.
  • The mood follows what the agent is doing. Every mood has 10 variants, and a new one is picked as the task goes: whenever the activity changes, and every 4 phrases. The task's flavour bends it too, so editing in a lo-fi task sounds nothing like editing in a chiptune one.
  • 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, coloured by mood:

miod's status line and moving wave

  • Tasks flow into each other: the next task fades in, in a related key. If no new task comes, a closing chord fades out at the end of the phrase.

Install

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.

Usage

/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

How the mood is picked

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
thinkingno toolcalm
readingRead, Grep, Glob, MCP toolsairy
exploringWebSearch, WebFetchcurious (lydian)
planningTodoWrite, plan modehopeful (major pentatonic)
askingAskUserQuestionwaiting, almost silent
editingEdit, Writebright (major)
runningBashdriving beat
installingnpm, bun, pip, brew… installpatient (minor pentatonic)
testingtest, check, lint, tscfocused (dorian), busy beat
shippinggit commit, push, merge, gh prtriumphant (mixolydian)
deletingrm -r, git reset --hard, git cleanominous (phrygian), low drone
delegatingAgentone harmony voice per subagent
failinga Bash command that failedtense (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).

Add a mood or style

  • Mood variant: add a row to that mood's list in MOODS in hooks/moods.ts.
  • New mood: add the name to 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.
  • Flavour: add a row to FLAVOURS in hooks/flavours.ts. Each field nudges every mood: brighter or darker scale, busier or calmer, drums up or down, swing, bass line.
  • Scale or chords: add to SCALES or PROGRESSIONS in hooks/theory.ts.
  • Wave look: add a file to hooks/waves/ that exports a WaveLook (how many rows, and a draw function), then list it in WAVES in hooks/waves/index.ts.
  • Style: add a wave function to 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>.

Limitations

  • Only tested on macOS, where Claude Code plays the audio through afplay.
  • The sound is simple chiptune-style tones.
  • miod only hears the session it's loaded in.
ai-agents
claude-code
claude-code-mod
claude-code-plugin
developer-tools
generative-music
midi
music
procedural-music
terminal
typescript
vibe-coding