Tarık Şenkal
Writing
Computer-Use Agents: The 60-Point Gap Between Demo and Production
Agents 7 min read

Computer-Use Agents: The 60-Point Gap Between Demo and Production

How computer-use agents actually work: the 83.5% vs 20.6% benchmark gap OSWorld 2.0 exposed, the perceive-ground-act loop, grounding traps and the security model.

İsmail Tarık Şenkal
AI developer · Co-founder at HatsonTech

In the demo video the agent opens a browser, fills the form, downloads the file, and it all takes forty seconds. Put the same agent on a real workflow and it gets lost around step three hundred. That is not a sloppy implementation; it is a measured, published pattern. The gap between two 2026 benchmark results gives you the single most useful frame available on computer-use agents. This article covers that gap, the loop an agent actually runs, where grounding breaks, and when you should reach for plain automation instead.

Two numbers: 83.5% and 20.6%

A computer-use agent looks at a screenshot and emits mouse and keyboard actions — it operates a computer the way a person does, rather than through an API.

The reference benchmark here is OSWorld. Its verified first version is effectively saturated: the best result is 83.5%, against a human baseline of 72.36% on the same set. Read only that, and you would happily conclude that agents have passed humans.

OSWorld 2.0 (arXiv:2606.29537, submitted 28 June 2026) was built to test exactly that claim: 108 long-horizon workflows, a median human completion time of about 1.6 hours, and an average of 318 tool calls per task. The best frontier agent completes 20.6% of them at a 500-step budget, with a 54.8% partial score.

The 60-point gap is not a model defect — it is the difference between a short task and a long one.

The practical consequence: a demo showing an agent finish in three steps inside one application is no evidence at all that it can carry a three-hundred-step process. The right procurement question is not “what did it score” but “at what step budget was it measured”.

The loop: perceive, ground, act, verify

Every computer-use agent turns the same four-step loop. Conceptually:

while not done and step < step_budget:
    frame  = take_screenshot()               # 1. perceive
    plan   = model(frame, goal, history)     # 2. ground + decide
    result = execute(plan.action)            # 3. act (click/type/scroll)
    done   = verify(plan, take_screenshot()) # 4. verify
    step += 1
text

The cost of this loop surprises most teams. Every step means at least one screenshot; every screenshot means image tokens; a 318-step task means the same window entering context dozens of times. That is why serious deployments do three things as a matter of course: drop stale screenshots from context, send downscaled rather than full-resolution frames, and impose a step budget.

Tip: Treat the step budget as a safety control, not a performance knob. An agent without one does not stop when it fails — it oscillates between the same three screens indefinitely and you pay for it. Pair the budget with a "stop if the screen has not changed in N steps" rule, which catches most livelocks.

Pixels or the accessibility tree?

Grounding — turning an intent like “the save button” into a coordinate — is the most brittle part of the system. Two approaches:

  • Pixel-based: the model sees only the screenshot and emits (x, y). It works everywhere — games, remote desktops, canvas UIs — and is fragile to resolution, DPI scaling and theme changes.
  • Accessibility-tree or DOM based: the model reads a structural representation and selects an element by identity. Far more stable and verifiable, but only available where the application publishes that tree properly.

What works in production is usually hybrid: structural selectors where available, pixels as the fallback. The load-bearing piece is verification — after an action, confirm with a separate check that the expected change actually happened. An agent that never distinguishes “I clicked” from “the click worked” will carry its mistake for another three hundred steps.

Where locale breaks grounding

Text matching against on-screen labels is where locale quietly destroys an agent, and Turkish is the textbook case. Standard case-folding is wrong for Turkish, and you can verify the behaviour directly in Python:

>>> "I".lower()          # Turkish expects the dotless 'ı'
'i'
>>> "İ".lower()          # returns TWO characters, not one
'i̇'                # 'i' + U+0307 combining dot above
>>> len("İ".lower())
2
>>> "ISTANBUL".lower()   # not 'ıstanbul'
'istanbul'
text

