โ† Streetlight back to all nodes
node ยท 2026-05-27 teach-me documentation

MIDI Harness

Support document for the blog post — the diagram. Code: github.com/jakesimonds/midi-harness

USER plays + talks at the same time hands on MIDI keys voice · Wispr Flow → text listener (Go) daemon, runs all session raw note on/off — no cleanup Claude Code input box append events.jsonl {"t":…,"type":"on","note":60} {"t":…,"type":"off","note":60} one line per key event — noisy next note recreates the file — that's the fresh turn boundary you hit ⏎ hook (Go · UserPromptSubmit) ① read the WHOLE file ② delete it ③ clean up in memory: press/release → chord clusters repeats → ×N · numbers → names ④ emit <played> block ① reads ② deletes 34 raw JSON lines → 3 chord lines Claude prompt = your words + <played> block system prompt: CLAUDE.md · 46 words a conversation about the music, in the terminal what-you-played.html chord cards + finger diagrams no skill, no prompt line — Claude writes it on the spot What You Just Played C → F → Cmaj13 C Major (arpeggiated) 1 3 5 1–3–5 — the home-base hand shape ↻ play more chords, send again

The 34→3 example: a 4-key C-major voicing struck & released 3× (24 on/off events) + a 4-key F voicing (8) + one G4 (2) = 34 JSON lines on disk → C3 G3 C4 E4 x3 / F2 F3 A#3 D4 / G4.