tinyhumansai/openhuman · error

unknown composio mode: "{unknown}". Supported: "backend", "d

Error message

unknown composio mode: "{unknown}". Supported: "backend", "direct"

What it means

create_composio_client rejected an unrecognized config.composio.mode string. Only "backend" and "direct" are supported; unknown values fail loud by design so a typo in config.toml does not silently downgrade the auth mode.

Source

Thrown at src/openhuman/integrations/composio/client.rs:848

                        .filter(|k| !k.is_empty())
                })
                .ok_or_else(|| {
                    anyhow::anyhow!(
                        "composio direct mode selected but no api key is configured \
                         (set via composio.set_api_key RPC or config.composio.api_key)"
                    )
                })?;

            let tool = create_direct_composio_tool_for_api_key(config, &api_key)?;
            tracing::debug!(
                key_len = api_key.len(),
                "[composio-factory] resolved direct variant (key redacted)"
            );
            Ok(ComposioClientKind::Direct(tool))
        }
        unknown => {
            tracing::warn!(mode = %unknown, "[composio-factory] unknown composio mode");
            Err(anyhow::anyhow!(
                "unknown composio mode: \"{unknown}\". Supported: \"backend\", \"direct\""
            ))
        }
    }
}

// ── Direct-mode response reshapers ──────────────────────────────────
//
// The direct-mode `ComposioTool` (in `composio/tools/direct.rs`)
// speaks `backend.composio.dev/api/v3/*` natively. The helpers below
// reshape those v3 responses into the same envelopes the
// backend-proxied [`ComposioClient`] returns, so callers in `ops.rs` /
// `tools.rs` don't have to branch on mode for downstream concerns
// (event-bus shape, log format, frontend type contract).
//
// All three helpers live next to the factory so anyone touching the
// direct-mode plumbing can see the full envelope-translation surface
// in one place.

View on GitHub (pinned to 7491200858)

Solutions

  1. Set composio.mode to "backend" or "direct" in config.toml
  2. Remove the mode key entirely to accept the default (backend)
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/integrations/composio/client.rs:848 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/8b8784b8e1677087. Report an issue: GitHub.