Agent tooling · 2026
Vizier
A local visual QA gate that stops coding agents from marking broken UI work done.
790 Tests passing
Agent tooling
2026
Key decisions
- Uncorroborated vision findings are capped at medium severity under the gate's corroborated-authority rule, because a model hallucination may warn but must never flip a deterministic gate to fail.
- The gate folds blocking issues, warnings, coverage gaps and a score floor into one pass, warn or fail verdict with required actions attached, because an agent needs a non-negotiable answer rather than a dashboard.
- It runs locally as an MCP server over stdio so Claude Code, Codex and Cursor can call it mid-task, with the same engine behind a CLI for CI.
- Known issues are waived by fingerprint with a reason and an expiry date, and expired waivers re-block, because a gate whose exceptions never expire quietly becomes optional.
The failure mode
A coding agent writes CSS, sees no error in the terminal, and reports the task complete. The button is behind the header. Nothing in the agent’s feedback loop contains pixels, so nothing in its feedback loop could have caught it.
Vizier inserts the missing sense. It runs locally as an MCP server over stdio —
29 tools and four redacted resources — so Claude Code, Codex and Cursor can call
it mid-task, and the same engine sits behind a CLI (vizier check, gate,
waive, eval) for CI. Most agents only need one tool: ui_check captures the
configured route, profile, engine and role matrix, analyzes every surface,
gates, and reports in a single call, while the async job tools keep long
matrices out of the agent’s blocking path.
Three tiers of check
Deterministic — 26 registered checks that are simply true or false. Overflow, clipping, occlusion, zero-size touch targets, axe accessibility, console and network telemetry, unstyled renders, keyboard traversal, and a pixelmatch diff against stored baselines. No judgement involved, no flakiness.
Design — spacing consistency against a scale, alignment, type-ramp adherence and design-token conformance. Catches the drift that is individually defensible and collectively makes a page look assembled rather than designed.
Vision — an optional pass against any OpenAI-compatible endpoint, defaulting to a local model on loopback. Screenshots are downscaled before the call, results are cached by content hash, a circuit breaker drops a dead endpoint, and remote egress needs an exact host allowlist plus a separate sensitive-data opt-in. Uncorroborated findings are capped at medium severity, so a hallucination can warn but cannot fail the gate.
Captures run across desktop, tablet and mobile viewports on Chromium, Firefox
and WebKit, and every run, capture, issue and baseline is persisted in SQLite
through Node’s built-in node:sqlite — no native compile step.
The verdict is hard on purpose
The gate scores each run from 100 with per-severity deductions, enforces a score floor, and folds blocking issues, warnings and coverage gaps into one verdict: pass, warn or fail. The agent’s loop treats anything but pass as unfinished work, because a negotiable quality signal is not a gate.
Adoption is engineered in rather than left to discipline. Delta mode gates only on issues new against a baseline run, and known issues are waived by fingerprint with a reason and an expiry date — expired waivers re-block. 790 tests, a mutation-fuzz harness and a provider/browser fault matrix keep the checker itself honest, because a QA tool that reports false failures gets disabled within a day, which is worse than not having one.