Repository navigation
watching the agent work
There is a tool whose output is not for the model. browser_watch returns the
browser window the way somebody sitting at the machine would see it: the tab
strip, the address bar, the page, and the pointer where it currently is.
Measured on 2026-09-17: 0.36 seconds, 37,236 bytes for one look.
A page screenshot is the viewport. The live view is the application. The difference carries four things you cannot otherwise see:
- The pointer. Where the mouse actually is, which is the only direct evidence for a coordinate click landing where you meant. When a click by position goes wrong, this is the artifact that shows why.
- The tab strip. Whether a click opened a second tab, which is a common and otherwise invisible reason the agent seems to be acting on the wrong page.
- The address bar. The URL as the browser has it, including a redirect the page body gives no sign of.
- The window itself, including anything drawn over the page by the browser rather than by the site.
The cost says so. At 37 KB a look it is in the same class as a screenshot, and a model that takes one after every action spends its context on pictures of a tab strip. The reading page has the arithmetic: text, HTML, snapshot or screenshot.
The other reason is that the model already has better instruments for its own questions. What is on the page is the text read, at a hundredth of the size. What it can click is the snapshot. The live view answers "what is going on", which is a question a person asks.
So the sensible pattern is: the agent works, you look when something seems wrong. One look at the moment of confusion is worth ten taken as a habit.
"The click succeeded and nothing happened." Look. Either the pointer is not where you expected, which is a coordinate problem, or there is an overlay across the page that the text read shows nothing about. Both are visible in one frame. The full list of causes is in why did the AI agent click the wrong thing.
"The agent is reading the wrong page." Look at the tab strip. A link with a target opened a new tab, the agent is still driving the old one, and every read it takes is correct and about the wrong document.
A capture that stops. A headed window that gets minimised stops producing frames. The tool starts the capture again on the next look rather than handing back a stale picture, and if the window cannot be captured it says so instead of answering with an old one. That is the right behaviour and it is worth knowing it is happening.
It is a picture. Text in it is pixels, so anything you want to quote, diff or search should come from a text read instead. For a record you intend to keep, dated screenshots of a page as evidence makes the case that the image is the least useful artifact in the capture.
It shows your window. Whatever is in that browser is in the frame, including a logged-in state, an account name, or another tab's title. Before a frame from it goes anywhere, look at it.
Headless is the default and the live view still works: there is a window being composited, it is simply not on your screen.
Running headed is the other way to watch, and it is the better one when a human step is coming: a login, a code from an app, an upload the agent cannot perform. Then the point is not observation, it is that you can reach in and do the step yourself.
How do I watch an AI agent browse? browser_watch returns the whole window,
pointer and tab strip included. Measured at 0.36 s and 37 KB per look.
How is it different from a screenshot? A screenshot is the page. This is the application around it: pointer, tabs, address bar, browser chrome.
Should the model call it every turn? No. At 37 KB it is screenshot-class cost, and the model has cheaper instruments for its own questions. Use it when something seems wrong.
Does it work headless? Yes. There is still a window being composited, just not on your screen.
Why did the view stop updating? A minimised headed window stops the capture. It is restarted on the next look, and if the window cannot be captured the tool says so rather than showing you an old frame.
See also: browser problem or model problem, where looking at the window is one of the fastest ways to tell the two apart, and clicking by selector or by coordinates, since the pointer's position is the evidence a coordinate click needs.
- Measured 2026-09-17 through this project's MCP server over stdio: one
browser_watchcall returned an image payload of 37,236 bytes in 0.36 s. The capture behaviour on a minimised window, and the refusal to answer with a stale frame, are the tool's documented behaviour in this project's own MCP server page.
The one-line version: it is the only tool here whose audience is you. Everything about how to use it follows from that.
- OpenAI Operator alternatives
- Open-source Operator-style agents
- Is OpenAI Operator still available?
- OpenAI Operator vs Claude computer use
- browser-use alternatives
- Choosing an AI browser agent
- Open-source AI browser agents
- Open-source computer-use agents
- What is an AI web agent?
- AI browser agents vs traditional scraping
- Cloud browser infrastructure for AI agents, explained
- Browserbase alternatives
- Firecrawl vs an AI browser agent
- Skyvern alternatives
- Stagehand vs browser-use
- Project Mariner is gone: what replaced it
- Manus alternatives
- Gemini computer use vs Claude computer use
- A stealth browser MCP, reviewed honestly by its own wiki
- AI browser vs AI browser agent: which one do you want?
- AI browser agent vs RPA: which one fits the job
- AI browser agent vs n8n, Zapier and Make
- Vercel agent-browser alternatives, compared honestly
- What is an agentic browser? Definition and the two kinds
- Open-source agentic browsers: the three layers, compared
- Choosing an MCP server for browser automation: four axes
- Stealth MCP servers compared: Camoufox, nodriver, Patchright
- Playwright MCP alternatives, and the three you don't need
- Autonomous browser agents: the four rungs of autonomy
- What is actually free in the AI browser agent stack
- browser-use on GitHub: what the repo actually gives you
- Playwright MCP vs Chrome DevTools MCP: different jobs
- How to choose among MCP servers: a map by category
- Which MCP servers are worth adding to Claude Code
- MCP on GitHub: finding servers and judging them fast
- MCP vs an API: the decision, and what the wrapper costs
- MCP alternatives: when the protocol is the wrong shape
- Why does my AI agent get blocked?
- The timing signal AI agents give off
- Agent retry loops trip rate limits, not fingerprints
- Claude computer use detected as a bot
- browser-use getting blocked: what you can and cannot change
- Playwright MCP session blocked: four causes, four fixes
- Playwright MCP and captchas: what actually gets you past
- Cloudflare and a browser MCP server: what is being read
- Can an AI agent solve a captcha? The honest answer
- Getting an AI agent to fill out forms
- The best model for an MCP browser agent, and what it really costs
- Browser problem or model problem?
- How to use a Playwright MCP server with Claude Code
- Extracting data to a CSV with an AI agent
- Monitoring a page for changes with an AI agent
- How to let Claude Desktop control a browser
- How to add a browser to Cursor as an MCP server
- Using an AI agent to hunt for apartments
- Getting website data into Google Sheets with an AI agent
- Using an AI agent to download invoices from portals
- AI agents for web research
- Using an AI agent to test your own website
- How to add a browser to Cline as an MCP server
- Posting to social media with an AI agent
- Posting to Facebook with an AI agent
- Posting to Instagram with an AI agent
- Posting to X with an AI agent
- Automating LinkedIn posts: read this first
- Appointment bots: what they are and what an agent can legitimately do
- Track prices across sites with an AI agent
- Build a lead list with an AI browser agent
- Run an AI browser agent on a schedule
- AI browser agent with a local LLM: what changes
- Should you log your AI agent into your accounts?
- How to write a task an AI browser agent can follow
- Move data between two web apps with an AI agent
- The MCP server
- How the tools are shaped, and why
- Playwright MCP vs the Playwright CLI: which fits when
- Playwright MCP: browser is already in use, and the fix
- Playwright MCP best practices: four decisions that matter
- Playwright MCP with a proxy, and the three leaks it leaves
- A browser MCP server in GitHub Copilot: setup and limits
- Using a browser MCP server for web scraping: the pattern
- Which LLM for browser automation: the four properties
- How to build a browser agent, and what to take instead
- Getting an AI agent to log into a website: three routes
- MCP tools, resources and prompts: who controls each
- How many MCP tools is too many? The context arithmetic
- How to build an MCP server: the decisions, not the scaffold
- Local or remote MCP server: what changes, and what does not
- Writing an MCP client in Python: the thirty-line version
- Self-hosted AI agent: what one actually costs to run
- How long an AI browser agent takes per step, measured
- Text, HTML, snapshot or screenshot: what the agent should read
- Giving an AI browser agent a stopping condition
- Keeping an AI browser agent out of destructive actions
- Why did the AI agent click the wrong thing
- When the page changes under the AI agent
- Running one AI agent task across a list of sites
- Seeing a page as it appears in another country
- Getting data out of a dashboard with no export button
- Two browsers in one session: main and support
- Finding the dead links on a site with an AI agent
- Filling a CRM record from a company's website
- One form submission per spreadsheet row, with an AI agent
- Dated screenshots of a page as evidence
- Checking order and delivery status with an AI agent
- Reading a PDF that opens inside the browser
- Summarising a long page or thread with an AI agent
- Collecting every image on a page with its caption
- Collecting event and course listings with an AI agent
- Cancelling a subscription with an AI agent
- What an AI agent can and cannot do inside an iframe
- Shadow DOM and an AI agent: you can click it, you cannot read it
- How to add a browser to Codex as an MCP server
- What a page snapshot costs, per control
- How to let Gemini CLI use a browser
- Native selects and the ones that only look like selects
- Clicking by selector or by coordinates
- How long the agent waits before it gives up
- What a second browser costs
- Uploading a file with an AI agent, and why this one cannot
- Watching the agent work, and when it is worth it
- When not to use an AI browser agent
- Agent or script: deciding once instead of every time
- Using the keyboard instead of the mouse
- Secrets in an agent task: where they end up
- What an agent run should log
- Deduplicating what an AI agent collects
- Normalising values across sites
- Validating an AI agent's output
- Reading a table with an AI agent
- Driving a site's own search and filters
- The task works headed and fails headless
- How to let the AdaL CLI use a browser