Opens in a new tabSkip to content
Agent LighthouseAgent Lighthouse

    Searches the text of every published page. The evidence sources themselves are not in this index — search all of them on the trusted sources page.

    GitHub ↗
    Browse checks and page contents
    operability-safety/aria-roles

    Valid ARIA roles

    What it checks

    AI agents map elements to behaviors by their ARIA role. Invalid, deprecated, or disallowed roles make an element’s purpose ambiguous, so agents may mis-classify or skip it.

    Why it matters

    Browser-embedded agents perceive the page as a serialized accessibility tree — role plus accessible name plus state plus an opaque element reference — and issue actions against those references rather than against CSS selectors or screen coordinates. An element’s presence, role correctness and accessible name in the a11y tree therefore determine whether an agent can see it and act on it at all. Elements that are role-suppressed, unnamed or misrole’d are functionally invisible to this class of agent, however they look on screen.

    Evidence

    Accessibility tree consumption by computer-use…

    Three independent major-vendor harnesses, all first-party. Anthropic’s read_page ‘Return[s] the page’s accessibility tree as text with each element tagged with a reference such as [ref_2]’. The security guidance instructs implementers to ‘build page reads from what the page renders (the accessibility tree or visible text), not raw DOM source’ [anthropic-browser-use-tool]. Microsoft: ‘Uses Playwright’s accessibility tree, not pixel-based input’ [playwright-mcp-repo], with snapshot mode the default and vision mode reserved for ‘pages with poor accessibility markup’ [playwright-mcp-snapshots].

    Google: chrome-devtools-mcp take_snapshot is ‘a text snapshot… based on the a11y tree… along with a unique identifier (uid)’ [chrome-devtools-mcp-tool-reference]. The dominant OSS library resolves interactivity from ARIA roles, role/tabindex attributes, ARIA state and the accessibility properties ‘focusable, editable, settable’ [browser-use-clickable-elements]. The standard research benchmark exposes observation_type='accessibility_tree' [webarena-repo, webarena-paper]. The tree’s contents are governed by ratified specs [w3c-wai-aria-1-2, w3c-accname, w3c-html-aam].

    Limits

    The claim must be scoped to browser-embedded agents, and even there it is contested. Some consumers are pixel-only. Anthropic’s desktop computer-use tool is screenshot-only, with no DOM and no a11y access [anthropic-computer-use-tool]. OpenAI’s computer-use tool takes base64 PNG screenshots, and ‘the model looks at the current UI through a screenshot’ with no structured input [openai-computer-use-guide, openai-cua-announcement]. Gemini Computer Use is likewise screenshots plus action history [gemini-computer-use-docs]. And the a11y tree is not even always the better representation.

    A 2026 study measured Claude Sonnet 4.6 gaining +14.6pp, and GPT-5.1 at high reasoning gaining +17.5pp, when given raw HTML instead of the accessibility tree. Strong models ‘exploit layout information in HTML for better action grounding’. The a11y tree only won for lower-capability models [observation-reduction-paper]. So a11y-tree quality is a strong, well-documented determinant for one large and growing class of agent, not a universal precondition.

    How it scores

    Three major vendors document the same architecture first-party. Anthropic’s read_page returns “the page’s accessibility tree as text with each element tagged with a reference such as [ref_2]”. The security guidance tells implementers to build page reads “from what the page renders (the accessibility tree or visible text), not raw DOM source”. Playwright MCP and browser-use serialise role, name, state and a reference the same way. Named agents acting on the tree is the grade-A bar. The scope is browser-embedded agents only: Anthropic’s desktop computer-use tool is screenshot-only, and OpenAI’s computer use “looks at the current UI through a screenshot”, so a pixel-driven agent needs none of this.

    Sources