{"record":{"id":"79be4672f715eba9","repo":"aaif-goose/goose","slug":"acp-agent-does-not-support-session-load","errorCode":null,"errorMessage":"ACP agent does not support session/load","messagePattern":"ACP agent does not support session/load","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/goose/src/acp/provider.rs","lineNumber":1314,"sourceCode":"            } => {\n                let result = if supports_load {\n                    let mcp_servers =\n                        filter_supported_servers(&config.mcp_servers, &mcp_capabilities);\n                    cx.send_request(\n                        LoadSessionRequest::new(session_id.clone(), config.work_dir.clone())\n                            .mcp_servers(mcp_servers),\n                    )\n                    .block_task()\n                    .await\n                    .map(|response| {\n                        NewSessionResponse::new(session_id.clone())\n                            .modes(response.modes)\n                            .config_options(response.config_options)\n                            .meta(response.meta)\n                    })\n                    .map_err(anyhow::Error::from)\n                } else {\n                    Err(anyhow::anyhow!(\"ACP agent does not support session/load\"))\n                };\n                let result = match result {\n                    Ok(session) => {\n                        session_ids.push(session.session_id.clone());\n                        apply_session_config_options(&config, &cx, session.session_id.clone())\n                            .await?;\n                        apply_session_mode(&config, &goose_mode, &cx, session).await\n                    }\n                    Err(error) => Err(error),\n                };\n                log_undelivered(response_tx.send(result), AGENT_METHOD_NAMES.session_load);\n            }\n            ClientRequest::CloseSession { session_id } => {\n                if supports_close {\n                    if let Err(error) = cx\n                        .send_request(CloseSessionRequest::new(session_id.clone()))\n                        .block_task()\n                        .await","sourceCodeStart":1296,"sourceCodeEnd":1332,"githubUrl":"https://github.com/aaif-goose/goose/blob/3810898a7447ec3299be72e223d3570a7aabf0ab/crates/goose/src/acp/provider.rs#L1296-L1332","documentation":"A ClientRequest::LoadSession (session resumption carrying a session_id) was dispatched, but the agent's InitializeResponse did not advertise the load_session capability (init_response.agent_capabilities.load_session was falsy). The provider guards the LoadSessionRequest behind that capability flag and fails fast instead of sending an RPC the agent would reject.","triggerScenarios":"Configuring goose to resume a previous ACP session (passing a stored session id) while the configured agent only supports session/new — e.g. a minimal agent that keeps no state, or one built on an older ACP SDK without session persistence.","commonSituations":"Switching from a stateful agent (goose itself, or an editor agent) to a stateless one while the client still tries to resume the last session id; upgrading/downgrading an agent changes its advertised capabilities.","solutions":["Start a fresh session instead of resuming: drop the stored session id so a session/new is issued","If resumption matters, use or upgrade to an agent that advertises session/load in its initialize response","Check the agent's documented capabilities and align the client's resume behavior with them"],"exampleFix":"# before\nsession_id: \"old-session-uuid\"   # agent cannot load sessions\n\n# after\n# start a new session: remove the session id from the resume request\nsession_id: null","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"fn supports_session_load(init: &InitializeResponse) -> bool {\n    init.agent_capabilities.load_session\n}\n\nif !supports_session_load(&init_response) {\n    // start a new session instead of LoadSession\n}","tryCatchPattern":"match load_result {\n    Err(e) if e.to_string().contains(\"session/load\") => {\n        tracing::warn!(%e, \"agent cannot resume sessions; starting fresh\");\n        start_new_session().await\n    }\n    other => other,\n}","preventionTips":["Check load_session in the initialize response before attempting resume","Clear stored session ids when switching to an agent with weaker capabilities"],"tags":["acp","session","capability","resume"],"backgroundTag":null,"analyzedSha":"3810898a7447ec3299be72e223d3570a7aabf0ab","analyzedAt":"2026-08-16T10:14:26.282Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}