Tool tree
gradeNot graded
get_projectAnswer
Read the full state of the session: tempo, swing, loop length, every track with its mixer settings, synth settings and note pattern. Call this first to learn track ids.
View tool JSON
{
"name": "get_project",
"kind": "answer",
"impl": "imperative",
"description": "Read the full state of the session: tempo, swing, loop length, every track with its mixer settings, synth settings and note pattern. Call this first to learn track ids.",
"inputSchema": {
"type": "object",
"properties": {}
}
}describe_arrangementAnswer
Musical summary of the loop: detected key and confidence, note density per bar, which bars each track is active in, pitch ranges, and notes about empty or muted tracks. Use this to reason about structure without reading every note.
View tool JSON
{
"name": "describe_arrangement",
"kind": "answer",
"impl": "imperative",
"description": "Musical summary of the loop: detected key and confidence, note density per bar, which bars each track is active in, pitch ranges, and notes about empty or muted tracks. Use this to reason about structure without reading every note.",
"inputSchema": {
"type": "object",
"properties": {}
}
}analyze_mixAction
LISTEN to the current mix. Renders the loop offline and measures it: per-track loudness (LUFS), true peak, crest factor, spectral centroid, energy per frequency band, plus frequency-masking conflicts between tracks and mix-bus headroom. Use this whenever the user asks how something sounds ('is it muddy?', 'is the bass too loud?') or before changing EQ or levels. This information is not available from the page's HTML.
View tool JSON
{
"name": "analyze_mix",
"kind": "act",
"impl": "imperative",
"description": "LISTEN to the current mix. Renders the loop offline and measures it: per-track loudness (LUFS), true peak, crest factor, spectral centroid, energy per frequency band, plus frequency-masking conflicts between tracks and mix-bus headroom. Use this whenever the user asks how something sounds ('is it muddy?', 'is the bass too loud?') or before changing EQ or levels. This information is not available from the page's HTML.",
"inputSchema": {
"type": "object",
"properties": {
"trackIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional subset of track ids. Omit to analyze everything."
}
}
}
}set_tempoAction
Set the tempo in BPM and/or the swing amount applied to off-beat 16th notes.
View tool JSON
{
"name": "set_tempo",
"kind": "act",
"impl": "imperative",
"description": "Set the tempo in BPM and/or the swing amount applied to off-beat 16th notes.",
"inputSchema": {
"type": "object",
"properties": {
"bpm": {
"type": "number",
"description": "Beats per minute, 40-220."
},
"swing": {
"type": "number",
"description": "Swing 0 (straight) to 1 (heavily swung)."
},
"bars": {
"type": "number",
"description": "Loop length in bars, 1-8."
}
}
}
}add_trackAction
Add an instrument track. Kinds: kick, snare, hat (drum synths, pitch ignored), bass, keys, lead (subtractive synths). Returns the new track id.
View tool JSON
{
"name": "add_track",
"kind": "act",
"impl": "imperative",
"description": "Add an instrument track. Kinds: kick, snare, hat (drum synths, pitch ignored), bass, keys, lead (subtractive synths). Returns the new track id.",
"inputSchema": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"kick",
"snare",
"hat",
"bass",
"keys",
"lead"
],
"description": "Instrument type."
},
"name": {
"type": "string",
"description": "Display name, defaults to the kind."
},
"notes": {
"type": "array",
"description": "Optional starting pattern.",
"items": {
"type": "object",
"properties": {
"step": {
"type": "number",
"description": "Step index, 0-based."
},
"midi": {
"type": "number",
"description": "MIDI note number, e.g. 60 for C4."
},
"note": {
"type": "string",
"description": "Alternative to midi, e.g. \"C3\" or \"F#4\"."
},
"vel": {
"type": "number",
"description": "Velocity 0..1, default 0.85."
},
"len": {
"type": "number",
"description": "Length in steps, default 1."
}
},
"required": [
"step"
]
}
}
},
"required": [
"kind"
]
}
}remove_trackAction
Delete a track and its pattern.
View tool JSON
{
"name": "remove_track",
"kind": "act",
"impl": "imperative",
"description": "Delete a track and its pattern.",
"inputSchema": {
"type": "object",
"properties": {
"trackId": {
"type": "string"
}
},
"required": [
"trackId"
]
}
}write_patternAction
Write notes onto a track. mode 'replace' clears the track first; mode 'merge' adds to what is already there. Changes are applied immediately and are audible on the next loop.
View tool JSON
{
"name": "write_pattern",
"kind": "act",
"impl": "imperative",
"description": "Write notes onto a track. mode 'replace' clears the track first; mode 'merge' adds to what is already there. Changes are applied immediately and are audible on the next loop.",
"inputSchema": {
"type": "object",
"properties": {
"trackId": {
"type": "string"
},
"notes": {
"type": "array",
"description": "Notes to place. `step` is a 16th-note index from 0; there are 16 steps per bar. Drum tracks ignore pitch.",
"items": {
"type": "object",
"properties": {
"step": {
"type": "number",
"description": "Step index, 0-based."
},
"midi": {
"type": "number",
"description": "MIDI note number, e.g. 60 for C4."
},
"note": {
"type": "string",
"description": "Alternative to midi, e.g. \"C3\" or \"F#4\"."
},
"vel": {
"type": "number",
"description": "Velocity 0..1, default 0.85."
},
"len": {
"type": "number",
"description": "Length in steps, default 1."
}
},
"required": [
"step"
]
}
},
"mode": {
"type": "string",
"enum": [
"replace",
"merge"
],
"description": "Default 'replace'."
}
},
"required": [
"trackId",
"notes"
]
}
}clear_patternAction
Remove every note from a track, keeping its sound and mixer settings.
View tool JSON
{
"name": "clear_pattern",
"kind": "act",
"impl": "imperative",
"description": "Remove every note from a track, keeping its sound and mixer settings.",
"inputSchema": {
"type": "object",
"properties": {
"trackId": {
"type": "string"
}
},
"required": [
"trackId"
]
}
}set_mixAction
Set a track's level in dB, stereo pan, mute or solo.
View tool JSON
{
"name": "set_mix",
"kind": "act",
"impl": "imperative",
"description": "Set a track's level in dB, stereo pan, mute or solo.",
"inputSchema": {
"type": "object",
"properties": {
"trackId": {
"type": "string"
},
"gainDb": {
"type": "number",
"description": "-60 to +6 dB."
},
"pan": {
"type": "number",
"description": "-1 (left) to 1 (right)."
},
"muted": {
"type": "boolean"
},
"solo": {
"type": "boolean"
}
},
"required": [
"trackId"
]
}
}set_eqAction
Set a track's EQ: high-pass corner, low-pass corner, and one peaking band. Use analyze_mix first to find out which band actually needs work.
View tool JSON
{
"name": "set_eq",
"kind": "act",
"impl": "imperative",
"description": "Set a track's EQ: high-pass corner, low-pass corner, and one peaking band. Use analyze_mix first to find out which band actually needs work.",
"inputSchema": {
"type": "object",
"properties": {
"trackId": {
"type": "string"
},
"hpf": {
"type": "number",
"description": "High-pass corner in Hz, 20 = off."
},
"lpf": {
"type": "number",
"description": "Low-pass corner in Hz, 20000 = off."
},
"peakFreq": {
"type": "number",
"description": "Centre frequency of the peaking band in Hz."
},
"peakGainDb": {
"type": "number",
"description": "Boost or cut at that frequency, -24 to +24 dB."
},
"peakQ": {
"type": "number",
"description": "Bandwidth of the peaking band, 0.3 to 12."
}
},
"required": [
"trackId"
]
}
}transportAction
Start or stop playback. The loop plays continuously and edits are heard immediately.
View tool JSON
{
"name": "transport",
"kind": "act",
"impl": "imperative",
"description": "Start or stop playback. The loop plays continuously and edits are heard immediately.",
"inputSchema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"play",
"stop",
"toggle"
]
},
"fromStep": {
"type": "number",
"description": "Step to start from when playing. Default 0."
}
},
"required": [
"action"
]
}
}select_trackAction
Focus a track in the UI. Selecting a track also registers extra tools for editing that specific instrument's sound, so call this before trying to change synth parameters.
View tool JSON
{
"name": "select_track",
"kind": "act",
"impl": "imperative",
"description": "Focus a track in the UI. Selecting a track also registers extra tools for editing that specific instrument's sound, so call this before trying to change synth parameters.",
"inputSchema": {
"type": "object",
"properties": {
"trackId": {
"type": "string"
}
},
"required": [
"trackId"
]
}
}propose_patternAction
Suggest a pattern WITHOUT applying it. It appears in the UI as ghost notes with Accept / Reject / Preview buttons so the user stays in control. Use this for creative variations, alternative arrangements, or anything the user should audition before committing. Use write_pattern instead when the user asked for the change directly.
View tool JSON
{
"name": "propose_pattern",
"kind": "act",
"impl": "imperative",
"description": "Suggest a pattern WITHOUT applying it. It appears in the UI as ghost notes with Accept / Reject / Preview buttons so the user stays in control. Use this for creative variations, alternative arrangements, or anything the user should audition before committing. Use write_pattern instead when the user asked for the change directly.",
"inputSchema": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Short description shown to the user."
},
"ops": {
"type": "array",
"description": "One entry per track this proposal would change.",
"items": {
"type": "object",
"properties": {
"trackId": {
"type": "string"
},
"notes": {
"type": "array",
"description": "Notes to place. `step` is a 16th-note index from 0; there are 16 steps per bar. Drum tracks ignore pitch.",
"items": {
"type": "object",
"properties": {
"step": {
"type": "number",
"description": "Step index, 0-based."
},
"midi": {
"type": "number",
"description": "MIDI note number, e.g. 60 for C4."
},
"note": {
"type": "string",
"description": "Alternative to midi, e.g. \"C3\" or \"F#4\"."
},
"vel": {
"type": "number",
"description": "Velocity 0..1, default 0.85."
},
"len": {
"type": "number",
"description": "Length in steps, default 1."
}
},
"required": [
"step"
]
}
}
},
"required": [
"trackId",
"notes"
]
}
}
},
"required": [
"label",
"ops"
]
}
}list_proposalsAnswer
List proposals and whether the user has accepted, rejected, or not yet answered them.
View tool JSON
{
"name": "list_proposals",
"kind": "answer",
"impl": "imperative",
"description": "List proposals and whether the user has accepted, rejected, or not yet answered them.",
"inputSchema": {
"type": "object",
"properties": {}
}
}resolve_proposalAction
Accept or reject a proposal on the user's behalf. Only do this when the user has said clearly which one they want; otherwise leave it for them to click.
View tool JSON
{
"name": "resolve_proposal",
"kind": "act",
"impl": "imperative",
"description": "Accept or reject a proposal on the user's behalf. Only do this when the user has said clearly which one they want; otherwise leave it for them to click.",
"inputSchema": {
"type": "object",
"properties": {
"proposalId": {
"type": "string"
},
"decision": {
"type": "string",
"enum": [
"accept",
"reject"
]
}
},
"required": [
"proposalId",
"decision"
]
}
}diff_sinceAnswer
What changed in the session since a moment in time, and who changed it (user or agent). Call this after the user has been editing to catch up before making further changes — the user can turn knobs and draw notes while you are thinking.
View tool JSON
{
"name": "diff_since",
"kind": "answer",
"impl": "imperative",
"description": "What changed in the session since a moment in time, and who changed it (user or agent). Call this after the user has been editing to catch up before making further changes — the user can turn knobs and draw notes while you are thinking.",
"inputSchema": {
"type": "object",
"properties": {
"sinceMs": {
"type": "number",
"description": "Unix milliseconds. Use the `now` value from a previous call to chain."
}
}
}
}set_synth_paramAction
Change the sound of the selected track "kick" (kick). Parameters: wave (sawtooth/square/triangle/sine), detune (cents), attack/decay/release (seconds), sustain (0..1), cutoff (Hz), resonance (Q), envAmount (Hz of filter sweep). This tool only exists while a track is selected.
View tool JSON
{
"name": "set_synth_param",
"kind": "act",
"impl": "imperative",
"description": "Change the sound of the selected track \"kick\" (kick). Parameters: wave (sawtooth/square/triangle/sine), detune (cents), attack/decay/release (seconds), sustain (0..1), cutoff (Hz), resonance (Q), envAmount (Hz of filter sweep). This tool only exists while a track is selected.",
"inputSchema": {
"type": "object",
"properties": {
"param": {
"type": "string",
"enum": [
"wave",
"detune",
"attack",
"decay",
"sustain",
"release",
"cutoff",
"resonance",
"envAmount"
]
},
"value": {
"type": [
"number",
"string"
],
"description": "Numeric value, or the waveform name for `wave`."
}
},
"required": [
"param",
"value"
]
}
}audition_selectedAction
Play the selected track "kick" once on its own, without starting the transport. Useful for letting the user hear a sound change in isolation.
View tool JSON
{
"name": "audition_selected",
"kind": "act",
"impl": "imperative",
"description": "Play the selected track \"kick\" once on its own, without starting the transport. Useful for letting the user hear a sound change in isolation.",
"inputSchema": {
"type": "object",
"properties": {}
}
}