Repository navigation
Description
Summary
Buzz desktop's runtime registry is hardcoded to 5 entries (node, node-tools, codex-acp, claude-agent-acp, claude-code-acp). There is no way to attach a third-party ACP-compatible agent such as oh-my-pi/omp (omp acp) through the UI today, even though the underlying plumbing (acp_command="buzz-acp", agent_command="<runtime>", agent_args=[...]) is generic and would accept any bin name on PATH.
Evidence
String-scan of D:\Apps\Buzz\buzz-desktop.exe at offset 55350058:
…
BUZZ_AGENT_PROVIDER…
Buzzruntimesnodenode-toolscodex-acpclaude-agent-acpclaude-code-acp
npmwin-x64binv24.11.0node.exe…
That comma-joined tail after Buzzruntimes is the runtime registry. The same 5 names appear nowhere else in any of the 5 binaries in D:\Apps\Buzz\. A direct Buffer-level grep across buzz-desktop.exe, buzz-acp.exe, buzz-agent.exe, buzz.exe, buzz-dev-mcp.exe for omp-acp, oh-my-pi, minimax, agentclientprotocol/omp, omx-acp returns zero hits.
I built and globally installed a working bridge as a sanity check:
- npm package:
@agentclientprotocol/omp-acp(local, Apache-2.0) - bin name:
omp-acp(sits next tocodex-acp,claude-code-acp) - implementation:
child_process.spawn("omp.cmd", ["acp", ...argv], { stdio: "inherit" })— a thin stdio proxy, ~50 lines, no protocol translation becauseomp acpalready speaks Agent Client Protocol over stdio (verified via directinitializehandshake:protocolVersion=1, agentInfo={name:"oh-my-pi", version:"17.1.7"}with fullloadSession/mcpCapabilities/sessionCapabilities).
After installing it, I appended a fresh persona to managed-agents.json:
{
"name": "OMP-Probe",
"display_name": "OMP-Probe",
"slug": "omp:probe",
"acp_command": "buzz-acp",
"agent_command": "omp-acp",
"agent_args": [],
"is_active": true,
...
}Restarting Buzz desktop preserved agent_command: "omp-acp" verbatim — so the file-level path works. Only the UI runtime picker is closed.
What I am asking for
One of the following, in order of preference:
- Make the runtime registry configurable. Move the 5-name list out of the binary into something user-editable — config file,
BUZZ_RUNTIMESenv var, or a runtime-discoverable convention (any bin onPATHmatching<name>-acpwhose path resolves). I would expect this to be a small change touchingcrates/buzz-desktop/near whereBuzzruntimeslives. - Document the supported runtimes + add
omp-acpto the same list. Less flexible for the long tail but unblocks the immediate use case (goose's env contract is the source of the broken-API-key reports, see goose + provider openai: the API key never reaches the agent (401 every turn) #3395 — giving users an alternative runtime that doesn't need the bundled provider-key path would also help there). - At minimum: a per-persona
custom_runtimefield whoseagent_commandis honored without going through the registry (effectively what I have working today via directmanaged-agents.jsonediting, but it currently has no UI path and is not documented).
Reproduction (Windows 11, D:\Apps\Buzz\, omp 17.1.7 installed)
# 1. install the bridge anywhere on disk
mkdir omp-acp-adapter && cd omp-acp-adapter
# omp-acp.js : transparent stdio proxy to `omp acp`
npm install -g .
# 2. confirm bin on PATH and ACP handshake
where omp-acp
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":2,"clientInfo":{"name":"probe","version":"0.0.1"}}}' \
| omp-acp
# -> {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":1,"agentInfo":{"name":"oh-my-pi","version":"17.1.7"},...}}
# 3. open Buzz desktop, click "connect", look at the runtime list
# -> node, node-tools, codex-acp, claude-agent-acp, claude-code-acp
# no omp-acp, no way to add oneEnvironment
- Buzz
D:\Apps\Buzz\, all 5 binaries fromJul 25 17:08/17:23 omp 17.1.7already on PATH atC:\Users\oabdu\AppData\Roaming\npm- node 24.11.0, npm 11.6.2
Related
- goose + provider openai: the API key never reaches the agent (401 every turn) #3395 — bundled goose runtime hits 401 because Buzz does not translate
OPENAI_COMPAT_API_KEYtoOPENAI_API_KEY. Unblocking an alternative runtime (this issue) does not fix that, but it gives users an escape hatch while it is being triaged.
Activity
bradhallett commentedon Jul 30, 2026
A fix is up in #3804. It resolves this by deriving the per-runtime launch args from the single-source
PRESET_HARNESSEStable inresolve_effective_harness_descriptor, so an agent pinned to this runtime (e.g. viaagent_command_overridewith noruntimeid) launches its ACP/stdio mode instead of the bare command/TUI that timed out atinitialize.fix(acp): use preset launch args for managed agents with no runtime
patrick-xin commentedon Aug 3, 2026
Just want to +1 this and share a working data point: I built a pi-acp adapter using exactly the custom-harness mechanism you describe, and it runs against a live relay with no source changes — just a
pi.jsondropped intocustom_harnesses/.The pattern works well. The one thing I learned the hard way (in case it saves you time with omp): the custom harness approach is necessary but not sufficient. The adapter itself has to handle a few Buzz-specific behaviors to avoid silent failures:
configOptionsfromsession/new, Buzz switches tosession/set_config_option(configId"model") instead ofsession/set_model. If the adapter only ACKs this without applying, the session deadlocks on the default model.session/updatediscriminator issessionUpdate(nottype) — if you tag notifications withtype, the desktop renders them as unknown and drops everything except the final reply.argumentsobject (not acontent.textstring) to render as tool cards.These are all ACP-spec compliant — just not obvious until you hit them. Full writeup in the README.
A configurable runtime registry or even just official docs covering these wire-level details would make 3rd-party runtime onboarding much smoother.
fix(acp): use preset launch args for managed agents with no runtime
fix(acp): use preset launch args for managed agents with no runtime
fix(acp): use preset launch args for managed agents with no runtime
fix(acp): use preset launch args for managed agents with no runtime
fix(acp): use preset launch args for managed agents with no runtime