Skip to content

Browser Control

Tools for managing the Claudezilla browser window and tabs. All tabs live in a shared pool (max 12) across Claude agents, with tab ownership enforced per agent.

Open a URL in the shared Claudezilla browser. Creates a new tab in the shared 12-tab pool. When the limit is reached, returns a POOL_FULL error. Each tab tracks its creator for ownership enforcement.

ParameterTypeDefaultDescription
urlstringabout:blankURL to open in a new tab
privateboolean(inherits)Request private (incognito) or non-private window. Only takes effect when creating a new window. Omit to use the existing window’s mode.
timeoutnumber150000Request timeout in ms (5000-300000)
// Open a webpage in the shared window
const result = await firefox_create_window({ url: "https://example.com" });
// Returns: {
// windowId, tabId, ownerId, tabCount, maxTabs,
// isPrivate, privateFallback, modeWarning, isNewWindow
// }
// Explicitly request a non-private window (useful for sites needing login)
await firefox_create_window({ url: "https://x.com", private: false });
  • Returns POOL_FULL if 12 tabs are already open. Use the mercy system to request space.
  • You own every tab you create. Only you can close or navigate your tabs.
  • Auto-fallback on private mode failure — If private: true is requested but Firefox’s incognito permission isn’t granted, the call automatically falls back to a non-private window instead of hard-failing. The response then carries privateFallback: true and a human-readable modeWarning so the agent can detect the change. Check privateWindowsAvailable in the firefox_activate response if you need to know capability upfront.
  • If the existing shared window’s mode conflicts with an explicit private request, the call returns a structured MODE_MISMATCH error instead of silently producing the wrong mode.

Navigate an existing tab to a new URL. Ownership is enforced when a tabId is provided.

ParameterTypeDefaultDescription
urlstringrequiredThe URL to navigate to
tabIdnumberactive tabTarget tab ID (ownership enforced)
timeoutnumber150000Request timeout in ms (5000-300000)
// Navigate a specific tab
await firefox_navigate({ url: "https://example.com/page2", tabId: 42 });

List all tabs in the Claudezilla pool with URLs, titles, tab IDs, and owner IDs.

ParameterTypeDefaultDescription
timeoutnumber150000Request timeout in ms (5000-300000)
const tabs = await firefox_get_tabs();
// Returns array: [{ tabId, url, title, ownerId }, ...]

Close a specific tab by ID. You can only close tabs you own.

ParameterTypeDefaultDescription
tabIdnumberrequiredTab ID to close (must be your tab)
timeoutnumber150000Request timeout in ms (5000-300000)
await firefox_close_tab({ tabId: 42 });
  • Returns an OWNERSHIP error if you try to close another agent’s tab.
  • Use firefox_get_tabs to check ownership before closing.

Close the entire Claudezilla window and all tabs.

ParameterTypeDefaultDescription
timeoutnumber150000Request timeout in ms (5000-300000)

Resize and/or reposition the browser window.

ParameterTypeDefaultDescription
windowIdnumbercurrent windowWindow ID to resize
widthnumber—New window width in pixels
heightnumber—New window height in pixels
leftnumber—Window X position from left edge
topnumber—Window Y position from top edge
timeoutnumber150000Request timeout in ms (5000-300000)
// Resize to 1280x800 and position at top-left
await firefox_resize_window({ width: 1280, height: 800, left: 0, top: 0 });

Set the browser viewport to a device preset for responsive testing, or specify custom dimensions.

ParameterTypeDefaultDescription
windowIdnumbercurrent windowTarget window ID
devicestring—Device preset (see below)
widthnumber—Custom viewport width (use instead of device)
heightnumber—Custom viewport height (use instead of device)
timeoutnumber150000Request timeout in ms (5000-300000)

iphone-se, iphone-14, iphone-14-pro-max, pixel-7, galaxy-s23, ipad-mini, ipad-pro-11, ipad-pro-12, laptop, desktop

// Test mobile layout
await firefox_set_viewport({ device: "iphone-14" });
// Custom dimensions
await firefox_set_viewport({ width: 768, height: 1024 });