tinyhumansai/openhuman · error

notify_user: `message` is required and non-empty

Error message

notify_user: `message` is required and non-empty

What it means

Generic error wrapper from create_skill's execute: the skill scaffolding/installation step itself failed after params parsed successfully. The underlying {e} distinguishes the real cause — typically an invalid skill name, an existing skill at the target path, or a filesystem error writing the skill directory.

Source

Thrown at src/openhuman/subconscious/user_thread.rs:122

    }

    fn permission_level(&self) -> PermissionLevel {
        // Outward-facing: surfaces content to the user. Treated as a write
        // so policy/approval can gate it under stricter autonomy tiers.
        PermissionLevel::Write
    }

    fn scope(&self) -> ToolScope {
        ToolScope::AgentOnly
    }

    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
        let message = args
            .get("message")
            .and_then(|v| v.as_str())
            .map(str::trim)
            .filter(|s| !s.is_empty())
            .ok_or_else(|| anyhow::anyhow!("notify_user: `message` is required and non-empty"))?;
        let subject = args.get("subject").and_then(|v| v.as_str());

        let config = crate::openhuman::config::load_config_with_timeout()
            .await
            .map_err(|e| anyhow::anyhow!("config load: {e}"))?;

        notify_user(config.workspace_dir, message, subject);
        Ok(ToolResult::success(
            "Message delivered to the user.".to_string(),
        ))
    }
}

/// All user-facing-thread tools, for registration into the tool registry.
pub fn all_user_thread_tools() -> Vec<Box<dyn Tool>> {
    vec![Box::new(NotifyUserTool)]
}

View on GitHub (pinned to 7491200858)

Solutions

  1. Read the wrapped error {e} for the concrete failure (name collision, invalid name, IO error)
  2. If the skill already exists, choose a different name or update it instead of creating
  3. Check write permissions on the skills directory for the chosen scope
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src/openhuman/subconscious/user_thread.rs:122 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/5412bc4876489b14. Report an issue: GitHub.