diff --git a/.agents/AGENTS.md b/.agents/AGENTS.md index 2d36726..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). +- `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 47bf199..4f60c06 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 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`). + Separate only music you have the right to work with. ### Other MCP servers