tinyhumansai/openhuman · error
composio backend mode unavailable: no backend session token.
Error message
composio backend mode unavailable: no backend session token. Sign in first (auth_store_session).
What it means
create_composio_client in backend mode (the default) found no stored backend session token, so the backend-proxied Composio client cannot be built. Signing in is a prerequisite: the backend proxies Composio calls using the session token.
Source
Thrown at src/openhuman/integrations/composio/client.rs:811
/// stored key takes precedence so the encrypted keychain remains the
/// source of truth — `config.toml` is a fallback for power users.
///
/// Any other mode string is rejected with an explicit error so a typo
/// in `config.toml` fails loud instead of silently downgrading.
pub fn create_composio_client(
config: &crate::openhuman::config::Config,
) -> anyhow::Result<ComposioClientKind> {
let mode = config.composio.mode.trim();
tracing::debug!(mode = %mode, "[composio-factory] resolving client");
match mode {
// Empty string is treated as the default for forward compatibility
// with hand-edited configs that omit the field — `serde(default)`
// already gives us "backend" for missing fields, but a literal
// empty string in TOML would otherwise be rejected.
"" | MODE_BACKEND_PAT => {
let client = build_composio_client(config).ok_or_else(|| {
anyhow::anyhow!(
"composio backend mode unavailable: no backend session token. \
Sign in first (auth_store_session)."
)
})?;
tracing::debug!("[composio-factory] resolved backend variant");
Ok(ComposioClientKind::Backend(client))
}
MODE_DIRECT_PAT => {
// Prefer keychain-stored key; fall back to `config.toml`.
let stored = crate::openhuman::security::credentials::get_composio_api_key(config)
.map_err(|e| anyhow::anyhow!("failed to read stored composio api key: {e}"))?;
let api_key = stored
.or_else(|| {
config
.composio
.api_key
.as_ref()
.map(|k| k.trim().to_string())View on GitHub (pinned to 7491200858)
Solutions
- Sign in first via auth_store_session (the desktop sign-in flow)
- Switch config.composio.mode to "direct" and configure a Composio API key if backend proxying is not wanted
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/openhuman/integrations/composio/client.rs:811 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/c2829398b3e7b34b.
Report an issue: GitHub.