Agent skills

A skill is a discrete capability the chat agent can invoke. This spec defines the catalog we're building toward — what the AI can do, how to trigger it, and what it returns.

Why skills?

Today the chat agent is a single generalist prompt — the user types and hopes. Skills formalize the contract: each skill has a clear trigger, input shape, output (code vs text vs both), and a focused system prompt tuned to its job. This enables:

  • Cheaper routing — explain/debug skills use Haiku; compose uses Sonnet.
  • Predictable UX — users know what to ask, the agent knows how to answer.
  • Testable behaviors — each skill gets its own evals.
  • Discoverability — skills appear as quick actions in the chat.
5
Shipped
1
In progress
6
Planned

Compose

  • Compose by genre
    compose-genre
    shipped

    Generate a full track in a named genre (deep-house, techno, trap, ambient, jazz…). Respects key and BPM if provided.

    Triggers
    • · DJ deck → COMPOSE
    • · chat: "make a deep house track"
    Returns
    code+text
  • Evolve current pattern
    compose-evolve
    shipped

    Small mutation of the current code — same structure, tweaked details. Used by autopilot every 30s and by the EVOLVE button.

    Triggers
    • · Transport bar EVOLVE
    • · autopilot interval
    • · chat: "evolve this"
    Returns
    code
  • Add a specific layer
    compose-layer
    shipped

    Add a kick, hats, snare, bass, lead, pad, or FX chain to the current code while preserving the rest. Driven by deck layer buttons.

    Triggers
    • · DJ deck → [+ Kick/Hats/…]
    • · chat: "add a bassline"
    Returns
    code

Edit

  • Tweak a parameter
    edit-filter
    shipped

    Modify a specific effect or parameter — filter cutoff, reverb amount, delay feedback, gain, pan — without rewriting structure.

    Triggers
    • · chat: "darker filter on the lead"
    Returns
    code
  • Swap / mute a layer
    edit-swap
    shipped

    Replace a sound bank, silence a track, or comment out a line. Keeps everything else intact.

    Triggers
    • · chat: "mute the hats", "swap 909 for 808"
    Returns
    code

Explain

  • Explain a function
    explain-function
    planned

    Describe what a Strudel function does, with examples. Complements the on-hover JSDoc tooltip with a conversational answer.

    Triggers
    • · chat: "what does perlin.range do?"
    Returns
    text
  • Explain current pattern
    explain-pattern
    planned

    Walk the user through what each line of the current code is doing, in plain language. Good for learners.

    Triggers
    • · chat: "explain this code"
    Returns
    text
  • Debug an error
    explain-debug
    planned

    Look at the current error state (from Strudel's evaluator) and suggest a fix. Covers syntax, unknown banks, mismatched parens.

    Triggers
    • · auto: on eval error
    • · chat: "why is this broken?"
    Returns
    code+text

Transform

  • Transpose / change key
    edit-transpose
    planned

    Shift pitched content to a new key while respecting mode (minor/major/phrygian etc.).

    Triggers
    • · chat: "transpose to F minor"
    Returns
    code
  • Change BPM or time feel
    edit-tempo
    planned

    Re-time the pattern (halftime, double-time, swing). Recomputes eighth/sixteenth ratios.

    Triggers
    • · chat: "half-time"
    • · chat: "add 60% swing"
    Returns
    code
  • Build a drop
    transform-drop
    in-progress

    Construct a tension/release moment — mute / low-pass sweep / reintroduce — either inline or as labeled sections.

    Triggers
    • · ToolsPanel DROP button
    • · chat: "build a drop"
    Returns
    code
  • Create a variation
    transform-variation
    planned

    Derive a named alternate section (A/B, intro, bridge) from the current pattern. Used for live arrangement.

    Triggers
    • · chat: "give me a B section"
    Returns
    code
← Studio guideOpen Studio →