tinyhumansai/openhuman · error · anyhow::Error

missing required boolean argument `is_outbound`

Error message

missing required boolean argument `is_outbound`

What it means

record_interaction found no boolean "is_outbound" in the args — the field distinguishing user-sent from received interactions is required and has no default; as_bool() on a missing or non-boolean value triggers this.

Source

Thrown at src/openhuman/memory/tools/people.rs:330

                "person_id": { "type": "string", "description": "Person id (UUID)." },
                "is_outbound": { "type": "boolean", "description": "True if the user sent it (required)." },
                "length": { "type": "integer", "minimum": 0, "description": "Depth proxy (default 0)." }
            },
            "required": ["person_id", "is_outbound"]
        })
    }

    fn permission_level(&self) -> PermissionLevel {
        PermissionLevel::Write
    }

    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
        log::debug!("[tool][people] record_interaction invoked");
        let person_id = parse_person_id(&args)?;
        let is_outbound = args
            .get("is_outbound")
            .and_then(serde_json::Value::as_bool)
            .ok_or_else(|| anyhow::anyhow!("missing required boolean argument `is_outbound`"))?;
        let length = args
            .get("length")
            .and_then(serde_json::Value::as_u64)
            .unwrap_or(0) as u32;
        let interaction = PersonInteraction {
            person_id,
            at: Utc::now().to_rfc3339(),
            is_outbound,
            length,
        };
        let guard = people_guard().await?;
        guard
            .as_people()
            .expect("checked")
            .record_interaction(&interaction)
            .await
            .map_err(|e| anyhow::anyhow!("people_record_interaction: {e}"))?;
        Ok(ToolResult::success(serde_json::to_string(

View on GitHub (pinned to 7491200858)

Solutions

  1. Pass is_outbound as a JSON boolean (true if the user sent it)
  2. Check the field was not serialized as a string "true"
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/memory/tools/people.rs:330 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/9b59b26eb70d4c59. Report an issue: GitHub.