diff --git a/claudetool/patch.go b/claudetool/patch.go
index 419e966..24a22ef 100644
--- a/claudetool/patch.go
+++ b/claudetool/patch.go
@@ -94,18 +94,18 @@
 }
 
 // PatchRun is the entry point for the user_patch tool.
-func PatchRun(ctx context.Context, m json.RawMessage) (string, error) {
+func PatchRun(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
 	var input patchInput
 	if err := json.Unmarshal(m, &input); err != nil {
-		return "", fmt.Errorf("failed to unmarshal user_patch input: %w", err)
+		return nil, fmt.Errorf("failed to unmarshal user_patch input: %w", err)
 	}
 
 	// Validate the input
 	if !filepath.IsAbs(input.Path) {
-		return "", fmt.Errorf("path %q is not absolute", input.Path)
+		return nil, fmt.Errorf("path %q is not absolute", input.Path)
 	}
 	if len(input.Patches) == 0 {
-		return "", fmt.Errorf("no patches provided")
+		return nil, fmt.Errorf("no patches provided")
 	}
 	// TODO: check whether the file is autogenerated, and if so, require a "force" flag to modify it.
 
@@ -118,11 +118,11 @@
 			switch patch.Operation {
 			case "prepend_bof", "append_eof", "overwrite":
 			default:
-				return "", fmt.Errorf("file %q does not exist", input.Path)
+				return nil, fmt.Errorf("file %q does not exist", input.Path)
 			}
 		}
 	case err != nil:
-		return "", fmt.Errorf("failed to read file %q: %w", input.Path, err)
+		return nil, fmt.Errorf("failed to read file %q: %w", input.Path, err)
 	}
 
 	likelyGoFile := strings.HasSuffix(input.Path, ".go")
@@ -151,7 +151,7 @@
 			buf.Replace(0, len(orig), patch.NewText)
 		case "replace":
 			if patch.OldText == "" {
-				return "", fmt.Errorf("patch %d: oldText cannot be empty for %s operation", i, patch.Operation)
+				return nil, fmt.Errorf("patch %d: oldText cannot be empty for %s operation", i, patch.Operation)
 			}
 
 			// Attempt to apply the patch.
@@ -214,7 +214,7 @@
 			patchErr = errors.Join(patchErr, fmt.Errorf("old text not found:\n%s", patch.OldText))
 			continue
 		default:
-			return "", fmt.Errorf("unrecognized operation %q", patch.Operation)
+			return nil, fmt.Errorf("unrecognized operation %q", patch.Operation)
 		}
 	}
 
@@ -224,18 +224,18 @@
 			"patches": input.Patches,
 			"errors":  patchErr,
 		})
-		return "", patchErr
+		return nil, patchErr
 	}
 
 	patched, err := buf.Bytes()
 	if err != nil {
-		return "", err
+		return nil, err
 	}
 	if err := os.MkdirAll(filepath.Dir(input.Path), 0o700); err != nil {
-		return "", fmt.Errorf("failed to create directory %q: %w", filepath.Dir(input.Path), err)
+		return nil, fmt.Errorf("failed to create directory %q: %w", filepath.Dir(input.Path), err)
 	}
 	if err := os.WriteFile(input.Path, patched, 0o600); err != nil {
-		return "", fmt.Errorf("failed to write patched contents to file %q: %w", input.Path, err)
+		return nil, fmt.Errorf("failed to write patched contents to file %q: %w", input.Path, err)
 	}
 
 	response := new(strings.Builder)
@@ -244,7 +244,7 @@
 	if parsed {
 		parseErr := parseGo(patched)
 		if parseErr != nil {
-			return "", fmt.Errorf("after applying all patches, the file no longer parses:\n%w", parseErr)
+			return nil, fmt.Errorf("after applying all patches, the file no longer parses:\n%w", parseErr)
 		}
 	}
 
@@ -253,7 +253,7 @@
 	}
 
 	// TODO: maybe report the patch result to the model, i.e. some/all of the new code after the patches and formatting.
-	return response.String(), nil
+	return llm.TextContent(response.String()), nil
 }
 
 func parseGo(buf []byte) error {
