Return canonical synthesis / patching techniques with role-keyed module realizations drawn from the corpus.
Use this when the user asks "how do I do X?" with X being a recognisable technique (low-pass-gate plucks, pinged-filter percussion, parallel multiband processing, complex-oscillator FM, karplus-strong pluck, clocked-delay feedback, modal-resonator excitation, wavefolder harmonics, envelope-follower ducking, Maths-style function-generator omnibus). It's also the right tool when the user has a module and asks "what's this good for?" — pass filter.module_id to retrieve every technique that references the module via its role_realizations.
Each technique declares role_definitions (the roles the technique uses, each with required and optional affordances) and role_realizations (concrete modules that fill each role, with the affordances they provide). The model substitutes modules from the user's rack into roles by affordance match — DO NOT treat the realization list as exhaustive or as a recipe.
Args:
- filter (optional): { capability?, module_id?, text? }
- capability: kebab-case capability id (see list_capabilities). Returns techniques whose required *or* optional capability list includes this id.
- module_id: "<manufacturer>/<module-slug>". Returns techniques that have a role_realization referencing this module.
- text: free-text phrase. Substring-matches against technique id/label/description AND a curated alias table (technique_aliases) — that's the right surface when a user types evocative prose like "stuttering delay", "plucked string", "source of uncertainty" that doesn't grep against any kebab-case id. Two-way alias match: long alias ("source of uncertainty") matches short query ("uncertainty"), and vice versa.
- When multiple filters supplied, AND-intersects.
- Omit filter entirely to list all techniques.
Returns:
{
"techniques": [
{
"id": "low-pass-gate-pluck",
"label": "Low-Pass Gate Pluck",
"description": "Send a short envelope...",
"required_capabilities": ["lowpass-gate"],
"optional_capabilities": ["envelope-generator", "function-generator"],
"role_definitions": [
{
"role_id": "lpg",
"description": "The vactrol-based or vactrol-emulating element. Strictly required...",
"required_affordances": ["lowpass-gate"],
"optional_affordances": []
},
...
],
"role_realizations": [
{
"role_id": "lpg",
"module_id": "make-noise/optomix",
"affordances_provided": ["lowpass-gate"],
"notes": "Two-channel vactrol-based LPG..."
},
...
],
"canonical_instance": {
"rationale": "...",
"lineage": [
{ "position": 1, "label": "Buchla 292 (1970)", "module_id": null, "notes": "..." },
{ "position": 2, "label": "Tiptop Audio Buchla 292t", "module_id": "tiptop-audio/buchla-292t" },
...
]
},
"counter_canonical_notes": [
{
"claim_pushed_back_against": "Optomix is the canonical pairing with Plaits...",
"evidence": "The corpus catalogs 19 LPG-capable modules..."
}
],
"coverage": [
{ "role_id": "voice", "realizations_count": 3 },
{ "role_id": "lpg", "realizations_count": 19 },
{ "role_id": "env", "realizations_count": 6 },
{ "role_id": "clock", "realizations_count": 2 }
]
}
],
"_meta": { "filter": {...}, "feedback_hint"?: string }
}
How to use role data:
- role_realizations are CURATORIAL SAMPLES, not exhaustive lists. The coverage[].realizations_count tells you how many are documented; other modules may fill the same role.
- To find modules in the user's rack that can fill a role, use find_role_realizations(technique_id, role_id, available_modules).
- canonical_instance is opt-in and sparse. Most techniques don't have one; that absence is information. When present, it documents a documented historical lineage (e.g., Buchla 292 → 292t → MMG → Optomix for low-pass-gate-pluck) — NOT a prescription.
- counter_canonical_notes push back on likely training-data priors. When the user invokes a canonical-sounding claim that has a counter_canonical_note, surface the pushback.
Errors:
- "Module not found: <id>" if filter.module_id is supplied and unknown.
- Empty techniques[] with a feedback_hint when filters produce no matches — call report_gap if the user expected coverage.
Connector