Hill-Climbing Skills: Improve Agents Without Changing the Model — Shubhankar Srivastava, Browserbase

Read the talk

Hill-Climbing Skills: Improve Agents Without Changing the Model

AutoBrowse turns browser runs into reusable instructions. Its flight and restaurant examples show what the teacher learns, why faster runs can still fail, and what verification and maintenance must supply.

From a talk by Shubhankar Srivastava

At a glance

Ideas worth remembering

  • AutoBrowse carries learning between attempts through strategy.md: the doer produces browser evidence, and the teacher converts that evidence into instructions.

  • Useful skills preserve concrete site knowledge: prefilled search URLs, explicit dates, waiting behavior, interaction methods and navigation paths to avoid.

  • Cost, latency and correctness can move in different directions. The live flight run passed on iteration two and failed on iteration three despite using fewer turns and less time.

  • A replayable environment enables repeated attempts; a trustworthy outcome measure determines whether those attempts are improving the right thing.

  • Reusable skills need ongoing checks, failure-triggered repair and review. Learning from web content also requires controls on inputs, saved instructions and permitted browser actions.

A capable browser agent can still get stuck on a slider

A Google Flights agent reaches the time filter and cannot drag it. An OpenTable agent tries to find a date-night restaurant and meets “access denied.” These are the opening problems in Shubhankar Srivastava’s workshop. His work on Browserbase’s sales engineering team involves getting browser agents into production, where a clever attempt is useful only if it completes the job.

A browser agent gives a model tools to operate a browser: click, refresh, capture a screenshot or inspect the page’s accessibility tree. A CLI, MCP interface or SDK exposes those operations. The harness—the software around the model—determines which tools and instructions the agent receives. That makes reliability partly an engineering problem: a model may understand the request while lacking a dependable way to manipulate this particular website.

The recurring waste is that each run starts from zero. A previous attempt may have discovered a useful URL, a calendar bug or a necessary wait, yet the next attempt has to discover it again. Srivastava calls these agents “geniuses that never learn.” Fine-tuning for every new website and task would add another training burden. His alternative borrows the autoresearch idea: repeat a verifiable task, inspect what happened and carry useful lessons into the next attempt without changing model weights.

0:423:42
Suggest correction

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

0:12 · section reference included

The doer browses; the teacher changes what the next run knows

The live task is concrete: find a business-class flight from San Francisco to New York for “this Saturday,” departing in the morning, with one carry-on bag. A remote browser opens Google Flights, and the agent starts applying the business-class filter. While it works, Srivastava explains AutoBrowse’s two-agent architecture, built with the Claude Agent SDK.

The agents have different jobs:

  • Doer: Operate the browser through the Browse CLI, inspect screenshots and collect the requested information.
  • Teacher: Read the doer’s traces, screenshots and logs, identify what worked or failed, and write lessons into strategy.md.

That file survives between attempts. A correction such as choosing a different button becomes an instruction available to the next run, rather than an observation lost with the previous conversation.

What crosses the boundary between attempts? The diagram separates the evidence produced by browsing from the instructions produced by teaching. The doer and teacher alternate; the persistent strategy carries information forward. In this demonstration, the prompt does not prescribe an iteration count, target success rate, token budget or time limit. The teacher has broad discretion to decide when further learning is no longer useful.

Execution evidence becomes instructions for another attempt

Doer: current attemptexecution — Uses the Browse CLI to operate the browser and inspect the page.
Execution evidenceexecution — Traces, screenshots and logs record what happened.
Teacherlearning — Reviews successes and failures after the doer runs.
strategy.mdlearning — Persists the teacher's revised instructions across attempts.
Doer: next attemptnext attempt — Starts with the accumulated strategy injected into its instructions.
Browser observations go to the teacher; the revised strategy goes to the next doer run. These are information transfers between alternating agents.
Read the diagram as text
  • Doer: current attempt. execution — Uses the Browse CLI to operate the browser and inspect the page.
  • Execution evidence. execution — Traces, screenshots and logs record what happened.
  • Teacher. learning — Reviews successes and failures after the doer runs.
  • strategy.md. learning — Persists the teacher's revised instructions across attempts.
  • Doer: next attempt. next attempt — Starts with the accumulated strategy injected into its instructions.
  • Doer: current attempt → Execution evidence: Produces observations.
  • Execution evidence → Teacher: Supplies diagnostic information.
  • Teacher → strategy.md: Writes lessons.
  • strategy.md → Doer: next attempt: Injects revised instructions.
7:087:35
Suggest correction

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

7:08 · section reference included

The first failure replaces calendar clicks with a URL

Iteration one fails, but it produces a useful correction: skip the form and calendar widget by encoding the search in URL query parameters. The change removes repeated UI work. Instead of spending turns locating controls, clicking dates and checking intermediate states, the next attempt can open a prefilled search directly. The recording describes the shortcut without supplying its parameter syntax.

The intended final artifact is SKILL.md, a reusable collection of discoveries from the attempts. For this flight workflow, candidate instructions include requiring a prefilled URL, avoiding a calendar reopening bug and using JavaScript to manipulate the time control instead of dragging it with the mouse. These are distinct corrections: avoid unnecessary interaction, avoid a known bad state, and choose a more dependable interaction method when a control remains necessary.

Does cheaper execution also mean successful execution? The live chart makes that distinction worth inspecting. Iteration two passes, with reported cost falling from $12 to $3—a fourfold reduction. Iteration three uses fewer turns and has better latency, yet fails. Srivastava suspects an overcorrection and waits to see whether the next attempt repairs it. The immediate result is uneven progress: efficiency improves before correctness is stable.

The dashboard compares two runs: iteration two passes with fewer turns, lower cost, and shorter latency than iteration one.Open full source frame
The dashboard compares two runs: iteration two passes with fewer turns, lower cost, and shorter latency than iteration one.
9:4510:15
Suggest correction

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

9:45 · section reference included

Schedule search learns to wait; restaurant search learns where not to go

While the flight run continues, an earlier conference-search task shows why optimization can continue after the first pass. The request was to find talks and workshops about hill climbing on the AI Engineer website. Every displayed iteration passed, yet Srivastava reports a 7.4-fold cost improvement. Browserbase replays let him revisit each attempt and inspect how it reached the answer.

The resulting schedule skill records a short route through the task: go directly to the schedule, avoid blindly repeating failed open operations, type the keyword into the session-search input, wait briefly, then read the results. The wait matters because a search interaction and its rendered results need not happen at the same instant. A useful skill preserves timing behavior as well as navigation choices.

The OpenTable example starts with an access-denied page. On the second iteration, the agent finds a working search route using query parameters containing latitude, longitude and a metro ID. Its instructions preserve both positive and negative knowledge: construct the search URL, compute the date, use the known San Francisco location values, avoid the restaurant-detail route described as /r, and do not reload the search route described as /s. What makes this skill useful is the relationship between entry point and outcome: some navigation paths trigger the block, while the demonstrated search path reaches a usable interface.

For that restaurant run, reported cost falls from $6.22 to $0.51 and elapsed time from 189 seconds to 27 seconds. Other examples show different cost reductions, including up to 16-fold. These are task-specific results, with different bottlenecks; they do not establish a general success rate or a guarantee that the same navigation choices will work on another site.

