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
- Verify the Composio API key is valid (re-set it via composio.set_api_key)
- Retry — direct API calls can fail transiently
- 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.