Skip to main content
What it does: Drives a headless Chromium browser via Playwright — navigate, click, type, screenshot, read pages via accessibility snapshots, manage tabs and isolated profiles, and run JavaScript. Who it’s for: Anyone whose agent needs to interact with sites that don’t yield to a simple web_fetch — single-page apps, sites behind logins, dynamic dashboards, file uploads, or workflows that require multiple steps. For static page content, the lighter web_fetch tool is faster and cheaper.

Browser Actions

The browser tool supports 16 actions, verified against BROWSER_TOOL_ACTIONS in packages/skills/src/builtin/platform/browser-tool-schema.ts:

Page Actions

Take a screenshot of the current page. The image is returned as a message attachment.Screenshots are useful for visual verification — checking how a page looks, confirming form submissions, or capturing error states.
Get a structured representation of the page content using the accessibility tree. This is how agents “read” web pages.Format options:
  • aria — The full accessibility tree with all ARIA roles and properties. Detailed but verbose.
  • ai — A condensed format designed for AI consumption. Shows interactive elements (buttons, links, inputs) with labels and references that can be used with the act action.
The ai format is recommended for most use cases — it gives agents the information they need to interact with the page without overwhelming them with structural details.
Interact with elements on the page. The act action supports 11 different interaction types (called “sub-kinds”), each designed for a specific type of interaction.The act action wraps its interaction parameters inside a request object. See the Interaction Types section below for all 11 sub-kinds and their parameters.
Open a new browser tab and navigate to a URL.The same request guard used by navigate applies before the new tab loads its URL.
Save the current page as a PDF document, returned as a message attachment.Useful for archiving web pages or generating printable versions of online content.
Upload one or more files to a file input element on the page.
Respond to browser dialogs such as JavaScript alerts, confirmation prompts, and input prompts.
Retrieve the browser’s developer console output, including errors, warnings, and log messages.Useful for debugging page issues or monitoring JavaScript errors.

Interaction Types (act sub-kinds)

When using the act action, the kind parameter determines what type of interaction to perform. There are 11 interaction types:

Selecting Elements

Most interaction types require a ref parameter to identify which element to interact with. You can use:
  • CSS selectors — Standard CSS selectors like #login-button, .submit-btn, or input[name="email"]
  • Aria references — References from the snapshot output in ai format, which label interactive elements with short identifiers
The recommended workflow is: take a snapshot in ai format to see the page structure, then use the element references from the snapshot in your act calls via the ref parameter.

Browser Profiles

Profiles create isolated browser contexts with separate cookies, local storage, and session data. This is useful for:
  • Managing multiple accounts on the same website
  • Testing with different user states (logged in vs. logged out)
  • Keeping browsing sessions separate between different tasks
Use the profiles action to create, list, and switch between browser profiles.

Browser runtime options

The Linux installer provisions stock Chrome running headed via Xvfb when --with-browser and --with-xvfb are enabled (both are installer defaults). Use --with-cloakbrowser to opt into the alternative browser runtime. A --without-xvfb install runs Chrome headless; --without-browser skips the browser runtime entirely. No runtime guarantees access to sites with bot detection, authentication challenges, or IP-reputation controls. The install-time flags compose. They’re available in both the bare-metal installer (install.sh) and the Docker image (build args):
Sites may block automated browsers or datacenter networks independently of the browser fingerprint. CloakBrowser does not include a proxy and does not bypass site access controls. Follow each site’s terms and automation policies.

Install examples

Comis probes the configured and supported browser paths at runtime. Confirm the selected binary and launch mode with comis doctor and the daemon logs after installation.

License note

CloakBrowser’s compiled binary has a separate license. Review the current CloakBrowser binary license before using or redistributing it.

Security

The browser includes built-in security protections:
  • HTTP(S) request validation — The requested destination, every HTTP(S) redirect hop, subresources, and page fetches in guarded tabs are checked against localhost, private-network, link-local, reserved, and cloud-metadata address ranges before Chromium continues them.
  • Fail-closed new tabs — Tabs opened with the browser tool are guarded before navigation. A page-created popup whose first request arrives before a page guard exists is blocked; use the browser open action when a workflow needs a new tab.
  • Connected-page service-worker bypass — Each connected page bypasses an existing service worker before request interception is enabled. Chromium does not disable workers for the whole persistent profile, so workers outside a connected page remain outside this page-level control.
  • Unintercepted transport lockdown — Dedicated and shared workers, WebTransport, WebSocketStream, and WebRTC are disabled in guarded page contexts because their traffic cannot be validated by the page request interceptor. New service-worker registrations are rejected. Sites that require these APIs will have reduced functionality.
  • Window WebSocket validation — WebSocket connections created by guarded page scripts receive the same hostname and IP-range checks before Playwright connects to the server. If a document was already loaded when Comis attached its guard, WebSocket remains disabled in that document until the next navigation.
  • Network-isolation boundary — Chromium performs its own DNS resolution after validation, so browser traffic is not connection-level DNS-pinned. A persistent profile can also contain browser-managed background state outside the connected page. These controls are not a host firewall: keep the browser isolated from sensitive internal networks and use web_fetch for static retrieval that does not require browser interaction.
  • Screenshot sanitization — The standard daemon validates screenshot dimensions and format, and resizes or re-encodes captures when required. If the configured sanitizer rejects a capture, the action fails and does not return the original image bytes.
For more details on network security protections, see Security.

End-to-end example: scraping a SPA

A typical multi-step workflow — visit a JavaScript-rendered dashboard, log in, navigate to a data view, and pull a value the agent can act on. The agent strings together navigate, snapshot, act, and screenshot in sequence:
The agent now has the rendered text in a structured snapshot and a visual screenshot, and can post both back to the user via the message tool’s attach action. For sites that emit network calls you want to inspect, the agent can pair the browser with console (to see JS logs) and act kind: evaluate (to run JavaScript like document.querySelector(...).innerText). For high-throughput scraping that does not need rendered JavaScript, prefer web_fetch.

Built-in Tools

All built-in tools including browser

Web Tools

Web search and page fetching tools

Agent Tools Overview

See all available agent tools

Config Reference

Browser and tool configuration options