block/buzz · error
-32601
-32601
Error message
jsonrpc: method not found: {method} What it means
dispatch() routes only the methods this harness implements: session/new, session/prompt, session/set_model, session/cancel, and _goose/unstable/session/steer (plus the session/cancel notification arm). Any other method string falls to the catch-all, replying with JSON-RPC error code -32601 (method not found) and the caller's request id.
Source
Thrown at crates/buzz-agent/src/lib.rs:335
}
"session/cancel" => {
cancel_session(app, params).await;
wire::send(wire_tx, wire::ok(id, Value::Null)).await;
}
// goose-compatible non-standard extension: inject user input into the
// currently active prompt without starting a new one. Mirrors goose's
// `_goose/unstable/session/steer` wire contract so a single client-side
// delivery path serves both agents.
"_goose/unstable/session/steer" => {
steer_session(app, id, params, wire_tx).await;
}
_ => {
wire::send(
wire_tx,
wire::err(
id,
METHOD_NOT_FOUND,
&format!("jsonrpc: method not found: {method}"),
),
)
.await
}
}
}
async fn handle_notification(app: &Arc<App>, method: &str, params: Value) {
if method == "session/cancel" {
cancel_session(app, params).await;
}
}
async fn initialize(app: &Arc<App>, id: Value, params: Value, wire_tx: &WireSender) {
let p: InitializeParams = match decode(params, "initialize") {
Ok(p) => p,
Err(m) => return reject(wire_tx, id, INVALID_PARAMS, &m).await,
};View on GitHub (pinned to dad5a33865)
Solutions
- Match your client's call list to the arms in handle_request/dispatch in crates/buzz-agent/src/lib.rs
- Upgrade buzz-agent if the method exists in a newer release
- Treat -32601 as capability discovery: catch it and disable that code path in the client instead of retrying
Example fix
// before (client)
await call("session/steer", params); // typo → -32601
// after
await call("_goose/unstable/session/steer", params); Defensive patterns
Strategy: type-guard
Type guard
const KNOWN_METHODS = new Set([
"session/new",
"session/prompt",
"session/set_model",
"session/cancel",
"_goose/unstable/session/steer",
]); // keep in sync with crates/buzz-agent/src/lib.rs dispatch()
function isKnownMethod(m: string): m is (typeof KNOWN_METHODS extends Set<infer T> ? T : never) {
return KNOWN_METHODS.has(m);
} Try / catch
try {
await call(method, params);
} catch (e) {
if (e instanceof JsonRpcError && e.code === -32601) {
disableFeature(method); // capability mismatch, not a transient error
} else throw e;
} Prevention
- Pin client and buzz-agent versions together so the method surface stays in sync
- Treat -32601 as capability discovery: degrade the client feature instead of retrying
- Check dispatch()'s arms in crates/buzz-agent/src/lib.rs before adding calls to new methods
When it happens
Trigger: Calling a method this buzz-agent version does not implement (e.g. a newer client extension or another agent's API); a typo'd method name; sending a request for a notification-only method and expecting a success reply.
Common situations: Version skew between an ACP/goose-era client and buzz-agent; porting a client from a different agent runtime that supports extra methods; capability probing scripts.
Related errors
AI-assisted analysis of block/buzz@dad5a33865 (2026-08-20).
Data as JSON: /api/errors/400b2c7fdcdc8aeb.
Report an issue: GitHub.