Agent-native workbench for scorekit. You talk to the agent; the agent writes the scene DSL and drives scorekit. The GUI observes — it does not edit.
scorebench is a desktop app (Tauri 2 + Svelte 5) that hosts a minimal ReACT agent for composing and rendering game music with scorekit. It is the shell, scorekit is the compiler, the LLM is the composer.
you ──chat──► agent core (Rust, OpenAI Responses API only)
│ tool calls (subprocess, --json)
▼
scorekit validate / lint / build / diff
│
▼
project dir ──► scene.yaml + out/*.ogg + meta.json
│
▼
WebAudio playback + spectrum (AnalyserNode, zero in-house DSP)
- One project per window. Opening scorebench means opening one project directory (scene YAML + rendered assets + agent memory). No multi-project tabs.
- Chat is the only write path. The agent edits scene YAML and re-renders via scorekit. Parameter panels are read-only observations of the current scene/render state.
- Playback & spectrum in the webview. Decoding, FFT, and progress come from the browser's WebAudio API (
AnalyserNode) — no Rust audio stack, no in-house DSP. - Project memory. The agent maintains a rolling project summary; when the conversation exceeds the configured context budget it compacts automatically.
- Agent core stays minimal. One provider spec: the OpenAI Responses API (any compatible endpoint via base URL + key). No multi-provider abstraction, no agent framework, no SDK.
- scorebench never renders audio itself. All compilation/rendering/export goes through the
scorekitCLI (--json). If scorekit can't do it, scorebench doesn't do it. - No editing UI. No piano roll, no timeline, no form-based YAML editor. The DSL is edited by the agent (or by the user in their own editor); scorebench observes and plays.
- Deterministic boundary respected. scorebench never post-processes rendered artifacts; what scorekit writes is what plays.
Walking skeleton. See docs/roadmap.md.
npm install
npm run tauri dev # requires Rust toolchain + scorekit on PATHThe API endpoint, model, context budget, and API key are configured from the in-app Settings panel. Keys use the OS keychain; the explicit insecure fallback is stored only in the Tauri app-config directory with mode 0600.
src-tauri/tauri.conf.json is the application-version source of truth:
npm run version:set -- 0.1.1
git commit -am "Release 0.1.1"
git tag v0.1.1
git push origin main v0.1.1Version tags build macOS (aarch64 and x86_64), Windows, and Linux installers, generate SHA256SUMS, and assemble a draft GitHub release. Apple signing/notarization activates when its repository secrets are present; local and non-macOS builds do not require those secrets. scorekit is discovered at runtime and is not bundled.