Tool tree
gradeNot graded
studio_get_sessionAnswer
Read the complete live Duet session: title, tempo, key/scale, mode, every instrument track with its exact notes, drum pattern, chords, mixer settings, and recent activity. Call this first — the human may have recorded a melody that exists only in this browser session. Call it again after the human edits to see their changes.
View tool JSON
{
"name": "studio_get_session",
"kind": "answer",
"impl": "imperative",
"description": "Read the complete live Duet session: title, tempo, key/scale, mode, every instrument track with its exact notes, drum pattern, chords, mixer settings, and recent activity. Call this first — the human may have recorded a melody that exists only in this browser session. Call it again after the human edits to see their changes.",
"inputSchema": {
"type": "object",
"properties": {}
}
}studio_list_instrumentsAction
List instrument modules currently in the rack and which can still be added. Adding an instrument exposes its dedicated editing tool (e.g. drums_edit).
View tool JSON
{
"name": "studio_list_instruments",
"kind": "act",
"impl": "imperative",
"description": "List instrument modules currently in the rack and which can still be added. Adding an instrument exposes its dedicated editing tool (e.g. drums_edit).",
"inputSchema": {
"type": "object",
"properties": {}
}
}studio_add_instrumentAction
Add an instrument module (keys, drums, bass, or pad) to the studio rack. The module appears visually for the human, and its dedicated editing tool (keys_edit / drums_edit / bass_edit / pad_edit) becomes available to you immediately after.
View tool JSON
{
"name": "studio_add_instrument",
"kind": "act",
"impl": "imperative",
"description": "Add an instrument module (keys, drums, bass, or pad) to the studio rack. The module appears visually for the human, and its dedicated editing tool (keys_edit / drums_edit / bass_edit / pad_edit) becomes available to you immediately after.",
"inputSchema": {
"type": "object",
"properties": {
"instrument": {
"type": "string",
"enum": [
"keys",
"drums",
"bass",
"pad"
],
"description": "Instrument to add."
}
},
"required": [
"instrument"
]
}
}studio_remove_instrumentAction
Remove an instrument module (keys, drums, bass, or pad) from the rack. Its content is cleared and its editing tool disappears. The lead synth carries the human melody and cannot be removed.
View tool JSON
{
"name": "studio_remove_instrument",
"kind": "act",
"impl": "imperative",
"description": "Remove an instrument module (keys, drums, bass, or pad) from the rack. Its content is cleared and its editing tool disappears. The lead synth carries the human melody and cannot be removed.",
"inputSchema": {
"type": "object",
"properties": {
"instrument": {
"type": "string",
"enum": [
"keys",
"drums",
"bass",
"pad"
]
}
},
"required": [
"instrument"
]
}
}studio_set_tempoAction
Set the loop tempo in BPM (60-200). Takes effect immediately, even during playback.
View tool JSON
{
"name": "studio_set_tempo",
"kind": "act",
"impl": "imperative",
"description": "Set the loop tempo in BPM (60-200). Takes effect immediately, even during playback.",
"inputSchema": {
"type": "object",
"properties": {
"bpm": {
"type": "number",
"minimum": 60,
"maximum": 200
}
},
"required": [
"bpm"
]
}
}studio_set_keyAction
Set the musical key and/or scale. By default a key change transposes all existing notes and chords by the shortest path to the new root, so the change is immediately audible. Set transposeExisting to false to relabel the key without moving any notes. Scale changes never move notes.
View tool JSON
{
"name": "studio_set_key",
"kind": "act",
"impl": "imperative",
"description": "Set the musical key and/or scale. By default a key change transposes all existing notes and chords by the shortest path to the new root, so the change is immediately audible. Set transposeExisting to false to relabel the key without moving any notes. Scale changes never move notes.",
"inputSchema": {
"type": "object",
"properties": {
"key": {
"type": "string",
"enum": [
"C",
"Db",
"D",
"Eb",
"E",
"F",
"F#",
"G",
"Ab",
"A",
"Bb",
"B"
],
"description": "Root pitch class."
},
"scale": {
"type": "string",
"enum": [
"major",
"minor",
"harmonicMinor",
"dorian",
"phrygian",
"mixolydian",
"majorPentatonic",
"minorPentatonic"
]
},
"transposeExisting": {
"type": "boolean",
"description": "Transpose existing notes/chords to the new key (default true)."
}
}
}
}studio_set_grooveAction
Set global groove settings: swing (0-0.6, delays every off-beat 16th — 0 straight, 0.2 gentle shuffle), space (0-1, global reverb send on lead, keys and pad), and/or humanize (0-1, deterministic micro-timing and velocity variation seeded per step — subtle values around 0.2-0.4 sound human; high values sound sloppy). Groove comes from timing AND velocity together — combine swing/humanize with accented note velocities.
View tool JSON
{
"name": "studio_set_groove",
"kind": "act",
"impl": "imperative",
"description": "Set global groove settings: swing (0-0.6, delays every off-beat 16th — 0 straight, 0.2 gentle shuffle), space (0-1, global reverb send on lead, keys and pad), and/or humanize (0-1, deterministic micro-timing and velocity variation seeded per step — subtle values around 0.2-0.4 sound human; high values sound sloppy). Groove comes from timing AND velocity together — combine swing/humanize with accented note velocities.",
"inputSchema": {
"type": "object",
"properties": {
"swing": {
"type": "number",
"minimum": 0,
"maximum": 0.6
},
"space": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"humanize": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
}
}studio_enter_performanceAction
Switch the studio into Performance mode. Composition tools are withdrawn and replaced with performance tools (performance_play, performance_set_energy, performance_set_track_mix, performance_launch_breakdown, ...). Use this when the arrangement is ready to perform.
View tool JSON
{
"name": "studio_enter_performance",
"kind": "act",
"impl": "imperative",
"description": "Switch the studio into Performance mode. Composition tools are withdrawn and replaced with performance tools (performance_play, performance_set_energy, performance_set_track_mix, performance_launch_breakdown, ...). Use this when the arrangement is ready to perform.",
"inputSchema": {
"type": "object",
"properties": {}
}
}studio_publishAction
Publish the current composition as a shareable remix link. This pauses and asks the human to approve (and possibly edit) the song title in the Duet UI before anything is created — the result reports whether they approved, and the remix URL if so.
View tool JSON
{
"name": "studio_publish",
"kind": "act",
"impl": "imperative",
"description": "Publish the current composition as a shareable remix link. This pauses and asks the human to approve (and possibly edit) the song title in the Duet UI before anything is created — the result reports whether they approved, and the remix URL if so.",
"inputSchema": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 80,
"description": "Suggested song title for the human to review."
}
}
}
}lead_editAction
Edit the Lead Synth track. Operations: replace_notes (rewrite the whole track), add_notes, patch_steps (change pitch/velocity/duration/offset of notes starting at given steps), remove_steps, set_preset (neon, hyper, glass, saw, wire, laser, chip, velvet, brass, air), set_mix (volume/mute). Notes carry velocity and a small timing offset — preserve the human’s expressive values; vary your own (identical velocities sound mechanical). The lead holds the human melody and is protected by the Musical Contract: when locked, note edits pause and ask the human for permission.
View tool JSON
{
"name": "lead_edit",
"kind": "act",
"impl": "imperative",
"description": "Edit the Lead Synth track. Operations: replace_notes (rewrite the whole track), add_notes, patch_steps (change pitch/velocity/duration/offset of notes starting at given steps), remove_steps, set_preset (neon, hyper, glass, saw, wire, laser, chip, velvet, brass, air), set_mix (volume/mute). Notes carry velocity and a small timing offset — preserve the human’s expressive values; vary your own (identical velocities sound mechanical). The lead holds the human melody and is protected by the Musical Contract: when locked, note edits pause and ask the human for permission.",
"inputSchema": {
"type": "object",
"properties": {
"op": {
"type": "string",
"enum": [
"replace_notes",
"add_notes",
"patch_steps",
"remove_steps",
"set_preset",
"set_mix"
]
},
"notes": {
"type": "array",
"description": "For replace_notes / add_notes.",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"minimum": 0,
"maximum": 15,
"description": "Start step, 0-15."
},
"pitch": {
"type": "string",
"description": "Scientific pitch between C1 and C7, e.g. \"C4\", \"Eb3\", \"F#5\"."
},
"duration": {
"type": "integer",
"minimum": 1,
"maximum": 16,
"description": "Length in steps (default 1). step + duration must be <= 16."
},
"velocity": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Loudness 0-1 (default 0.8). Vary it — identical velocities sound mechanical."
},
"offset": {
"type": "number",
"minimum": -0.45,
"maximum": 0.45,
"description": "Expressive micro-timing in steps (default 0). ±0.05 is subtle; keep it small."
}
},
"required": [
"step",
"pitch"
]
}
},
"steps": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 15
},
"description": "For patch_steps / remove_steps: steps where target notes start."
},
"pitch": {
"type": "string",
"description": "patch_steps: new pitch for the targeted notes."
},
"velocity": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "patch_steps: new velocity."
},
"duration": {
"type": "integer",
"minimum": 1,
"maximum": 16,
"description": "patch_steps: new duration in steps."
},
"offset": {
"type": "number",
"minimum": -0.45,
"maximum": 0.45,
"description": "patch_steps: new timing offset in steps."
},
"preset": {
"type": "string",
"enum": [
"neon",
"hyper",
"glass",
"saw",
"wire",
"laser",
"chip",
"velvet",
"brass",
"air"
],
"description": "For set_preset."
},
"volume": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Track volume 0-1."
},
"muted": {
"type": "boolean"
}
},
"required": [
"op"
]
}
}