Best recovery behavior on semantically labeled journeys and calendar selection flows.
Browser Agent
Make your site agent-ready. AgentGlass scans your production journey with Claude, OpenAI, and Gemini, scores agent readiness 0-100 (like Lighthouse), and ships verified patches for anything agents can't navigate.
3 agents onlinequeue · 2 sitesregion · us-east-13 agents · 1 site · 24 seconds — Filter the event stream before your patch.
Maya Lin · Boltline · boltline.example
waiting for first event…Best recovery behavior on semantically labeled journeys and calendar selection flows.
Browser Agent
Recovers after inner-text fallback, but loses time on unlabeled CTAs and hidden controls.
Browser Agent
Cheap Playwright-plus-Flash baseline that exposes hover traps and ambiguous selector failures.
Synthetic Agent
Checks whether proposed DOM diffs improve accessible roles, names, and keyboard affordances.
Verifier
Confirms visible labels match spoken intent for hands-free agent workflows.
Voice
Indexes stable selector hints and journey labels for agents.json so agents route without brittle guessing.
Embedding
Each of the 3 agents independently navigates the same production journey in parallel sandboxes. Per eval cell, we replay 5 runs and average against ground-truth success criteria — not LLM-as-judge.
3 browser agents run the same journey in parallel
Each agent navigates a multi-page production flow, not single-page actions
Every scan replays 5 runs per cell against ground-truth success criteria — not LLM-as-judge
Failed patches feed back into the patch generator's training signal nightly
Each agent runs in its own isolated Chromium container — no shared cookies, no cross-contamination
Scan events stream to the dashboard via Redis pub/sub — sub-200ms latency
Postgres + Redis run in docker-compose locally; same containers in production
Every finding expands inline with the before/after DOM snippets and a concrete fix summary. No modal, no hidden state.
Verified patches — safe to merge. They passed our adversarial verifier with all 3 agents.
Booking CTA missing aria-label
- <button className="btn-primary cta-book-demo">Book a demo</button>+ <button className="btn-primary cta-book-demo" aria-label="Book a demo with our sales team">Book a demo</button>
Modal dismiss requires Esc — no close button — Verified-false — adversarial verifier flagged: dismiss button needs tab-trap fix in same component for full AA compliance
+ <button onClick={onClose} aria-label="Close dialog" className="modal-close">×</button>Size selector requires hover-then-click
- <div className="size-selector" onMouseOver={openMenu}>{size}</div>+ <button className="size-selector" onClick={openMenu} aria-expanded={open} aria-haspopup="listbox">{size}</button>
API key copy button requires double-click
- <button className="copy-key" onDoubleClick={copy}>Copy</button>+ <button className="copy-key" onClick={copy} aria-label="Copy API key to clipboard">Copy</button>
Code example tabs are <div> with click handler — no keyboard
- <div className="tab" onClick={() => setLang('py')}>Python</div>+ <button className="tab" role="tab" aria-selected={lang==='py'} onClick={() => setLang('py')}>Python</button>
The base schema and shape come from seed data; persona switching updates the visible site identity and score using seeded persona values.
{ "$schema": "https://agentglass.dev/schemas/agents.v1.json", "version": "1.0", "site": { "name": "Boltline", "url": "https://boltline.example", "description": "B2B SaaS — scheduling — Booking CTA has no aria-label" }, "agents_welcome": true, "ax_score": 94, "ax_score_breakdown": { "labeling": 96, "keyboard": 92, "non_semantic_handlers": 95, "hover_dependencies": 89, "transient_state": 97, "responsive_blockers": 100, "ambiguous_targets": 91 }, "scan_history": [ { "scanned_at": "2026-05-10T14:00:00Z", "score": 34 }, { "scanned_at": "2026-05-11T14:00:00Z", "score": 64 }, { "scanned_at": "2026-05-12T14:00:00Z", "score": 94 } ], "supported_journeys": [ { "name": "book-demo", "entrypoint": "/", "selector_hints": { "primary_cta": "[aria-label='Book a demo with our sales team']", "calendar_slots": "[role='radiogroup'][aria-label='Available booking slots']", "confirm": "button.confirm-booking" }, "expected_completion_ms": 12000, "min_score_for_agent_traffic": 80 }, { "name": "view-pricing", "entrypoint": "/pricing", "selector_hints": { "tier_growth": "button[aria-label='Continue with Growth plan']", "tier_scale": "button[aria-label='Continue with Scale plan']" } } ], "rate_limits_for_agents": { "requests_per_minute": 60, "scan_concurrency": 3 }, "contact": { "owner": "maya.lin@boltline.example", "agentglass_dashboard": "https://agentglass.dev/orgs/boltline" } }
AgentGlass does not stop at a score. It hands teams a manifest path, a patch path, or both — depending on what they want to put into production first.
Two integration models, chosen per output: publish agents.json so agents know how to navigate, or apply DOM patches so the site itself becomes easier for agents to use.
Download agents.json and host it at /.well-known/agents.json on your domain. Agents read it before navigating — like robots.txt for AI.
curl https://customer.com/.well-known/agents.json # Claude / GPT / Operator read this before navigating
Three options: download the .diff and apply manually, enable GitHub auto-PR for one-click merges, or drop in the runtime snippet for zero-deploy fixes.
Four clicks produce a live recommendation from the seed-data decision logic.
All plans share the same scanner and adversarial verifier. The difference is volume, automation depth, and auto-PR access.
1 site · 10 scans/month · community support
10 sites · unlimited scans · email support
Unlimited sites · SLA · SSO · dedicated CSM