tinyhumansai/openhuman · error
list_tools failed for toolkit `{toolkit_slug}`: {e}
Error message
list_tools failed for toolkit `{toolkit_slug}`: {e} What it means
fetch_toolkit_actions failed when ComposioClient::list_tools errored for the given toolkit slug after trimming and tag-forwarding decisions were made. The toolkit slug is included so the failing catalog query is identifiable.
Source
Thrown at src/openhuman/integrations/composio/connected_integrations.rs:1035
pub async fn fetch_toolkit_actions(
client: &ComposioClient,
toolkit: &str,
tags: Option<&[String]>,
) -> anyhow::Result<Vec<ConnectedIntegrationTool>> {
let toolkit_slug = toolkit.trim();
if toolkit_slug.is_empty() {
anyhow::bail!("fetch_toolkit_actions: toolkit must not be empty");
}
let effective_tags = if should_forward_tags(Some(&[toolkit_slug.to_string()])) {
tags
} else {
None
};
tracing::debug!(toolkit = %toolkit_slug, ?effective_tags, "[composio] fetch_toolkit_actions");
let resp = client
.list_tools(Some(&[toolkit_slug.to_string()]), effective_tags)
.await
.map_err(|e| anyhow::anyhow!("list_tools failed for toolkit `{toolkit_slug}`: {e}"))?;
let action_prefix = format!("{}_", toolkit_slug.to_uppercase());
// Apply curated whitelist + user scope so spawn-time tool
// discovery agrees with the bulk path and the meta-tool layer.
let pref = super::providers::load_user_scope_or_default(toolkit_slug).await;
let actions: Vec<ConnectedIntegrationTool> = resp
.tools
.into_iter()
.filter(|t| t.function.name.starts_with(&action_prefix))
.filter(|t| super::providers::is_action_visible_with_pref(&t.function.name, &pref))
.map(|t| ConnectedIntegrationTool {
name: t.function.name,
description: t.function.description.unwrap_or_default(),
parameters: t.function.parameters,
})
.collect();
tracing::debug!(
toolkit = %toolkit_slug,
action_count = actions.len(),View on GitHub (pinned to 7491200858)
Solutions
- Retry — Composio catalog endpoints intermittently fail
- Verify the toolkit slug is valid and the Composio credential/session is still good
- Check the underlying error {e} for auth vs network vs not-found detail
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at src/openhuman/integrations/composio/connected_integrations.rs:1035 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/2f5be2e49f69ff51.
Report an issue: GitHub.