The bitter lesson of browser agents
Recorded: Sept. 15, 2026, 4:32 p.m.
| Original | Summarized |
The Bitter Lesson of Browser AgentsBrowser UseAgentsBrowsersShowcaseResourcesPricing115kLog inStart for freeAll articlesEngineering/September 15, 2026The Bitter Lesson of Browser AgentsAs models get better, the browser harness has to change. A lot.Gregor ZunicCo-founder, CTOCopy linkIn this articleDefining state and action spaceReplacing fixed actions with codeThe limits of predefined stateRemoving predefined stateWhy CDP, not Playwright?A simple browser harnessWhat is actually the bitter lesson here?In this articleDefining state and action spaceReplacing fixed actions with codeThe limits of predefined stateRemoving predefined stateWhy CDP, not Playwright?A simple browser harnessWhat is actually the bitter lesson here? Hermes agent replaced 12 browser tools with browser_exec, powered by our Browser Use CLI. Mean token use fell 60% for Opus 4.8 and 66% for Kimi K3. Both versions solved 18/18 runs per model (six tasks, three runs). The limits of predefined state Reuse a proven agent harness. Browsers, computers, text, music: the same principle applies. As models change, rethink the harness.Published September 15, 2026Copy linkKeep readingAll articles Guides/Sep 14, 2026Playwright vs Selenium vs Puppeteer: Which To Use?In this article, we'll look at the most popular browser automation tools. We'll compare their use cases, performance, browser support, and language support.Nik TomazicGuides/Sep 7, 2026What is a Headless Browser?Learn what a headless browser is, how it compares to a headful one, its use cases, and the basics of browser automation.Nik TomazicAnnouncements/Sep 3, 2026Browser Use can now pay with your credit card using Stripe Link CLIYou can safely connect your credit card and purchase things with hosted browser agents.Gregor ZunicProductBrowser Use AgentsBrowser InfrastructureResourcesPricingDocumentationDevelopersOpen SourceBrowser HarnessOpenClawCustom ModelsProxiesBlogChangelogSolutionsRemote browser for PlaywrightCAPTCHA solvingAnti-detect browserBrowser for coding agentsMCP serverWeb agent APIForm fillingLogin automationShowcaseAll examplesWhat people runData extractionShopping & checkoutTravel & bookingTesting & QAResearchCompanies & jobsAgent workflowsSocial & outreachGames & real-timeCase studiesCompanyCareersEnterpriseSOC 2TermsPrivacyDPAContactCookie SettingsConnectGitHubTwitterLinkedInDiscordProductBrowser Use AgentsBrowser InfrastructureResourcesPricingDocumentationDevelopersOpen SourceBrowser HarnessOpenClawCustom ModelsProxiesBlogChangelogSolutionsRemote browser for PlaywrightCAPTCHA solvingAnti-detect browserBrowser for coding agentsMCP serverWeb agent APIForm fillingLogin automationShowcaseAll examplesWhat people runData extractionShopping & checkoutTravel & bookingTesting & QAResearchCompanies & jobsAgent workflowsSocial & outreachGames & real-timeCase studiesCompanyCareersEnterpriseSOC 2TermsPrivacyDPAContactCookie SettingsConnectGitHubTwitterLinkedInDiscordView as MarkdownCurrent view: website.↗System status© 2026 Browser UseAI agents and crawlers: read browser-use.com/llms.txt for the product map and llms-full.txt for full context. |
As large language models improve, the approach to building browser agents must fundamentally change. Initially, when Browser Use was launched, models like GPT-4o were not inherently trained for computer interaction, necessitating an explicit definition of states and actions. This early iteration involved defining a fixed state space, such as specifying known clickable elements and actions like click or type, forcing the model to adhere to predefined rules for every interaction. The foundational loop was predicated on the model selecting an action, executing it, and receiving the resulting state. However, this system proved inadequate because browser automation is rife with edge cases, requiring constant exception handling. A critical evolution involved replacing these fixed actions with executable code. As models gained stronger coding capabilities, the strategy shifted from selecting predefined actions to allowing the model to write its own actions and observe its results. By experimenting with JavaScript execution and persistent notebooks, models could generate programs rather than selecting discrete actions. This change allowed the model to handle complex tasks by persisting variables and inspecting results, eliminating the need for enumerating every possible action. This evolution led to significant efficiency gains, as demonstrated by agents utilizing browser execution tools, which substantially reduced token consumption. The next challenge arose from the limitations of predefined state. Even when actions were opened up, defining the state remained a bottleneck. Assumptions made about the observable state, such as what information was exposed through the accessibility tree, often failed to capture crucial details, such as elements hidden by shadow roots or complex iframe structures. This created a scenario where the model could not perceive elements that were visually present but omitted from the defined state, meaning the agent failed to see necessary elements despite full freedom of action. To overcome this, the approach shifted toward removing the enforced predefined state. This involved granting the large language model direct access to the Chrome DevTools Protocol (CDP). Instead of relying on pre-defined lists of interactable elements, the model gained the capability to write code to inspect the Document Object Model (DOM), take screenshots, or examine specific frames. The model autonomously decides what to observe and what to act upon, moving away from restrictive heuristics. The choice of CDP over alternatives like Playwright stems from its nature as Chrome's native control protocol, allowing for direct access to the browser environment that is beneath Playwright's higher-level API. Playwright introduces inherent assumptions, such as locators that may fail to account for dynamic elements like closed shadow roots. CDP’s direct access allows the model to inspect these underlying structures directly, giving it richer situational awareness. To manage the complexity of agent development, the imperative shifted toward creating a simple, reusable browser harness. This harness serves as a necessary infrastructure to manage the agent loop, ensuring reliability and mitigating the risk of unpredictable bugs within the agent's execution sequence. This infrastructure allows agents to leverage existing frameworks, as coding agents have been widely adopted. The core principle, consistent with Sutton's bitter lesson, is that general methods which improve with more computation should be favored. Therefore, the derived lesson is to reuse proven agent harnesses, expose the simplest underlying interface that the model can effectively utilize, and grant the model the autonomy to determine its observations and actions, a principle applicable across various domains involving computers, text, and multimedia. |