Patch diagram tool. Use when the user describes routing across multiple Eurorack corpus modules. Renders modules as boxes laid out by wire topology (matrix-shaped patches anchor on a hub; otherwise modules step left-to-right by signal-flow rank), jacks as colored ports keyed to signal type, wires as bezier curves. Inline SVG on claude.ai surfaces (web, Desktop chat, mobile); JSON elsewhere. (When to *offer* a diagram unprompted: SKILL.md §4.)
**Trigger phrases:** "show me the patch", "draw what I just described", "remind me what's connected to what", "explain the routing", or any time you'd otherwise hand-draw a patch in SVG/text — use this instead of drawing.
Strict gate — call only when ALL of:
1. At least 3 named corpus modules.
2. Explicit wire connections between them (user-stated or derived from a coherent description).
3. The patch is concrete — user is following a tutorial, describing their own rack, or referencing back what's connected to what.
Do NOT call for: a single module, a question about one module's jacks, "what should I patch X to?" (that's a recommendation, not a graph), or hypothetical patches with unnamed placeholders ("connect a VCO to a filter").
Jack names. Corpus jack names are descriptive ("V/Oct CV input", "TRIG input", "Strumming trigger input"), not panel-text shorthand ("V/OCT", "TRIG"). The resolver accepts panel-text as a fallback when it unambiguously substring-matches one jack of the right direction (e.g. "TRIG" → "TRIG input"); successful resolutions surface as `panel_text_resolved` warnings so you can confirm. Ambiguous panel text ("OUT" on a multi-output module) errors with the candidate list. To skip the fallback entirely, call get_modules to discover the exact corpus names up front (one round trip for the whole batch).
Multi-channel modules require a CH<N> prefix. Modules with per-channel jacks (Quadrax, Maths, Tangrams, Stages, Optomix, QMMG, DXG, Pamela's New Workout, Cold Mac, etc.) enumerate each channel separately — e.g. `CH1 TRIG`, `CH2 TRIG`, `CH3 TRIG`, `CH4 TRIG` on Quadrax. Bare names like "TRIG" on these modules will resolve as ambiguous; always pick a specific channel. When the patch doesn't specify which channel, default to CH1.
Role per use, not per identity. A module that's a modulator in one patch can be a voice in another (Maths slow-cycle vs audio-rate cycle). Pick the role for THIS patch. The enum is intentionally coarse — four buckets, not a taxonomy — so map the edge cases:
- **clock** — anything emitting timing: clocks, but also trigger/gate *sequencers* and drum sequencers (a sequencer is a clock that emits a pattern).
- **modulator** — CV/envelope/LFO sources shaping another module (envelopes, LFOs, random, function generators, S&H).
- **voice** — anything generating the sound being processed: oscillators, drum voices, noise, sample players, physical-modeling/granular *sources*.
- **processor** — anything acting *on* an incoming signal: filters, VCAs, effects (delay/reverb), waveshapers, granular/spectral *sound-processors*, and all utilities (mixers, attenuators, mults, switches). When a module both makes and processes sound, bucket by its job in THIS patch — a granular module sculpting an external input is a processor; running free as a source it's a voice.
Role is currently informational — the renderer lays out by wire topology, not by role bucket — but it's still a required field, so declare it accurately for future renderer use and so the spec reads correctly.
`notes[]` is patch-level prose displayed below the diagram — settings, signal-flow narration ("PNW OUT1 firing 1/16 gates", "Channel 1 cycle mode, long rise").
Errors (descriptive — they point at fixes):
- "Module not found: <id>"
- "Unknown jack "<name>" on <id>. Available <inputs|outputs>: ..." — pick from the list, or call get_modules
- "Ambiguous jack "<name>" on <id>: matches ..." — name a specific jack from the candidates
- "Patch must have at least 3 modules"
- "Wire source ... is not an output" / "Wire destination ... is not an input"
- "Wire to/from unknown module ref: <ref>"
- "Duplicate ref: <ref>"
Cross-type wires (e.g. audio into a CV input) render normally with a warning panel below the diagram — Eurorack tolerates type mismatches by design, but warnings catch unintended ones.