tinyhumansai/openhuman · error

unknown call arg: {other}

Error message

unknown call arg: {other}

What it means

`openhuman call` matches tokens by exact string: `--method`, `--params`, `-h`/`--help`. Everything else — equals-joined forms, typo'd flags, positional text — hits the catch-all and is echoed back verbatim. This keeps the raw-call surface minimal and predictable since it feeds the JSON-RPC dispatcher directly.

Source

Thrown at src/core/cli.rs:482

                method = Some(
                    args.get(i + 1)
                        .ok_or_else(|| anyhow::anyhow!("missing value for --method"))?
                        .clone(),
                );
                i += 2;
            }
            "--params" => {
                params = args
                    .get(i + 1)
                    .ok_or_else(|| anyhow::anyhow!("missing value for --params"))?
                    .clone();
                i += 2;
            }
            "-h" | "--help" => {
                println!("Usage: openhuman call --method <name> [--params '<json>']");
                return Ok(());
            }
            other => return Err(anyhow::anyhow!("unknown call arg: {other}")),
        }
    }

    let method = method.ok_or_else(|| anyhow::anyhow!("--method is required"))?;
    let params = parse_json_params(&params).map_err(anyhow::Error::msg)?;

    // Raw calls bypass namespace parsing, but not the configured memory-driver
    // binding. Without this gate an absent capability could still reach a
    // destructive embedded handler because plain CLI invocations have no
    // ambient CoreContext to filter the registry.
    crate::core::cli_capability::ensure_capability_blocking(
        all::capability_for_rpc_method(&method).flatten(),
        &format!("openhuman call --method {method}"),
    )?;

    // `call` invokes a JSON-RPC method that may run an orchestrator turn
    // (e.g. `agent.chat`), so it needs the same roomy stack as the server.
    let rt = tokio::runtime::Builder::new_multi_thread()

View on GitHub (pinned to a221052e0d)

Solutions

  1. Use the exact space-separated form: `openhuman call --method <name> --params '<json>'`
  2. Run `openhuman call --help` for the exact usage line
  3. Remove positional arguments — the subcommand takes flags only

Example fix

# before
openhuman call --method=openhuman.config_get
# after
openhuman call --method openhuman.config_get
Defensive patterns

Strategy: validation

Validate before calling

# bash: only the two documented flags reach the subcommand
case "${1:-}" in
  --method|--params) ;;
  -h|--help) exec openhuman call --help ;;
  *) echo "unsupported call flag: $1 (use --method <name> | --params '<json>')" >&2; exit 2 ;;
esac

Prevention

When it happens

Trigger: `openhuman call --method=openhuman.x` (equals form unsupported); `--m openhuman.x` (abbreviation); `openhuman call openhuman.x` (positional, not supported).

Common situations: Habitual `key=value` flag syntax from other tools; abbreviating flags; trying to pass the method positionally as with some other CLIs.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16). Data as JSON: /api/errors/c9b5e0fe8b0d2ce8. Report an issue: GitHub.