tinyhumansai/openhuman · error

Missing 'action' parameter

Error message

Missing 'action' parameter

What it means

Guard in the composio tool's argument dispatch: the 'action' argument is missing (or not a recognized string), so the tool cannot decide between list/connect/execute. Unknown or missing action deliberately routes to the write path and requires an explicit value.

Source

Thrown at src/openhuman/integrations/composio/tools/direct.rs:796

    fn external_effect_with_args(&self, args: &serde_json::Value) -> bool {
        // `action="list"` enumerates available Composio actions —
        // a read-only catalog call. `action="connect"` only returns
        // an OAuth URL the user then visits manually; the
        // subsequent OAuth handoff is its own consent flow so the
        // tool call itself has no outbound side effect to gate.
        // `action="execute"` (or anything unknown / missing) is the
        // write path and routes through the approval gate.
        !matches!(
            args.get("action").and_then(|v| v.as_str()),
            Some("list") | Some("connect")
        )
    }

    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
        let action = args
            .get("action")
            .and_then(|v| v.as_str())
            .ok_or_else(|| anyhow::anyhow!("Missing 'action' parameter"))?;

        let entity_id = args
            .get("entity_id")
            .and_then(|v| v.as_str())
            .unwrap_or(self.default_entity_id.as_str());

        match action {
            "list" => {
                let app = args.get("app").and_then(|v| v.as_str());
                match self.list_actions(app).await {
                    Ok(actions) => {
                        let summary: Vec<String> = actions
                            .iter()
                            .take(20)
                            .map(|a| {
                                format!(
                                    "- {} ({}): {}",
                                    a.name,

View on GitHub (pinned to 7491200858)

Solutions

  1. Pass action as one of "list", "connect", or "execute"
  2. Use the dedicated composio tools for each action instead of relying on the generic action switch
Defensive patterns

Strategy: validation

When it happens

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