How-To: Customize the Multi-Agent Reviewer Roster & Impeccable Gate
When you invoke the /setup-repo skill (and subsequently during /epure plan), EPURE dynamically composes and adapts the reviewer roster in the reviewer roster directory (reviewers_dir in .github/agents.yml, default .agents/reviewers/*.md, configurable via setup-repo --reviewers-dir <path>) along with the Impeccable (pbakaus/impeccable) UI quality gate (DESIGN.md + impeccable-gate), building on the specification and review workflows from Matt Pocock's mattpocock/skills. This guide explains how the roster is assembled for your project and how to tailor it while preserving prompt-injection immunity.
1. Always-On Core vs. Dynamic Specialists in reviewers_dir
The roster generated by /setup-repo is not static: it combines an always-on cross-cutting core with conditional specialists tailored to your stack and sub-domains (such as the 10-agent example generated for the craft-calculator React web app, or custom specialists added via --domain-reviewers realtime,game-systems and --no-frontend-reviewers for headless repositories):
| Reviewer File | Category | Generation & Selection Condition |
|---|---|---|
architecture-reviewer.md | Always-On Cross-Cutting | Checks deep module boundaries, ADR compliance, and GLOSSARY.md ubiquity. |
security-reviewer.md | Always-On Cross-Cutting | Audits secret hygiene, injection surfaces, and privilege boundaries. |
spec-parity-reviewer.md | Always-On Cross-Cutting | Runs on every PR (task/* -> feature/* and feature/* -> dev) to verify 1-to-1 parity with the approved spec. |
standards-reviewer.md | Always-On Cross-Cutting (Stack-Aware) | Adapted to the detected stack (TypeScript it.each, Python pytest.mark.parametrize, Rust, or Go). |
user-advocate.md | Always-On Persona Gate | Operates in design-gate mode (on plan/* before /epure approve) and implementation-review mode (on PRs). |
domain-backend-reviewer.md (+ <domain>-reviewer.md) | Dynamic Domain Specialist | Tailored to the repo's domain (and extendable via --domain-reviewers <slug>); selected when domain logic or APIs change. |
infra-reviewer.md | Dynamic Infra Specialist | Selected when CI workflows, build scripts, or dependency manifests change. |
frontend-reviewer.md | Conditional UI Specialist | Generated when the repo includes a UI; selected when .vue, .tsx, .jsx, or client state hooks are modified. |
accessibility-reviewer.md | Conditional UI / Impeccable | Generated when the repo includes a UI; audits WCAG 2.1 AA contrast, semantic HTML, ARIA attributes, and :focus-visible. |
design-reviewer.md | Conditional UI / Impeccable | Generated when the repo includes a UI; verifies adherence to DESIGN.md tokens, responsive layout, and interaction states. |
2. How the Agent Creates & Customizes Reviewer Prompts Safely
Because the reviewer roster directory (<reviewers_dir>/**, default .agents/reviewers/**) is a trusted sensitive path (Q92):
- Tailored Reviewer Creation during
/setup-repo(and manual additions ondev): During initial setup, the agent inspects your codebase and can design new specialist files in<reviewers_dir>/<slug>-reviewer.mdwith apaths:attribute in the YAML frontmatter (e.g.,paths: src/realtime, src/ws). Whenever a PR touches a file matchingpaths:(or<slug>),selectReviewersForDiffautomatically selects that specialist. - Always commit changes to
dev: At runtime, the EPURE orchestrator loads<reviewers_dir>/*.mdexclusively from the trusteddevbranch (falling back to EPURE's embedded templates)—never from an unmergedtask/*branch. - Automatic Domain Enrichment during
/epure plan: When/epure planruns on a new feature, EPURE enriches the domain reviewers and<reviewers_dir>/user-advocate.mdon theplan/<issue>-<slug>branch with new domain invariants and personas. When you run/epure approve, those updates merge intodevbefore anytask/*ticket starts.
3. Dogfooding & Customizing DESIGN.md (Impeccable Gate)
Whenever a repository or PR includes frontend files (.vue, .tsx, .jsx, .css, .html), the impeccable-gate check (evaluateImpeccableFrontendPr) validates the diff against DESIGN.md.
Blocking vs. Non-Blocking Findings
impeccable-gate blocks a PR only on objective, verifiable violations:
- Accessibility (
accessibility): Missingtitleon<iframe>, missingaria-labelon icon/action buttons, missing:focus-visiblekeyboard focus styles, or WCAG 2.1 AA contrast below4.5:1. - Layout & Responsive (
layout_overflow): Unbounded horizontal overflow or broken mobile viewports (320px–1440px). - Design Tokens (
design_tokens): Hardcoded arbitrary colors bypassing the CSS custom properties declared inDESIGN.md. - Interaction States (
interaction_states): Interactive async components missing explicitloading,ready, orerrorstates.
Subjective stylistic preferences never block a PR.

