ANTIGRAVITY LABJP
Articles/Integrations
Integrations/2026-06-17Advanced

Feeding axe-core Findings to an Antigravity Agent: An Accessibility Fix Loop in CI

Detect accessibility violations with axe-core, hand them to an Antigravity agent as fixable tasks, and wire detection, triage, fixing, and re-verification into a single CI loop. Includes a diff gate that blocks only new violations and a scoping design that keeps the agent from breaking screen readers.

antigravity367accessibility2axe-coreplaywright2github-actions9ci-cd10premium14

Premium Article

import RelatedArticles from "@/components/RelatedArticles";

A few days after shipping an updated settings screen for one of my wallpaper apps, a VoiceOver user wrote in: "the save button just reads as 'button' — I can't tell what it does." I had forgotten an accessibilityLabel on an icon-only round button. On a single screen you catch that by eye, but as an indie developer juggling several apps and a few websites at once, a routine of screen-reading every screen before every release simply does not survive contact with reality.

So this piece builds a loop. We detect accessibility violations mechanically with axe-core, hand the results to an Antigravity agent as concrete things to fix, and run detection, triage, fixing, and re-verification as one cycle inside CI. The division of labor is the point: tools decide pass/fail, the agent proposes fixes, and CI applies the brakes. The examples target a web frontend (a Next.js app like the Dolice Lab sites), but the same shape carries over to automated accessibility checks on mobile.

Why manual accessibility review never sticks

Accessibility defects don't blank the screen the way a functional bug does. Visually, everything looks fine. That is exactly why they pile up quietly: a button whose contrast ratio sits just under 4.5:1, an input with no label, a custom dialog that focus never reaches. Each one is small on its own, and each one tends to get skipped when the visual review runs out of energy at the end of the day.

The mistake I made for a long time was "fix it all before release." The backlog ballooned to a few hundred items, and the sheer size made it psychologically impossible to start. Debt is far more manageable when you stop adding to it than when you try to pay it all down at once. Putting axe-core in CI is how you hand that "stop adding" job to a machine.

Detection alone isn't enough, though. Handing a reviewer a list of violations still leaves the "okay, but how do I fix it" burden. That's where an Antigravity agent earns its place — drafting the fix per violation type so review can actually move forward.

The loop at a glance: who detects, who fixes, who blocks

Fix the roles up front and you won't get lost. Three actors share the work.

  • axe-core (detector): scans the rendered DOM and reports which WCAG rules are violated as machine-readable JSON. The verdict is deterministic and doesn't drift.
  • Antigravity agent (fixer): reads the violation JSON and the relevant source, then drafts fixes. Its job is explanation and proposal, never the pass/fail call.
  • GitHub Actions diff gate (brake): compares against a baseline and blocks the PR only when violations have increased. Existing debt goes to a separate queue; new regressions are stopped cold.

Keep detection and the brake in deterministic tools, and confine the non-deterministic part — coming up with the fix — to the agent. That's how you keep CI trustworthy. Let the agent own the verdict and the same PR will return different results run to run, and the gate stops being a gate.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Turn raw axe-core violation JSON into fixable agent tasks and narrow them to critical/serious only — dropping a first scan from 240 findings to a workable 38
Add a diff gate to GitHub Actions that blocks only newly introduced violations, so you can stop the bleeding today even while carrying existing debt
Learn the scoping constraints and review lens that stop an agent from over-adding ARIA and regressing the very screen readers you set out to help
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Antigravity Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Integrations2026-05-01
Antigravity × Lighthouse CI: Catching Web Performance Regressions Automatically— Budgets, PR Comments, and Progressive Blocking
Wire Antigravity's AI to Lighthouse CI inside GitHub Actions and stop performance regressions before they reach production. This guide covers budget design, PR comments, progressive blocking, RUM integration, and cost controls — all in a shape that holds up in real teams.
Integrations2026-06-13
Running the Antigravity CLI (agy) Headless in CI: Working Around the Non-TTY stdout Problem
Run agy -p inside GitHub Actions or cron and the output you saw locally can vanish, while the exit code still returns 0. Here is how non-TTY detection causes it, plus a robust setup using a pseudo-TTY, defensive text parsing, and API-key auth so you always capture the result.
Integrations2026-03-27
Automate GitHub Pull Request Reviews with Antigravity: A Practical Guide
Learn how to automate GitHub Pull Request code reviews using Antigravity's AI agents. From environment setup to workflow design, this step-by-step guide covers everything you need.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →