Your coding agent does the whole job in one go.

Most browser tools make your agent stop after every click, read the page, and ask the model what to do next. With Tilda, Claude Code, OpenCode, and Grok hand over the whole job at once. It runs in the browser you’re already signed in to and in your Mac apps, and only the answer comes back.

Download for MacSee examplesFree. macOS 14 or later, Apple silicon
Claude Code → one scriptRunning
// Your signed-in browser, in a tab group of the agent’s ownconst browser = await agent.browsers.getDefault();const context = await browser.newContext({ title: "Plan check" });const page = await context.newPage();await page.goto("https://dashboard.example.com/billing");​// Every plan in one call: no round trip per clickconst wrong = [];for (const plan of ["Starter", "Team", "Business"]) {  await page.getByRole("button", { name: `Choose ${plan}` }).click();  const total = await page.getByTestId("total").innerText();  if (!/^\$\d/.test(total)) wrong.push({ plan, total });}​// Only this goes back to the modelwrong;

Back to the model

nothing yet: the program is still running

Back to the model: the whole result

[{ plan: "Business", total: "$NaN / month" }]

Claude Code hands over the whole job at once. It chooses each plan in your signed-in dashboard and checks the total. The pages stay on your Mac; the model reads one line and finds the bug.
Works with
  • ClaudeClaude Code
  • OpenCodeOpenCode
  • GrokGrok

Why one go beats one click at a time

The job from the top of this page, done both ways.

A tool call per action

The model decides, calls, and reads the reply, seven times.

ModelBrowser
navigate /billing
result
click “Choose Starter”
result
read total
“$12 / month”
click “Choose Team”
result
read total
“$49 / month”
click “Choose Business”
result
read total
“$NaN / month”
What enters the model’s context7 model turns

One program in Tilda

The loop runs on your Mac; the model reads only the answer.

ModelTildaBrowser
one script

Seven actions and reads, no model turn between them

[{ plan: “Business”, … }]
What enters the model’s context1 model turn

No round trip for every click

The whole job runs in one go on your Mac: every click, wait, and check. Your agent isn’t waiting on the model between steps.

Only the answer comes back

Pages and data stay on your Mac, so your agent’s context holds the result, not every page it visited. It stays focused on your code.

Your real browser, signed in

It works in the Chrome, Brave, Edge, Opera, or Vivaldi you already use, with your logins, and in your Mac apps too.

Several agents at once

Each agent gets its own tabs, and Tilda keeps agents out of each other’s way.

What the research says

The approach OpenAI recommends
OpenAI’s computer-use guide recommends that its newest model, GPT-6 Astra, write code to drive the browser instead of clicking step by step, so one call can do many actions. Codex works this way too. Tilda gives Claude Code, OpenCode, and Grok the same way of working.OpenAI: Computer use
Fewer round trips
On OSWorld 2.0, letting Claude Opus 4.8 take several actions per turn cut its steps per task from about 190 to 103, and raised the tasks it completed from 18.5% to 20.6%. That study batched clicks; it didn’t test Tilda.OSWorld 2.0, Table 3
Less in the model’s context
Anthropic’s engineers measured the same effect for MCP: in their example, an agent that called tools through code used 2,000 tokens where calling them directly used 150,000.Anthropic: Code execution with MCP

What agents write with it

You ask in plain words. The agent writes the program, runs it, and reads back one short answer.

The sites, apps, and results are made up; every call is Tilda’s real API.

You ask

Click through every page in the docs sidebar and tell me which ones break.

Reaches

  • Your browser

Twenty-four pages opened and checked in one call. Locators wait for the page, so there are no sleeps to tune.

Script
browser ??= await agent.browsers.getDefault();context ??= await browser.newContext({ title: "Docs check" });page ??= await context.newPage();await page.goto("http://localhost:3000/docs");​// Click each link as a reader would, then check the page it openedconst sidebar = page.getByRole("navigation", { name: "Docs" });const broken = [];for (const link of await sidebar.getByRole("link").all()) {  const name = await link.innerText();  await link.click();  try {    await expect(page.getByRole("heading", { level: 1 })).toHaveText(name);  } catch {    broken.push({ name, url: page.url() });  }}broken;
To the model[{ name: "Webhooks", url: "http://localhost:3000/docs/webhook" }]

How it works

Tilda is one Mac app. Your agent reaches it through a small plugin; everything else stays on your Mac.

Your coding agent

Claude CodeOpenCodeGrok

Tilda plugin

Runs your agent’s scripts in Node.js and keeps their variables between runs.

agent.browsersagent.computeragent.mcpagent.terminals

Tilda.app· one process on your Mac

Browser linkApp controlMCP servers

Your browser

Chrome, Brave, Edge, Opera, or Vivaldi with the Tilda extension. A tab group per agent.

Your Mac apps

Controls by role and name; input goes to the app’s own window.

Your MCP servers

