node · 2026-05-27 teach-me documentation

# MIDI Harness

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

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`.

The story behind the diagram — three chapters

### 01 · aborted midi-coach

The first, more ambitious attempt. A separate Go repo (`~/Documents/midi-coach`, originally git `github.com/jakesimonds/MCP-Dash-Demo`) that tried to interleave two streams at once: MIDI notes and Wispr/whisper voice, tracked by a byte-offset marker (`.last-offset`) instead of erasing the file each turn.

It was abandoned because the sync broke. The diagnostic (`FINDINGS.md`, 2026-05-29): the hook's whisper re-transcription regularly covered only the front slice of a dictation, dropping the notes that mattered — a deliberate “here comes a G octave… now a C octave” demo lost both the words and the notes for the actual demo. A played-note turn came back words-only, zero MIDI. Jake's verdict: “Wispr is not working at all and I don't know that it ever has been.”

Lives on only as a pointer in `archive/midi-coach`. The repo itself was later repurposed into the “blueclaw” project, so its git history no longer reads as a music tool.

### 02 · shipped midi-harness (the rebuild)

The 2026-05-29 strip-back that produced the current working repo (`~/Documents/midi-harness`, public at github.com/jakesimonds/midi-harness). It dropped the voice stream and the byte-offset bookkeeping entirely. The one idea the diagram above captures: emptying the log every turn IS the “since last message” boundary — no offset marker, no time window, no second clock, no audio.

46-word `CLAUDE.md` system prompt. Two pure-stdlib Go binaries (`cmd/listener` capture, `cmd/hook` inject + erase), ~0ms hook startup. ~10 real sessions logged 2026-05-30 → 2026-06-01. Claude writes the `what-you-played.html` chord-card page ad hoc — it is not a skill or a prompt line.

Full current-state notes, the listener start/stop scripts, and the “does the sub-project see streetlight's harness?” answer all live in midi-harness.md.

### 03 · the point the public blog post

The whole exercise was aimed at a public blog post about the lessons from building a tiny harness — that post is this node's exit condition (it archives once the post is out). Jake reports the post is now made and public.

Published post

LLM is an Instrument

streetlight.jakesimonds.com/llm-is-an-instrument