A pivot story · 2026

From AgentHoldem
to Auto Browser.

A pivot story, and what I built from its ashes.

01 · The idea

I set out to converge
AI Agents · WebMCP · Bitcoin.

After running through many ideas I settled on AgentHoldem, a hackathon project where agents play Texas Hold'em against each other, driven by WebMCP, paid in Bitcoin.

Agent Warfare

Agents playing each other. Sounds like fun.

A WebMCP Testament

Fast-paced play demands structured tools, not DOM scraping.

Bitcoin-Native House

Poker + crypto is a natural fit. Blocknomics-friendly by design.

02 · The artifact

This was AgentHoldem.

Live at agentholdem.xyz. Agents battle at the table, a reasoning log on the right shows every thought and action. WebMCP under the hood.

agentholdem.xyz
Screenshot of AgentHoldem: a poker table with seats for AI agents and a live reasoning log on the right.
03 · The pitch I told myself

It felt like a cheat code.

Gaming is addictive. If I could get people to play, traction would take care of itself.

Three trends converging. Demo-ready hackathon scope. A narrative that writes itself. What could go wrong?

04 · Second thoughts

Three realities broke it.

Over-ambitious

Client game + websocket + server-side resolver + FSM + chips + accounts + WebMCP extension. And the house bot. Most of it was up, and it was still too much.

Security posture

Real money in a hot wallet attracts the wrong attention. I wasn't ready to defend it, and shipping something I can't defend is worse than not shipping.

Traction paradox

Gaming is addictive until someone else plays for you. Agentic poker removes the fun, especially when you're paying tokens for the agent to have it.

05 · The hard pause

“I'm almost all in. If I pivot, I lose time for traction. If I carry on, I'm unlikely to get traction anyway.”

Me, reassessing.

Sunk cost is real. So is the cost of the wrong road.

Close-up of a royal flush in hearts held next to a stack of poker chips on green felt.
06 · The pivot

So I doubled down on
my favorite part.

Of the three pillars, one was a feat of engineering on its own: the WebMCP Agent Orchestrator for Chrome. I couldn't stop building it. So I stopped building everything else.

Lesson one

Hackathons reward the
smallest thing with a real story.

Not the most ambitious thing half-built. The AgentHoldem stack had ten working parts but no single one I could demo without apologising for the other nine.

Lesson two

Don't ship what you
can't defend.

Security posture isn't optional, even for demos. The moment real money is in reach, you're the adversary's target. If you're not ready to own that, the right answer is to not handle money.

Lesson three

Pivot toward the part you
can't stop building.

Not the most valuable part on paper. Not the part closest to traction. The part your hands keep returning to when nobody's watching. Of AgentHoldem's three pillars, only one survived contact with the second-thought.

Part two

Auto Browser.

An AI agent that actually uses your browser.

Auto Browser
07 · What it is

A Chrome side-panel
agent, WebMCP-first.

  • WebMCP-first: page-authored tools beat DOM scraping, every time.
  • Privacy-first: no telemetry, no analytics, no backend server.
  • On-device options: local LLMs or Chrome's built-in AI.
  • Four providers: one unified interface across cloud and local.
Auto Browser Sonnet 4.6
Press Run to watch the agent think.
08 · Architecture

Five moving parts.

Sidebar UI user surface
Content script ReAct loop
Provider layer 4 LLMs, unified
Service worker per-tab state
WebMCP shim document_start

No backend. The service worker holds per-tab state in chrome.storage.local; everything else runs in your browser.

09 · Orchestration

Five-phase ReAct.

plan

Break the goal down into 1–3 concrete next steps.

analyze

Read the current page state and pick what applies now.

act

Call one tool (WebMCP first, then CDP) and run it.

verify

Did it actually take effect? Check with read-only tools.

recover

Something went wrong. Diagnose, replan, or bail cleanly.

Each turn emits one decision object. The phase field tells the orchestrator what to do next. No free-text loop, no regex parsing.

// src/llm/react-schema.js
{
  "phase": "plan" | "analyze" | "act" | "verify" | "recover",
  "narration": "≤15-word user-facing label",
  "tool":      "tool_name" | null,
  "args":      { /* tool arguments */ },
  "final_answer": "task_complete prose" | null
}
10 · Memory

Working memory isn't
compression.

Think of it like a hiker's logbook. Before every step the agent checks: where am I, where have I been, what worked, what failed. So it doesn't walk into the same wall twice.

Most agents just shrink chat history to fit. We keep a live ledger of observations, routes, and attempted actions.

Where am I? Each page/state is fingerprinted so the agent recognises it if it comes back.
Where can I go? Paths that are open, blocked, or already visited.
What have I tried? Every action, its result, and how many times it's been repeated.
Am I going in circles? Bail after 3 identical failures and try something else.
11 · The USP

Four providers, one interface.

OpenRouter

Cloud · 200K ctx

Access to reasoning models across Anthropic, OpenAI, Google. Default pick.

Gemini

Cloud · 1M ctx

Extended thinking via thinkingConfig. First-class for long tasks.

Local OpenAI-compat

Your server · Ollama, vLLM

Bring your own model, your own weights, your own network. Zero egress.

Chrome Built-in AI

On-device · Gemini Nano

Private by construction. Multimodal Blob pass-through, no base64 hop.

12 · WebMCP-first

Why we're WebMCP-first.

WebMCP gives the agent a typed contract instead of a screenshot to guess from. That single choice shapes everything Auto Browser does.

Contracts, not screenshots

Page authors register tools with real parameters, like addToCart({sku, qty}). The agent calls them directly. No guessing which button is "Add to cart".

Fast enough for games

Parsing the DOM or a screenshot is slow. Calling a typed function isn't. Tool turns cost 20–100 tokens instead of 2000+, so the agent replies in a fraction of the time. Fast enough for agent-vs-agent games, live dashboards, anything where latency matters.

Survives UI changes

Your CSS refactor doesn't break the agent. Your A/B test doesn't either. The tool contract is the stable layer, whatever happens to the pixels.

Auditable by design

Structured args in, structured results out. requestUserInteraction() pauses for consent on anything irreversible. Every call is a log line you can read.

13 · Toolkit

30 tools ship in the box.

When a page has WebMCP, its tools come first. When it doesn't, Auto Browser falls back on a CDP-backed toolkit, so the agent is never stuck. Every tool is permission-gated: read-only calls run silently, mutating ones ask once per domain.

Perception 5
  • take_snapshot
  • take_screenshot
  • get_page_text
  • find
  • computer
Actions 7
  • click
  • hover
  • fill
  • fill_form
  • press_key
  • scroll
  • drag
Nav & Debug 11
  • navigate
  • go_back
  • go_forward
  • reload
  • wait_for
  • wait_for_network_idle
  • list_network_requests
  • get_network_request
  • read_console_messages
  • evaluate_script
  • get_element_info
Emulation 4
  • set_viewport
  • set_user_agent
  • clear_emulation
  • handle_dialog
Orchestration 3
  • ask_user
  • ask_user_form
  • set_poll_interval

WebMCP tools from pages shadow built-ins with the same name. Page-authored contracts always win.

Thank you

Try it at
autobrowser.dev