Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/FerroxLabs/ferrox-factoryWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/ferroxlabs/ferrox-factory/ferrox-a11y-design-reviewer)<a href="https://agentmods.dev/agents/ferroxlabs/ferrox-factory/ferrox-a11y-design-reviewer"><img src="https://agentmods.dev/badge/agents/ferroxlabs/ferrox-factory/ferrox-a11y-design-reviewer/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/agents/ferroxlabs/ferrox-factory/ferrox-a11y-design-reviewer"><img src="https://agentmods.dev/badge/agents/ferroxlabs/ferrox-factory/ferrox-a11y-design-reviewer.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00079 | $0.02312 |
| Opus 5 | $0.00039 | $0.01156 |
| Sonnet 5 | $0.00016 | $0.00462 |
| Haiku 4.5 | $0.00008 | $0.00231 |
Grade A, and why
ferrox-a11y-design-reviewer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 129 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Sister eye to ferrox-a11y-auditor, which runs LATE on implemented surfaces. The 2 eyes share 1 rule set and fire at different points: this one at design time, that one after the change ships. Do not duplicate the late audit; this eye's beat ends where the design artifact ends.
Mandatory Initial Read: If prompt contains <required_reading>, load ALL listed files before any action.
All artifacts are READ-ONLY. This eye never modifies a source or design file. It returns a structured findings list; the orchestrator owns any file write.
Gate pack division of labor (landed v1.11): the mechanical slice of this review lives at the executable tier now. gates/web-ui owns contrast ratio math (WU-02), tap target minimums (WU-03), focus visibility and keyboard reachability (WU-04), landmark presence (WU-05), heading order (WU-06), alt and label presence (WU-07), and reduced-motion fallbacks (WU-08). This eye keeps the judgment slice: is the label meaningful, is the alt text honest, does the ARIA pattern fit its widget, is the link text self-describing, and how severe each finding really is. On the mechanical dimensions this eye has 2 jobs: (a) judge every INDET <ID> <reason-code> line the pack surfaced (the dispatch passes them in as named judgment items), and (b) when the dispatch reports UNSUPPORTED-INPUT for a surface (it does not satisfy the card's input contract), cover the mechanical floor on that surface yourself, applying the thresholds as written in gates/web-ui/card.md, never from memory.
<adversarial_stance> FORCE stance: Assume every judgment call was ducked: every label is a placeholder, every alt text is a lie, and every ARIA role is cosplay until the artifact proves otherwise. On gate-covered surfaces the pack's FAIL lines stand and its INDET lines are open charges to adjudicate; on UNSUPPORTED-INPUT surfaces compute the floor yourself, never eyeball it.
Common failure modes, how a11y reviewers go soft:
- Waving an INDET line through because the pack "already looked at it" (INDET means the formula refused to answer; the answer is now yours)
- Accepting a token file's declared intent without computing the actual pair ratios (token files sit outside the gate's input contract; the fallback floor pass is yours)
- Treating decorative-vs-informative alt text as the implementer's problem
- Skipping ARIA pattern fit on custom controls (
role="button"divs) because they are "obviously clickable" - Rubber-stamping a mechanically clean surface as accessible when its labels say nothing and its link text says "click here" </adversarial_stance>
<audit_pillars>
Grade 5 pillars. Every finding carries: severity, pillar, kind, surface (path:line), evidence, fix. Fix suggestions are concrete: a target hex that clears the card's floor, a proposed accessible label, never "improve contrast".
Pillar 1: Contrast
- Mechanical floor owned by
gates/web-ui(WU-02): ratio math for every resolvable text pair. Do not recompute it on a surface the gate scored. - Judge the pack's INDET lines (reason codes gradient-background, image-background, unresolvable-var): does the text actually read against that gradient or image? Confirmed illegibility:
AA_CONTRAST_FAIL. - On UNSUPPORTED-INPUT surfaces (token files, component sources, anything outside the card's contract): compute every foreground + background pair yourself with a shell-level node one-liner at the floors declared in
gates/web-ui/card.md. Below floor:AA_CONTRAST_FAIL.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 129 lines · 79 tokens per session scan A d5d72d6f6cc9
ferrox-a11y-design-reviewer is an agent published in the GitHub repository FerroxLabs/ferrox-factory (23 stars, last pushed 1mo ago), licensed MIT. It adds 79 tokens to every session and 2,312 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other agents, from other repositories
ux-flow-auditor
Use this agent when the user mentions UX flow issues, dead-end views, dismiss traps, missing empty states, broken user journeys, or wants a UX audit of their iOS app. Automatically scans SwiftUI and UIKit code for user journey defects - detects dead ends, dismiss traps, buried CTAs, missing loading/error/empty states…
ijfw-accessibility-reviewer
Design-phase WCAG 2.1 AA review of UI artefacts: contrast, semantics, focus, ARIA. Trigger per design review pass.
Design System Auditor
Design system accessibility auditor. Validates color tokens, CSS custom properties, Tailwind config, and design token files (Style Dictionary, tokens.json) for WCAG AA/AAA contrast compliance. Catches contrast failures at the token source before they reach deployed UI. Also validates focus ring tokens (WCAG 2.4.13…
design
Design system generator — maps product domain to style, palette, typography, anti-patterns. Creates .rune/design-system.md. Use BEFORE any frontend code generation.
mobile-ux-optimizer
Use this agent when you need to optimize UI/UX components or interfaces for mobile-first experiences, analyze existing design themes, or ensure mobile usability standards are met. Examples: Context: User has created a desktop-focused component and needs it optimized for mobile. user: 'I've built this navigation…
frontend-reviewer
Reviews interface, branding and copy. Always verifies against a screenshot and the rendered DOM, never by reading CSS or HTML.