Operator, ChatGPT Agent, Claude Computer Use can log in and check out on your site - if you let them. 2026 audit for selectors, forms, ARIA, captchas.


Olga Fedotova7 min
Contents5 sections
  1. How a browser agent sees your page
  2. The five requirements
  3. The 60-second audit
  4. What ships with inite.ai
  5. Sources

In 2026 your customer may not be the person who clicked your ad. It may be the agent they delegated the task to. Operator books and buys on the open web. Claude Computer Use closes B2B SaaS trials. ChatGPT Agent fills out government forms. Browser Use runs at the bottom of every solo founder's automation stack.

Each one of these is a vision-driven LLM that opens your site in a real Chromium browser, looks at the screen, decides what to click, and tries again on failure. They succeed when the page is semantically readable; they abandon when it isn't. The gap between "agent-friendly" and "agent-hostile" is now the same gap that mattered in 2010 for mobile and in 2018 for screen readers: not a luxury, a tier of customer.

This is the 2026 audit checklist.

How a browser agent sees your page

Three perception modes, depending on the agent:

  1. Pure vision (raw Operator, Browser Use's default): the agent takes a screenshot and asks the model "where should I click to do X?" Coordinates are the primary key.
  2. Vision + accessibility tree (Claude Computer Use, ChatGPT Agent): the agent sees both the pixels AND the parsed ARIA/role/label tree. Far higher reliability because the model can target by name.
  3. DOM tap (newer Operator builds, Browser Use's dom_mode): the agent reads the rendered DOM, extracts an enriched representation (selector + role + bbox + ancestors), and decides actions on structured data.

You don't get to pick which mode your visitors use. So you design for mode 3 (the most demanding) and modes 1-2 inherit the benefit.

The five requirements

1. Stable selectors

Every interactive element you care about gets a data-testid or data-agent-action attribute. The value survives redeploys, brand refreshes, and tailwind upgrades. Examples that work:

<button data-agent-action="submit-booking" aria-label="Confirm booking">Confirm</button>
<a data-agent-action="open-cart" href="/cart">View cart (3)</a>
<input data-agent-field="email" type="email" name="email" autocomplete="email" />

Examples that fail:

<button class="css-1xkj4m hover:css-zz9p9o">Confirm</button>
<a href="/cart"><svg>…</svg></a>
<div class="rounded p-2 border" contenteditable="true">…</div>

If your team uses CSS-in-JS that emits hashed class names, the deploy-N selector and the deploy-N+1 selector are different strings. The agent's playbook, recorded against last week's page, breaks on every redeploy. data-testid is invariant by convention.

2. Semantic form attributes

Every input gets at minimum name, id, type, autocomplete, and an associated <label for=…>. Browser agents trained on millions of forms recognize these patterns. Custom React components that hide the underlying input from the DOM (a common pattern in shadcn/ui's earlier 2024 builds) leave an agent that reads the accessibility tree with no field to fill.

Date pickers are the worst offender. A native <input type="date"> works for every agent. A custom Headless UI calendar with keyboard-only event handlers and aria-grid roles works only for agents that read the accessibility tree. A custom JS picker that hijacks onKeyDown and writes state to React refs works for nobody.

3. No CAPTCHA walls on primary flows

Cloudflare Turnstile, hCaptcha, and Google reCAPTCHA all fight bots — including the agents that are your customers. The 2026 pattern:

  • Login / sign-up: allow agents (most identify themselves). Use risk-based challenges, not blanket Turnstile.
  • Read flows (search, browse, view product): never gate.
  • Write flows that cost money (checkout, withdrawal): allow Turnstile with the passive mode that lets identified agents pass; only gate suspicious traffic.
  • Account creation: this is the right place for a real human challenge — but route identified Operator/Agent traffic to a separate flow that issues a temporary OAuth scope.

If you gate every flow, you train agents to abandon your domain at the first wall. Worse, the model behind the agent remembers — its future responses will rank your competitors higher.

4. Recoverable errors

When the agent submits a form and the server rejects it, the error must be:

  • Visible in the DOM as text (not a red CSS border alone).
  • Programmatically associated with the field (aria-describedby="error-email").
  • Specific enough for the model to fix ("Email already in use — try logging in" not "Invalid input").
  • Not behind a toast that auto-dismisses in 3 seconds.

Test by running your primary form through Claude Computer Use with a deliberately-wrong input. If the agent can describe the error in plain English, you pass. If it just keeps re-submitting the same form, you fail.

5. An agent manifest

A well-known URL — convention is /actions.json or /.well-known/agent-actions — that declares your callable surfaces:

{
  "version": "2026-05",
  "actions": [
    {
      "id": "create-booking",
      "url": "/book/{slug}",
      "method": "form",
      "fields": ["start_date", "end_date", "vehicle_id"],
      "auth": "session"
    },
    {
      "id": "lookup-rate",
      "url": "/api/v1/rates",
      "method": "GET",
      "params": ["origin", "destination", "date"],
      "auth": "api_key"
    }
  ]
}

This is the bridge between agents that scrape the DOM and agents that call APIs. ChatGPT Agent and Claude with MCP enabled will check this URL on first visit and prefer API calls over browser actions when both are available. Faster, more reliable, less of your CDN budget. The parallel server-side surface - tools and skills that agents can call directly - is covered in MCP skills make SaaS AI-native.

The 60-second audit

Run this on your top user flow. If any step fails, fix it.

  1. Open the flow in Chromium with --disable-blink-features=AutomationControlled.
  2. Right-click → Inspect → Accessibility tab. Every interactive element has a Name and a Role? Pass.
  3. Reload. Class names on buttons unchanged? Pass.
  4. Open DevTools → Console. Paste document.querySelectorAll('[data-testid], [data-agent-action]').length. Result ≥ count of buttons on the page? Pass.
  5. Submit the form with deliberately invalid data. Error text visible in the DOM (not just a red border)? Pass.
  6. Visit /actions.json or /.well-known/agent-actions. Returns valid JSON? Pass.

Retrofitting one flow until every check passes is frontend work measured in hours, not a project. A net-new flow built with this checklist costs zero extra time — semantic HTML is the same number of keystrokes as div soup.

What ships with inite.ai

inite.ai does not run this checklist for you. The six steps above happen in your own browser, on your own flows: an outside scan cannot log in and fill your forms the way an agent does. What the inite.ai analyzer checks from a public URL is the layer around those flows: whether robots.txt lets the AI crawlers in, which identity files the site serves (llms.txt, ai.json), the homepage schema and the page health. A separate Agent access section looks for the machine doors that step 6 is about: an MCP server that answers, a listing in the MCP registry, an A2A agent card, an OpenAPI description, an API catalog, an agent skills index. It does not look for /actions.json or /.well-known/agent-actions: no outside body has agreed on either, and that section is reported beside the score, not counted in it. The same audit is an MCP server at https://inite.ai/api/mcp/analyzer: check_identity(url) reads the crawler policy and identity files instantly and free, analyze_site(url) starts the full audit and get_analysis(run_id) reads it about a minute later, and visibility_fixes(url) returns the fixes in order, with a paste-ready file where there is one. A Claude or Cursor agent can call it from a pipeline.

The pattern is the same as AEO: instrument once, measure weekly, fix the worst offender every sprint. Agent traffic in 2026 is what mobile traffic was in 2012 - a curve you either ride or watch. The discovery layer behind it (llms.txt, ai.txt, identity.json) is in the AEO complete guide; the allowlist policy that decides which agents reach you at all is in AI crawler allowlist 2026.

Related: Making your SaaS browser-agent-ready.

What happened when the buying step itself moved into the assistant, and then moved back out, is in the AI checkout got cancelled.

Sources

Frequently Asked Questions

  • Which browser agents matter most in 2026?

    Four production agents drive real traffic: OpenAI Operator (consumer + business tier), ChatGPT Agent (in chat.com, replaces the older Tasks beta), Claude Computer Use (Claude 4.5 in Anthropic console + via API for builders), and Browser Use (open-source, over 100,000 GitHub stars in October 2026, the default for indie builders). All four are vision-driven — they see your page like a human — but they all benefit from semantic HTML and stable selectors. Optimize for the union, not the intersection.

  • Will accessibility (ARIA) really help AI agents?

    Yes — it's the single highest-leverage change. Agents prefer the accessibility tree over the visual screenshot because the tree is structured, role-tagged, and label-bearing. A button with `aria-label='Submit booking'` is more reliably clicked than the same button identified only by 'a blue rectangle at coordinates (480, 612)'. WebAIM's 2026 scan of the top million home pages found a third of form inputs without a proper label, so most sites have this work ahead of them.

  • How do I detect agent traffic?

    Three signals: (1) user-agent string contains 'Operator', 'ChatGPT-Agent', 'Anthropic-ComputerUse', or 'BrowserUse' — most identify themselves; (2) mouse-movement entropy below human baseline (agents click directly without hovering); (3) absence of typical browser fingerprints (no localStorage write on first visit, headless Chrome quirks). Log all three; build a /api/me endpoint that returns hints if the agent identifies itself, so your client can adapt the UI.

  • Should I show a different UI to agents?

    Yes, selectively. The pattern is 'progressive enhancement for agents' — keep the human UI canonical; on detected-agent sessions, expose extra `data-agent-action` attributes that document each button's role, surface a /actions JSON manifest at a well-known URL, and skip animations / loading skeletons that delay perception. Don't fork the entire UI — that's a maintenance disaster. Add hints.

  • What kills agent task completion fastest?

    In order of frequency: (1) Cloudflare Turnstile / hCaptcha on the primary form, (2) class-hash selectors that change on every deploy ('css-1xkj4m'), (3) inputs without `name` or `autocomplete` attributes, (4) custom React date-pickers that hijack keyboard input, (5) modal-on-modal flows the agent can't dismiss, (6) error messages displayed only as red border (no text). Audit your top-3 user flows against this list weekly.

Browser AgentsOperatorChatGPT AgentComputer UseAccessibility