12:3713:07
Suggest correction

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

13:07 · section reference included

The flight skill graduates into a reusable fast path

Back in the live run, the skill has graduated: the system reports that it applied the instructions end to end without finding further lessons. What did the search actually return? Srivastava reads out a one-way business-class search from San Francisco to New York for July 4, with a carry-on included, and an 8 AM option at $649. The replay provides a way to inspect that result. This demonstrates a completed search, rather than a purchased ticket.

The skill’s preferred fast path is to encode the whole query in the URL. This automates some of the site investigation that customers previously performed by hand, writing scripts and reverse-engineering each website. Srivastava describes customer pipelines that generate skills and pull requests automatically, then start another repair attempt when a production run fails.

Browse.sh packages this idea as “Yellow Pages for browser agents”: a catalog of task instructions that agents can retrieve when needed. An Amazon product-search skill, for example, explains when to use it and how to inspect pricing and availability. The demonstrated catalog also includes skills for AllTrails and weather.gov. At the time of the workshop, Browserbase offers the skills through its CLI for free, absorbing the generation costs, and offers a workflow for requesting a new skill and receiving it by email.

16:4617:16
Suggest correction

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

16:46 · section reference included

Learning needs a result you can judge and an environment you can rerun

The same repeated discovery appears outside browsing. Coding agents forget repository conventions and linting rules. Research agents repeatedly miss a source the team always uses. Internal-operations agents rediscover which dashboards, databases and tools are preferred. Files such as CLAUDE.md and AGENTS.md can carry those lessons, but improving them through repeated attempts requires two things: a replayable environment and a verifiable outcome or quantifiable metric.

An audience question exposes the difficulty hidden in “verifiable.” A training experiment can compare log loss numerically. A browser workflow may make it straightforward to check whether a ticket was booked, while leaving “Did you find the best flight?” unresolved. The attendee presses on a narrower failure too: a copied URL or number can change by a character and become wrong. Correct task interpretation does not ensure faithful extraction of the data needed to complete it.

The response returns to resilience across attempts: successes can be followed by failures, and the loop should recover without treating one bad attempt as the final lesson. Different loop designs may suit different domains. That is a design direction rather than a demonstrated solution to character-level copying errors; the discussion does not establish an independent check that catches those errors.

Replayability has its own engineering cost. A coding task can start from a Docker image or a particular EC2 environment and repeat from a known point. Knowledge work involving human decisions may be much harder to restore. Srivastava’s term is a “grindable” environment: the agent needs enough repeatable attempts to work through failures. Investing in that environment makes the learning loop possible.

20:3721:07
Suggest correction

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

20:37 · section reference included

More iterations can cost less overall

Model choice and iteration count interact. In Srivastava’s experiments, Sonnet can take more iterations than Opus while still completing the task at lower total cost. He estimates a typical AutoBrowse learning run at roughly $30–$40, with very complicated examples reaching about $100. Those are his observed costs, not a pricing bound. The investment makes sense when later uses of the generated skill repay the discovery work.

The teacher role comes from an existing human workflow. Srivastava would sit with customers, inspect failures and reverse-engineer the website until the automation worked. AutoBrowse began with the question of whether an agent could take over that diagnostic role using the autoresearch pattern. The subsequent work involved repeated engineering changes to simplify the loop.

A good strategy still depends on a usable environment. Browserbase can preserve login cookies for future sessions and use supplied proxies, helping repeated attempts resemble the intended workflow without logging in every time. Those infrastructure choices matter especially when anti-bot behavior changes what the agent can reach. Improving the instructions alone cannot replace the environment they depend on.

27:2627:56
Suggest correction

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

26:52 · section reference included

The traces show what the teacher can actually learn

The implementation’s evaluate.mjs contains the loop, with the doer and teacher running one after the other on every iteration. Returning to the flight example reveals corrections more specific than “use a URL”: include an explicit ISO date, and avoid opening the bare page and spending three turns resolving today’s date. Date resolution itself becomes part of the strategy, reducing repeated work before the search even begins.

What evidence supports those corrections? The reservation example exposes the task prompt, the accumulated strategy.md, screenshots and step-by-step tool outputs. A browse open operation records its output; a subsequent browse snapshot captures the accessibility tree. The teacher can inspect the sequence of actions and page responses, then write an iteration summary. This is richer diagnostic material than a final pass/fail label: it can reveal the particular navigation or observation that needs to change.

30:5631:25
Suggest correction

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

30:42 · section reference included

One skill per task leaves composition to the harness

An audience member challenges the task-by-task framing: users often ask for something that spans several tasks. A date-night request might require comparing more than one reservation service. Srivastava’s proposed answer is skill selection and composition in the harness. It could retrieve relevant instructions for OpenTable and Resy, then choose tools that serve the larger request. A task-specific skill is useful knowledge, but it does not by itself plan the whole job.

There is no single recommended granularity. Separate skills, a more general skill, specialized tools and generic tools are alternatives to evaluate against common customer requests. The discussion connects the approach to GEPA and DSPy, then returns to the evaluator problem: a verifier also needs evaluation. Srivastava mentions verifier research with Microsoft and raises the choice between human review and an automated judge; he does not give the paper’s method in this recording.

Storage is a separate concern from learning. In the demonstrated repository, generated files live in a local .claude skills folder, including a recipe-search skill. A production agent can incorporate the files into its own loop. For the public Browse.sh catalog, Srivastava says he believes Vercel Blob stores the skills for on-demand retrieval; the talk does not develop a retrieval or ranking design.

33:3633:55
Suggest correction

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

33:36 · section reference included

Repair on failure, and choose what improvement means

Website changes make a successful skill perishable. The working maintenance approach is to trigger AutoBrowse after a production failure, diagnose the problem and generate a pull request for a human engineer. Scheduled sample runs every two or three hours offer another way to discover breakage. The tradeoff is detection speed against the cost of continually checking or relearning behavior; Srivastava describes this monitoring work as still being implemented with a customer.

The teacher also needs an objective. Several goals can lead to different stopping decisions:

  • Task success: Stop when the requested job succeeds.
  • Latency: Keep looking for a faster route. Srivastava has seen loops discover that an API can replace browser interaction, with some solutions taking 500 milliseconds.
  • Turns: Reduce the number of model-tool exchanges and the context needed to complete the task.
  • Reliability: Continue investigating beyond the first success when dependable repetition matters most.

The 500-millisecond observation is an example of a discovered fast path, rather than a benchmark for AutoBrowse generally.

For the demonstrated setup, reliability takes priority over cost, and the teacher decides when to stop. That explains why a pass does not immediately end learning—and why the earlier faster-but-failing iteration matters. A system that minimizes turns can prefer a different strategy from one that seeks dependable completion.

38:0638:36
Suggest correction

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

38:06 · section reference included

Graduation is a judgment, and the output is Markdown

WebMCP offers another possible route to fewer brittle UI operations: a website can expose programmable actions through the browser. At the time of the workshop, Srivastava says Browserbase’s SDKs support it, but he does not think the AutoBrowse loop does yet. This distinguishes an available SDK capability from behavior demonstrated in the learning loop.

