From 10621e6371085d20d7a25e4358366bc17b3d335e Mon Sep 17 00:00:00 2001 From: Seto Date: Sun, 11 Oct 2026 19:04:35 +0200 Subject: [PATCH 1/2] Document how embedding apps supply their own stems Hosts decide what stems mean through a client-supplied demucs MCP server, or by returning no built-in servers from their Profile. The README and AGENTS.md now say so, and name the two result shapes the stem hooks read. Co-Authored-By: Claude Sonnet 5.5 --- .agents/AGENTS.md | 2 +- README.md | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.agents/AGENTS.md b/.agents/AGENTS.md index 649da70..a7c870d 100644 --- a/.agents/AGENTS.md +++ b/.agents/AGENTS.md @@ -21,7 +21,7 @@ cargo test --locked This crate holds only the *music* part of the agent. The ACP server, session/turn loop, approval, workspace tools (`read_file`, `write_file`, `run_command`, ...), terminal UI and MCP layer all come from the Onde Agent Platform crates (`ed-acp`, `ed-acp-tui`, `ed-mcp`, from the `onde-ed` workspace). Look there for anything protocol- or session-related; the README says it is checked out next to this repo. -- `src/profile.rs`: `SplitFire` implements `ed_acp::Profile`. It is the single wiring point: identity (`INFO`, env prefix `SPLITFIRE`), system prompt, toolsets (`WorkspaceTools` + `MusicTools`), slash commands, and the lazily started built-in `demucs --mcp` server (`SharedServer`; a client-supplied MCP server named `demucs` wins). +- `src/profile.rs`: `SplitFire` implements `ed_acp::Profile`. It is the single wiring point: identity (`INFO`, env prefix `SPLITFIRE`), system prompt, toolsets (`WorkspaceTools` + `MusicTools`), slash commands, and the lazily started built-in `demucs --mcp` server (`SharedServer`; a client-supplied MCP server named `demucs` wins). Embedding apps use that: the separator passes its own `--mcp` server, and KaroKowe Jam wraps `SplitFire` and returns no built-in servers. - `src/prompt.rs`: system prompt and slash commands (`/analyze`, `/chords`, `/practice`, `/stems` only when separation is available). - `src/tools/`: `MusicTools` is one `Toolset` exposing six `theory_*` tools, `analyze_audio` and `list_separations`. All are read-only and never prompt for approval. New tools need an entry in `definitions()`, `handles()` and `describe()`. - `src/theory/` (pitch, interval, scale, chord, key, tempo) and `src/audio/` (symphonia decode, loudness/tempo/key analysis) are the pure computation behind the tools. The design principle is that the model calls these instead of recalling answers, so results must be exact (correct enharmonic spelling, e.g. C# major has E# and B#). diff --git a/README.md b/README.md index 6c156de..d710ec3 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,14 @@ prompt tells you how large the download is. If `demucs` is missing or fails to s logs one line and carries on without it. An MCP server named `demucs` supplied by your editor takes precedence. `SPLITFIRE_MCP_DEMUCS=off` disables it. +Apps that embed SplitFire decide what stems mean the same way. They pass a `demucs` MCP server of +their own in `session/new`, or return no built-in servers from their `Profile` and write their own +stems guidance. The SplitFire AI Audio Separator supplies its own executable in `--mcp` mode on +its on-device engine; KaroKowe Jam supplies none and points users at its in-app flow. The stem +hooks only check the tool name `mcp__demucs__separate_stems` and the `list_models` and +`separate_stems` result shapes (`structuredContent.models[]{id,size_mb,cached}` and +`structuredContent.stems[].path`). + Separate only music you have the right to work with. ### Other MCP servers From 45dfa6094882f9215e86dfea964e809996fd038c Mon Sep 17 00:00:00 2001 From: Seto Date: Tue, 13 Oct 2026 14:20:46 +0200 Subject: [PATCH 2/2] Name KaroKowe Karaoke as a host that supplies no stems server Co-Authored-By: Claude Sonnet 5.5 --- .agents/AGENTS.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.agents/AGENTS.md b/.agents/AGENTS.md index e9d0613..ffd4606 100644 --- a/.agents/AGENTS.md +++ b/.agents/AGENTS.md @@ -21,7 +21,7 @@ cargo test --locked This crate holds only the *music* part of the agent. The ACP server, session/turn loop, approval, workspace tools (`read_file`, `write_file`, `run_command`, ...), terminal UI and MCP layer all come from the Onde Agent Platform crates (`ed-acp`, `ed-acp-tui`, `ed-mcp`, from the `onde-ed` workspace). Look there for anything protocol- or session-related; the README says it is checked out next to this repo. -- `src/profile.rs`: `SplitFire` implements `ed_acp::Profile`. It is the single wiring point: identity (`INFO`, env prefix `SPLITFIRE`), system prompt, toolsets (`WorkspaceTools` + `MusicTools`), slash commands, and the lazily started built-in `demucs --mcp` server (`SharedServer`; a client-supplied MCP server named `demucs` wins). Embedding apps use that: the separator passes its own `--mcp` server, and KaroKowe Jam wraps `SplitFire` and returns no built-in servers. +- `src/profile.rs`: `SplitFire` implements `ed_acp::Profile`. It is the single wiring point: identity (`INFO`, env prefix `SPLITFIRE`), system prompt, toolsets (`WorkspaceTools` + `MusicTools`), slash commands, and the lazily started built-in `demucs --mcp` server (`SharedServer`; a client-supplied MCP server named `demucs` wins). Embedding apps use that: the separator passes its own `--mcp` server, and KaroKowe Jam and KaroKowe Karaoke wrap `SplitFire` and return no built-in servers. - `src/prompt.rs`: system prompt and slash commands (`/analyze`, `/chords`, `/practice`, `/stems` only when separation is available). - `src/tools/`: `MusicTools` is one `Toolset` exposing six `theory_*` tools, `analyze_audio` and `list_separations`. All are read-only and never prompt for approval. New tools need an entry in `definitions()`, `handles()` and `describe()`. - `src/theory/` (pitch, interval, scale, chord, key, tempo) and `src/audio/` (symphonia decode, loudness/tempo/key analysis) are the pure computation behind the tools. The design principle is that the model calls these instead of recalling answers, so results must be exact (correct enharmonic spelling, e.g. C# major has E# and B#). diff --git a/README.md b/README.md index 22298f8..4f60c06 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ takes precedence. `SPLITFIRE_MCP_DEMUCS=off` disables it. Apps that embed SplitFire decide what stems mean the same way. They pass a `demucs` MCP server of their own in `session/new`, or return no built-in servers from their `Profile` and write their own stems guidance. The SplitFire AI Audio Separator supplies its own executable in `--mcp` mode on -its on-device engine; KaroKowe Jam supplies none and points users at its in-app flow. The stem +its on-device engine; KaroKowe Jam and KaroKowe Karaoke supply none and point users at their in-app flows. The stem hooks only check the tool name `mcp__demucs__separate_stems` and the `list_models` and `separate_stems` result shapes (`structuredContent.models[]{id,size_mb,cached}` and `structuredContent.stems[].path`).