Browser Agents Don't Need Better Models. They Need Better Eyes. - Kushan Raj, ARK

Kushan Raj· ARK4:25

Read the talk

Browser Agents Don’t Need Better Models. They Need Better Eyes.

Kushan Raj argues that browser agents often waste capable models on fragmented page views and ambiguous actions. His prototype instead gives the model compact whole-page context and explicit feedback about what changed after each interaction.

From a talk by Kushan Raj

At a glance

Ideas worth remembering

  • A capable model can still waste time when its browser interface supplies fragmented observations and weak confirmation that actions succeeded.

  • For the demonstrated page, Raj compares a roughly 20,000-token DOM with an approximately 1,100-token screenshot and an approximately 1,800-token whole-page Markdown representation.

  • Markdown and screenshots are complementary: one provides compact page-wide structure, while the other preserves rendered visual context.

  • State deltas—what appeared, disappeared, became unblocked, or failed to change—give the model a clearer recovery signal than repeated screenshots alone.

  • The examples support an interface-design hypothesis, not a general performance result: the talk provides no controlled success-rate, latency, cost, safety, or information-loss evaluation.

The first click is already too slow

Browser agents should be an obvious convenience, yet Raj opens by admitting that he rarely uses them himself. His first demonstration explains the hesitation: a browser challenge requires 30 sequential steps, but the reference agent spends roughly 10–20 seconds just clicking Start. At that pace, every observation, click, and recovery attempt compounds across the remaining workflow. 0:30

Captures Raj’s faster prototype running on the same challenge for a direct visual contrast with the reference agent.
Captures Raj’s faster prototype running on the same challenge for a direct visual contrast with the reference agent.

Raj then runs his prototype on the same challenge. It moves faster while using what he describes as a cheaper model. This motivates his central hypothesis: the model may already be capable enough, but the browser environment makes it spend too much time reconstructing what happened. In the slower run, the agent tries to click, fails to understand the result, and begins debugging through more browser observations. 0:48

A better runtime, in Raj’s framing, must let the model plan longer sequences, locate the step where execution failed, and choose its next interaction using a useful representation of the page. He briefly introduces a compressed website representation here, but the recording postpones its concrete token comparison and state-tracking mechanism until after the apparent closing. 1:01

Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:00 · section reference included

Visible controls are not enough

Aadhaar download. Raj’s first practical example looks trivial: the desired download button is visible in a screenshot. Yet the demonstrated Claude run stalls after reaching it. From about 46 seconds into that demonstration, it takes another screenshot, scrolls without an evident reason, and continues observing the page. Raj says the full attempt lasts two minutes. Seeing the target once was not enough to establish whether the click worked or what state followed. 1:30

Shows the date entered and the demonstrated step completed, providing the outcome of the booking comparison.
Shows the date entered and the demonstrated step completed, providing the outcome of the booking comparison.

Raj’s prototype completes the corresponding workflow almost immediately after starting. The contrast suggests that browser speed depends on more than visual recognition: the runtime must make action outcomes legible enough that the model can continue instead of repeatedly inspecting the page. This remains a demonstration rather than a controlled evaluation; the talk provides no repeated trials, matched settings, success rates, or latency breakdown. 1:56

Kannada booking site. The next example adds unfamiliar language and form state. Raj wants to book a Sunday trek through a Kannada-language site, and says he is not fluent in Kannada. In the Claude run, the agent cannot select a date and eventually stalls. His prototype selects the control, enters the date, and completes the demonstrated step. 2:08

A date picker exposes the difference between locating an element and understanding an interaction. The agent must know whether a calendar or field became active, whether the selected date persisted, and whether the page accepted the input. Raj’s demonstrations suggest that this transition information is where conventional screenshot-driven behavior becomes brittle, although the talk does not test the approach against authentication challenges, CAPTCHAs, anti-bot defenses, or irreversible actions.

Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

1:00 · section reference included

Package the runtime as an API

Raj is considering open-sourcing the project because he does not regard the implementation itself as highly defensible. The product could instead expose the execution command as an API: provide a URL and an intent, let the runtime perform the workflow, and return the result. He also considers offering the same capability through a website or plugin. 2:39

Those delivery options all wrap the same browser runtime, but the talk does not address the operational controls an execution service would need: credential handling, scoped authorization, confirmation before consequential actions, and evidence that the requested task actually completed. Raj closes this portion with the broader goal of making browser agents faster, cheaper, and more reliable enough for routine use. 3:09

Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

2:39 · section reference included

Compress the page, then report the delta

After the apparent closing, the recording returns to the core technical mechanism. Raj compares three representations of one page: a full DOM of roughly 20,000 tokens, a screenshot of about 1,100 tokens, and his Markdown representation of about 1,800 tokens. The Markdown is intended to describe the entire page, while one screenshot shows only the current viewport. Token count and coverage both matter: cheaper whole-page context gives the model a navigational map without forcing it to rediscover off-screen content. 3:24

