{"record":{"id":"2f5be2e49f69ff51","repo":"tinyhumansai/openhuman","slug":"list-tools-failed-for-toolkit-toolkit-slug-e","errorCode":null,"errorMessage":"list_tools failed for toolkit `{toolkit_slug}`: {e}","messagePattern":"list_tools failed for toolkit `(.+?)`: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/integrations/composio/connected_integrations.rs","lineNumber":1035,"sourceCode":"pub async fn fetch_toolkit_actions(\n    client: &ComposioClient,\n    toolkit: &str,\n    tags: Option<&[String]>,\n) -> anyhow::Result<Vec<ConnectedIntegrationTool>> {\n    let toolkit_slug = toolkit.trim();\n    if toolkit_slug.is_empty() {\n        anyhow::bail!(\"fetch_toolkit_actions: toolkit must not be empty\");\n    }\n    let effective_tags = if should_forward_tags(Some(&[toolkit_slug.to_string()])) {\n        tags\n    } else {\n        None\n    };\n    tracing::debug!(toolkit = %toolkit_slug, ?effective_tags, \"[composio] fetch_toolkit_actions\");\n    let resp = client\n        .list_tools(Some(&[toolkit_slug.to_string()]), effective_tags)\n        .await\n        .map_err(|e| anyhow::anyhow!(\"list_tools failed for toolkit `{toolkit_slug}`: {e}\"))?;\n    let action_prefix = format!(\"{}_\", toolkit_slug.to_uppercase());\n    // Apply curated whitelist + user scope so spawn-time tool\n    // discovery agrees with the bulk path and the meta-tool layer.\n    let pref = super::providers::load_user_scope_or_default(toolkit_slug).await;\n    let actions: Vec<ConnectedIntegrationTool> = resp\n        .tools\n        .into_iter()\n        .filter(|t| t.function.name.starts_with(&action_prefix))\n        .filter(|t| super::providers::is_action_visible_with_pref(&t.function.name, &pref))\n        .map(|t| ConnectedIntegrationTool {\n            name: t.function.name,\n            description: t.function.description.unwrap_or_default(),\n            parameters: t.function.parameters,\n        })\n        .collect();\n    tracing::debug!(\n        toolkit = %toolkit_slug,\n        action_count = actions.len(),","sourceCodeStart":1017,"sourceCodeEnd":1053,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/integrations/composio/connected_integrations.rs#L1017-L1053","documentation":"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.","triggerScenarios":"Thrown at src/openhuman/integrations/composio/connected_integrations.rs:1035 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}