Agents + bash
diff --git a/tools/file.go b/tools/file.go
index 815c2eb..405d046 100644
--- a/tools/file.go
+++ b/tools/file.go
@@ -2,6 +2,7 @@
 
 import (
 	"os"
+	"path/filepath"
 )
 
 type FileReadArgs struct {
@@ -24,7 +25,27 @@
 type FileWriteResult struct {
 }
 
+func sanitizePath(p string) (string, error) {
+	cwd, err := os.Getwd()
+	if err != nil {
+		return "", err
+	}
+	p = filepath.Join(cwd, p)
+	p, err = filepath.Rel(p, cwd)
+	if err != nil {
+		return "", err
+	}
+	return p, nil
+}
+
 func FileWrite(args FileWriteArgs) (string, error) {
+	p, err := sanitizePath(args.Path)
+	if err != nil {
+		return "", err
+	}
+	if os.MkdirAll(filepath.Dir(p), 0666) != nil {
+		return "", nil
+	}
 	if err := os.WriteFile(args.Path, []byte(args.Contents), 0666); err != nil {
 		return "error", err
 	} else {