aaif-goose/goose · error

Failed to list prompts: {}

Error message

Failed to list prompts: {}

What it means

Thrown by Agent::get_prompt when ExtensionManager::list_prompts fails while enumerating prompts across the session's enabled extensions. The '{}' is the underlying extension error: a started MCP extension failed to answer prompts/list, timed out, or its process died. The lookup cannot proceed because goose discovers which extension owns a prompt by listing them all.

Source

Thrown at crates/goose/src/agents/agent.rs:3693

    pub async fn list_extension_prompts(&self, session_id: &str) -> HashMap<String, Vec<Prompt>> {
        self.extension_manager
            .list_prompts(session_id, CancellationToken::default())
            .await
            .expect("Failed to list prompts")
    }

    pub async fn get_prompt(
        &self,
        session_id: &str,
        name: &str,
        arguments: Value,
    ) -> Result<GetPromptResult> {
        // First find which extension has this prompt
        let prompts = self
            .extension_manager
            .list_prompts(session_id, CancellationToken::default())
            .await
            .map_err(|e| anyhow!("Failed to list prompts: {}", e))?;

        if let Some(extension) = prompts
            .iter()
            .find(|(_, prompt_list)| prompt_list.iter().any(|p| p.name == name))
            .map(|(extension, _)| extension)
        {
            return self
                .extension_manager
                .get_prompt(
                    session_id,
                    extension,
                    name,
                    arguments,
                    CancellationToken::default(),
                )
                .await
                .map_err(|e| anyhow!("Failed to get prompt: {}", e));
        }

View on GitHub (pinned to 3810898a74)

Solutions

  1. Run 'goose doctor' to identify the failing extension
  2. Check the embedded '{}' error and goose logs for which extension failed
  3. Fix or disable the broken extension in 'goose configure' (Extensions) and retry
  4. Verify the extension binary actually starts: run its command manually from a shell
Defensive patterns

Strategy: try-catch

Try / catch

// Rust — surface which extension broke without losing the whole operation
match agent.get_prompt(session_id, name, args).await {
    Ok(result) => Ok(result),
    Err(e) if e.to_string().contains("Failed to list prompts") => {
        tracing::warn!("prompt lookup degraded: {e}");
        Err(e) // or fall back to a builtin prompt
    }
    Err(e) => Err(e),
}

Prevention

When it happens

Trigger: Calling agent.get_prompt (e.g. the /prompt slash command) while an enabled MCP extension is broken: stdio command not found, extension process crashed, JSON-RPC transport error, or prompts/list timing out.

Common situations: Extension command path wrong after an npx/pipx upgrade; extension binary missing on a new machine; networked MCP server unreachable; one misconfigured extension poisoning every prompt lookup for the session.

Related errors


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