browse: set default viewport to 1280x720 (16:9 widescreen)

Improve browser screenshot quality by setting a modern default viewport
size during browser initialization. This replaces the previous system-
dependent default with a consistent 1280x720 resolution that provides:

- Better readability and content coverage in screenshots
- Modern 16:9 aspect ratio matching typical displays
- Consistent testing environment across all users

Implementation:
- Add EmulateViewport call during browser startup in browse.go
- Set viewport immediately after browser initialization
- Add comprehensive test (TestDefaultViewportSize) to verify functionality

The test confirms the viewport is correctly set to 1280x720 on browser
startup and validates the JavaScript window dimensions match expectations.

This addresses screenshot quality issues with small default viewport sizes
and provides a better default experience for browser automation.

Co-Authored-By: sketch <hello@sketch.dev>
Change-ID: s98815cfd1eaca88dk
diff --git a/claudetool/browse/browse.go b/claudetool/browse/browse.go
index fdc83c6..9c2cca1 100644
--- a/claudetool/browse/browse.go
+++ b/claudetool/browse/browse.go
@@ -92,6 +92,13 @@
 			b.initErr = fmt.Errorf("failed to start browser (please apt get chromium or equivalent): %w", err)
 			return
 		}
+
+		// Set default viewport size to 1280x720 (16:9 widescreen)
+		if err := chromedp.Run(browserCtx, chromedp.EmulateViewport(1280, 720)); err != nil {
+			b.initErr = fmt.Errorf("failed to set default viewport: %w", err)
+			return
+		}
+
 		b.initialized = true
 	})
 
diff --git a/claudetool/browse/browse_test.go b/claudetool/browse/browse_test.go
index f82c35e..35d7911 100644
--- a/claudetool/browse/browse_test.go
+++ b/claudetool/browse/browse_test.go
@@ -305,6 +305,73 @@
 	}
 }
 
+// TestDefaultViewportSize verifies that the browser starts with the correct default viewport size
+func TestDefaultViewportSize(t *testing.T) {
+	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+	defer cancel()
+
+	// Skip if CI or headless testing environment
+	if os.Getenv("CI") != "" || os.Getenv("HEADLESS_TEST") != "" {
+		t.Skip("Skipping browser test in CI/headless environment")
+	}
+
+	tools := NewBrowseTools(ctx)
+	defer tools.Close()
+
+	// Initialize browser (which should set default viewport to 1280x720)
+	err := tools.Initialize()
+	if err != nil {
+		if strings.Contains(err.Error(), "browser automation not available") {
+			t.Skip("Browser automation not available in this environment")
+		} else {
+			t.Fatalf("Failed to initialize browser: %v", err)
+		}
+	}
+
+	// Navigate to a simple page to ensure the browser is ready
+	navInput := json.RawMessage(`{"url": "about:blank"}`)
+	content, err := tools.NewNavigateTool().Run(ctx, navInput)
+	if err != nil {
+		t.Fatalf("Navigation error: %v", err)
+	}
+	if !strings.Contains(content[0].Text, "success") {
+		t.Fatalf("Expected success in navigation response, got: %s", content[0].Text)
+	}
+
+	// Check default viewport dimensions via JavaScript
+	evalInput := json.RawMessage(`{"expression": "({width: window.innerWidth, height: window.innerHeight})"}`)
+	content, err = tools.NewEvalTool().Run(ctx, evalInput)
+	if err != nil {
+		t.Fatalf("Evaluation error: %v", err)
+	}
+
+	// Parse the result to verify dimensions
+	var response struct {
+		Result struct {
+			Width  float64 `json:"width"`
+			Height float64 `json:"height"`
+		} `json:"result"`
+	}
+
+	if err := json.Unmarshal([]byte(content[0].Text), &response); err != nil {
+		t.Fatalf("Failed to parse evaluation response: %v", err)
+	}
+
+	// Verify the default viewport size is 1280x720
+	expectedWidth := 1280.0
+	expectedHeight := 720.0
+
+	if response.Result.Width != expectedWidth {
+		t.Errorf("Expected default width %v, got %v", expectedWidth, response.Result.Width)
+	}
+
+	if response.Result.Height != expectedHeight {
+		t.Errorf("Expected default height %v, got %v", expectedHeight, response.Result.Height)
+	}
+
+	t.Logf("✅ Default viewport size verified: %vx%v", response.Result.Width, response.Result.Height)
+}
+
 // TestResizeTool tests the browser resize functionality
 func TestResizeTool(t *testing.T) {
 	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)