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
- Run 'goose doctor' to identify the failing extension
- Check the embedded '{}' error and goose logs for which extension failed
- Fix or disable the broken extension in 'goose configure' (Extensions) and retry
- 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
- Keep only extensions you use enabled — one broken extension blocks all prompt lookups
- Verify extension commands start manually after tool upgrades (npx/pipx)
- Run 'goose doctor' before relying on prompts in automation
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
- Failed to get prompt: {}
- Unsupported extension type for ACP: ${config.type}
- Prompt '{}' not found
- Resource '${fallbackUri}' returned no contents
- Failed to start extension: {}
AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16).
Data as JSON: /api/errors/9307bc41bbadade0.
Report an issue: GitHub.