tinyhumansai/openhuman · error · anyhow::Error

flow_memory_remember: {e}

Error message

flow_memory_remember: {e}

What it means

The flow_memory_remember tool's underlying memory write failed; wrapped with the tool name. Secret-like content was already rejected earlier as a soft ToolResult::error, so reaching this wrap means a genuine store failure during the namespaced upsert (namespace derived internally from flow_id).

Source

Thrown at src/openhuman/flows/memory_tools.rs:520

                "[flows:memory:safety] flow_memory_remember rejected secret-like content flow_id_chars={} key_chars={} content_chars={}",
                flow_id.chars().count(),
                key.chars().count(),
                content.chars().count()
            );
            return Ok(ToolResult::error(
                "Refusing to store content that looks like a secret. Remove credentials or tokens and try again.".to_string(),
            ));
        }

        // SECURITY: the namespace is derived internally from `flow_id` —
        // this tool has no `namespace` parameter, so a flow can only ever
        // write into its own `flow_<id>` sandbox, never user/global memory
        // or another flow's namespace.
        let namespace = flow_namespace(flow_id);
        let display_key = format!("{namespace}/{key}");
        let guard = active_memory_guard()
            .await
            .map_err(|e| anyhow::anyhow!("flow_memory_remember: {e}"))?;
        // `store` carries the taint on the contract, so the engine trait's
        // separate `store_with_taint` door is unnecessary. `ExternalSync` is
        // the honest request: a flow wrote this, not the user.
        match guard
            .store(
                &namespace,
                key,
                content,
                category,
                None,
                MemoryTaint::ExternalSync,
            )
            .await
        {
            Ok(()) => Ok(ToolResult::success(format!(
                "Stored flow memory: {display_key}"
            ))),
            Err(e) => Ok(ToolResult::error(format!(

View on GitHub (pinned to 7491200858)

Solutions

  1. Inspect the wrapped memory-store error
  2. Verify the memory provider is available
  3. Retry the remember call after recovery
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src/openhuman/flows/memory_tools.rs:520 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/eb08d7500a86041d. Report an issue: GitHub.