tinyhumansai/openhuman · error

[composio-direct] composio_list_connections (direct) failed:

Error message

[composio-direct] composio_list_connections (direct) failed: {e:#}

What it means

The direct-variant composio_list_connections tool failed; the error is routed symmetrically with ops.rs so 401s from a bad direct-mode API key fire the session/credential classifier (Sentry TAURI-RUST-X9) instead of escaping unclassified. {e:#} renders the full error chain.

Source

Thrown at src/openhuman/integrations/composio/tools.rs:525

                })?
            }
            Ok(ComposioClientKind::Direct(direct)) => {
                tracing::debug!("[composio-direct] list_connections.execute: direct variant");
                direct_list_connections(&direct).await.map_err(|e| {
                    // [#1166 / Sentry TAURI-RUST-X9] Symmetric error
                    // routing with `ops.rs::composio_list_connections`.
                    // The agent-tool path can also fire 401s when a
                    // direct-mode user has a bad API key — without this
                    // hook the failure escapes the classifier and lands
                    // as an unclassified Sentry event. Render WITH the
                    // `[composio-direct]` anchor BEFORE reporting so the
                    // classifier arm in `is_provider_user_state_message`
                    // (gated on that prefix) actually fires.
                    let rendered = format!(
                        "[composio-direct] composio_list_connections (direct) failed: {e:#}"
                    );
                    super::ops::report_composio_op_error("list_connections", &rendered);
                    anyhow::anyhow!("{rendered}")
                })?
            }
            Err(e) => {
                return Ok(ToolResult::error(format!(
                    "composio_list_connections failed: {e}"
                )));
            }
        };
        // Filter server-side-indistinguishable states — callers should only
        // see integrations the user can actually act on. Matches the same
        // ACTIVE/CONNECTED allowlist used by `fetch_connected_integrations_uncached`
        // so the tool output and the prompt's Delegation Guide agree on what
        // counts as "connected".
        resp.connections.retain(|c| c.is_active());
        tracing::debug!(
            count = resp.connections.len(),
            "[composio] list_connections.execute: returning active connections"
        );

View on GitHub (pinned to 7491200858)

Solutions

  1. Verify the Composio API key is valid (re-set it via composio.set_api_key)
  2. Retry — direct API calls can fail transiently
  3. Read the chained error for the specific Composio API refusal
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src/openhuman/integrations/composio/tools.rs:525 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/6562b91b94e91bf5. Report an issue: GitHub.