Illustrates end-to-end page tracking and feedback when a click fails or a blocking element is removed.
Illustrates end-to-end page tracking and feedback when a click fails or a blocking element is removed.

Raj proposes using the Markdown together with a screenshot. The two representations serve different purposes: Markdown supplies compact page-wide structure, while the screenshot retains rendered visual context. The recording does not explain the extraction algorithm or measure what the compression discards. Layout-dependent meaning, canvas content, nested controls, and other visual state could therefore remain difficult to represent faithfully. 3:34

The runtime also compares browser state across actions. It can report which elements appeared, which disappeared, and whether something blocking a target has been removed. If a click produces no expected change, the model receives that failed transition as feedback instead of having to infer it from another raw screenshot. 3:54

This turns browser operation into a closed loop: observe a compact page state, plan a sequence, execute an interaction, compare the new state with the old one, and either continue or revise the plan. “Better eyes” therefore means more than stronger image recognition. It means showing the model enough of the page and explaining what its actions changed. The recording ends before specifying the action protocol or presenting systematic evaluations, so the prototype supports a promising interface thesis rather than proving that model improvements no longer matter.

How it fits togetherThe browser-state feedback loop

The runtime maintains end-to-end page state across interactions.

Whole-page structure and rendered context inform an action plan; state deltas then confirm whether execution worked or needs revision.

Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

3:24 · section reference included

Resources

  • Bringing agents onto the world wide web

    Extends the harness-first argument with browser infrastructure, network-request interception, reusable skills, and agent-oriented browser tools.

  • Harnesses in AI: A Deep Dive

    Examines how deterministic infrastructure, browser-state handling, and verification can improve a model-driven agent loop.

  • The Current State of Browser Agents

    Provides a broader comparison of screenshot- and DOM-based agents, including authentication, anti-bot defenses, latency, and browser-infrastructure constraints.

