tinyhumansai/openhuman · error

invalid arguments for memory_tools_put: {e}

Error message

invalid arguments for memory_tools_put: {e}

What it means

The `memory_tools_put` arguments failed serde deserialization into the typed `Args` struct. Required is the rule text; optional fields are `priority` (must be exactly 'critical', 'high', or 'normal') and `tags` (array of strings). Wrong enum casing, a non-array tags value, or a missing required field triggers this, with `{e}` naming the cause.

Source

Thrown at src/openhuman/memory/tools/tool_memory/put.rs:98

                    "description": "Free-text rule, edict, or learning to pin."
                },
                "priority": {
                    "type": "string",
                    "enum": ["critical", "high", "normal"],
                    "description": "How aggressively to surface the rule. Default: normal."
                },
                "tags": {
                    "type": "array",
                    "items": { "type": "string" },
                    "description": "Optional free-form tags (e.g. `safety`, `permission`)."
                }
            }
        })
    }

    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
        let parsed: Args = serde_json::from_value(args)
            .map_err(|e| anyhow::anyhow!("invalid arguments for memory_tools_put: {e}"))?;
        log::debug!(
            "[tool][memory_tools] put tool_name={} priority={:?} tags={}",
            parsed.tool_name,
            parsed.priority,
            parsed.tags.len()
        );
        let guard = active_memory_guard()
            .await
            .map_err(|e| anyhow::anyhow!("memory_tools_put: {e}"))?;
        let family = guard
            .as_tool_memory()
            .ok_or_else(|| anyhow::anyhow!("memory_tools_put: {NO_TOOL_MEMORY}"))?;
        let mut rule = ToolMemoryRule::new(
            &parsed.tool_name,
            &parsed.rule,
            parse_priority(parsed.priority.as_deref()),
            ToolMemorySource::UserExplicit,
        );

View on GitHub (pinned to 7491200858)

Solutions

  1. Use exact enum values for priority: 'critical', 'high', 'normal'
  2. Send tags as an array of strings
  3. Check `{e}` for the offending field
  4. Include the required rule text field
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/memory/tools/tool_memory/put.rs:98 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/62a9ad50686ca2c5. Report an issue: GitHub.