tinyhumansai/openhuman · error

memory_tools_put: {NO_TOOL_MEMORY}

Error message

memory_tools_put: {NO_TOOL_MEMORY}

What it means

The memory guard was acquired but the tool-memory capability family is absent (`NO_TOOL_MEMORY` sentinel). The pinned-rule store is only served by drivers implementing that family; with a null/fallback driver bound (no memory module), putting a tool rule is structurally unavailable and this guard reports it.

Source

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

            }
        })
    }

    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,
        );
        rule.tags = parsed.tags;
        let rule_id = rule.id.clone();
        let tool_name = rule.tool_name.clone();
        family
            .put_tool_rule(rule)
            .await
            .map_err(|e| anyhow::anyhow!("memory_tools_put: {e}"))?;
        // `put_tool_rule` answers with unit; the tool's contract is the stored
        // rule (normalised tool_name, preserved created_at, refreshed
        // updated_at), so read it back by the id generated above.
        let stored = family
            .tool_rules(&tool_name)

View on GitHub (pinned to 7491200858)

Solutions

  1. Confirm the memory module is loaded with tool-memory support
  2. Check the bound driver via memory status
  3. Disable tool-rule pinning features in module-less configurations
Defensive patterns

Strategy: fallback

When it happens

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