diff --git a/claudetool/bash.go b/claudetool/bash.go
index 59b8e3c..741f1e9 100644
--- a/claudetool/bash.go
+++ b/claudetool/bash.go
@@ -141,22 +141,22 @@
 	}
 }
 
-func (b *BashTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (b *BashTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	var req bashInput
 	if err := json.Unmarshal(m, &req); err != nil {
-		return nil, fmt.Errorf("failed to unmarshal bash command input: %w", err)
+		return llm.ErrorfToolOut("failed to unmarshal bash command input: %w", err)
 	}
 
 	// do a quick permissions check (NOT a security barrier)
 	err := bashkit.Check(req.Command)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 
 	// Custom permission callback if set
 	if b.CheckPermission != nil {
 		if err := b.CheckPermission(req.Command); err != nil {
-			return nil, err
+			return llm.ErrorToolOut(err)
 		}
 	}
 
@@ -174,23 +174,23 @@
 	if req.Background {
 		result, err := executeBackgroundBash(ctx, req, timeout)
 		if err != nil {
-			return nil, err
+			return llm.ErrorToolOut(err)
 		}
 		// Marshal the result to JSON
 		// TODO: emit XML(-ish) instead?
 		output, err := json.Marshal(result)
 		if err != nil {
-			return nil, fmt.Errorf("failed to marshal background result: %w", err)
+			return llm.ErrorfToolOut("failed to marshal background result: %w", err)
 		}
-		return llm.TextContent(string(output)), nil
+		return llm.ToolOut{LLMContent: llm.TextContent(string(output))}
 	}
 
 	// For foreground commands, use executeBash
 	out, execErr := executeBash(ctx, req, timeout)
 	if execErr != nil {
-		return nil, execErr
+		return llm.ErrorToolOut(execErr)
 	}
-	return llm.TextContent(out), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(out)}
 }
 
 const maxBashOutputLength = 131072
@@ -435,7 +435,7 @@
   },
   "required": ["results"]
 }`),
-		Run: func(ctx context.Context, input json.RawMessage) ([]llm.Content, error) {
+		Run: func(ctx context.Context, input json.RawMessage) llm.ToolOut {
 			type InstallResult struct {
 				CommandName string `json:"command_name"`
 				Installed   bool   `json:"installed"`
@@ -452,7 +452,7 @@
 				slog.InfoContext(ctx, "auto-tool installation complete", "results", results)
 			}
 			done = true
-			return llm.TextContent(""), nil
+			return llm.ToolOut{LLMContent: llm.TextContent("")}
 		},
 	}
 
