claudetool: replace timeout parameter with slow_ok boolean

Empirically, the agent doesn't set timeouts long enough,
and doesn't retry on failure.

Give it only one decision to make: Is this maybe a slow command?

If, horror of horrors, your project can't accomplish tasks within the
default timeouts, there's a new command line flag to adjust them.

Co-Authored-By: sketch <hello@sketch.dev>
Change-ID: sc26e3516f28c22d4k
diff --git a/loop/agent.go b/loop/agent.go
index 82c3268..7a8fb8c 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -1060,6 +1060,8 @@
 	SkabandClient *skabandclient.SkabandClient
 	// MCP server configurations
 	MCPServers []string
+	// Timeout configuration for bash tool
+	BashTimeouts *claudetool.Timeouts
 }
 
 // NewAgent creates a new Agent.
@@ -1294,7 +1296,11 @@
 		return nil
 	}
 
-	bashTool := claudetool.NewBashTool(bashPermissionCheck, claudetool.EnableBashToolJITInstall)
+	bashTool := &claudetool.BashTool{
+		CheckPermission:  bashPermissionCheck,
+		EnableJITInstall: claudetool.EnableBashToolJITInstall,
+		Timeouts:         a.config.BashTimeouts,
+	}
 
 	// Register all tools with the conversation
 	// When adding, removing, or modifying tools here, double-check that the termui tool display
@@ -1314,7 +1320,7 @@
 	browserTools = bTools
 
 	convo.Tools = []*llm.Tool{
-		bashTool, claudetool.Keyword, claudetool.Patch(a.patchCallback),
+		bashTool.Tool(), claudetool.Keyword, claudetool.Patch(a.patchCallback),
 		claudetool.Think, claudetool.TodoRead, claudetool.TodoWrite, a.setSlugTool(), a.commitMessageStyleTool(), makeDoneTool(a.codereview),
 		a.codereview.Tool(), claudetool.AboutSketch,
 	}