Read the complete timestamped transcript
  1. 0:00

    Okay, everyone. I am Kushan.

  2. 0:02

    I worked at Seraphim as a founding

  3. 0:03

    engineer for 2 years. Let's talk about

  4. 0:05

    what I'm interested in right now, and

  5. 0:06

    that is browser agents.

  6. 0:07

    Browser agents as an idea are so cool,

  7. 0:09

    right? The browser agent should go

  8. 0:11

    crazy, right? I personally have not seen

  9. 0:12

    that adoption, and me myself, I don't

  10. 0:14

    use browser agents that much. I've been

  11. 0:15

    exploring that for some time. I've been

  12. 0:17

    trying to understand why that is. So, on

  13. 0:19

    my screen right now, we have the browser

  14. 0:20

    challenge.

  15. 0:21

    But, this is a very interesting

  16. 0:23

    benchmark for browser agents because

  17. 0:25

    there are so many things that you have

  18. 0:26

    to do, long rising sequencing of your

  19. 0:28

    tasks. And this actually reveals, you

  20. 0:30

    know, why browser agents suck. If you

  21. 0:31

    saw at the beginning of the video,

  22. 0:33

    the browser this agent took like maybe

  23. 0:35

    10-20 seconds just to click the start

  24. 0:37

    button. And now, we're on step one.

  25. 0:38

    There are 30 steps, and it has taken so

  26. 0:40

    long just to click one button.

  27. 0:42

    Um so, enough of this. I want to show

  28. 0:44

    you what I've been building. So, same

  29. 0:45

    website.

  30. 0:47

    Um I've tried to sort of replicate the

  31. 0:48

    feeling of seeing what's happening, you

  32. 0:50

    know, you can see what the browser agent

  33. 0:51

    is thinking. But as you can see, it is

  34. 0:53

    so much faster and so much quicker, and

  35. 0:54

    I'm using a much cheaper model, right?

  36. 0:56

    The hypothesis here is models are pretty

  37. 0:58

    smart, but it's the infra around them

  38. 0:59

    that sucks. If you noticed in the video

  39. 1:01

    earlier, maybe I'll put a screenshot,

  40. 1:03

    the agent is trying to debug what's

  41. 1:05

    going on. It's trying to click

  42. 1:06

    something, but it doesn't understand

  43. 1:07

    what's going on. So, my core thesis here

  44. 1:09

    has been

  45. 1:10

    give a nice environment for the agent to

  46. 1:12

    use, right? So, where it can plan long

  47. 1:13

    sequences, it can figure out where it

  48. 1:15

    failed, what is going on, and it can

  49. 1:17

    plan the click correctly. I figured out

  50. 1:18

    is a cool representation which

  51. 1:20

    compresses the website and lets the

  52. 1:22

    agent see the entire page in very few

  53. 1:24

    few tokens. Now, I want to show you some

  54. 1:26

    actual examples. Let's say I want to

  55. 1:28

    download my Aadhaar. Um so, this is

  56. 1:30

    Claude trying to do it. So, I'd assume

  57. 1:32

    that this is very simple for a browser

  58. 1:33

    agent. I take a screenshot, you see the

  59. 1:34

    button right there, click it. Uh but

  60. 1:36

    then, what's interesting is that it got

  61. 1:38

    stuck after this point. So, from 46

  62. 1:40

    seconds until the end of this video, it

  63. 1:42

    took a screenshot, it scrolled for some

  64. 1:43

    reason, it took a screenshot.

  65. 1:45

    Basically, this entire process took 2

  66. 1:47

    minutes, whereas

  67. 1:49

    in my case, in our video,

  68. 1:55

    so, it just boots, and

  69. 1:57

    boom, done.

  70. 1:58

    And that's the beauty of a browser

  71. 2:00

    agent. Just how quick was that? And I'm

  72. 2:02

    using such a cheap model for this.

  73. 2:03

    Another interesting example is So, my

  74. 2:06

    friends and I are going trekking on

  75. 2:08

    on Sunday. I was wondering, you know

  76. 2:10

    what? Because this this site is in

  77. 2:12

    Canada and I am not very fluent in

  78. 2:13

    Canada.

  79. 2:14

    Like it took me some time to figure out

  80. 2:16

    this website. So, I asked Claude like,

  81. 2:17

    "Hey, can you book this for me?" And by

  82. 2:19

    the end of it, it's unable to pick a

  83. 2:20

    date and it just stuck. This is the

  84. 2:22

    video of my agent.

  85. 2:34

    You can see it selects it and

  86. 2:39

    puts in the date and boom, done. Right?

  87. 2:41

    It's so simple and convenient to use in

  88. 2:43

    theory. So, what's next, right? What am

  89. 2:45

    I planning on doing? I'm thinking of

  90. 2:46

    open sourcing this project because again

  91. 2:48

    my this code is not super defensible.

  92. 2:50

    The product that I want to give is again

  93. 2:52

    maybe an API that as you can see we were

  94. 2:55

    running these commands. Maybe I just

  95. 2:57

    want to expose this command as an API.

  96. 2:59

    Give me a URL, give me your intent and I

  97. 3:01

    will execute it for you and give it back

  98. 3:02

    to you and or maybe open this as a

  99. 3:04

    website

  100. 3:05

    or expose this as a plugin. But yeah, so

  101. 3:08

    bottom line is I want to make browser

  102. 3:10

    agents faster, cheaper and more reliable

  103. 3:13

    and just make sure everybody in the

  104. 3:14

    world is using them because they can

  105. 3:15

    just do so much for you.

  106. 3:17

    So yeah, that's the broad idea here.

  107. 3:19

    Thank you for watching.

  108. 3:24

    This

  109. 3:25

    entire

  110. 3:26

    markdown

  111. 3:28

    presents the website, that particular

  112. 3:30

    page. And let's actually do this

  113. 3:31

    interesting comparison, right? Let's go

  114. 3:33

    to AIS. The full DOM for this would be

  115. 3:35

    around 20,000 tokens. But so, let's say

  116. 3:37

    we have this screenshot.

  117. 3:38

    All right, this screenshot's about 1,100

  118. 3:40

    tokens.

  119. 3:41

    My markdown's about 1,800 tokens and

  120. 3:43

    instead in one screenshot where you

  121. 3:44

    could see only one particular snippet,

  122. 3:46

    you can see the entire

  123. 3:48

    website, right? A couple of other things

  124. 3:50

    that it's important to give feedback,

  125. 3:51

    right? So, we say that okay, hey, these

  126. 3:53

    are the new things that have popped up

  127. 3:54

    on the page. This is now gone, right?

  128. 3:56

    And similarly, we can say that you know,

  129. 3:57

    this thing that was blocking up things

  130. 4:00

    that you wanted to click has now been

  131. 4:01

    removed. You know, we give it feedback

  132. 4:02

    that you tried to click this, but that

  133. 4:03

    didn't happen because you know, we're

  134. 4:04

    keeping track of the entire end-to-end

  135. 4:06

    browser

  136. 4:07

    page.

  137. 4:08

    Right? So, all of this together, what I

  138. 4:10

    built is a very clean representation

  139. 4:12

    that that basically compresses the

  140. 4:13

    website, and you can give this along

  141. 4:14

    with the screenshot. It's pretty cheap

  142. 4:16

    token-wise. Um so, the model can reason

  143. 4:18

    really well, and then it can construct

  144. 4:19

    this long sequence of tasks to execute.