Asked about ground truth, he describes a typically binary, self-evaluated result: did the agent find the flight or reservation? That remains a model judgment in this setup. Calling a flight the cheapest requires stronger evidence than finding a plausible matching option, just as the earlier discussion distinguished booking a ticket from finding the best one. Graduation should be read within that scope, rather than as an independently measured guarantee.

The environment is deliberately close to live use. In response to a question about mocking side effects such as purchases, Srivastava says the approach favors real websites over replicated training portals. He also places CAPTCHA handling in Browserbase’s infrastructure, at the Chrome binary layer, rather than in the agent’s token-consuming reasoning. He declines to specify which CAPTCHA types it can solve.

The graduation mechanism returns to the same concrete inputs: per-iteration folders contain JSON traces; the teacher reads them alongside the system prompt and previous strategy, then proposes a better strategy. The talk supplies no fixed numerical graduation threshold. Once produced, the skill is a Markdown artifact that can be used with Stagehand, Claude Code or another agent. Srivastava demonstrates that portability with a San Francisco event-search request; it does not require using Browserbase to read the instructions.

41:0641:37
Suggest correction

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

41:06 · section reference included

A learned skill can preserve bad instructions as well as good ones

Prompt injection creates a failure mode specific to learning from the web: malicious page content could influence an attempt and then become a lesson reused in production. An Amazon listing with hidden instructions is the concrete example. Restricting the agent to a familiar domain does not settle the problem, because malicious content can appear within that domain.

Srivastava describes three places to apply controls:

  • Incoming content and requests: Add checks before potentially malicious instructions reach the harness.
  • Generated skills: Run a security-review agent over skills before publishing them to Browse.sh.
  • Browser infrastructure: Restrict destinations and permitted actions through network controls and Browserbase safe mode, including permission choices such as allowing an action once or persistently.

The layers address different paths to harm: what reaches the agent, what it preserves, and what it can execute. The talk describes the controls without establishing that they eliminate prompt injection.

The final audience question returns to skills that grow and become outdated as the browser, website or development environment changes. The proposed operational check is simple: schedule the skill to perform its job every day at 9 AM; leave a successful run alone, and send a notification on failure to trigger a healing loop. This detects observed breakage and connects it to repair. It does not, by itself, solve skill growth or guarantee that an apparently successful result is still correct. The reusable file therefore needs continued execution checks and the human review described for repair pull requests.

47:3048:00
Suggest correction

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

47:30 · section reference included

Resources

