diff --git a/claudetool/bash_test.go b/claudetool/bash_test.go
index 30e7071..f39114e 100644
--- a/claudetool/bash_test.go
+++ b/claudetool/bash_test.go
@@ -359,71 +359,6 @@
 		os.Remove(bgResult.StderrFile)
 		os.Remove(filepath.Dir(bgResult.StdoutFile))
 	})
-
-	// Skip timeout test for now since it's flaky
-	// The functionality is separately tested in TestExecuteBash
-	t.Run("Background Command Timeout", func(t *testing.T) {
-		// This test is skipped because it was flaky - we test timeout functionality in TestExecuteBash
-		// and we already tested background execution in other tests
-		t.Skip("Skipping timeout test due to flakiness. Timeout functionality is tested in TestExecuteBash.")
-
-		// Start a command with a short timeout
-		inputObj := struct {
-			Command    string `json:"command"`
-			Background bool   `json:"background"`
-			Timeout    string `json:"timeout"`
-		}{
-			Command:    "echo 'Starting' && sleep 5 && echo 'Never reached'",
-			Background: true,
-			Timeout:    "100ms",
-		}
-		inputJSON, err := json.Marshal(inputObj)
-		if err != nil {
-			t.Fatalf("Failed to marshal input: %v", err)
-		}
-
-		// Start the command
-		result, err := BashRun(context.Background(), inputJSON)
-		if err != nil {
-			t.Fatalf("Unexpected error: %v", err)
-		}
-
-		// Parse the returned JSON
-		var bgResult BackgroundResult
-		if err := json.Unmarshal([]byte(result), &bgResult); err != nil {
-			t.Fatalf("Failed to unmarshal background result: %v", err)
-		}
-
-		// Wait for the command output to be written
-		waitForFile(t, bgResult.StdoutFile)
-
-		// Wait a bit for the timeout to occur
-		waitForProcessDeath(t, bgResult.PID)
-
-		// Verify the process was killed
-		process, _ := os.FindProcess(bgResult.PID)
-		err = process.Signal(syscall.Signal(0))
-		if err == nil {
-			// Process still exists, which is unexpected
-			t.Error("Process was not killed by timeout")
-			// Forcibly kill it for cleanup
-			process.Kill()
-		}
-
-		// Check that the process didn't complete normally (didn't print the final message)
-		stdoutContent, err := os.ReadFile(bgResult.StdoutFile)
-		if err != nil {
-			t.Fatalf("Failed to read stdout file: %v", err)
-		}
-		if strings.Contains(string(stdoutContent), "Never reached") {
-			t.Errorf("Command was not terminated by timeout as expected")
-		}
-
-		// Clean up
-		os.Remove(bgResult.StdoutFile)
-		os.Remove(bgResult.StderrFile)
-		os.Remove(filepath.Dir(bgResult.StdoutFile))
-	})
 }
 
 func TestBashTimeout(t *testing.T) {
