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 prompt

View on GitHub (pinned to 3810898a74)

Solutions

  1. Run goose prompt list without --extension to see the exact names available
  2. Enable the extension (goose configure) so it loads
  3. 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

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


AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16). Data as JSON: /api/errors/c631de0f64382d38. Report an issue: GitHub.