Read the complete timestamped transcript
  1. 0:12

    All right. Hello. Thank you everybody for being here. Uh, I know it's the last workshop of the day. I appreciate all of you turning up here. Uh, I am Shubh. Uh, I'm here to talk about hill climbing skills, uh, specifically how can you improve your agents without really going into the models, without really going in the weights. Uh, I have a Slido, uh, up here as well. I'll just, uh, flash the QR code in case any of you wanna, uh, put in any questions,

  2. 0:42

    and we can address them towards the end as well. Um, a little bit about me. I'm Shubh. I'm, uh, on the sales engineering team at Browserbase. Uh, I essentially work with our customers deploying browser agents in production. Uh, I'm not sure, maybe we'll do a show of hands. Uh, how many of you know what browser agents are? Anybody? All right, a few. Amazing. Uh, have any of you built browser agents before?

  3. 1:13

    Have any of you used these tools? Show of hands. Okay, a few of them. Amazing. Nice. Uh, maybe I'll, I'll talk a bit about what browser agents are before diving into the whole concept of hill climbing for skills, uh, so that it becomes clear what we're doing. Towards the end of the talk, we'll also look into how you can do this in your domain, in your, uh, field as well. All right, uh, so quick

  4. 1:42

    primer on what browser agents are. If you have an agent that needs to drive a browser, you basically call that a browser agent, right? Browser becomes the tool to your agent. And how do you control it? You control it with some sort of CLI, some sort of MCP, some sort of method where you can control the browser and say, "Hey, go and click on this red button. Go and click on the refresh button. Go and, uh, take a screenshot or take a s-snapshot of the

  5. 2:12

    accessibility tree of this website," right? So these are the s- low-level tools that your agent can have access to, to control the browser. Uh, and Browserbase is essentially a platform for you to build and run these browser agents. We provide the infrastructure and the SDKs, the skills, the CLI that go with building these browser agents. Uh, and, and we're gonna be using all of these tools to see what hill climbing does look like. All right.

  6. 2:42

    Uh, I want to talk a bit about the biggest problem with agents today, essentially reliability, right? Uh, people are frustrated with browser agents getting stuck or getting into an anti-bot or a CAPTCHA issue, uh, or maybe just forgetting or being lazy and not completing the task. Uh, and we see reliability essentially as an engineering problem. I think the recent models, the Opus and the Fable, when it, when it

  7. 3:12

    came out for those three days, it was really, really smart, right? Uh, but we see that a lot of the work that has to be done for reliability is the harness around it. It is the tools that you give it. It is the skills that you give here. Um, and, and that's what we're gonna be sort of looking at, how do we improve the reliability of these browser agents? I wanted to give you all a few examples of, like, where these agents suck today, right? If I zoom in a bit, you'll see this browser agent is trying to,

  8. 3:42

    like, go on Google Flights and click on the, uh... It, it it's trying to drag the time filter, and it's unable to figure out, how do I drag that? Dragging is a tricky operation for these agents to do, and it's getting super confused. It doesn't know what the HTML element for that is, what the JavaScript for that is. It's not really able to do this, and it gets stuck, and it's not able to book my flight tickets. Uh, another example I wanted to show, uh, is the browser agent OpenTable. Let's say I have

  9. 4:11

    my OpenClaw or my Hermes agent, and I need to book a date night, and I tell, "Hey, go to OpenTable and, and find me some," uh, and, and look at the anti-bot that it runs into, right? Uh, and it's just, like, access denied. I don't know what happens here. Uh, but, like, can my browser agent get around these issues? Can they be more reliable, and can they book my date night restaurants is the biggest question I wanted to ask here. Uh, and this is where we sort of look at different ideas to improve the

  10. 4:41

    reliability of these agents. And one of them, uh... Oh, actually, let's, let's dig into the root cause here, right? Like, why this is happening. Uh, we have, like, these Opus models, these Phi-5 that's super nice general purpose. You might have used Codex, ComputerUse, very nice. But when you want to sort of do, uh, long-running, uh, tricky websites like the OpenTables or the Google Flights, it sort of becomes very difficult to run these in

  11. 5:11

    production, and these site-specific tricks or these JavaScript that you need to run on your browser, the agent doesn't know about them, right? And the most important thing is it's every run starts from zero. You're not really having any sort of learning baked into your runs. I think Dwarkesh talked about this a couple of days ago. It's like, why is progress on ComputerUse still so slow today? Uh, although ComputerUse seems like a verifiable problem, why is it still not solved? Essentially, there's

  12. 5:41

    no learning happening. Every agent run is a start-from-scratch run, and it's not learning from its production traces. Uh, and these browser agents, I call them geniuses that never learn. Um, and some people might say, "Oh, why don't you fine-tune on some ta- some, like, OpenTable or restaurant websites?" Uh, but it, it's not really scalable, right? Uh, if you're thinking of building agents, you can't really be fine-tuning for every new task that comes up. You want some f- You want a, a, a modality

  13. 6:11

    where it can learn from its production traces, uh, and get better over time. This is where we sort of started thinking about, and this was, like, six mo- four to six months ago where Karpathy came up with this idea of auto-research. This is essentially a loop, right? Uh, and this loop sort of takes a verifiable problem statement and goes at it, tries it again and again, looks at its own traces, and tries to improve itself. And we wondered:

  14. 6:41

    how can we apply this to browser agents? How can we apply this, uh, to these complicated workflows, these complicated websites, which are not deterministic, they change every day, they have different CAPTCHAs every time? Uh, how can we learn from these, right? Uh, this is where I wanna sort of switch into a demo and sort of show this live. Uh, and I'm gonna start with, uh,

  15. 7:08

    a prompt over here. So I want to maybe do something like, uh, go to Google Flights and, uh, find me a business class flight from SF to New York for this Saturday. I want to have one carry-on bag, uh, and this flight should be in the morning. I hope my... Okay. This is correct.

  16. 7:35

    Just paste this and run this, right? So starting a browser-based session here. Uh, so what you see in the center is a remote browser has just spun up and has navigated to Google Flights. If I expand my agent here, uh, it's doing all of these things. This is the reasoning traces that you can see live, and it's trying to sort of apply the business class filter. So it, it'll do its job and, and, and we'll come back to this, uh, but I wanted to talk about what's really happening here,

  17. 8:05

    uh, uh, and, a-a-and the architecture behind this auto-research loop.

  18. 8:15

    So we, we fired the Google Flights task. Uh, and, and, and the architecture here is this auto browse loop that we call this. We took auto-research, and we took browsing. We call it auto browse, and this loop essentially is two Claude Agent SDK loop, uh, agents. Uh, you can call one as the doer agent and one as the teacher agent. This doer agent, its job is to actually go and do the browsing. It has access to the browse CLI that we talked about. It has access to the browser, uh,

  19. 8:46

    and it goes and sort of clicks on buttons, looks at the screenshot, tries to get me information. And the teacher, the teacher's job is to look at the traces of the doer and learn what went wrong and what went right, and they keep working together until they find a very good solution that converges, right? Uh, we don't tell it how many loops you need to go for. We don't tell it what's the success factor-- uh, success, uh, rate that we want. We

  20. 9:15

    don't tell it, "Hey, we need to do this within X number of tokens or X number of seconds." We just give it a broad prompt, and we let the bitter lesson, we embrace the bitter lesson, and we're like, "Okay, let the doer and teacher go at it." Uh, a-a-and the key thing that happens is there is a strategy.md file, uh, that is essentially the artifact across multiple runs. After every iteration, the teacher thinks about what happened, looks at the screenshot, looks at the

  21. 9:45

    logs, and then thinks, "Oh, you did not click on this button. Uh, you should actually click on this button instead." And it puts that in the strategy.md file, and that artifact carries over to the next iteration, and it improves from there. Maybe we'll go back to our demo and see what happened. All right, so iteration number one, uh, there was a failure here, uh, and the learning from this iteration was skip the entire form calendar widget because you can just do

  22. 10:15

    a query parameter, and you don't really need to click around, right? The agent was smart enough in this instance to think, "Oh, I'm wasting so many tokens, and I'm wasting so much time clicking around where I could just use Google Flights query parameter." Now, this is obvious in hindsight, but maybe as a human, I wouldn't have thought of this, and I wouldn't have written this complicated query parameter myself, right? Uh, so this is the learning from the first iteration. Now it's going and doing things in iteration number two. It'll keep

  23. 10:45

    going on till it feels like it has maxed out all the tricks, it has maxed out all JavaScript hacks that it could do, uh, and, and, and then, uh, think about, "Okay, uh, this is the skill that I can use from here."

  24. 11:03

    I think the key, the key thing, uh, that I wanted to also talk about is at the end of this converged loop, the output that I want is a SKILL.md file. This SKILL.md file would be what I give to my future agents, uh, and it would have a collection of all the hacks or all the tricks or all the learnings from previous runs. We'll, we'll look at what that skill might look like. Uh, it could look like, hey, a pre-filled

  25. 11:33

    URL is mandatory. Don't go around and waste your clicks and tokens clicking on these buttons. There is a reopen bug in the calendar. Don't do this. Uh, if you wanna move the drag, uh, if you wanna drag your timestamp thing, uh, use JavaScript injection. Don't try to do it with the mouse, right? These are the kind of tricks that are now persisted for every future run and gives me so many more savings, uh, from a

  26. 12:02

    performance, reliability, and cost perspective.

  27. 12:07

    Now, uh, we'll go back to our, uh, run and see if it has passed. Okay, so iteration number two has passed, and if you can see, uh, the savings in, in cost are, like, four X. Uh, this chart is being created on the fly. Uh, so it started from $12, and the second one was $3 and- Keep in mind, my agents here are Opus 48, both for the doer and, uh, for the, uh, teacher.

  28. 12:37

    Now, iteration three just came in. Uh, the number of turns decreased. The latency is also better, uh, but th-there was a failure in iteration number three. So there's something that it sort of over-corrected on, and iteration number four should probably be learning from that, and we'll see if it does that. Uh, while it's doing its own thing, I wanted to show some previous runs that I did, uh, just in preparation for this, uh, demo. Uh, so for example, I went to, uh, Auto Browse, and I was like, "Hey, go to

  29. 13:07

    the AI Engineers website and tell me which talks and workshops are talking about hill climbing," right? Uh, and it did that across multiple iterations, and you can see the replay of each of these. These are replays that are coming from Browserbase. Super helpful, important for, uh, observability perspective. And as you can see, uh, it sort of, uh, got better in term- i-in terms of cost, seven point four x. Uh, even though it was able to pass in all the iterations, I still got improvements in cost.

  30. 13:38

    Now, I wanted to actually see what are the learnings from this skill, right? Uh, how do you sort of, uh, persist all of these learnings? It says, "Go straight to the sched-schedule page. If there are open errors, don't try-- retry blindly. Run this. Uh, type the keyword into the session search input. Wait briefly." So, like, have these waits, because sometimes websites take a lot of time to load, so you, you can have these kind of tricks. Uh, "And then read the results." Uh, you know, like

  31. 14:08

    there's, there's a lot of learning that is happening in these skills. Maybe I wanted to show some interesting ones. I wanted to show this OpenTable one, because I started with this blocker of, like, access denied when we started this demo. Uh, and if we go to the, uh, screenshot, this was the access denied thing that we got, right? In, in iteration number one. Let's see how it learned from there. Uh, it realized that the, uh, block is environmental because the website doesn't

  32. 14:37

    want this agent to do something. Uh, in iteration number two, it figured that if I do a query parameter and if I put a latitude, longitude, metro ID, I automatically get that, uh, UI that works. Do not open slash R, that's blocked, and do not reload slash S. These are the places where the blocks kick in. If you don't do that, and you follow this technique instead, your agent will work, right? Uh, and as you can see,

  33. 15:07

    uh, it sort of went from six point two two dollars to zero point five one dollars. The time taken went from hundred and eighty-nine seconds to twenty-seven seconds, uh, and the skill it came up with was here. Uh, build a search URL, do the date math like this. Uh, this is the known metro pins for San Francisco, uh, and, and, and follow these steps, right? Never call slash R because that will return access denied. Now, these are the kind of learnings where a human could never

  34. 15:38

    have done, but you just sort of embrace the bitter lesson and ag- let agents do the job, uh, and they will find these, uh, tricks for you.

  35. 15:48

    I want to, uh, also show, uh, a few examples of, like, the kind of improvements we see. Uh, the reason why this problem is so close to my heart is because I, from a sales perspective, I am deploying these browser agents into production. Uh, the sale is only done when the browser agent is successful, so reliability is like the most important thing for me, and this is what I-- this is the key tool that I take to my customers and I'm like, "Just fire your agents and let

  36. 16:18

    them do this auto research thing, and your agents will be successful in production." Uh, and these are the kind of, uh, success metrics that people are looking for. Up to sixteen x cheaper, twelve x cheaper, three x cheaper, uh, on different tasks. Of course, every task is different. The bottlenecks on each task are different, so, uh, you might see variance there. But, uh, the idea is you can hill climb on these, uh, techniques.

  37. 16:46

    I wanted to go back to our live demo and see if there's any, uh, improvement. All right, so we have a graduated skill. Uh, and the skill applied end-to-end, no further learning. The results are showing correctly. One-way business class, San Francisco to New York, July the fourth, one carry-on bag included. Uh, and there is this eight AM, six forty-nine dollars, right? So it was able to get all of this, and I can sort of watch the entire replay to see if that is accurate. Uh, it was able to sort

  38. 17:16

    of figure out this entire skill. The fast path is encode the whole query in the URL, str-strongly preferred. The-- Again, like, I know I'm, I'm, I'm showing these things, but when I first started looking at this, the results here, this was like my moment of like, this is the Mythos moment for browser agents. You know? Like just reverse engineering the hell out of things. Uh, I, I look at this with some of my customers. The customers are mind-blown. Uh, earlier, they would be writing

  39. 17:45

    scripts for each of their websites. They would be like, "Hey, I need to, uh, spend so many engineering hours on like just reversing these websites. How can I scale this to a hundred, a thousand websites?" And now our customers have actually built these entire pipelines of, uh, these skills that get generated on the fly, pull requests that get created automatically. If there is a failure in production, an agent kicks in and starts healing the skill as well. There's a lot

  40. 18:15

    of, uh, engineering that we can do around this to make leverage-- to leverage this technique. Uh, I wanted to also show what we've done with this, right? We actually went ahead and created this product called Browse.sh. Uh, we were like- If we can do this for one website, we can do this for five, why not do this for like five hundred websites and give it for free for anybody to do this? Uh, and like, if you remember in the nineteen nine-- or whenever, like in the ninety... Before

  41. 18:45

    internet, you had the Yellow Pages. Uh, you had details about accessing people, businesses, et cetera. This is Yellow Pages for browser agents, right? It has details about how to do any task on any website on the web. Uh, I wanted to actually show this to you all. Uh,

  42. 19:07

    you can actually install Browse CLI and use all of these skills completely for free. We've eaten up the token costs ourselves, and we're making this available for you all. Uh, so if I go to, let's say, search products on Amazon, uh, I can see the entire skill is over here. When should you use the skill? How should you look at like pricing and availability and whatever, right? Uh, this is how you use this. Lot of details about Amazon, the screenshots.

  43. 19:37

    Uh, and I just give this browse skills CLI to my OpenClaw, and it just knows when to pull the alltrails.com skill, when to pull the weather.gov skill, and, and this makes my life so much easier. Uh, we essentially are running the same auto research loop behind the scenes, uh, and making this, uh, available for you all. In, in fact, if you would want to, you can go here and you can be like, "Hey, go and make a skill for

  44. 20:07

    me to, uh, look up this, uh, events in San Francisco for this week." Uh, do this, generate a skill, and this will sort of do this for you. This will send you an email, and you can then use your skill, uh, in, in whatever agent you want to. Right? Uh, so we've done this for browser agents. Uh, and I wanted to talk about like, how can you potentially do this for any other domain, right? Uh, I think coding agents is

  45. 20:37

    like one place where I have seen this frustration, where the agent is relearning the repo conventions every time. It's not applying the linting rules correctly, and I have to tell it every time. And maybe you can have your CLAUDE.md and AGENTS.md and improve that. But the, the fundamental premise is like, the agent should not be relearning your tasks from zero, right? Uh, I've seen this in re-research agents. We run a bunch of like deep research agents

  46. 21:07

    for our internal workflows. Uh, and every time it struggles and it tries to relearn, "Oh, I've pulled this information from Wikipedia, uh, but I did not pull it from this other website." Uh, and it's like, why not? Uh, like, we always do this other website. You should learn from your previous traces, uh, and you should pull information. Uh, internal ops. You have all these dashboards, all these databases, all these internal tools, but your agents don't know which ones work and which ones are preferred.

  47. 21:38

    Ideally, you should be applying this auto research technique. Uh, a-a-and the two conditions that are required is that A, you should have a replayable environment of some sort so that you can run these loops. And B, you should have some sort of verifiable outcome or some sort of quantif-quantifiable metric for you to run these loops. Yes, I see a question there.

  48. 22:03

    Um, one of my challenges when I try to do this kind of work is where to draw the line of hallucinations of content from the site versus just kind of like... Yeah, mostly just kind of like avoiding hallucinations, because I realized that it's just really hard to trust any sort of like prompt or agent which just takes copied text from any site. So in some, in some way, I always try to find some compromise

  49. 22:33

    versus like . Yeah. Like a, like what-- like what kind of compromise you-

  50. 22:39

    Yeah.

  51. 22:39

    -would install to make sure it says this guy is blue.

  52. 22:41

    Yeah.

  53. 22:41

    It says blue but not changed.

  54. 22:43

    Yeah, exactly. Uh, so I think the question is like, how do you know that the auto research loop is accurate, whether it is converging, and when it says it's converging, it's actually converging. When it says it's good, it's actually good. When it says it's bad, it's actually bad. Like, how do I have confidence, uh, on what the agent is saying and what the loop is doing? I think that's where I want to sort of talk about the verifiable outcome here. Uh, for Karpathy, it was quite easy because he was looking

  55. 23:13

    at the logs, log loss of the experiment when he was training neural networks, right? So it's very easy to see whether your log loss has gone down or not. Uh, but in many real-world scenarios, that is not the case. For browser agents, as I explained, uh, whether you book a flight ticket or not, that might be straightforward, but did you find the best flight options for me might be slightly fuzzy, uh, and might not be the best, uh-

  56. 23:41

    My question is more about like... Less information more about in a website, there are URLs and numbers, especially with numbers and URLs, it's very easy to use probabilistically one letter can click.

  57. 23:52

    Mm-hmm.

  58. 23:53

    And that's one thing that like makes it wrong, but then the whole URL being copied, like it gets compromised. So it's kind of like, can I still find them or no? Like is there an unsolvable-

  59. 24:05

    Yeah. If, if I understand this correctly, you're saying like one mistake in the loop can sort of throw off the entire auto research run. Uh, and how do you prevent against that? I, I, I have actually seen where some, uh, iterations actually fail. Uh, for example, if we sh-- uh, look at the previous slide.

  60. 24:29

    Uh, there's like failures happening after there have been successes, right? Uh, so it's not always that once you succeed, all the future iterations will always be successful. But I think it's the design of your loop where you can make it resilient to, uh- Failures, uh, where it doesn't over-index on those, uh, and still sort of corrects itself, uh, from any mistake that happened in previous runs. Uh, I think we're trying to sort of prevent like, uh,

  61. 24:59

    what do they call it? The exploding sort of l-loss sort of scenarios. Uh, I think you could do that. Uh, in fact, Karpathy talks about this like this is one way of doing auto research. You can actually auto research on different ways of doing auto research itself. Uh, it's like, is the teacher-doer loop the best? Should there be a multi-agent architecture to do this? Or sh- Is there any other approach that might actually work better for research tasks in neural networks versus browser agents, right? You could have different

  62. 25:29

    designs of your loops to prevent situations like those. Uh, and, and I think going back to my point, as long as you have a verifiable outcome or some quantifiable metric, I think you should be able to design, uh, a good, uh, loop here. Uh, replayable environment, I think sometimes b- is under-discussed, uh, but extremely important. I think it was talking about Dwarkesh. He said, having a verifiable outcome is important, but also you should have, uh, extremely

  63. 25:59

    grindable environments or extremely grindable, uh, use cases as well, right? If your agent cannot, uh, grind through failures, it will be difficult for it to, uh, go for multiple iterations and fix itself. Uh, so do you have... Like coding agents is a good example because you can start from a Docker image, or you can start from, uh, a particular EC2, and, and you can replay from different parts of the, uh, stack.

  64. 26:29

    Uh, but maybe, uh, knowledge work is probably not that easy to replay. Uh, maybe there's like a lot of different human-in-the-loop actions that make it very hard to replay from a particular point in time. So investing in your environment also can be super, uh, rewarding in these cases.

  65. 26:52

    Amazing. Uh, I just wanted to share the, uh, URLs of, uh, the Auto Browse loop that I, uh, demoed today. So if you scan the QR, you'll be able to pull the, uh, GitHub for that. Uh, and also the second QR here, uh, is the skill itself. You can just do /autobrowse on your Claude Code or Codex and be like, "Hey, /autobrowse. Use Opus 4-8 on both of these, uh, teacher and doer, and go create a skill for me to do this."

  66. 27:22

    Uh,

  67. 27:26

    I'm looking at one of these questions. Uh, and also, if any of you have ideas of something we want to sort of put the agent against, feel free to type it in the Slido, and we can actually try it live. Uh, but let's look at this question. Is there a way to optimize for convergence? Uh, I think this is the same question that we were just talking about. Uh, high cost is interesting because you might think that, uh, doing longer iterations might become costlier

  68. 27:56

    over time. Uh, I have run a bunch of evals on this where I can throw a sonnet at this problem but run it for longer iterations versus throwing Opus for lesser iterations. I think you can get the same job done by throwing sonnet. L-larger number of iterations, but still cheaper overall. Uh, also this cost is amortized, right? Like one Auto Browse loop that we probably run is like maybe thirty dollars, forty dollars. If it's super complicated, a hundred dollars at most.

  69. 28:26

    Uh, so this is amortized. As long as those costs make sense for you, uh, to deploy this in production, uh, just go for it. Uh, but there's a lot of interesting things, uh, that you could do, uh, with evaling the kind of loops that you're generating. Uh, yes, I will share the slides as well. Uh, I can do this on the GitHub itself. Uh, can you sh-share how you thought about, uh, auto-research into Auto Browse? Uh, I mean, the

  70. 28:56

    process was fairly straightforward. Uh, took the GitHub repo that Karpathy put out, uh, and then there's all this context about my customers, uh, that I have, uh, where I was like, "Hey, these customers face these kinds of reliability problems." Uh, the way I solve it for them is I go into their office, I sit with them, very forward deployed, uh, and I try to sort of just brute force and reverse engineer this. This is what I do, so I am the teacher agent. Uh, can

  71. 29:26

    you automate me out of the process and create a loop, borrowing from, uh, Karpathy, and, and, and, and build the same thing? And of course, there's a lot of iterations on top of that. Uh, there's a lot of engineering as well, uh, to simplify this. Uh, but yes, uh, that was the process of converting this.

  72. 29:48

    Can you use this in a proxy? Can you be logged into a site? Yes. Uh, again, this goes back to the environment that you design. Uh, Browserbase, the infrastructure that all of this is running on, uh, gives you the ability to log into websites, uh, save the cookies, uh, reuse those cookies in future runs so you don't have to log in every time. Uh, makes it super easy for you to, uh, replicate real-world workflows. Uh, and yes, you can use proxies as well if you have, uh, particular IP addresses,

  73. 30:18

    residential IP addresses. You can bring those in as well. Uh, a lot of success is definitely how good your infrastructure and environment is, especially in these adversarial scenarios, uh, like CAPTCHAs and anti-bots. Uh, so making the infrastructure as good as possible is definitely of value.

  74. 30:42

    Amazing. Any, any asks for something that we might wanna run live? Yes, question.

  75. 30:48

    One question

  76. 30:56

    Great, great question. Actually, I wanted to sort of show the code as well. Uh, so if you, uh, look at the GitHub, you'll be able to find this evaluate.mjs file. Uh, essentially it lists out the entire loop, uh, what's happening here. Uh, but to answer your question, the teacher and the doer are, uh, working one after the other for every loop. So the teacher is finding learnings in every

  77. 31:25

    iteration. Uh, maybe if I show the demo, uh, over here. Uh, let's go to the one we just did. Iteration one had these learnings, and then iteration two had some other learnings, right? You should include the explicit ISO date in this particular format. Iteration three would have some other learnings. The date resolution still opens the bare page and clicks... Wasting three turns, uh, reading today's date, uh, or having the executor compute today. So it's figuring out something

  78. 31:55

    about the date, time. So in every iteration, the teacher is learning something new and putting this back into the strategy.md. Maybe I'll make this real by looking at the traces for one of these runs. Uh, so over here, these are all my runs. Uh, so for example, this was the OpenTable reservation example. Uh, and, uh, this was the strategy.md that the teacher sort of appended to every

  79. 32:25

    time. So, uh, step zero, you should do this, so on and so forth. Uh, this was the task. This was the, uh, prompt that I gave it. Find me reservations for the Bix ti- Bix Restaurant. Uh, and these were the kind of traces that, uh, it was sort of learning from. It would take screenshots. It would take these sort of traces. At every step is doing browse open. This is what the output is. Then turn number two, browse snapshot. Snapshot essentially takes the accessibility tree, and this is the snapshot. So it's

  80. 32:55

    reading this entire thing and at every step thinking of like what went right and what went wrong. Uh, yeah, I mean, this is like machine code. Uh, I won't show this entire thing. Uh, but yeah, this is the summary that it also writes, uh, at every iteration. Uh, so yeah, there's, there's a lot, lot of like engineering tweaks that you can do to suit this to your domain as well. Uh, and, uh, like the easiest way to, uh, read this is

  81. 33:25

    we put it out here on skills.sh as well, uh, in auto browse. Uh, and you can sort of do something like this.

  82. 33:36

    Um, is this for a, a single task? Uh, because generally you want to have a agent, uh, that handles lots of tasks in a particular domain. So really you are not training one, uh, training one model for one task, right?

  83. 33:54

    Great question.

  84. 33:55

    Like, one model for a whole set of tasks and then have it aggregate, uh, score for-

  85. 34:03

    S- such a good question. I think that goes back to like how do you increase the reliability of your, uh, agents? Uh, reliability is an engineering problem. Uh, you can design your harness to sort of go for one skill for each task, or you can be like, hey, one skill for every task that you will ever see. Uh, I think it entirely depends. How you do the harness engineering entirely depends on the use case that you have.

  86. 34:33

    Uh, and you run evals with all these different strategies, uh, and see which one works for you. For us, this was... Yeah.

  87. 34:40

    Sometimes that doesn't work because if you design the pipeline, the assumption you have is that these tasks are independent. But, but really when the user asks a question he might end up with a-

  88. 34:55

    Yes

  89. 34:56

    ... with tasks. And so he might be talking about multiple tasks.

  90. 35:00

    Yeah. Yeah, and this is where, again, the harness comes into the picture. If the harness has the intelligence to bring in skills from OpenTable and from Resy and Google Res- Google Reservations, maybe it can bring all of those in to figure out what is the best way to book me a date night. That's your solution, right? Like, the harness should be able to, uh, figure out which tools to use to get the job done. That's like

  91. 35:30

    how I would go about it. Uh, figure out what are the most common use cases that your customers have. For those use cases, what's the best skill files, prompts, tools? Maybe you wanna do like specific tools for specific use cases, right? Maybe you wanna do generic tools for all use cases. Like that's the same argument here, is like, do you do s- one skill for each or one skill for all? Uh, and eval across all of these strategies and, and let the harness figure it out.

  92. 35:58

    I have a question about that info with GEPA.

  93. 36:01

    Yes. Yes. Yeah. Uh, I mean, it's a very similar concept as this, right? Uh, so DSPy.

  94. 36:09

    Yeah.

  95. 36:09

    Yeah. I, I think those guys were onto something really cool. Like they were around like three, four years ago where they started building DSPy and GEPA, all of that. I think, uh, we have been doing a lot of research, uh, along these lines as well. Browserbase works with, uh, Microsoft. We actually released a paper, uh, about how to build the right sort of verifiers, uh, for your agents. Uh, I think running evals is straightforward until you start questioning, okay, how should I eval

  96. 36:39

    my eval, right? Like w- uh, do I need to put all these humans to verify all these runs, or is there a good verifier that I can build here and all of that, uh, uses the, uh, learnings from, uh, these papers as well. I can share all of that in the GitHub as well.

  97. 37:00

    I'll also see if there's any new questions here.

  98. 37:05

    Where and how are these skills stored, retrieved at scale? Uh, right now, for this repo, uh, all of these get stored in my .claude over here. So each of these is a skill file. This was my recipe searcher. Uh, I wanted to build some-- I wanted to cook some dinner yesterday, so I was like, "Hey, make me some recipes." Uh, so all of these are currently in my local, uh, skills folder. Uh, but if you want to ship this, uh, in production, of course, you can,

  99. 37:36

    uh, bake this into your agent loop. Uh, or if you wanna s- I think for browse.sh, the public, uh, publicly available, uh, skills that we have, I think we use Vercel blob storage to store all these skills, uh, and make them on demand. Hope that helps. Uh, websites change frequently. What's your stra-strategy for monitoring that and keeping the website skill updated? Yeah, this is such a great question. Uh, and this is what I was alluding to earlier is like, how

  100. 38:06

    do you keep these sc-skills up to date because the website's gonna change? The, m- the current working theory that we have right now is you don't want to waste tokens running auto research every day. You wanna probably trigger auto research if it's failing at any particular point in production, right? So we build these loops or, like, systems where as soon as we run into any production failure, we run an auto research loop to see what

  101. 38:36

    went wrong, to heal it, create a pull request that goes directly to a, a human engineer, and they fix it. Automatically, the skill gets updated. Uh, so yes, there is that notion of, like, production failure when this might happen. Uh, but it's a trade-off. You can run an auto research, or you can run a sample run every two hours, every three hours to see if the skill is working, uh, perfectly. Uh, so there's different ways of having the, uh,

  102. 39:06

    cron jobs, uh, check for the accuracy of these skills. This is actually one thing that I'm actively working on with a customer right now to implement. And there's all these questions, right? People don't want a hundred percent accuracy. People might want, like, the next cheaper cost. So like, uh, that's the, uh, question that comes up. What's your teacher's criteria here in the example separate from reaching the goal? It seems to do some optimizations for turns. What other criteria do you use? Uh, so again, this

  103. 39:36

    is the design of the auto research loop. Uh, there's one way of telling your auto research that, "Hey, I wanna focus on just success. As soon as you get me success, I'm fine. Just give that to me." Uh, that's typically not what everybody wants to do. Uh, people want to minimize on, uh, latency, uh, because maybe this is a real-time run where you're focused on how quickly can you get the job done. Uh, so if that is the optimizing metric, and you focus on getting it f- as fast as

  104. 40:06

    possible. What I've seen sometimes these auto research loops are so smart, they realize that browsers are not needed at all, and they just reverse engineer the API, and they file the API, and that's the fastest that you'll ever get to, right? Uh, so sometimes, uh, I've seen situations where, uh, it finds a solution f- that works in five hundred milliseconds. Uh, sometimes it is the number of turns, right? You want to minimize your context loop, uh, and you want to minimize the number of,

  105. 40:37

    uh, turns it takes to complete the task. Uh, in my instance, I think what I have done is it's your decision to pass or converge whenever you want to pause it. I'm not really concerned about the costs. Uh, I care most about reliability, so keep doing it as long as you feel it's relevant, and then it's the teacher's agent's job to, uh, call it a day when it wants to. But yeah, you can, uh, try all different

  106. 41:06

    strategies. Uh, if a website supports WebMCP, will this use it? WebMCP is so cool. Uh, it's essentially this concept-- I don't know if everybody knows this, but it's this concept of, like, making your website programmable. It's, it's come out in this new Google Chrome release recently, where you tell your, uh, website that if anybody wants to book a reservation, they can do XYZ on the website. It's kind of like an API, but it's on the browser.

  107. 41:37

    Uh, right now, I don't think our auto research loop supports this. Uh, but I don't think it would be, uh, too hard to do that. Uh, in fact, we recently shipped support for WebMCP with our SDKs that we launched. Uh, we also made some tools for website owners to ship WebMCPs at scale. Uh, but yeah, this is an interesting one. We've not really seen a lot of adoption with WebMCP as yet.

  108. 42:06

    Uh, ground truth for pass. That's interesting. Uh, I think as long as the job was done, as long as... For example, in Google Flights, uh, if it found the cheapest flights, in OpenTable, if it found a reservation, uh, so it, it evaluates itself. It's typically a binary. Uh, and yeah. Again, I, I, I fully embrace the bitter lesson. I try not to put many guardrails in, uh, these

  109. 42:36

    evaluations. Uh, have you considered a verifier as a service for browsing tasks, including something that allows us to mock certain side effects like purchases? Uh, I might have to ask, uh, s- a follow-up on that. What do you mean by verifier as a service, Ravish, if you're here? Yes.

  110. 43:29

    Uh,

  111. 43:32

    so, uh, do you mean that...

  112. 43:36

    Yeah, the, uh, if, if I understand this correctly, like you have like different environments that you can use for RL training, and you wanna like mock what happens if I am replicating Amazon, if I click on purchase, what happens after? Uh,

  113. 43:54

    no, because, uh, we try to rely more on real world websites. Uh, browser-based, we have the privilege of ha- ha- being able to access most of the web with our, uh, access to different websites, uh, and CAPTCHA solvers, et cetera. Uh, so we try to mimic the real world as much as possible. But we've been seeing a lot of these RL environments where people are mimicking websites to train, uh, and build browser agents that are, uh, uh, really good at like

  114. 44:24

    browsing Salesforce, really good at like browsing SAP. Uh, we try to do that on real world portals as much as possible.

  115. 44:34

    Are hCAPTCHAs easy for the skill to move past or is it token intensive? Uh, what is the point of hCAPTCHAs for website owners? hCAPTCHA, if I'm correc- uh, understanding this, is like a particular kind of CAPTCHA. It's kinda like Google reCAPTCHA, et cetera. Uh, yeah, I would probably talk about this separately. Uh, I don't think we can talk about like what it c- what CAPTCHAs we can solve or not. Uh, but it's not a token-intensive job, uh, per se, because it's an infra-- like it's a thing that's done at

  116. 45:04

    the infrastructure layer, right? Uh, y- y- we don't really need to use an AI to solve a CAPTCHA. Uh, it's solved at the Chrome binary layer, uh, and we do that out of the box.

  117. 45:19

    How does the teacher evaluate the doer and when is the skill marked as graduated? Yes. So, uh, it evaluates the doer by essentially reading these traces. Uh, for every iteration, there is this folder that gets created. Uh, there are these, uh, JSON files. Uh, it reads these. Uh, it has a Claude Agent SDK loop. Uh, and it essentially figures out what the learnings from that loop are. Uh, actually, I think I have a slide that talks about this

  118. 45:49

    at the end.

  119. 45:53

    Yeah. Uh, this is kinda like the prompt for this, uh, where it says that you're a browser automation agent, you can use these tools, uh, and the strategy.md gets injected at every iteration. Uh, and this is how the, uh, uh, doer-- uh, the teacher evaluates the doer's job. Uh, so yeah, it reads the traces, it has the system prompt, it has the previous strategy, and it comes up with a better strategy.

  120. 46:27

    Amazing. Uh, I hope we've covered all the questions. Uh,

  121. 46:36

    any other questions live that we might wanna talk about? Yes.

  122. 46:44

    Yeah, it can work with the Stagehand SDK, it can work in your Claude code. Uh, it's essentially a markdown, right? Uh, I took, uh, a skill and I told my Claude code, "Can you find events in SF for this Friday, July the 3rd?" I went on and did this. So i- it need not use browser-based, it need not use Stagehand. It is essentially a skill. It is a portable artifact you can use in any agent or any SDK.

  123. 47:30

    Yeah. Yeah. Great question. I think if I understand this correctly, how do you prevent against prompt injection? Uh, because websites could trick my auto research loop in learning something bad that can do some malicious behavior in, in a production setting. Uh, there's a few ways we do that. One is at the infrastructure layer itself. Uh, we have a bunch of, uh, protections around our browsers

  124. 48:00

    itself. Uh, we have this browser-based safe mode where you can sort of control which URLs it can go to. You can control what kind of actions it can take on different websites. So at the infrastructure level, at the network firewall, we control things. Now you might say that it is possible that amazon.com gets hacked someday. How do you prevent against like malicious actions on those portals as well? Uh, I think we also try to, uh, run our skills that are generated

  125. 48:30

    against some security, uh, reviewer agent of sorts, uh, before we actually publish this on Browse.sh. Uh, so that's like one way of doing it. Uh, we encourage our customers to have, uh, a good level of, uh, prompt injection guardrail, uh, surface area, uh, if they're sort of giving this out to cus- consumers. Uh, for example, some customers of ours, uh, might want to automate something on Amazon, and what if somebody puts uh,

  126. 49:00

    a listing on Amazon which has some hidden instructions, and how do you prevent against those kind of things? Uh, and that's where, uh, we work with our customers to build the right kind of- Uh, guardrails before the, uh, instruction even reaches the harness. Um, so yeah, I think I would put like three layers here. One is as the, as the query is even entering our surface area, we control that. At the skill layer, we make sure that our skill is not, uh, tricked,

  127. 49:30

    and at the infrastructure layer, we have network restrictions and action restrictions. You can even do something like what Codex or PlotCode does. Um, like always allow or allow once or allow any action. Uh, you can-- Uh, this is what like Browserbase safe mode offers out of the box. I know browser is a crazy threat vector when you think about it, like it has access to anything on the wild web. Uh, and take that super seriously from a prompt injection POV.

  128. 50:03

    Amazing. I'll wait for ten more seconds if there's any other questions. Uh, this was fun. I really enjoyed this. I love the kind of questions as well. Uh, and yeah, I will put the QR code back on screen in case any of you want to grab this. Yes.

  129. 50:22

    Um, how do you maintain like the quality of your skills? Like in my experience when I review like auto-generate skills, like quickly just like explode and become like outdated. Like how do you-

  130. 50:33

    Yeah.

  131. 50:33

    -prevent that from happening and how it's like not only happening from like your own development, um, environment changing, but also from the browser, from the website changing as well? How do you ensure that makes sense?

  132. 50:44

    Yeah. Yeah, exactly. Yeah, I think we talked about it a while back. What you could do is like I used, uh, Anthropic managed agents quite a bit. Uh, so I would run a cron job on managed agents where I would say, "Use this skill every day at nine AM to do this job, and if this is a success, all good. If this is a failure, send me a notification here." That will trigger a healing loop. Uh, so that's how I sort of can bake in, uh, checks and balances around websites changing, anti-bots

  133. 51:14

    changing, et cetera.

  134. 51:21

    Amazing. I'm gonna hang around here. Uh, also, uh, I'll be at the Browserbase booths all days of the conference as well. So, uh, in case you're curious and wanna chat more, uh, would love to do that. Thank you.