diff --git a/crates/goose/src/agents/extension_manager.rs b/crates/goose/src/agents/extension_manager.rs index c5b29f124975..29294fc84c01 100644 --- a/crates/goose/src/agents/extension_manager.rs +++ b/crates/goose/src/agents/extension_manager.rs @@ -705,9 +705,13 @@ impl ExtensionManager { // Loop through each extension and try to read the resource, don't raise an error if the resource is not found // TODO: do we want to find if a provided uri is in multiple extensions? // currently it will return the first match and skip any others - for extension_name in self.extensions.lock().await.keys() { + + // Collect extension names first to avoid holding the lock during iteration + let extension_names: Vec = self.extensions.lock().await.keys().cloned().collect(); + + for extension_name in extension_names { let result = self - .read_resource_from_extension(uri, extension_name, cancellation_token.clone()) + .read_resource_from_extension(uri, &extension_name, cancellation_token.clone()) .await; match result { Ok(result) => return Ok(result),