Agent-ready apps at a glance
- The agent reads the page as structured text, not as a picture. It takes no screenshots.
- For each control it reads the kind of control, its name, its state, and the text around it.
- You add no data attributes, selectors or ids for HelpAlive.
- Clear names, labeled fields, native elements and errors shown as text all help the agent.
- When the agent meets something it can’t read, such as a
<canvas>or a frame from another site, it hands the task back to the user.
How the agent reads your page
The agent reads the page as structured text, not as a picture. It takes no screenshots. For each button, link, field and menu, it reads:- what kind of control it is, such as a button, a link, a text field or a checkbox;
- its name, which refers to the visible text, or the accessible name from a
<label>,aria-label,aria-labelledby,altortitle; - its state, such as checked, disabled, selected or expanded, and the value a field shows, except in password fields;
- the headings, section titles, notices and error messages around it.
Prerequisites
- HelpAlive is installed. See Install the script.
How to make your app agent-ready
1
Give every control a name
An icon-only button needs a name a screen reader would announce. Add
aria-label, or visually hidden text.2
Tie each field to its label
Use
<label for>, or wrap the field in its label. A placeholder alone is not enough, because it disappears once the user types, and it reads as a hint, not a name.3
Use plain, distinct words
Prefer “Invite teammate” to “Go”. When a list repeats the same button on every row, the row’s own text tells them apart.
4
Use native elements or the right role
A
<button>, <select> or <input type="checkbox"> says what it is. If you build your own, give it the matching role and states, as accessible component libraries already do.5
Show errors as text
Write validation errors as text near the field, or link them with
aria-describedby. The agent reads them, as a user would.What the agent can’t read
The agent hands the task back to the user when it meets something it can’t read or shouldn’t do:- drawings in a
<canvas>, and other content drawn as pixels; - content inside a frame from another site;
- controls with no name it can find;
- file uploads, phone codes, passwords, downloads, system dialogs and other apps.
Check it works
- Run your browser’s accessibility checker, or a tool such as Lighthouse, on a busy page. Fix controls flagged as having no name.
- Open the agent in your app and ask it to do a task on that page. Watch where it hands back to you.
Why does the agent stop and ask the user to take over?
The agent stops because it reached a control it couldn’t name or read. Find the step where it stopped, and give that control a visible label or anaria-label.
Why does the agent pick the wrong one of several similar buttons?
The agent picks the wrong button because the buttons share a name. Make each name specific, for example “Edit billing address” and “Edit shipping address”.Next
How HelpAlive works
From the question to the task.
Assists
Does the steps, or shows how.
Safety and hand-backs
What it always hands back.

