tinyhumansai/openhuman · error · anyhow::Error

people unavailable: {e}

Error message

people unavailable: {e}

What it means

Shared guard helper for the people agent tools: people_guard() acquires the active memory guard and checks it serves the people family; any failure (no active memory guard, driver not bound, or family unsupported) is re-wrapped as `people unavailable: {e}`. Fires on every people_* tool call when the memory driver lacks people capability, before any operation runs.

Source

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

use async_trait::async_trait;
use chrono::Utc;
use serde_json::json;

use crate::openhuman::memory::api::provider::{MemoryProvider, PersonHandle, PersonInteraction};
use crate::openhuman::memory::guard::MemoryGuard;
use crate::openhuman::memory::ops::guard::active_memory_guard;
use crate::openhuman::memory::people::rpc;
use crate::openhuman::tools::traits::{PermissionLevel, Tool, ToolResult};

/// The guarded driver for this call, checked to serve the people family.
///
/// Returns the guard rather than the family handle because the accessor
/// borrows from it.
async fn people_guard() -> anyhow::Result<std::sync::Arc<MemoryGuard>> {
    let guard = active_memory_guard()
        .await
        .map_err(|e| anyhow::anyhow!("people unavailable: {e}"))?;
    if guard.as_people().is_none() {
        return Err(anyhow::anyhow!(
            "people unavailable: memory driver does not support the people family"
        ));
    }
    Ok(guard)
}

fn read_required_str(args: &serde_json::Value, key: &str) -> anyhow::Result<String> {
    args.get(key)
        .and_then(serde_json::Value::as_str)
        .map(str::trim)
        .filter(|s| !s.is_empty())
        .map(str::to_string)
        .ok_or_else(|| anyhow::anyhow!("missing required string argument `{key}`"))
}

/// Read `person_id` as the opaque token the contract defines it to be.

View on GitHub (pinned to 7491200858)

Solutions

  1. Retry after the memory subsystem binds its driver
  2. Check the chained binding error in logs
  3. Confirm a people-capable memory backend is configured
Defensive patterns

Strategy: retry

When it happens

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