tinyhumansai/openhuman · error

Missing 'key' parameter

Error message

Missing 'key' parameter

What it means

The memory store tool found `namespace` but no usable `key` string in the arguments. `key` is the second required argument and its absence is caught by the same sequential get/as_str guard, so the write cannot be addressed to a memory slot — the tool errors before reading `content` or running secret-safety checks.

Source

Thrown at src/openhuman/memory/tools/store.rs:75

                },
                "category": {
                    "type": "string",
                    "description": "Memory category: 'core' (permanent), 'daily' (session), 'conversation' (chat), or a custom category name. Defaults to 'core'."
                }
            },
            "required": ["namespace", "key", "content"]
        })
    }

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

        let content = args
            .get("content")
            .and_then(|v| v.as_str())
            .ok_or_else(|| anyhow::anyhow!("Missing 'content' parameter"))?;

        let category = match args.get("category").and_then(|v| v.as_str()) {
            Some("core") | None => MemoryCategory::Core,
            Some("daily") => MemoryCategory::Daily,
            Some("conversation") => MemoryCategory::Conversation,
            // Route custom categories through `FromStr` so a `custom:<name>`
            // wire value — the form `memory_recall`/`Display` now emit — resolves
            // back to `Custom("<name>")` instead of `Custom("custom:<name>")`
            // (which would `Display` as `custom:custom:<name>` and stop matching
            // the original category on recall/filter). Legacy bare names still
            // parse to the same `Custom(name)`; an unparseable value falls back
            // to the raw string. (review: prefixed-custom round-trip)
            Some(other) => other

View on GitHub (pinned to 7491200858)

Solutions

  1. Provide `key` as a non-empty JSON string identifying the memory slot
  2. Send namespace, key, and content together per the required list
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/memory/tools/store.rs:75 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/3092aca8a60710f0. Report an issue: GitHub.