Merit ACClaude architecture
Guide · agent architecture

Claude computer use: architecture and safety boundaries

Usually, giving a model a capability means giving it a tool: a named function with typed input, typed output, and one narrow job. Computer use is a different shape. The model looks at a screenshot of a real screen, decides what a person would do next, and issues a mouse click, a keystroke, or a scroll, using the same primitives and the same interface a human operator has. It's useful for a specific class of problem and a much bigger architectural commitment than adding another tool. This guide covers when the trade is worth making and what to build around it so it doesn't turn into an incident.

1. What computer use is

In ordinary tool use, the model's action space is exactly the set of functions it's been given, each with a schema that constrains a valid call. It can't do anything a tool wasn't built to do. Computer use replaces that with something close to unconstrained. The model receives a screenshot, reasons about what's visible (a button, a text field, a menu, an error dialog), and responds with a low-level action: move the pointer here, click, type this string, press this key, scroll. The harness executes the action against a running application, takes a new screenshot, and hands it back. The loop repeats until the task is done or the model gives up.

The target application needs no changes. There's no API to integrate, no schema to write, no endpoint to authenticate to. The model operates the same pixels, widgets, and click targets a human would, through the same input primitives. That's the value: "can this be automated?" stops depending on whether the system has a programmatic interface and starts depending on whether the task can be described and executed visually, which covers far more tasks.

It's also the source of the risk this guide mostly covers. A typed tool's action space is as large as its schema. Computer use's action space is everything a mouse and keyboard can do to whatever is on screen, which equals the reach of the human account the session runs under. Design for that from the start, before an agent clicks something it shouldn't.

2. When it's the right tool

Computer use earns its place under a narrow set of conditions. A task involving a graphical application is not enough on its own. The clearest case: no API exists for the task. Plenty of software (older, internal, vendor-managed, or never built for automation) has no programmatic surface at all. If the UI is the only way in and the task needs that system, computer use acts where a typed tool structurally cannot.

The second case is an inherently visual task, where the judgment is about what something looks like. Verifying a page rendered correctly, checking a design against a mock, confirming a dialog shows the right warning in the right place: these are questions about visual and spatial layout, which a screenshot captures and an API response usually doesn't.

The third case is a closed system that deliberately exposes only a UI: a vendor's admin console with no public API, a legacy system a company can't modify, software whose only supported integration point is a person sitting in front of it. In all three cases, computer use fills a gap nothing better can fill. Don't use it as a more entertaining way to do what a typed tool already does well.

3. Why it should be a last resort, not a default

The usual mistake is reaching for computer use on a task a narrow tool would handle better. See Claude tool use and function calling for the full case for typed tools. Here, the rule is: if a narrow, typed tool or API exists for the task, use it. Computer use is slower, because every step round-trips through a screenshot and a fresh interpretation instead of one structured call. It's more brittle, because a UI can change at any time (a redesigned button, a moved menu, a one-time onboarding dialog), while a stable API contract promises not to. It's harder to constrain precisely, as the next section explains. It's harder to audit, because "the model clicked at these coordinates after interpreting this screenshot" is a much less legible log entry than "the model called update_customer_address(customer_id, new_address) and the API returned success."

So computer use is expensive in the four ways that matter for production: latency, reliability, precision, and reviewability. A well-designed API call costs less on all four than a UI-driving sequence doing the same job. Treat computer use as the fallback for tasks nothing else can reach. A system that reaches for it first because it feels more general or demos better, and asks "is there an API for this?" second, has the order backwards.

4. The reach problem: scoping what it can touch

Ordinary tool use answers "what can this agent do?" exactly: what its tools allow. A tool exposing only read_ticket(ticket_id) cannot delete a ticket no matter what the model attempts, because deletion isn't in its action space. The authorization boundary is enforced by what was built.

Computer use lacks that property, and this risk is specific to it. An agent driving a UI has the reach of a person at that computer: anything visible and clickable is within its action space. If the session is logged into an account that can see billing settings, or a file browser that reaches unrelated directories, or an admin panel with a delete button two clicks from the task, that reach exists whether or not the task needs it. There's no function signature to narrow. You scope the agent by constraining what it can see and reach at all, which section 6 covers.

5. Brittleness: misread pixels, moved buttons

The second specific risk is precision. A typed tool call either matches its schema or is rejected before it runs, a mechanical check between intent and execution. A computer-use action has no such check. The model interprets a screenshot, decides some pixel coordinates are the button it wants, and the harness clicks there. If the interpretation is slightly off (a misread label, two similar buttons confused, a screenshot that went stale half a second before the screen changed), the click still happens, on the wrong thing.

The same failure appears over time even when the model reads the screen perfectly, because software changes. A button that moves three pixels in a redesign, a new confirmation dialog before a formerly one-click action, a renamed menu item: any of these can invalidate an interaction that worked until the UI changed. An API integration breaks loudly, with a version mismatch or a 404, when the contract changes. A UI-driving agent can fail silently, clicking whatever is now at those coordinates and proceeding as if it succeeded.

