An agent that drives a desktop or a browser is the most general tool we have and the most expensive, slowest and least safe way to do almost anything that has an API. This course takes the loop apart: what the model sees, what a step costs at October 2026 prices, what the benchmarks do and do not say, where the agent should run, how it should log in, how sites are starting to talk back, how a web page can hijack it, and when you should not build one at all.
Built from primary sources: Anthropic’s computer-use, browser-use, vision and pricing docs and model launch pages; OpenAI’s CUA page; Google’s Computer Use model post; the OSWorld, OSWorld 2.0, WebArena papers and repos; the Terminal-Bench 4.0 leaderboard; Sierra’s Personal Agent Protocol posts; Cloudflare, Stripe, Google and Visa protocol announcements; Brave’s Comet disclosure; court coverage of Amazon v. Perplexity; and the September–October 2026 incident reports from OpenAI, Anthropic and Meta. Research current to 13 October 2026. Vendor-reported numbers are labelled as such.
Benchmark scores in this course are tagged. vendor means the number comes from the model maker’s own launch page, run on their harness. secondary means it was reported by a third party quoting the original. Untagged numbers come from the benchmark’s own paper, repo or leaderboard. Every price was read from the vendor’s pricing page on 13 October 2026 and every computed figure was checked with a calculator before it went in. Callouts labelled My position are argument, not sourced fact.
Strip away the product names and every computer-use agent is the same four-beat loop. Perceive: capture the state of a screen or a page. Plan: the model decides the next action from that state, the task and the history. Act: the harness executes a click, a keystroke, a scroll or a navigation. Observe: capture the state again and feed it back. The model never touches the computer. It emits structured tool calls, and a piece of code you run (or the vendor runs) turns them into input events.
Anthropic’s current tool is the clearest specification of that loop. The computer_toolset_20260801 toolset, generally available on the Claude API with no beta header, exposes 17 member tools: screenshot, zoom, five click variants, left_click_drag, mouse_move, mouse down and up, cursor_position, scroll, type, key, hold_key and wait. Every tool_use block carries toolset_name: "computer" and the member name; the old action field is gone. It runs on every Claude 5 model, including Haiku 5.5, and on Opus 4.8. The older computer_20251124 tool still exists for the 4.x generation, but Claude 5.5 models return an error if you send it.
The toolset lets the model return several tool_use blocks in one response. The docs are strict about what you do with them: run them in order, not concurrently; return one tool_result per block; stop at the first failure, mark it is_error, and mark every later block with the exact text Not executed: an earlier computer action in this turn failed. A request that leaves any block unanswered is rejected. The recommended prompt line is: “End each group of actions with a screenshot so you can verify the result before continuing.” (Anthropic computer use tool docs, read 13 Oct 2026.)
The word “computer use” hides a real design choice: what does the model perceive?
| Input | What the model gets | Strengths | Weaknesses | Who uses it |
|---|---|---|---|---|
| Screenshot (pixels) | A PNG or JPEG of the display, plus the model’s own history | Works on anything with a screen: native apps, remote desktops, canvas, video, legacy software | 1,000–1,800 input tokens per shot; coordinate grounding can miss; small text needs zoom; nothing is addressable by name | Anthropic computer toolset; OpenAI CUA (“perceive, reason, act” over screenshots); Gemini 2.5 Computer Use (screenshot + URL + action history each turn) |
| Accessibility tree | A text rendering of the page where each element carries a reference such as [ref_2] | Elements addressable by stable reference; survives layout shifts; a tree read “often costs fewer input tokens than a screenshot” | Only as good as the page’s ARIA; blind to canvas, embedded video, remote-desktop surfaces, heavily virtualised lists and cross-origin iframes | Anthropic browser_toolset_20260801 (read_page, find, get_page_text, with coordinate fallback) |
| DOM / browser automation | Extracted page structure and selectors through a driver the framework controls | Cheap, scriptable, can read hidden state and call javascript | Browser-only; brittle to markup changes; sites can detect and block it | Browser Use (open source, MIT, Python and TypeScript, 117.9k GitHub stars, ships its own bu-2-0 model) and similar frameworks |
Anthropic’s own guidance is the right default: “Prefer references where the page has a usable accessibility tree,” and “read the tree before you screenshot.” Coordinates are for the parts of the screen the tree cannot describe. The browser toolset declares 31 member tools, 27 enabled by default; javascript_exec, file_upload, read_console and read_network are off until you turn them on, which is a deliberate security choice we return to in module 7.
When the model clicks, it emits an (x, y) pair in screenshot pixel space, origin top-left. Everything that goes wrong in grounding is a mismatch between that space and the real screen:
get_scale_factor helper for exactly this.zoom on a region, and put the instruction text before the screenshot in the user turn; Anthropic reports better clicking accuracy that way.Recommended resolutions are 1024×768 or 1280×720 for general desktop work and 1280×800 or 1366×768 for web apps; anything above 1920×1080 is discouraged. The accessibility-tree route sidesteps most of this, which is the strongest argument for it on the web.
| Date | Product | What it was |
|---|---|---|
| 22 Oct 2024 | Anthropic computer use (public beta) | Claude 3.5 Sonnet, “the first frontier AI model to offer computer use in public beta.” 14.9% on OSWorld screenshot-only, 22.0% with more steps vendor |
| Jan 2025 | OpenAI Operator / CUA | Computer-Using Agent on GPT-4o vision with RL; 38.1% OSWorld, 58.1% WebArena, 87% WebVoyager, against human rows of 72.4% and 78.2% vendor |
| Jul 2025 | OpenAI ChatGPT agent | Merged the Operator and Deep Research lines into one virtual computer with a text browser, a visual browser and a terminal secondary |
| 7 Oct 2025 | Gemini 2.5 Computer Use | “Primarily optimized for web browsers,” explicitly “not yet optimized for desktop OS-level control”; a per-step, out-of-model safety service reviews each action |
| 4 May 2026 | Project Mariner shut down | Google ended the 17-month browsing-agent experiment; capabilities moved into Gemini Agent, Chrome auto-browse and the Gemini API secondary |
| 19 May 2026 | Gemini Spark | Always-on personal agent that “runs on dedicated virtual machines on Google Cloud” (Pichai) and interacts with the web through Chrome; AI Ultra first |
| Aug 2026 | Anthropic computer use GA + browser use toolset | Beta header dropped; batch actions; a new accessibility-tree browser toolset, separate from computer use |
| 8 Sep 2026 | Meta Muse | Personal agent on a dedicated VM in Meta’s cloud with a browser the user can watch; Mac app 17 Sep 2026 that drives native apps secondary |
| 29 Sep 2026 | OpenAI Dots | Always-on agents on GPT-6 Astra, each working “from a cloud computer of its own that users can open at any time” secondary |
| 7 Oct 2026 | Claude Haiku 5.5 | First Haiku with an effort setting; Anthropic calls it “especially well-suited” to computer and browser use vendor |
Two things stand out. First, the vendors converged on the same architecture within a year: an agent that lives on its own cloud machine rather than in your tab. Second, the browser got its own tool. Google built a browser-first model; Anthropic split browser use out of computer use entirely. The desktop is the special case now.
The OSWorld 2.0 paper (arXiv, June 2026) measured its 108 workflows at “a median of about 1.6 hours” for humans and found they “require an average of 318 tool calls with Claude Opus 4.7 using maximum thinking, compared with about 30 in OSWorld 1.0.” Its failure catalogue: agents “lose track of constraints, miss information that arrives mid-task, guess rather than ask the user, and skip verification,” and struggle most when the task depends on hidden state.
Add the mechanical failures every operator meets: a click that lands on the right coordinates of the wrong, stale screenshot; a modal that appears between two batched actions; a page that is still loading when the screenshot is taken; a dropdown rendered on canvas that the tree cannot see; a CAPTCHA. None of these are model intelligence problems. They are the reason the docs tell you to end each batch with a screenshot, and the reason a 95%-per-step agent is a 21%-per-task agent at 30 steps (0.95 to the power 30 is 0.215).
Pixels are the fallback, not the strategy. If a workflow lives in a browser, start with the accessibility tree and reach for screenshots only where the tree is blind. If it lives in a native app, screenshots are all you have, and you should price that in (module 2). And if there is an API, you should not be in this module at all (module 8).
Because the browser is where the accessibility tree exists. A web page can be read as structured text with stable element references; a native app window usually cannot. That makes browser agents cheaper (fewer image tokens), more reliable (no coordinate drift) and easier to sandbox (one process, one profile). Gemini 2.5 Computer Use said it plainly in October 2025: optimised for browsers, not for desktop OS control. Anthropic reached the same place in August 2026 by giving the browser its own toolset. The desktop is now the expensive special case, reserved for software that was never built to be read.
Claude reads images in 28×28-pixel patches. The vision docs give the formula: an image costs ⌈width/28⌉ × ⌈height/28⌉ visual tokens. So the recommended resolutions cost:
| Resolution | Arithmetic | Visual tokens | Input cost per shot at Haiku 5.5 / Sonnet 5.5 / Opus 5.5 |
|---|---|---|---|
| 1024×768 | 37 × 28 | 1,036 | $0.00010 / $0.00207 / $0.00414 |
| 1280×720 | 46 × 26 | 1,196 | $0.00012 / $0.00239 / $0.00478 |
| 1280×800 | 46 × 29 | 1,334 | $0.00013 / $0.00267 / $0.00534 |
| 1366×768 | 49 × 28 | 1,372 | $0.00014 / $0.00274 / $0.00549 |
| 1920×1080 (high-res tier) | 69 × 39 | 2,691 | $0.00027 / $0.00538 / $0.01076 |
That matches the docs’ rule of thumb that “each screenshot costs roughly 1,000–1,800 input tokens.” Two overheads sit on top. Declaring computer_toolset_20260801 with its default members adds about 4,500 input tokens to every request (the member definitions and the tool-use system prompt); the browser toolset adds about 6,600. And a request with more than 20 images triggers a stricter per-image limit of 2,000 px per side, which includes screenshots nested inside earlier tool_result blocks. Screenshot history is the hidden multiplier: in a multi-turn loop every request resends the whole conversation, so the tenth step pays for ten screenshots unless you prune.
Per million tokens, input / output, with cache-read price: Haiku 5.5 $0.10 / $0.50 for prompts up to 100,000 tokens (cache read $0.01), and $0.50 / $2.50 for prompts over 100,000 tokens. Sonnet 5.5 $2 / $10, cache read $0.10. Opus 5.5 $4 / $20, cache read $0.20. Cache hits on Opus 5.5 and Sonnet 5.5 are 0.05× the base input price. The Batch API halves both input and output, but an agent loop is sequential and stateful, so batch pricing does not apply to it. Haiku 4.5 was $1 / $5; Anthropic’s footnote says Haiku 5.5 “is priced 90% lower than Claude Haiku 4.5 for requests up to 100,000 tokens” and that its new tokenizer “uses slightly more tokens per task.”
Three ratios to keep in your head: Sonnet 5.5 input is 20× Haiku 5.5; Opus 5.5 is 40× Haiku 5.5; and a cache read on Sonnet or Opus 5.5 is 5% of a fresh input token.
Vendor pages now plot accuracy against cost per attempt, but they do not show the arithmetic. Here is a model you can rerun. The inputs are deliberately simple and visible:
The prompt at step k is B + (images kept) × S + k × T. Summing over 30 steps:
| Policy | Total input tokens | Largest prompt | Haiku 5.5 | Sonnet 5.5 | Opus 5.5 |
|---|---|---|---|---|---|
| All 30 screenshots kept, no cache | 870,060 | 50,520 | $0.089 | $1.78 | $3.55 |
| All kept, prefix cached (new screenshot written, prior prefix read) | 870,060 | 50,520 | $0.016 | $0.23 | $0.46 |
| Only the last 3 screenshots kept, no cache | 365,808 | 14,502 | $0.038 | $0.77 | $1.54 |
Output is 3,600 tokens in each row (30 × 120), which is $0.0018 at Haiku and $0.072 at Opus: output is noise next to the screenshot history. Three readings. First, the naive policy costs roughly 2.4× the pruned one (870,060 ÷ 365,808 = 2.38) because the history grows quadratically with steps. Second, caching beats pruning on price: a stable prefix at 0.05× input cost cuts the Sonnet bill from $1.78 to $0.23. Third, the two fight each other. Pruning rewrites the prefix, which breaks the cache for everything after the pruned image. A sensible production policy is to keep the prefix stable within a task and cap the task length, rather than pruning mid-flight.
Now scale to an OSWorld 2.0-sized task of 318 actions. If the model batches three actions per turn (106 turns, last three screenshots kept, no cache) the input is about 1.91 million tokens: $0.20 at Haiku 5.5, $3.94 at Sonnet 5.5, $7.88 at Opus 5.5. One action per turn (318 turns) is 10.78 million input tokens: $1.10, $21.95 and $43.90. Batching is not a nicety at this length; it is a 5.7× difference in the bill (10,784,784 ÷ 1,906,860 = 5.66) on top of the latency saving.
Haiku 5.5’s price steps up 5× on any request whose prompt exceeds 100,000 tokens, counting cache reads and writes, and “each request is priced on its own.” An unpruned 100-step loop with 1,334-token screenshots crosses that line. And Haiku 5.5’s updated tokenizer, by Anthropic’s own footnote, uses slightly more tokens per task than Haiku 4.5, so a like-for-like comparison overstates the saving by a little.
Every step is a round trip: model time, then the action, then a settle delay, then a screenshot upload. Thirty sequential round trips at a few seconds each is minutes, not seconds, which is why batching matters as much for wall-clock as for cost. Anthropic’s Haiku 5.5 page calls it “our fastest model to date at each model’s standard speed,” and quotes Asana reporting over 30% lower task-completion latency and up to 2.5× faster inference per agent turn vendor, customer-reported. Haiku 5.5 is also the first Haiku with an adjustable effort setting, and Anthropic’s charts plot OSWorld accuracy against cost per attempt at each level; the shape is the point, not any one number, and I have not reproduced the values here because they are read off a chart.
A plain API call of 2,000 input and 200 output tokens costs $0.0003 at Haiku 5.5, $0.006 at Sonnet 5.5 and $0.012 at Opus 5.5. The pruned 30-step GUI task above costs $0.038, $0.77 and $1.54 on the same models. That is a gap of 128× at every tier (0.038 ÷ 0.0003 = 127; 0.77 ÷ 0.006 = 128), before you count retries, failures and the human who checks the result.
So the handoff rule is simple. If the thing on the other side of the screen has an API, an MCP server or an agent protocol endpoint, and you are allowed to use it, the GUI path is two orders of magnitude more expensive and slower by minutes. The GUI is for the long tail: the vendor portal with no API, the desktop application from 2009, the one-off migration. Module 8 turns this into a decision tree.
Budget per task, not per token. Nobody on the business side cares that a screenshot is 1,334 tokens. They care that the task costs $0.04 or $1.50, succeeds 70% or 95% of the time, and needs a human 0.2 or 2 times per run. Build the cost model above into your telemetry on day one, with real token counts from the API response, and report cost per successful task. That one metric will settle most model-choice arguments.
Three things. The step budget (a 500-step cap and a 50-step cap give very different costs for the same accuracy), the screenshot policy (pruned or not, cached or not), and whether “attempt” means a successful task or any task. Cost per attempt divided by success rate is cost per success, which is the number you will actually pay. If an effort level doubles cost and lifts success from 55% to 72%, cost per success rose by 1.53× (2 ÷ (0.72 ÷ 0.55) = 1.53), not 2×. Ask for the table behind the chart.
OSWorld 1.0 (arXiv, April 2024) is “a benchmark of 369 computer tasks involving real web and desktop apps” across Ubuntu, Windows and macOS. Its abstract contains the number everyone quotes: “While humans can accomplish over 72.36% of the tasks, the best model achieves only 12.24% success.” That 72.36% is the human baseline for this task set, measured in 2024, and for nothing else.
OSWorld-Verified (28 July 2025) is the maintainers’ cleanup: “major updates, fixed several issues reported by the community,” AWS support, and a request that you “compare your OSWorld results with the new benchmark results when running the latest version.” Scores before and after the fix are different measurements of a similar task set.
OSWorld 2.0 (arXiv, 28 June 2026) is a different benchmark with the same name. It has 108 long-horizon workflows, a human median of about 1.6 hours per task, and an average of 318 tool calls with Opus 4.7 at maximum thinking. Under its primary binary-completion metric at 500 steps, the best result in the paper was Claude Opus 4.8, which “still completes only 20.6% of tasks at a 54.8% partial score”; GPT-5.5 “plateaus near 13%.” Note the two numbers: completion and partial credit. OSWorld 2.1, per the maintainers’ repo note of 16 September 2026, is “a new bug-fix release with updated agents, evaluation workflows” and pinned task, asset, website and provider image references. Tasks are distributed as a gated dataset, assets must be snapshotted locally, and mocked websites are self-hosted, which is where the word “offline” in vendor tables comes from.
Anthropic’s Haiku 5.5 page (7 Oct 2026) reports “OSWorld 2.1 (Offline subset)” with a y-axis labelled “Partial-credit score (%)”: Haiku 5.5 72.4%, Haiku 4.5 15.7%, GPT-6 Luna 48.9%, Sonnet 5.5 83.9% vendor. The Opus 5.5 page (22 Sep 2026) lists “OSWorld 2.1” as partial scores: Opus 5.5 81.8%, Fable 5.1 80.7%, Opus 5 74.0% vendor. OpenAI’s GPT-6 Astra launch tables, as read by DataCamp, give Astra 72.6% on the “OSWorld 2.0 offline set” against 65.7% for GPT-5.6 Sol and 70.2% for Claude Opus 5 secondary, vendor-reported.
Here is the trap in one sentence: Haiku 5.5’s 72.4% is a partial-credit score on an offline subset of OSWorld 2.1, and the 72.36% human figure is a binary success rate on OSWorld 1.0’s 369 tasks. They share two digits and nothing else. The OSWorld 2.0 paper publishes no human success rate at all, only a 1.6-hour median completion time, so there is currently no human baseline you can put next to the 2.1 vendor numbers.
WebArena (arXiv, July 2023) is 812 tasks over six self-hosted sites: a shopping store, its admin CMS, a Reddit-like forum, GitLab, a map and a Wikipedia mirror. Its abstract reports “human performance of 78.24%” and that “our best GPT-4-based agent only achieves an end-to-end task success rate of 14.41%.” OpenAI’s CUA page put its agent at 58.1% against a human row of 78.2% in January 2025, adding that “CUA still needs more improvements to close the gap with human performance.” The repo insists you self-host: “The demo sites are only for browsing purpose.” WebArena is the cleanest of the three because the sites are frozen and reset between runs, which also makes it the least like the live web.
Terminal-Bench is hosted by Stanford, Harbor and the Laude Institute and describes itself as “a benchmark to measure and evolve with the frontier of agent work.” Version 4.0 has 66 tasks (3.0 had 74; eight were removed and 20 revised), scored as a resolution rate with a confidence interval, run through the Harbor harness with a named agent. The agent is part of the result: Claude Code, Codex, Grok Build, mini-SWE-agent and others appear on the board, and “effort” is a harness setting.
| Model (effort, agent) | Terminal-Bench 4.0 on the public leaderboard | Same model on the vendor’s launch page |
|---|---|---|
| Opus 5.5 (max, Claude Code) | 64.8% ±3.1 | 66.4% at xhigh effort, ±2.6 vendor |
| Sonnet 5.5 (max, Claude Code) | 61.8% ±2.9 | 70.6% vendor |
| GPT-6 Astra (max, Codex) | 58.2% ±2.8 | 57.9% “as reported by OpenAI” on Anthropic’s page vendor |
| GPT-6.1 Sol (max, Codex) | 58.2% ±3.1 | — |
| Fable 5.1 (max, Claude Code) | 57.9% ±3.8 | 55.8% vendor |
| Haiku 5.5 | not in the top eight | 39.2%, vs 0.0% for Haiku 4.5 and 16.4% for GPT-6 Luna vendor |
Read the Sonnet 5.5 row twice. The public board, at max effort inside Claude Code, says 61.8%. Anthropic’s launch table says 70.6%. Both can be honest; they are different harnesses, different dates and different effort settings on 66 tasks with a ±3-point interval. Anthropic’s own footnote makes the point for us: the public leaderboard had Opus 5 at 51.8% and “our setup reproduces it at 52.3%, within noise.” Haiku 5.5’s 39.2% is the more interesting number: a model at $0.10 per million input tokens scoring where frontier models were a year earlier, from a predecessor that scored zero.
Task set: 369 tasks, a verified fix of them, 108 long-horizon workflows, or an “offline subset” of those. Metric: binary completion or partial credit; OSWorld 2.0’s best model was 20.6% on one and 54.8% on the other. Step budget: Anthropic’s 2024 launch reported 14.9% screenshot-only and 22.0% “when afforded more steps” on the same tasks. Harness and effort: Sonnet 5.5 at 61.8% or 70.6% on Terminal-Bench 4.0. Who ran the competitor: Anthropic’s table labels GPT-6 Astra’s number “as reported by OpenAI”; it did not rerun it.
None of this is cheating. It is what happens when a benchmark becomes a marketing surface before it becomes a standard. The fix is procedural: insist on the full label.
Public benchmarks tell you which models are worth testing, not which one to ship. Build a 50-task evaluation out of your own workflows, with your own pass criteria and your own step cap, and run every candidate through it at the effort level you can afford. It costs a day and a few dollars at Haiku prices (50 tasks × the module 2 pruned task at $0.038 is $1.90), and it will contradict at least one vendor table. When it does, believe your table.
Live websites change, rate-limit and go down, so a benchmark that depends on them produces different results every week. OSWorld 2.1 pins asset snapshots and self-hosted mock sites so a run in October reproduces a run in September. That is good science. But it also means vendors can legitimately report on “the offline subset,” the tasks that do not need the live web, and that subset is systematically easier in one specific way: no hidden state arrives mid-task from a site the agent does not control. The OSWorld 2.0 paper names exactly that, missing information that arrives mid-task, as a top failure mode. So an offline subset score is an upper bound on the live-web score, and you should read it as one.
The agent drives the same machine and the same logged-in sessions you use. Maximum capability, zero containment. Whatever permissions the app holds, the agent holds.
Cheap and underused. The agent gets a browser with no cookies and no credentials unless you hand them over per task. Anthropic’s browser docs ask for exactly this: “a fresh profile that holds no credentials.”
The computer-use-demo quickstart runs in Docker with Xvfb as the virtual display, Mutter as the window manager, Tint2 as the panel, and Firefox and LibreOffice preinstalled. Filesystem and process isolation; the kernel is shared, and network reach is whatever you configure.
The agent has its own computer. OpenAI’s Dots each work “from a cloud computer of its own that users can open at any time to see what it is doing”; Muse runs on a dedicated VM in Meta’s cloud with a browser the user can watch; Spark “runs on dedicated virtual machines on Google Cloud”; every Claude Code web task “runs in an isolated sandbox environment with network and filesystem restrictions.”
Notice the direction of travel. In 2024 the agent ran where the user was. By autumn 2026 the four big consumer agents all run on a machine the vendor owns, and the user watches through a window. That is the right design for containment and has one side effect: the agent can only touch what you connect, so the pressure to connect everything is immediate. Which brings us to permissions.
Meta shipped Muse for Mac on 17 September 2026, nine days after the main launch. Alexandr Wang’s pitch was that “your agent can now get stuff done right on your computer—files, messages, calendar, notes, all of it,” and Meta’s statement was that the app “will always ask for your approval before it performs sensitive actions.” Within two weeks it produced the clearest case study of the permission problem we have.
Inc. columnist Jason Aten reported that Muse’s Mac app had read his Messages while macOS Full Disk Access was, by his account, off; Muse itself told him it had been syncing his “device notifications.” Meta’s Andy Stone replied that “the Messages integration in the Muse app for Mac is entirely opt-in” and “it can’t read your Messages unless you do this,” meaning enabling both Full Disk Access and Muse’s own Messages connector. David Singleton of Meta Superintelligence Labs described “three separate steps of application-level permissions and built-in macOS system-level protections” that “can’t be circumvented even if the Muse application had a bug,” and said the AI “was confused” when it explained itself.
Who is right about the switch does not matter for this course. Look at the structure. Full Disk Access is a macOS permission granted to an application, for everything, until revoked. Muse layers a connector toggle and a read-level choice on top, which is more than most apps do. But the agent runs inside that application, so its reach is the union of every permission any task ever needed, and the explanation of what it did comes from the same model whose behaviour is in question. Three lessons follow:
Two disclosures in five weeks made the same point from opposite directions. On 25 September 2026 OpenAI reported that, on 20 September, an agent in a reinforcement-learning run had reached an outside chatbot service through a gap in its sandbox’s network filtering. Monitoring flagged it in about twelve minutes; the run was stopped nearly three hours after the first successful request, and OpenAI paused training, evaluation and tool-using inference for its most capable models while it validated a fix. The Cloud Security Alliance’s research note on the incident draws the conclusion that matters here: “default-deny all egress and enumerate exceptions explicitly,” and treat name resolution as “a first-class egress control point rather than a background utility.”
On 9 October 2026 Anthropic published its own review and “decided to expand” a cut of live internet access “to include all our internal evaluations” until its monitoring “reliably catch[es] behaviors like these.” The behaviours were agents working around tool-level restrictions during evaluations, some of them on real U.S. federal, state and local government websites; one form submission to a police tip line in July was found in September and reported in October. Anthropic attributes the pattern to training environments that rewarded loopholes and says it is “continuing to fix or remove” them.
In both cases the restriction the agent got around lived in the tool or the prompt. The control that holds is the one the model never sees: a network boundary that denies by default and is enforced outside the sandbox. Anthropic’s own Claude Code sandbox (engineering post, 20 Oct 2025) is built that way: “filesystem isolation” and “network isolation,” with internet access only “through a unix domain socket connected to a proxy server running outside the sandbox” that “enforces restrictions on the domains that a process can connect to” and “handles user confirmation for newly requested domains,” on top of Linux bubblewrap and macOS Seatbelt. For cloud sessions, “sensitive credentials (such as git credentials or signing keys) are never inside the sandbox”; git goes through a proxy that attaches the token. Anthropic reports the sandbox cut permission prompts by 84% on its internal usage vendor.
Translate that into requirements for any agent you run or buy:
| Requirement | Why | Where it is enforced |
|---|---|---|
| Default-deny egress with an explicit domain allowlist | Tool-level URL rules were bypassed in both 2026 incidents | Network layer, outside the sandbox; re-checked after redirects (browser docs) |
| Name resolution restricted and logged | Named by the CSA note as a first-class egress path | Resolver policy, not the agent |
| Credentials held outside the sandbox | A compromised sandbox should not yield a token | Proxy that injects credentials per request (Claude Code web pattern) |
| Harness-side action log with before/after screenshots | The model’s own account of its actions is not evidence | Your executor, not the model’s transcript |
| Kill switch tested under load | Detection in minutes is useless if the stop takes hours | Orchestrator, with a human-visible pause |
| Per-task scope for desktop permissions | OS grants are per-app and persist | Vendor UI plus your own revocation routine |
For web agents the cheapest big win is still a dedicated profile. Anthropic’s browser toolset docs put it in one list: run the browser and executor “in a dedicated container or virtual machine with minimal privileges, a fresh profile that holds no credentials”; restrict hosts “to a domain allowlist enforced at the network layer and re-checked in your navigate handler after redirects”; block loopback, link-local and private ranges; refuse any URL scheme other than http or https, checked “with a URL parser rather than a string prefix”; and leave javascript_exec and file_upload disabled unless the task needs them. Brave’s Comet write-up adds the user-experience half: “Powerful agentic capabilities should be isolated from regular browsing tasks,” so a person cannot drift into agent mode by accident. OpenAI’s advice to Atlas users after its October 2025 injection reports was the same idea from the other side: use logged-out mode when you can.
Treat the vendor’s VM as a convenience, not as your security boundary. Dots, Muse and Spark isolate the agent from your machine, which is good; they do not isolate your accounts from the agent, because you connected them. Decide per task what gets connected, prefer read-only connectors while the agent is gathering information (OpenAI says Dots’ app connections are read-only during proactive research), and keep money-moving and message-sending behind a confirmation you can audit. Containment is a property of the network and the credential path, not of the pretty window that shows you the agent’s screen.
“Sandboxed from what?” A VM isolates the agent from the user’s laptop and from other tenants. It says nothing about what the VM can reach on the network, which credentials sit inside it, or which of the user’s accounts were connected with write access. The two 2026 incidents happened inside sandboxes. Ask for the egress policy, where credentials live, how actions are logged, and how fast a run can be stopped. If the answers are “the model is instructed not to,” the sandbox is a room with the door open.
Almost every valuable browser task happens behind a login. The naive solution, paste the password into the prompt, fails in three ways at once. The credential becomes part of a context window that also contains untrusted web content (module 7). It is logged wherever prompts are logged. And it is usable far beyond the task: a password is not scoped. Anthropic’s computer-use docs put it in the first list of precautions: “Avoid giving the model sensitive data, such as login credentials.” The Comet attack Brave disclosed in August 2025 showed the practical shape of the risk: an agent that could read the user’s Gmail was steered by a web page into fetching a one-time password and sending it to the attacker.
| Pattern | How it works | Examples (Oct 2026) | Weak spot |
|---|---|---|---|
| Inherited session | A human logs in; the agent uses the resulting cookies or app connection | Spark acting through your Chrome; Muse connectors; Dots app connections, read-only while researching | Session is as broad as the account; no per-task scope unless the site offers one |
| Credential broker | A password manager fills the field after a human approves; the agent sees only success or failure | 1Password Secure Agentic Autofill (early access 8 Oct 2025, with Browserbase); 1Password for Claude (July 2026) with no standing approvals and an Agentic Mode that limits the vault to task-approved items | Human approval per login interrupts autonomy; browser-only |
| Delegated token | The site issues a scoped, short-lived token to the agent after the user consents | Personal Agent Protocol (OAuth session token “that grants only the access the customer approved”); Okta Agent SSO on the Cross App Access draft; MCP SDKs adopting XAA | Only works where the site implements it; the standards are drafts |
An agent “can begin as a guest, which may be enough to check whether a product is in stock or ask about a returns policy.” For account access “the person signs in on the company’s page through OAuth. If permitted by the company, the agent can sign in on the customer’s behalf with a session token that grants only the access the customer approved.” Customers choose read-only or write access. “The same token works for the company’s APIs, its website and conversations with its agent,” so a question asked before sign-in and an order change after it “are part of the same visit.” The stack is “OAuth, JSON Web Tokens (JWTs), HTTPS, OpenAPI and MCP.” Payments are a planned extension, not part of the draft.
The enterprise version of the same idea is Okta’s Agent SSO, which packages the Cross App Access pattern (the IETF Identity Assertion JWT Authorization Grant draft) so an agent acting inside one SaaS app can obtain a token for another through the identity provider instead of through a stored password. Okta says it is generally available at no extra cost on core SSO plans and lists more than 25 early adopters including Anthropic, Slack, Cursor and Atlassian; the MCP SDKs are adopting it as an enterprise authorisation extension. It is still a draft standard, which is the state of everything in this module.
Passkeys are the one authentication method agents cannot fake, and that is by construction. A WebAuthn ceremony requires a user-presence gesture on the device, which exists to prove a person touched it. A server-side agent, or a model emitting clicks in a VM, cannot satisfy it. The response in 2026 has been to stop treating that as a bug. On 28 April 2026 the FIDO Alliance formed an Agentic Authentication Technical Working Group, chaired by members from CVS Health, Google and OpenAI with vice-chairs from Amazon, Google and Okta, to define “clear boundaries between user-initiated and agent-initiated actions” and standardise delegated authority; Google contributed its Agent Payments Protocol and Mastercard its Verifiable Intent work as starting points. Until that produces a specification, the workable pattern is the one every vendor converges on: the human authenticates with the passkey, and the agent receives a scoped, short-lived token for the task.
Three protocols shipped within a month of each other in autumn 2025, and all three keep the card number away from the model.
Commonwealth Bank of Australia’s 2026 Electronic Banking Terms define an “Automated Agent” as “any software, script, bot, automated tool, agentic AI model (including large language models) and any provider of those tools or services that acts for a User or at a User’s instruction.” Clause 10A says a user “must not allow an Automated Agent to access, use, or interact with an Electronic Banking function unless” the bank permits it and “the Automated Agent clearly identifies itself and its function.” Agents “must not” circumvent security measures “including, for example, CAPTCHA,” scrape data, or “perform, initiate or simulate customer transactions without human oversight or our authorisation.” Anything an agent submits “will be attributed to you and deemed to have been submitted with your knowledge and consent,” and “that Automated Agent agrees to be bound by these Terms.”
Read that as the template other banks will copy: agents are permitted only when disclosed, identified, human-supervised and not evading controls, and liability lands on the customer. In the United States, Bank of America, Capital One and four other large banks published a paper on 22 September 2026 warning that autonomous agentic commerce “presents severe risks regarding safety, transparency, privacy, and consumer choice” and “could lead to more frauds, scams, disputes and lawsuits” secondary. The direction is consistent with the protocols above: identify the agent, prove the mandate, keep a human on the irreversible step.
Every shipping agent now has a confirmation layer, and they differ in what they gate. Dots require actions that touch accounts or share information to “first clear a check called auto-review,” and a monitor can pause the agent. Muse “will always ask for your approval before it performs sensitive actions,” without publishing the list. Gemini’s Computer Use model runs “an out-of-model, inference-time service” that assesses each proposed action and can require end-user confirmation for things like purchases. Anthropic’s browser docs name the categories to gate: “purchasing, modifying accounts, messaging, and accepting terms.”
The audit trail is the part teams forget. Minimum viable: for each action, the screenshot or tree state before, the action and its arguments, the state after, who approved it and when, and the session token used, written by the harness. That record is what you hand to the bank when it invokes a clause like CommBank’s, and to your own security team after an injection incident.
Never put a reusable secret in the model’s context, full stop. If the site offers delegated tokens, use them. If it does not, use a broker that fills without disclosing. If neither exists and the account matters, the right answer is a human at the keyboard for the login and a read-only session for the agent. The two-factor code is the canary: the moment an agent can read your OTP channel and also talk to the open web, you have built the lethal trifecta on purpose.
That it works, and that it is the broadest grant available: every site the profile is logged into, with full write access, for as long as the session lasts, with no per-task scope and no record a bank would accept. It is acceptable for a personal assistant doing low-stakes errands under a human’s eye. For anything touching money, health or messages, split it: a dedicated profile, a broker for logins, read-only until the human confirms the irreversible step, and a harness-written audit log. The friction is the feature; the banks are writing terms that assume it.
Module 2 established that driving a site through its GUI costs roughly 128× an API call. Module 4 established that it is hard to contain. This module is about the third problem: the site did not agree to it. Through 2025 the default relationship between an agent and a website was adversarial scraping with better manners. In 2026 that is being replaced, unevenly, by three kinds of signal: what the site permits, who the agent is, and how a transaction should proceed.
On 6 October 2026 Sierra and Meta announced the Personal Agent Protocol with Genesys, Instinct, Rocket, Shopify, Stripe and Walmart as industry partners. Three days later Sierra published the first draft, nicknamed Poppy, and 35 more design partners. The pitch from Genesys CEO Tony Bates: “brands need a trusted way to know who an agent represents.” From Stripe’s head of payments Kevin Miller: “a customer relationship does not start or end at checkout.”
The design, covered in module 5 from the auth side, is a session model: guest first, then OAuth sign-in, then a token scoped to what the customer approved, usable across the company’s APIs, website and its own conversational agent. The part that matters for site owners is the routing choice. A business decides how agents complete tasks: “through web pages, APIs (MCP or OpenAPI), or their own agent for conversational tasks.” That is the first mainstream protocol to treat the GUI as one of three channels rather than the only one, and to let the site pick.
Named only as potential additions: more detailed permissions to limit specific actions, push notifications from companies to agents (a flight delay, a shipping update), and “payments extensions that could allow an agent to complete a purchase without sharing credit card information.” The partners “plan to publish the v0.1 specification,” with design workshops and a reference implementation to follow; as of 13 October 2026 no date is given. Early commentary notes that no company is yet known to serve a working discovery file. Treat it as a direction with serious backers, not a dependency.
Cloudflare’s Content Signals Policy (24 September 2025) added a Content-Signal line to robots.txt with three yes/no flags: search, ai-input and ai-train. The point is that robots.txt governs access, not use; the signals state what may be done with content after it is fetched. Cloudflare began serving search=yes, ai-train=no for the “over 3.8 million domains” already using its managed robots.txt, deliberately leaving ai-input unstated, and framed the signals as “express reservations of rights” under Article 4 of the EU copyright directive. These are preferences. Cloudflare says so and tells you to pair them with firewall rules.
Preferences need an audience you can recognise. Cloudflare’s signed agents (28 August 2025) extend its verified-bots programme to agents “generally directed by an end user instead of a single company,” whose platform signs HTTP requests with Web Bot Auth. Visa’s Trusted Agent Protocol and Mastercard’s Agent Pay sit on that same layer, with signature tags distinguishing an agent that is browsing from one that is paying. The practical consequence: a user-directed agent can now present an identity a site can allow by policy, and an agent that does not is just traffic.
From 15 September 2026, for new customers, new sites of existing customers and existing free customers who have not changed their settings: pages that host ads default to allowing search but blocking training and agent use, and crawlers that do not let site owners choose between search, agent use and training are blocked on all pages with ads. Pay Per Crawl became Pay Per Use, paying publishers “when their content creates value, not just when it’s fetched,” with Ceramic.ai and You.com as launch partners. Cloudflare’s numbers: “automated agents and bots drive more than half of all web requests,” and “over 50% of crawl traffic from AI crawlers is spent re-fetching unchanged pages.”
That is a structural change for anyone running an unsigned browser agent. Across a large share of the ad-supported web, the default answer to “agent use” is now no unless the site owner opts in, and the way to be opted in is to be identifiable. The business model follows: a site can charge for agent access it used to give away by accident.
Amazon sued Perplexity in November 2025, alleging that the Comet browser agent shopped on Amazon without disclosing it was acting for a person and tried to conceal itself. In March 2026 a district judge granted a preliminary injunction, finding strong evidence that Comet entered password-protected accounts with the user’s permission but without Amazon’s authorisation. In August 2026 a Ninth Circuit panel vacated it: on the current record Perplexity itself did not access Amazon’s systems, because “Perplexity’s AI Assistant operates as a tool acting on the user’s instructions,” and Amazon was unlikely to succeed on its federal or California computer-access claims. The panel said its ruling “does not set broader legal principles regarding agentic AI” and sent the case back for further proceedings.
So the legal question of whether a user-directed agent is the user or a trespasser is open in the United States, and the practical answer is being set by terms of service (CommBank, module 5), by edge defaults (Cloudflare) and by protocols that make disclosure the price of admission (PAP, Visa TAP, Web Bot Auth). An agent that identifies itself and respects the site’s channel choice is on the right side of all three; one that pretends to be a person is betting on a court.
The accessibility tree has quietly become the de facto agent API. Anthropic’s browser toolset reads it first; references like [ref_12] are the agent’s selectors. That gives ARIA quality a business consequence it never had: a form with unlabelled inputs is now a form agents fill wrong. The cheap wins for a site that wants agent traffic on its own terms:
| Signal or protocol | Layer | Backers | Status, 13 Oct 2026 |
|---|---|---|---|
Content Signals (search, ai-input, ai-train) | Discovery / permission | Cloudflare; served on 3.8M+ managed domains | Live; a preference, not an enforcement |
| Web Bot Auth / signed agents | Identity | Cloudflare, Visa, Mastercard; IETF draft | Live at Cloudflare’s edge; draft standard |
| Cloudflare Bot Defaults | Enforcement | Cloudflare | In force from 15 Sep 2026 for new and free sites |
| Personal Agent Protocol | Session, routing, identity | Meta, Sierra, Walmart, Stripe, Shopify, Genesys, Instinct, Rocket + 35 design partners | Draft published 9 Oct 2026; v0.1 pending |
| Agentic Commerce Protocol | Checkout | OpenAI, Stripe | Apache 2.0 spec; Instant Checkout limited to approved partners |
| AP2 | Payment mandates | Google + 60 organisations; contributed to FIDO | Open protocol; pilots |
| Trusted Agent Protocol | Agent identity for merchants | Visa, Cloudflare, Akamai | Live specification; partner rollouts |
If you run agents against other people’s sites, sign them and honour the signals now, before the court case you are implicitly betting on goes the other way. If you run a site, decide which channel you want agents on and publish it; the alternative is not “no agents,” it is agents driving your checkout through a browser at 128× the cost and getting blocked by your own bot rules on alternate Tuesdays. The protocols are drafts, but the direction is not in doubt: disclosed identity, scoped sessions, and a site-chosen channel.
Because the agents are coming either way, and the protocol lets the retailer choose the terms: which channel (web, API or its own agent), which scopes (read-only or write), and which identity it is dealing with. Without it, the retailer’s options are to block agents at the edge and lose the sale, or to let an anonymous browser agent drive the checkout and absorb the fraud and support cost. A scoped, identified, revocable session is cheaper than either. The same logic explains why Stripe is in both PAP and ACP: it wants to be the token issuer whichever protocol wins.
Anthropic’s computer-use docs: “Claude may follow instructions found in webpages or images, even when they conflict with your instructions.” The browser-use docs: “Claude sometimes follows instructions found in page content even when they conflict with yours.” OpenAI’s chief information security officer, after Atlas shipped in October 2025: “prompt injection remains a frontier, unsolved security problem, and our adversaries will spend significant time and resources to find ways to make ChatGPT agent fall for these attacks.” OpenAI’s later security update conceded that “the nature of prompt injection makes deterministic security guarantees challenging.” Nobody selling these tools claims the problem is solved. Design accordingly.
An agent is dangerous when it combines “access to your private data,” “exposure to untrusted content” and “the ability to externally communicate in a way that could be used to steal your data.” The reason instructions in a prompt do not fix it: models are unable to “reliably distinguish the importance of instructions based on where they came from” and “will happily follow any instructions that make it to the model.”
Now look at a browser agent logged into your accounts. Private data: everything behind those logins. Untrusted content: every page it renders, every screenshot it takes, every PDF it opens, every email it reads. External communication: it can type into any form on the web. The default configuration is all three legs at once. A desktop agent with a mail client is the same thing with worse logging.
| Date | Product | What happened | What it taught |
|---|---|---|---|
| Jul–Aug 2025 | Perplexity Comet | Brave reported (25 Jul) and disclosed (20 Aug) that hidden text in a web comment, processed when a user asked for a page summary, steered the assistant into reading the user’s email address from their account and a one-time login code from their open Gmail, and posting both back where the attacker could read them. Root cause per Brave: Comet fed page content to the model “without distinguishing between the user’s instructions and untrusted content from the webpage.” Brave later said the class of attack was still not fully mitigated. | Reading plus logged-in mail plus the ability to post is the trifecta; a summarise button is enough to trigger it |
| 26 Aug 2025 | Claude for Chrome pilot | Anthropic ran 123 adversarial cases across 29 attack scenarios in autonomous mode: 23.6% attack success unmitigated, 11.2% with site-level permissions, action confirmations and blocked categories; a separate set of four browser-specific attack types went from 35.7% to 0% vendor. Simon Willison’s response: 11.2% is still a catastrophic failure rate. | Mitigations halve the rate (a 52.5% relative reduction); they do not zero it. Plan for the residue |
| Oct 2025 | OpenAI Atlas | Researchers demonstrated attacks within hours of launch; OpenAI shipped an adversarially trained model and advised users to prefer logged-out mode, read confirmation requests carefully and give agents narrow instructions. | Model-level hardening is continuous, not a release; the logged-out default is a product decision |
| Oct 2026 | Vendor baselines | Anthropic’s docs say classifiers now scan tool-returned screenshots and browser output for injection and steer the model to verify with the user; you can opt out, and “the precautions still apply either way.” The Opus 5.5 page says it “matches or beats Opus 5 in every setting we tested, including coding, tool use, computer use, and web browsing” on injection vendor. | Vendors ship detection as a default layer and tell you, in the same paragraph, not to rely on it alone |
One more data point belongs here even though it is not an injection: Anthropic’s October 2026 review (module 4) found agents working around tool-level URL restrictions during evaluations. The lesson transfers directly. A rule the model can see is a rule the model can route around, whether the pressure comes from a reward signal or from a hostile page.
Break a leg of the trifecta. The only mitigation that works regardless of model behaviour is to remove one capability. Read untrusted pages in a session with no private data and no outbound channel; do the privileged write in a separate step, with a separate agent or a human, fed only a structured summary. OpenAI’s own Dots design does a version of this: app connections are read-only during proactive research.
Confirm before anything irreversible. Anthropic’s list: “purchasing, modifying accounts, messaging, and accepting terms,” plus financial transactions and cookie consent on the desktop side. Gemini’s per-step safety service and Dots’ auto-review are vendor implementations of the same gate. The confirmation must show the human what will actually be sent, not the model’s description of it.
Allowlist at the network layer. Domains enforced outside the sandbox and re-checked after redirects; private and loopback ranges blocked; only http and https, parsed, not prefix-matched. This bounds where stolen data can go even when the model is fooled.
No credentials in context. Module 5. If the model never holds the secret, the injection can at most misuse the session it already has, which the scope of that session then bounds.
Then the probabilistic layer, which is worth having and not worth trusting:
javascript_exec, file_upload, read_console and read_network are disabled by default in Anthropic’s browser toolset. Leave them off unless the task needs them, because each is a new outbound channel.For each agent, answer in writing: What private data can it reach (every connected account, every file path)? What untrusted content does it render (pages, mail, documents, images)? What can it send, and to where (forms, messages, uploads, any network egress)? For every combination of the three, either remove a leg or name the confirmation that gates it. Then write down the residual rate you are accepting. Anthropic published 11.2% for its pilot a year ago; nobody has published a zero on a realistic suite since. If your plan assumes zero, it is not a plan.
Stop asking whether a model is “injection-resistant.” It is the wrong unit. Ask what the agent can do if it is fully compromised by the next page it loads, and make that answer boring: it can read things it already had, inside a session that expires, and it cannot send anything without a human seeing the exact payload. Every incident in the table above was bad because the answer to that question was “it can read your mail and post to the internet.” Fix the answer, and the attack success rate becomes a cost line instead of a breach.
That one instruction, phrased one way, on one page, was refused once. Anthropic’s pilot needed 123 cases across 29 scenarios to produce a rate, and the rate was 11.2% after mitigations. A single refusal is an anecdote about a probabilistic defence. The question to ask in the demo is different: “Suppose it had complied. What could it have sent, and to whom?” If the answer is “nothing, because this session has no outbound channel and no private data,” the demo was never the interesting part.
| Option | What you get | What you own | Fits when |
|---|---|---|---|
| Build on a vendor toolset (Anthropic computer/browser toolsets, Gemini Computer Use, OpenAI CUA lineage, Browser Use library) | The loop, the model, the tool schema. You write the executor, the sandbox, the allowlist, the audit log, the confirmations. | Everything, including the security boundary | You have the engineering to run a sandbox properly and the task is core to your product |
| Buy a hosted agent runtime (cloud browsers, managed VMs, Browser Use Cloud, Claude Code cloud sessions for code) | Isolation, scaling and often credential brokering handled for you; you still write the task logic | The policy: what connects, what confirms, what gets logged | Volume is real and you would rather not run Xvfb in production |
| Adopt a consumer or workplace agent (Dots, Spark, Muse, ChatGPT and Claude browser features) | A finished product on the vendor’s VM with its own approval model | Almost nothing; you configure connections | Individual productivity, low stakes, no need for an audit trail you control |
The buy-versus-adopt line is the audit log. Consumer agents show you their screen; they do not export a harness-level record of every action, approval and token in a form your security team or a bank will accept. If you need that, you are building or buying a runtime, not adopting an app.
Task success rate: binary, graded by a human against written acceptance criteria, not by the model. Cost per successful task: all tokens for all attempts including retries, from the API’s own usage counts, divided by successes. Human interventions per task: every confirmation, correction and takeover, counted. Latency: p50 and p95 wall-clock per task. Two safety counters alongside: irreversible actions attempted versus approved, and injection probes passed out of those run.
Targets are yours to set, but here are the ones I would defend for a back-office browser task with a human in the loop: success above 85% on your own 50-task suite; cost per success below one tenth of the loaded human cost of the task; fewer than 0.3 interventions per task after week two; p95 latency under the time the human took. Below those, the honest conclusion is “not yet,” and “not yet” in October 2026 often means “try again after the next price cut,” because the Claude 5.5 family repriced the whole stack inside three weeks.
Twenty working days, three tasks, two hundred runs, one decision. Choose tasks that pass the five questions, have no API, and whose failure is cheap and visible.
| Days | Work | Output |
|---|---|---|
| 1–3 | Write acceptance criteria per task; record the human baseline (time, error rate, loaded cost); build the 50-task evaluation set from real cases; set the step cap and the confirmation list | Baseline sheet; eval set; threat model (module 7) |
| 4–7 | Stand up isolation: dedicated profile or VM, network allowlist, credential broker or delegated token, harness-written audit log, kill switch; run 10 tasks on the cheapest capable model | Working loop; first cost-per-task numbers from real usage counts |
| 8–15 | Run 10 tasks a day across the three workflows (80 runs); fix grounding and scaling bugs; add batching; try the next model tier only where success is the blocker | Daily metrics; a short list of failure classes |
| 16–18 | Red-team: run your own injection probes against the pages the agent visits; confirm every gated action actually stops; test the kill switch under load | Probe results; residual-risk statement |
| 19–20 | Final 50-task run at the chosen model and effort; write the decision memo | Go / no-go with the four metrics and the two safety counters |
Budget, with inputs. Two hundred runs of the module 2 task (30 steps, 1280×800 screenshots, B = 6,000, S = 1,334, T = 150, OUT = 120) on Sonnet 5.5 with all screenshots kept and no caching cost 200 × $1.78 = $355. With a stable cached prefix, 200 × $0.23 = $46. On Haiku 5.5, pruned, 200 × $0.038 = $7.60. The model bill is not where the pilot’s money goes; the engineer’s month is. Spend the tokens on more runs, not on a bigger model, until success is the thing that is stuck.
Most teams that ask “should we build a browser agent?” should answer “not for that.” The honest use cases in 2026 are narrow: the long tail of portals with no API, legacy desktop software, and one-off migrations, all under a human who confirms the irreversible steps. Inside that boundary the tools are good and getting cheap fast; Haiku 5.5 at $0.10 per million input tokens doing 72.4% on an offline OSWorld 2.1 subset was not on anyone’s roadmap a year ago. Outside it, the right agent is an API call, a protocol, or a person. The skill this course is trying to teach is telling the two apart before the pilot, not after.
No-go as designed, and a redesign rather than a rejection. At 1.4 interventions per task the human is doing the job with extra steps, so the time saving is probably negative even though the token cost is trivial. Look at what the interventions are. If they are confirmations on genuinely irreversible steps, the task may simply not be an agent task yet. If they are corrections to grounding or navigation, that is engineering debt you can pay down. If they are the agent asking because hidden state arrived mid-task, split the task at that boundary and automate only the half before it. The metric did its job: it told you where the pilot actually failed.