Methodology

Curb is built on one rule: the model never grades its own homework. Everything below is the exact pipeline — including what it can’t do.

The pipeline

  1. Deterministic detection. A headless Chromium loads the page and runs axe-core. Every violation Curb reports comes from axe — the LLM is never asked to “find” issues, because models hallucinate issues and miss real ones.
  2. Grounded remediation. For each violation, the agent retrieves matching WCAG 2.2 and ARIA Authoring Practices guidance from a pgvector store and proposes a code-level patch with an explanation and a self-reported confidence score.
  3. Mechanical verification. The worker applies the patch to a copy of the DOM and re-runs axe. A fix is marked verified only if the original violation is gone and the patch introduced no new violations. Fixes that fail either check are shown as proposed (unverified) or rejected outright.

What “verified” means

Verified means one thing: an axe re-scan of the patched DOM no longer reports the violation, and no new violations appeared. It is a mechanical regression check, not an accessibility sign-off.

What “verified” does not mean

  • It is not WCAG conformance. Automated tools detect roughly a third to a half of WCAG failures. A page with zero axe violations can still be unusable with a screen reader.
  • It is not human judgement. axe can confirm an alt attribute exists; it cannot confirm the text is meaningful. Curb flags these cases on each fix with a “needs a human” note rather than pretending the check is complete.
  • It is not a substitute for assistive-technology testing. Real review means keyboard-only passes and screen readers (NVDA, VoiceOver) driven by people who use them.

Honest demo mechanics

  • The sample audits on the home page are precomputed real runs — same pipeline, stored results — so the demo doesn’t cost a Chromium + LLM run per click.
  • Anonymous live audits are rate-limited per IP. Bringing your own model key raises the limit because the inference cost becomes yours.
  • BYOK keys travel on the job queue only: never persisted, never logged, forgotten when the run completes.

Full architecture, eval harness, and source: github.com/hitenpatel/curb.