Browser Agents Don't Need Better Models. They Need Better Eyes. - Kushan Raj, ARK
Read the talk
Better Browser Agents Start with Better Page Representations
Kushan Raj argues that compact browser state and explicit action feedback can help agents act faster, diagnose failures, and plan longer sequences without relying on a more expensive model.
From a talk by Kushan Raj
At a glance
Ideas worth remembering
Raj’s central hypothesis is that browser infrastructure can unlock more of an existing model’s capability by supplying useful page context, supporting long sequences, and making failures understandable.
The representation trades a little more context than one screenshot for broader page coverage: the example estimates are 1,800 tokens for Markdown, 1,100 for a screenshot, and 20,000 for the full DOM.
Feedback about appearing elements, disappearing elements, removed obstructions, and unsuccessful clicks gives the agent evidence about execution outcomes rather than merely recording attempted actions.
The demonstrations report faster behavior with a cheaper model, but do not establish a controlled speedup or aggregate reliability. The trekking example specifically supports successful date entry, not completion of a booking.
The cost of one click
Kushan Raj begins with a gap between the appeal of browser agents and his own experience: he finds the idea compelling, but does not use them much. To explain why, he introduces a browser challenge involving a long sequence of tasks. Such a challenge tests whether an agent can keep making progress across many interactions, beyond recognizing a single button.
The first problem is latency before meaningful progress. Raj reports that the demonstrated agent takes roughly 10–20 seconds just to click Start. It then reaches step one of a 30-step challenge. Even without a final completion time, the example exposes a practical concern: slow individual interactions make a long workflow cumbersome before the agent encounters its harder decisions.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
An environment that helps the model execute
Raj next presents his own agent on the same website. He describes an interface that lets the user follow what the agent is thinking, alongside execution that he says is substantially faster despite using a cheaper model. His hypothesis is that model capability is already sufficient for more useful behavior, while the infrastructure around the model prevents it from acting effectively. The comparison is a demonstration; he does not identify the models or provide a controlled measurement here.
His diagnosis centers on an agent trying to click something without understanding what is happening on the page. A useful environment should let it plan a long sequence, identify where execution failed, and choose the next click correctly. Raj introduces a compressed page representation as the foundation: the model receives a view of the entire page in relatively few tokens. The intended benefit is enough context to connect an action to the surrounding page state and reason about what should happen next.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
When seeing a button does not produce progress
The first concrete workflow is downloading Raj’s Aadhaar. He expects the initial interaction to be straightforward: take a screenshot, recognize the visible button, and click it. In the Claude demonstration, however, he reports that the agent gets stuck. From 46 seconds into that example video, it takes a screenshot, scrolls, and takes another screenshot; Raj says the process lasts two minutes. Repeated observation is not enough to move the task forward.
Raj then presents his agent starting and reaching what he describes as completion almost immediately, again emphasizing that it uses a cheap model. This illustrates his intended user experience: a browser task should resolve quickly enough to feel convenient. He supplies no exact runtime for his agent or detailed account of the downloaded result, so the example supports his reported contrast in behavior without establishing a measured speedup or a general success rate.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Getting through a date-selection interaction
The second example comes from planning a Sunday trek with friends. Raj describes difficulty navigating a website whose language he is not fluent in, then asks Claude to make the booking. The specific failure is date selection: the agent cannot pick a date and becomes stuck. This gives the comparison a concrete interaction to examine rather than treating the whole booking request as one undifferentiated task.
In his agent’s demonstration, Raj describes it making the selection and entering the date. That is the supported outcome of this example. Although the original request was to book the trek, the account does not establish a completed reservation or payment. Its narrower lesson is that successfully operating a troublesome date control can remove a point where another agent stops progressing.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
From commands to a URL-and-intent API
Raj considers open-sourcing the project because he does not see the code itself as especially defensible. His proposed product could expose the commands used in the demonstrations through an API: a caller supplies a URL and an intent, and the service executes the task and returns a result. He also mentions a website or plugin as possible interfaces. These remain proposed directions; the common goal is to make browser agents faster, cheaper, and more reliable so that people use them routinely.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Compact Markdown and feedback about what changed
The closing technical explanation makes the representation concrete: Raj uses Markdown to represent a particular browser page. For one example, he estimates roughly 20,000 tokens for the full DOM, about 1,100 tokens for a screenshot, and about 1,800 tokens for his Markdown. The Markdown therefore costs more tokens than that individual screenshot, but he says it covers the entire page, whereas the screenshot shows only one portion. Against the full DOM, its advantage is substantial compression. These are estimates for one example, with no extraction algorithm or account of omitted information given.
The runtime also tells the agent how the page changes. Its feedback identifies newly appearing content, content that has disappeared, and obstructions that have been removed from something the agent wanted to click. It can report that an attempted click did not happen. These observations distinguish issuing an action from successfully carrying it out: the agent receives information about the result and the conditions that may now permit another attempt.
Raj attributes this feedback to tracking the browser page throughout execution. He closes by combining the pieces: the compact representation can accompany a screenshot, giving the model both the compressed page description and visual information. His claim is that this relatively inexpensive context helps the model reason well enough to construct long sequences of tasks. The explanation establishes the role of page representation and action feedback, but leaves the details of compression and failure detection unspecified.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Read the complete timestamped transcript
- 0:00
Okay, everyone. I am Kushan.
- 0:02
I worked at Seraphim as a founding
- 0:03
engineer for 2 years. Let's talk about
- 0:05
what I'm interested in right now, and
- 0:06
that is browser agents.
- 0:07
Browser agents as an idea are so cool,
- 0:09
right? The browser agent should go
- 0:11
crazy, right? I personally have not seen
- 0:12
that adoption, and me myself, I don't
- 0:14
use browser agents that much. I've been
- 0:15
exploring that for some time. I've been
- 0:17
trying to understand why that is. So, on
- 0:19
my screen right now, we have the browser
- 0:20
challenge.
- 0:21
But, this is a very interesting
- 0:23
benchmark for browser agents because
- 0:25
there are so many things that you have
- 0:26
to do, long rising sequencing of your
- 0:28
tasks. And this actually reveals, you
- 0:30
know, why browser agents suck. If you
- 0:31
saw at the beginning of the video,
- 0:33
the browser this agent took like maybe
- 0:35
10-20 seconds just to click the start
- 0:37
button. And now, we're on step one.
- 0:38
There are 30 steps, and it has taken so
- 0:40
long just to click one button.
- 0:42
Um so, enough of this. I want to show
- 0:44
you what I've been building. So, same
- 0:45
website.
- 0:47
Um I've tried to sort of replicate the
- 0:48
feeling of seeing what's happening, you
- 0:50
know, you can see what the browser agent
- 0:51
is thinking. But as you can see, it is
- 0:53
so much faster and so much quicker, and
- 0:54
I'm using a much cheaper model, right?
- 0:56
The hypothesis here is models are pretty
- 0:58
smart, but it's the infra around them
- 0:59
that sucks. If you noticed in the video
- 1:01
earlier, maybe I'll put a screenshot,
- 1:03
the agent is trying to debug what's
- 1:05
going on. It's trying to click
- 1:06
something, but it doesn't understand
- 1:07
what's going on. So, my core thesis here
- 1:09
has been
- 1:10
give a nice environment for the agent to
- 1:12
use, right? So, where it can plan long
- 1:13
sequences, it can figure out where it
- 1:15
failed, what is going on, and it can
- 1:17
plan the click correctly. I figured out
- 1:18
is a cool representation which
- 1:20
compresses the website and lets the
- 1:22
agent see the entire page in very few
- 1:24
few tokens. Now, I want to show you some
- 1:26
actual examples. Let's say I want to
- 1:28
download my Aadhaar. Um so, this is
- 1:30
Claude trying to do it. So, I'd assume
- 1:32
that this is very simple for a browser
- 1:33
agent. I take a screenshot, you see the
- 1:34
button right there, click it. Uh but
- 1:36
then, what's interesting is that it got
- 1:38
stuck after this point. So, from 46
- 1:40
seconds until the end of this video, it
- 1:42
took a screenshot, it scrolled for some
- 1:43
reason, it took a screenshot.
- 1:45
Basically, this entire process took 2
- 1:47
minutes, whereas
- 1:49
in my case, in our video,
- 1:55
so, it just boots, and
- 1:57
boom, done.
- 1:58
And that's the beauty of a browser
- 2:00
agent. Just how quick was that? And I'm
- 2:02
using such a cheap model for this.
- 2:03
Another interesting example is So, my
- 2:06
friends and I are going trekking on
- 2:08
on Sunday. I was wondering, you know
- 2:10
what? Because this this site is in
- 2:12
Canada and I am not very fluent in
- 2:13
Canada.
- 2:14
Like it took me some time to figure out
- 2:16
this website. So, I asked Claude like,
- 2:17
"Hey, can you book this for me?" And by
- 2:19
the end of it, it's unable to pick a
- 2:20
date and it just stuck. This is the
- 2:22
video of my agent.
- 2:34
You can see it selects it and
- 2:39
puts in the date and boom, done. Right?
- 2:41
It's so simple and convenient to use in
- 2:43
theory. So, what's next, right? What am
- 2:45
I planning on doing? I'm thinking of
- 2:46
open sourcing this project because again
- 2:48
my this code is not super defensible.
- 2:50
The product that I want to give is again
- 2:52
maybe an API that as you can see we were
- 2:55
running these commands. Maybe I just
- 2:57
want to expose this command as an API.
- 2:59
Give me a URL, give me your intent and I
- 3:01
will execute it for you and give it back
- 3:02
to you and or maybe open this as a
- 3:04
website
- 3:05
or expose this as a plugin. But yeah, so
- 3:08
bottom line is I want to make browser
- 3:10
agents faster, cheaper and more reliable
- 3:13
and just make sure everybody in the
- 3:14
world is using them because they can
- 3:15
just do so much for you.
- 3:17
So yeah, that's the broad idea here.
- 3:19
Thank you for watching.
- 3:24
This
- 3:25
entire
- 3:26
markdown
- 3:28
presents the website, that particular
- 3:30
page. And let's actually do this
- 3:31
interesting comparison, right? Let's go
- 3:33
to AIS. The full DOM for this would be
- 3:35
around 20,000 tokens. But so, let's say
- 3:37
we have this screenshot.
- 3:38
All right, this screenshot's about 1,100
- 3:40
tokens.
- 3:41
My markdown's about 1,800 tokens and
- 3:43
instead in one screenshot where you
- 3:44
could see only one particular snippet,
- 3:46
you can see the entire
- 3:48
website, right? A couple of other things
- 3:50
that it's important to give feedback,
- 3:51
right? So, we say that okay, hey, these
- 3:53
are the new things that have popped up
- 3:54
on the page. This is now gone, right?
- 3:56
And similarly, we can say that you know,
- 3:57
this thing that was blocking up things
- 4:00
that you wanted to click has now been
- 4:01
removed. You know, we give it feedback
- 4:02
that you tried to click this, but that
- 4:03
didn't happen because you know, we're
- 4:04
keeping track of the entire end-to-end
- 4:06
browser
- 4:07
page.
- 4:08
Right? So, all of this together, what I
- 4:10
built is a very clean representation
- 4:12
that that basically compresses the
- 4:13
website, and you can give this along
- 4:14
with the screenshot. It's pretty cheap
- 4:16
token-wise. Um so, the model can reason
- 4:18
really well, and then it can construct
- 4:19
this long sequence of tasks to execute.