tinyhumansai/openhuman · error

'section_title' is required for 'replace_section' action

Error message

'section_title' is required for 'replace_section' action

What it means

The 'replace_section' action rewrites one titled section of MEMORY.md/SKILL.md, so it needs 'section_title' to locate the heading. This fires during argument validation after the write locks are acquired but before the file is read, when action=replace_section was given without a section_title string.

Source

Thrown at src/openhuman/tools/impl/filesystem/update_memory_md.rs:285

        let lock = workspace_write_lock(&workspace_dir);
        let _guard = lock.lock().await;
        // Also take a cross-process advisory lock so cron subprocesses (which
        // don't share the in-process mutex above) can't clobber the same file
        // mid-RMW. Held across read + atomic write; released on drop.
        let _file_lock = acquire_cross_process_write_lock(&workspace_dir).await?;
        tracing::debug!(
            workspace = %workspace_dir.display(),
            "[update_memory_md] acquired per-workspace write lock (in-process + cross-process flock)"
        );

        match action {
            "append" => self.do_append(&target_path, file, content).await,
            "replace_section" => {
                let section_title = args
                    .get("section_title")
                    .and_then(|v| v.as_str())
                    .ok_or_else(|| {
                        anyhow::anyhow!("'section_title' is required for 'replace_section' action")
                    })?;
                self.do_replace_section(&target_path, file, section_title, content)
                    .await
            }
            other => Ok(ToolResult::error(format!(
                "Unknown action '{other}'. Use 'append' or 'replace_section'."
            ))),
        }
    }
}

impl UpdateMemoryMdTool {
    /// Append `content` to the end of `path`, creating the file if it does not exist.
    async fn do_append(
        &self,
        path: &std::path::Path,
        file: &str,
        content: &str,

View on GitHub (pinned to 7491200858)

Solutions

  1. Add "section_title" matching the markdown heading text of the section to replace
  2. Or switch to the append action if appending rather than replacing is intended
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/tools/impl/filesystem/update_memory_md.rs:285 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/0331a8ccabecc013. Report an issue: GitHub.