Linear, Notion, Slack, or any server in Tilda’s settings, signed in once.

  1. 1

    Your agent writes a script

    Tilda gives it one tool that runs JavaScript against your browser and your Mac apps. That one tool replaces a long list of per-click tools.

  2. 2

    Tilda runs it on your Mac

    Variables, open pages, and terminals stay put between scripts. Nothing reaches the model unless the script prints or returns it.

  3. 3

    Only signed agents get in

    Tilda runs scripts only from Claude Code, OpenCode, and Grok, as signed by their makers. Anything else is turned away.

  4. 4

    Your browser, through the Tilda extension

    The extension connects your browser to the Tilda app, and each checks the other is genuine. Each agent’s tabs sit in a tab group named after it.

  5. 5

    Your Mac apps, through Accessibility

    Tilda holds the Accessibility and Screen Recording permissions, so agents don’t need their own. Scripts work an app’s buttons and fields directly, without taking over your screen.

  6. 6

    Your MCP servers, set up once

    Add MCP servers in Tilda’s settings and sign in once. Every agent’s scripts can call them.

How it compares

Claude Code’s built-in browser, and the two browser MCP servers most agents use today.

How the agent acts
TildaWrites a JavaScript program; loops, waits, and checks run in one call
Claude in ChromeA tool call per action, such as navigate, click, or read the page; browser_batch groups several
Playwright MCPA tool call per action on accessibility snapshots; browser_run_code_unsafe runs one Playwright snippet
Chrome DevTools MCPA tool call per action on snapshot element IDs; evaluate_script runs JavaScript in the page
Your signed-in browser
TildaYes: Chrome, Brave, Edge, Opera, or Vivaldi, through the Tilda extension
Claude in ChromeYes: Chrome or Edge, and Brave, Arc, Vivaldi, or Opera, through the Claude extension
Playwright MCPChromium, Firefox, or WebKit in a profile of its own by default; its extension connects to your Chrome or Edge
Chrome DevTools MCPChrome in a profile of its own by default; --autoConnect reaches Chrome 144 or later once you turn on remote debugging
Several agents at once
TildaA tab group per agent; a tab one agent holds is refused to the others
Claude in ChromeA tab group per Claude Code session
Playwright MCPOne browser per profile; parallel clients need --isolated or another profile
Chrome DevTools MCPOne browser per profile; --isolated gives each client a temporary one
Mac apps
TildaAccessibility roles and names; input goes to the app’s window
Claude in ChromeClaude Code’s computer use: screenshots and clicks, research preview, Pro or Max, one session at a time
Playwright MCPNo, web only
Chrome DevTools MCPNo, web only
Other MCP servers
TildaCalled from the same program through agent.mcp
Claude in ChromeSeparate tool calls by the model
Playwright MCPSeparate tool calls by the model
Chrome DevTools MCPSeparate tool calls by the model
Agents
TildaClaude Code, OpenCode, and Grok
Claude in ChromeClaude Code
Playwright MCPAny MCP client
Chrome DevTools MCPAny MCP client
Runs on
TildamacOS 14 or later, Apple silicon
Claude in ChromemacOS, Linux, or Windows (not WSL)
Playwright MCPmacOS, Linux, or Windows
Chrome DevTools MCPmacOS, Linux, or Windows
Price
TildaFree, with no account; not open source
Claude in ChromePro, Max, Team, or Enterprise; off with API keys, Bedrock, Google Cloud, or Foundry
Playwright MCPFree and open source
Chrome DevTools MCPFree and open source, with usage statistics on unless you opt out

From each product’s documentation, September 2026: Claude in Chrome, Claude Code computer use, Playwright MCP, Chrome DevTools MCP.

When another tool fits better

You’re not on a Mac, or you’re in CI
Playwright MCP and Chrome DevTools MCP run on Linux and Windows and launch a browser of their own.
You test in Firefox, Safari, or WebKit
Playwright MCP drives Firefox and WebKit, Safari’s engine. Tilda drives Chromium browsers only.
You’re profiling performance or memory
Chrome DevTools MCP has tools for traces, Lighthouse, and heap snapshots. In Tilda you would send those DevTools Protocol commands yourself, from a CDP session.
You only use Claude Code, on a Claude plan
Claude in Chrome needs only its extension, with no app to install.

Before you install

What Tilda lets an agent do, and where it stops.

Agents act as you
Code an agent runs has your user’s file and network access, and the browser is your real profile. Tilda doesn’t limit which sites an agent opens. Your agent may ask before it runs a script, but nothing inside the script asks again.
Your open tabs are reachable
An agent can attach to a tab you already have open. Once one does, Tilda refuses that tab to every other agent.
Only these agents connect
Tilda admits a process only when an app signed by the makers of Claude Code, OpenCode, and Grok started it, as each maker’s own build is. Anything else, including an agent you build yourself, is refused.
Free, with no account
Tilda is free to use, and it isn’t open source. It runs locally without an account, sends no usage data, and opens no network port for agents or browsers. What an agent sends to its model provider is up to the agent.
You can stop an agent
Your agent can start fresh, which clears its variables and closes every page, tab group, and terminal it opened. On your Mac, pressing Escape or using the app yourself takes it back from the agent at once.
What you need
macOS 14 or later, Apple silicon; a Chromium browser for web tasks; tmux for terminals (brew install tmux).

Set it up

  1. 1

    Install Tilda

    Open the disk image and drag Tilda to Applications.

  2. 2

    Grant access once

    Allow Accessibility and Screen Recording, register your browsers, and add the Tilda extension.

  3. 3

    Connect your agent

    In Tilda, choose Connect next to Claude Code, OpenCode, or Grok. Then ask your agent to check something in the browser.

Download for MacFree. macOS 14 or later, Apple silicon