tinyhumansai/openhuman · error · anyhow::Error

read_workflow_run_log: run `{run_id}` not found

Error message

read_workflow_run_log: run `{run_id}` not found

What it means

Raised by the read_workflow_run_log skill tool when scan_runs over the workspace finds no run matching the given run_id that also belongs to the active profile and passes the skill allowlist (profile-local or allowed). It means the run log either never existed, was created under a different profile, or belongs to a skill not permitted in this session.

Source

Thrown at src/openhuman/skills/tools.rs:521

            .unwrap_or(0);
        let max_bytes = args
            .get("max_bytes")
            .and_then(serde_json::Value::as_u64)
            .map(|v| v as usize)
            .unwrap_or(65536);
        let profile_local = profile_local_skill_ids(self.profile_skills_root.as_deref());
        let run = scan_runs(&self.workspace_dir, None, usize::MAX)
            .into_iter()
            .find(|run| {
                run.run_id == run_id
                    && run.profile_id.as_deref() == self.active_profile_id.as_deref()
                    && skill_allowed_including_profile(
                        &self.skill_allowlist,
                        &profile_local,
                        &run.workflow_id,
                    )
            })
            .ok_or_else(|| anyhow::anyhow!("read_workflow_run_log: run `{run_id}` not found"))?;
        let path = PathBuf::from(run.log_path);
        let slice = read_run_log_slice(&path, offset, max_bytes)
            .map_err(|e| anyhow::anyhow!("read_workflow_run_log: {e}"))?;
        Ok(ToolResult::success(serde_json::to_string(&slice)?))
    }

    fn is_concurrency_safe(&self, _args: &serde_json::Value) -> bool {
        true
    }
}

/// Scaffold a new user skill. **Writes to disk** — default-OFF.
pub struct WorkflowCreateTool {
    workspace_dir: PathBuf,
}

impl WorkflowCreateTool {
    pub fn new(config: Arc<Config>) -> Self {

View on GitHub (pinned to 7491200858)

Solutions

  1. Verify the run_id is copied exactly from the workflow run output (e.g. run_workflow / await_workflow results)
  2. Confirm the run belongs to the currently active profile; runs from other profiles are filtered out
  3. Check that the skill that produced the run is allowed by the skill allowlist or is profile-local
  4. List runs (workflow run listing) to confirm the run exists and note its profile_id
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/skills/tools.rs:521 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/79ec466defe2b94a. Report an issue: GitHub.