From 925f97ded23d0df93803965c36e9d82bde99d0ac Mon Sep 17 00:00:00 2001 From: Abhijay Jain Date: Thu, 13 Aug 2026 21:23:31 +0000 Subject: [PATCH] fix(agent): skip local Stdio/StreamableHttp extension spawn when provider manages own context (#11203) Signed-off-by: Abhijay Jain Co-authored-by: Douwe Osinga --- crates/goose/src/agents/agent.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index e8125d494..de689c2d7 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -1311,6 +1311,20 @@ impl Agent { } }; + let manages_own_context = self + .provider() + .await + .map(|p| p.manages_own_context()) + .unwrap_or(false); + let (skipped_configs, enabled_configs): (Vec<_>, Vec<_>) = + enabled_configs.into_iter().partition(|config| { + manages_own_context + && matches!( + config, + ExtensionConfig::Stdio { .. } | ExtensionConfig::StreamableHttp { .. } + ) + }); + let session_id = session.id.clone(); let extension_futures = enabled_configs @@ -1361,8 +1375,7 @@ impl Agent { let results = futures::future::join_all(extension_futures).await; - // Persist once after all extensions are loaded - if results.iter().any(|r| r.success) { + if results.iter().any(|r| r.success) && skipped_configs.is_empty() { if let Err(e) = self.persist_extension_state(&session_id).await { warn!("Failed to persist extension state after bulk load: {}", e); }