aaif-goose/goose · error
Extension '{}' not found
Error message
Extension '{}' not found What it means
list_prompts filters extension prompts by name and validates the filter up front against the map of extensions that actually expose prompts. A filter matching no key — unknown, disabled, or an extension that defines no prompts — yields "Extension '{name}' not found".
Source
Thrown at crates/goose-cli/src/session/mod.rs:486
);
self.add_and_persist_extensions(vec![config]).await
}
pub async fn add_builtin(&mut self, builtin_name: String) -> Result<()> {
let configs = Self::parse_builtin_extensions(&builtin_name);
self.add_and_persist_extensions(configs).await
}
pub async fn list_prompts(
&mut self,
extension: Option<String>,
) -> Result<HashMap<String, Vec<String>>> {
let prompts = self.agent.list_extension_prompts(&self.session_id).await;
// Early validation if filtering by extension
if let Some(filter) = &extension {
if !prompts.contains_key(filter) {
return Err(anyhow::anyhow!("Extension '{}' not found", filter));
}
}
// Convert prompts into filtered map of extension names to prompt names
Ok(prompts
.into_iter()
.filter(|(ext, _)| extension.as_ref().is_none_or(|f| f == ext))
.map(|(extension, prompt_list)| {
let names = prompt_list.into_iter().map(|p| p.name).collect();
(extension, names)
})
.collect())
}
pub async fn get_prompt_info(&mut self, name: &str) -> Result<Option<output::PromptInfo>> {
let prompts = self.agent.list_extension_prompts(&self.session_id).await;
// Find which extension has this promptView on GitHub (pinned to 3810898a74)
Solutions
- Run goose prompt list without --extension to see the exact names available
- Enable the extension (goose configure) so it loads
- Check spelling and case of the extension name against the listed keys
Example fix
# before goose prompt list --extension devloper # after goose prompt list # see real names first goose prompt list --extension developer
Defensive patterns
Strategy: validation
Validate before calling
let prompts = session.list_prompts(None).await?;
let known: Vec<&String> = prompts.keys().collect();
if let Some(f) = &extension_filter {
assert!(known.contains(&f), "unknown extension '{}'; known: {:?}", f, known);
} Prevention
- List prompts unfiltered first and match names exactly, including case
- Confirm the extension is enabled before filtering by it
- Remember an extension with no prompts never appears as a key
When it happens
Trigger: goose prompt list --extension NAME (or the prompts API) where NAME is not among the loaded extensions that expose prompts: not configured, disabled, misspelled, or prompt-free.
Common situations: Typos and casing errors; extension added but not enabled in config; extension loaded but implements no prompts; different configuration profile active.
Related errors
- Job name must start with a letter or number and contain only
- --model must be in provider/model form, e.g. anthropic/claud
- --trials must be at least 1
- --concurrency must be at least 1
- --timeout-multiplier must be positive
AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16).
Data as JSON: /api/errors/c631de0f64382d38.
Report an issue: GitHub.