Help us improve
Share bugs, ideas, or general feedback.
From ibr
Use when configuring or troubleshooting IBR's automatic before/after scan workflow on UI file edits. Triggers on "enable auto verify", "turn on auto scan", or pre/post-change hook questions.
npx claudepluginhub tyroneross/interface-built-right --plugin ibrHow this skill is triggered — by the user, by Claude, or both
Slash command
/ibr:auto-verifyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
IBR's auto-verify workflow automatically captures a baseline before every UI file edit, waits for HMR to apply the change, re-scans, and reports what changed. This runs via Claude Code hooks — no manual commands needed once configured.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Share bugs, ideas, or general feedback.
IBR's auto-verify workflow automatically captures a baseline before every UI file edit, waits for HMR to apply the change, re-scans, and reports what changed. This runs via Claude Code hooks — no manual commands needed once configured.
For every Write|Edit on a UI file (.tsx, .jsx, .vue, .svelte, .css, .scss, .html):
Claude reads the verdict and decides whether the edit achieved the intended result, or if it needs a follow-up fix.
Create .ibr/config.json in your project root:
{
"autoVerify": true,
"projectRoot": "/absolute/path/to/project",
"devServerUrl": "http://localhost:3000"
}
All three fields are required for the workflow to fire:
| Field | Purpose |
|---|---|
autoVerify | Master switch. false (default) = workflow never runs |
projectRoot | Absolute path to the project. Hook only fires if $PWD is under this path |
devServerUrl | URL the hook scans. Skip port auto-detection — use this URL directly |
Default is off — any project without this file or without autoVerify: true has zero overhead and zero hook noise.
The pre-change hook has 5 gates. If any fail, the hook exits silently and no scan runs:
.tsx/.jsx/.vue/.svelte/.css/.scss/.html.ibr/config.json must exist with autoVerify: true$PWD must be under config.projectRoot (prevents scanning project A while editing project B)config.devServerUrl must respond (or parallel port probe finds one)The post-change hook outputs one of three formats to stdout (which Claude reads):
Clean pass (condensed):
IBR: ✓ PASS (+2 elements)
One line. Minimal context cost. Used when scan verdict is PASS and zero issues detected.
Review block (when scan passes but issues exist):
IBR Post-Change Verification
File: src/app/page.tsx
URL: http://localhost:3000
Before: PASS (42 elements, 0 issues)
After: PASS (44 elements, 2 issues)
Elements: +2 added
Issues:
[warning] button.submit contrast ratio 3.2:1 (need 4.5:1)
[warning] h2.section-title missing aria-level
Verdict: REVIEW — scan passed but 2 issue(s) found.
Needs-fix block (when scan fails):
IBR Post-Change Verification
File: src/app/page.tsx
URL: http://localhost:3000
Before: PASS (42 elements, 0 issues)
After: FAIL (40 elements, 3 issues)
Elements: -2 removed
Issues:
[error] button.submit has no click handler (hasOnClick: false)
[error] form missing action attribute
[warning] div.success-message contrast 3.2:1
Console errors:
Uncaught TypeError: Cannot read property 'onClick' of undefined
Verdict: NEEDS_FIX — address issues above before proceeding.
# 1. Create .ibr directory if needed
mkdir -p .ibr
# 2. Write config file (adjust paths and URL)
cat > .ibr/config.json <<EOF
{
"autoVerify": true,
"projectRoot": "$(pwd)",
"devServerUrl": "http://localhost:3000"
}
EOF
# 3. Start your dev server
npm run dev # or whatever your project uses
# 4. Make a UI edit — the hooks will fire automatically
Set autoVerify: false in .ibr/config.json, or delete the file entirely.
No verdict appears after edit:
.ibr/config.json has autoVerify: true and correct projectRootdevServerUrl$PWD is under projectRoot (the hook uses absolute path matching)"Post-change scan failed — dev server may be down":
MAX_WAIT in hooks/ibr-post-change.sh if neededVerdict refers to the wrong URL:
devServerUrl from config to trigger port auto-detectionHooks firing on unrelated project:
projectRoot gate should prevent this. Verify the config file is in the project you actually want scanned, not a parent directory.hooks/ibr-pre-change.sh — PreToolUse hook, captures baselinehooks/ibr-post-change.sh — PostToolUse hook, scans and reports verdicthooks/hooks.json — registers both hooks.ibr/config.json — per-project opt-in config (you create this).ibr/pre-change-state.json — ephemeral state between pre and post hooks (auto-managed).ibr/pre-change-scan.json — baseline scan data (auto-managed).ibr/post-change-scan.json — post-edit scan data (auto-managed).ibr/autoscan-last-run — rate limit timestamp (auto-managed)Add .ibr/ to .gitignore.