So matching a button labelled “İPTAL” with text.lower() == "iptal" fails because of an invisible combining character. The fix is a locale-aware fold followed by Unicode normalisation:

import unicodedata

def tr_fold(s: str) -> str:
    """Lowercase Turkish UI text safely and normalise the result."""
    s = s.replace("I", "ı").replace("İ", "i")   # I->ı, İ->i
    s = s.lower()
    return unicodedata.normalize("NFC", s)

assert tr_fold("İPTAL")    == "iptal"
assert tr_fold("ISTANBUL") == "ıstanbul"
python

Two related traps sit next to it. Keyboard layout: punctuation lives in different places on Turkish Q and Turkish F layouts, so text entry must go through a type/insert action rather than raw key codes. And date and number formats: the screen shows 13.08.2026 and 1.250,75, and a verification step that parses those with English assumptions silently produces the wrong answer.

One hard boundary: do not automate identity-bound government or banking flows with a pixel agent. Those actions are irreversible, tied to a real identity, and frequently prohibited by the service terms. There is no undo button when an agent clicks the wrong one.

Security: the unsolved part

A computer-use agent by definition looks at untrusted content and then acts. That is ideal ground for indirect prompt injection: hidden text on a page reads to the agent as an instruction, and the agent follows it. OpenAI stated in December 2025 that prompt injection is “unlikely to ever be fully solved”, and Brave demonstrated indirect injection against Perplexity Comet using hidden page elements.

The correct reading is not “don’t use agents” but “narrow what the agent can do”. The boundaries that work in production: run the agent in a dedicated VM or container; restrict egress with an allowlist of the domains it genuinely needs; keep session cookies and password managers out of the profile the agent uses; and require human approval for every irreversible action. No text the agent reads is an instruction to the agent.

Agent or Playwright?

The most expensive mistake is handing a deterministic job to an agent. The decision table:

SituationRight tool
Same site, same flow, thousands of times a dayNot an agent — a Playwright/Selenium script
The system has an APINot an agent — call the API
Low volume, frequently changing UIAn agent makes sense
Exploratory work that differs every timeThe agent’s real domain
Irreversible, identity-bound transactionNot an agent — a human

In practice the sturdiest architecture is hybrid: let the agent discover the path, then compile that path into a deterministic script. Sending the agent out to rediscover it on every run is both the most expensive and the most fragile option.

Key takeaways

  • 83.5% on short tasks versus 20.6% on 108 long-horizon workflows — that is the demo-to-production gap, quantified.
  • A step budget plus a "screen unchanged" stop rule are the two controls that prevent runaway loop costs.
  • Never use naive lower() on Turkish UI text: İ folds to two characters and silently breaks matching.
  • Give deterministic, high-volume work to a script; use the agent for discovery, not repetition.
What is a computer-use agent?

An AI agent that reads screenshots and emits mouse and keyboard actions, operating a computer the way a person does. It makes automation possible on systems with no API or no available integration, at the cost of being slow, expensive and fragile over long tasks.

Should I use an agent or Playwright?

If the flow is stable and the volume is high, Playwright is always cheaper, faster and more reliable. Agents win where the interface changes often or the task differs every time. The best setup combines both: the agent discovers the path and a script replays it.

Are browser agents safe?

Not by default. Because the agent reads untrusted page content and then acts on it, indirect prompt injection applies, and no complete fix exists. VM isolation, an egress allowlist, keeping sessions out of the agent's profile and human approval for irreversible actions bring the risk down to something manageable.


Computer-use agents do add a genuine capability, but the 60-point gap between a short demo and a long workflow is the number your architecture should be built around. For the shape of the loop itself see autonomous agent architectures, for why on-screen text must never be treated as an instruction see prompt injection and jailbreaks, and to find out whether your agent actually works see agent evaluation.

İsmail Tarık Şenkal
Author
İsmail Tarık Şenkal

In short: I turn artificial intelligence that comes out of research into products people can rely on day to day.

Related posts