Neither is a reason to avoid computer use for tasks that need it. Both mean one misread click or one UI change can produce an executed action with consequences, which a rejected malformed API call cannot. That puts the weight on containment, logging, and approval.

6. Constrain the environment, not just the model's judgment

The core move: don't rely on the model to judge what it should and shouldn't touch on a full production desktop. Build an environment where only what the task needs is reachable, so a mistake has a contained blast radius instead of a human user's full reach.

This follows from section 4: if a tool contract can't scope what the agent touches, the environment must. Run a computer-use agent in a sandboxed, disposable session, a fresh isolated VM or container built for the task, with only the applications and data the task requires. Never hand it a general-purpose desktop with a browser logged into everything an employee uses. If the task is "renew this one vendor's subscription through their admin console," the environment has that console open, logged in with an account scoped to that purpose, and almost nothing else reachable. A stray click has nowhere consequential to land.

Disposability matters as much as isolation. Tear the environment down and rebuild it for each task. Then a mistake in one run doesn't leave state that affects the next, and a compromised or confused session can't leave something behind for a future session. Size the environment the way a good API tool sizes its scope: as small as the task allows. Handing the agent a full desktop because it's faster to set up is the same instinct discipline 4 of The ten disciplines of governed agentic DevSecOps warns against for ordinary agents: inheriting broad access because scoping it down takes more upfront work.

7. The observability requirement, specific to computer use

Ordinary tool use leaves a legible trace: a function name, arguments, and a return value, all structured data a person or policy engine can read. Computer use doesn't. A sequence of coordinates and keystrokes means little to a reviewer. What makes it auditable is a screenshot-and-action log: the image the model saw at each step, paired with the action it took, kept in sequence for the whole run.

That log is the only record of what a computer-use agent did. Without it, reconstructing an incident means guessing backward from the final state. If a task meant to update one field left a system in an unexpected state, the screenshot log shows which screen the agent saw, what it clicked, and where the click landed, the way a flight recorder shows what the pilot saw and did. Without it, the answer to "what happened" is "we can only see where it ended up."

Store the log somewhere that outlives the environment. The containment strategy in section 6 tears the environment down, so ship the record out before teardown.

8. Human oversight and checkpoints

Computer-use workflows combine reach that's hard to scope with precision that fails silently. They need more human oversight than an equivalent tool-use loop. The opposite instinct is tempting, because computer use often gets built for tasks that look repetitive and low-stakes: clicking through familiar screens the same way every time. The risk isn't in the common case where the screens look as expected. It's in the case where they don't and the agent proceeds because nothing forced it to check.

Put approval gates before consequential actions (a purchase, a data deletion, an account change, anything expensive or hard to reverse), and show the reviewer the screenshot the agent is about to act on. "I'm going to click submit on this form" gives a reviewer nothing to evaluate. The screenshot, with the filled-in fields visible, lets them catch a form that doesn't say what the agent thinks it says. This is the approval discipline from The ten disciplines of governed agentic DevSecOps, applied to actions that are clicks instead of typed function calls: the reviewer needs to see what the model saw.

9. Worked example: a good use and a bad one

The bad use. A team wants to automate renewing a set of internal software licenses. The vendor's admin portal has a documented REST API for exactly this: an authenticated endpoint that extends a license by a given period and returns a confirmation. The team builds a computer-use agent anyway, because a demo of the agent logging in, clicking through menus, and filling in the renewal form looks impressive. The task gets done, but the system is slower than an API call, will break the next time the vendor redesigns the portal, and is harder to review than one logged function call with a typed argument and response. An API existed the whole time; computer use was chosen for how it looks.

The legitimate use. The same team must also renew a license with a smaller vendor whose only admin surface is a web portal with no API, no webhook, and no programmatic access. They confirmed this by checking the documentation and then asking the vendor's support team. The task is what a person would otherwise do by hand each cycle: log in, open billing, confirm the renewal, screenshot the confirmation. Here the UI is the only integration point. The agent runs in a disposable, scoped environment, logged in with an account that can only see that vendor's billing section, with a full screenshot log for the run and a human approval step before the final confirmation click.

A quick test before reaching for computer use on a task:

1. Does a documented API or SDK exist for this system? If yes, use it —
   stop here.
2. Does the task require judging what something visually looks like,
   not just what data it returns? If yes, computer use may be warranted.
3. Is the UI genuinely the only integration point — no API, no webhook,
   no export, confirmed rather than assumed? If yes, computer use may
   be warranted.
4. If neither 2 nor 3 holds, the task probably doesn't need computer
   use yet, even if it's technically possible to do it that way.

Computer use is useful for tasks nothing else can reach. The architecture around it decides whether it's a contained, auditable part of a system or an unscoped liability. Use the tool-design principles in Claude tool use and function calling to decide when it's warranted, and the containment, logging, and approval patterns above whenever it is.

Keep reading