diff --git a/crates/zclaw-runtime/src/tool/builtin/path_validator.rs b/crates/zclaw-runtime/src/tool/builtin/path_validator.rs index 35f809f..80e93fe 100644 --- a/crates/zclaw-runtime/src/tool/builtin/path_validator.rs +++ b/crates/zclaw-runtime/src/tool/builtin/path_validator.rs @@ -230,7 +230,14 @@ impl PathValidator { fn resolve_and_validate(&self, path: &str) -> Result { // Expand tilde let expanded = expand_tilde(path); - let path_buf = PathBuf::from(&expanded); + let mut path_buf = PathBuf::from(&expanded); + + // If relative path and workspace is configured, resolve against workspace + if path_buf.is_relative() { + if let Some(ref workspace) = self.workspace_root { + path_buf = workspace.join(&path_buf); + } + } // Check for path traversal self.check_path_traversal(&path_buf)?;