tinyhumansai/openhuman · error · anyhow::Error
failed to load catalog: {e}
Error message
failed to load catalog: {e} What it means
Loading the skill catalog (`ops::browse_catalog`) failed while resolving an install request. The entry_id was already read, but fetching/reading the catalog errored — remote catalog unreachable, cache unreadable, or parse failure, detailed by `{e}`. Install cannot match the id without the catalog.
Source
Thrown at src/openhuman/skills/catalog/tools.rs:190
/// `ApprovalGate` (#3993). On an interactive chat turn the user sees an
/// inline approval card and approves before anything is written; on
/// background/cron turns (no `APPROVAL_CHAT_CONTEXT`) the gate is bypassed,
/// matching every other external-effect tool.
fn external_effect(&self) -> bool {
true
}
async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
let entry_id = args
.get("entry_id")
.and_then(|v| v.as_str())
.ok_or_else(|| anyhow::anyhow!("missing required argument `entry_id`"))?;
tracing::debug!(entry_id = %entry_id, "[tool][skill_registry] install");
let catalog = ops::browse_catalog(false)
.await
.map_err(|e| anyhow::anyhow!("failed to load catalog: {e}"))?;
let entry = catalog.iter().find(|e| e.id == entry_id).ok_or_else(|| {
anyhow::anyhow!(
"skill '{entry_id}' not found in catalog. \
Run skill_registry_browse first to refresh."
)
})?;
match ops::install_from_catalog(&self.workspace_dir, entry).await {
Ok(outcome) => Ok(ToolResult::success(serde_json::to_string(&json!({
"url": outcome.url,
"stdout": outcome.stdout,
"stderr": outcome.stderr,
"new_skills": outcome.new_skills,
}))?)),
Err(e) => Ok(ToolResult::error(format!(
"Failed to install skill '{entry_id}': {e}"
))),View on GitHub (pinned to 7491200858)
Solutions
- Retry — remote catalog fetches are network-dependent
- Check connectivity to the catalog source
- Inspect `{e}` for fetch vs parse failure
- Clear/redownload the catalog cache if corrupt
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at src/openhuman/skills/catalog/tools.rs:190 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/d5c56862a8fe7198.
Report an issue: GitHub.