How Manifest works, in detail
Manifest loads the URL in a real browser (Chromium), so it sees the page the way a user would – after JS runs, not just the raw HTML.
Read the accessibility tree
The same tree screen readers use. It’s the most reliable signal for “what is this element and what does it do” because it’s built for exactly that purpose.
The accessibility tree alone misses things agents need: required fields, input types, placeholders, disabled states, and dependencies between actions (e.g. “email” must be filled before “submit” is valid). Manifest’s DOM extractors fill those gaps.
Resolve locators deterministically
Once the LLM has identified the actions, locator resolution – matching each action to a concrete CSS/role/name selector – is done deterministically, not generated by the model. Ambiguous matches are nulled rather than guessed, so what you get back is either correct or explicitly marked uncertain.
A clean manifest: actions, requirements, dependencies, navigation – ready for an agent to consume directly.