with one click
handover
UI verification — runs niche quality keywords on a URL or block
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
UI verification — runs niche quality keywords on a URL or block
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Multi-slide bilingual brand carousels — Claude writes the deck, kun renders Anthropic-styled slides at exact platform sizes, a human approves, channels receive
Draft, stage, and publish brand social posts — Claude drafts, /higgs renders, a human approves, Hermes relays
Convert a file or URL to Markdown via MarkItDown (PDF, Office, images, audio, web)
Full pipeline — idea to production (chains every stage)
Autonomous block QA — detect, adversarially verify, fix safe tiers, hand the residual to a human
Technical spec — data model, file plan, refined acceptance criteria
| name | handover |
| description | UI verification — runs niche quality keywords on a URL or block |
| when_to_use | Use when Abdout wants a UI verification pass before a demo, merge, or client handoff — polymorphic on argument, where URL mode (argument starts with /) runs all 12 per-URL niche quality keywords (browser 6 + code 6) on one route, and block mode (bare word) runs the per-route subset (debug, flow, responsive, lang) on every route in the block. Triggers on: handover <url|block>, pre-demo quality pass, run the niche quality keywords, "is this URL clean", "is the whole block ready to show". |
| argument-hint | <url>|<block> [--env staging] [--fix] |
Run the niche quality keywords against a route or every route in a block. Composes — does not redefine — the per-URL checks the quality agent already owns.
/handover has two modes, detected by argument shape:
/. Runs the 12 per-URL niche keywords (browser 6 + code 6) on that route. Replaces the old qa <url> orchestrator.debug, flow, responsive, lang) on every route discovered in the block./handover /admission/new — URL mode: 12 niche checks on one URL/handover admission — block mode: per-route niche checks on the admission block/handover admission --env staging — block mode against ed.databayt.org/handover admission --fix — auto-fix the safe categories (translation, RTL classes)If $ARGUMENTS begins with / → URL mode. Skip to Phase 2A.
Otherwise → block mode. Continue to Phase 2B.
Deterministic fan-out (preferred): run the saved workflow — Workflow({ name: "handover", args: "<url>" }) (or args: { url, base } for --env targets). It sweeps all 12 keywords as parallel subagents and adversarially verifies every FAIL before it can block, then returns the verdict table to render. This /handover invocation is the multi-agent opt-in. Fall back to the serial in-session pass below only if the Workflow tool is unavailable.
Run the 12 per-URL niche keywords (browser 6 + code 6) defined in .claude/agents/quality.md:
see, flow, debug, responsive, lang, fastguard, architecture, structure, pattern, design, stackFor each keyword, invoke the keyword's own definition. Collect verdicts (PASS / WARN / FAIL).
Output a verdict table:
URL: /admission/new
├── see ............. PASS
├── flow ............ PASS
├── debug ........... PASS (0 console errors)
├── responsive ...... WARN (form overflows at 375px)
├── lang ............ FAIL (3 untranslated keys)
├── fast ............ PASS (LCP 1.8s)
├── guard ........... PASS
├── architecture .... PASS
├── structure ....... PASS
├── pattern ......... PASS
├── design .......... PASS
└── stack ........... PASS
Result: 10/12 PASS, 1 WARN, 1 FAIL
Stop here. URL mode does not write a sentinel — it's a spot-check.
Discover routes in the block — prefer the pre-computed registry:
Read .claude/blocks.json and use blocks[<block>].routes (populated by generate-blocks.mjs). If that key
is absent or empty, fall back to deriving them:
find src/app -name "page.tsx" -not -path "*/node_modules/*" | sort
Group by stripping route groups (parens), [lang], s, [subdomain] (keep dynamic [id]/[slug]).
Filter to routes whose first segment matches the [block] argument (fuzzy — singular/plural).
Stop and ask if zero routes match.
Pre-flight:
--env target is reachable.claude/handover-reports/<block>-<YYYYMMDD-HHmm>/For each route, run the per-route niche subset:
| Pass | Niche keyword | What it does |
|---|---|---|
| 1 | debug | Console + network — fail on errors, warn on failed requests |
| 2 | flow | Primary interaction — click, type, submit, verify post-state |
| 3 | responsive | 375 / 768 / 1440 breakpoints — fail on overflow or broken layout |
| 4 | lang (RTL portion) | /ar/ variant — verify logical-property flip, LTR exemptions |
| 5 | lang (translation portion) | Hardcoded-string scan + dictionary key resolution |
These keywords are defined in .claude/agents/quality.md. Block mode invokes each keyword per route — it does not redefine the check logic here.
Write report.md to the report directory:
## Handover — <block> — <timestamp>
Mode: block | URL
Environment: <localhost:3000 | ed.databayt.org>
Routes inspected: N
| Route | debug | flow | responsive | lang (RTL) | lang (translation) |
|---|---|---|---|---|---|
| /admission | PASS | PASS | WARN | PASS | FAIL (3 keys) |
| /admission/[id] | PASS | PASS | PASS | PASS | PASS |
...
Verdict: BLOCKED (1 FAIL, 2 WARN)
## Findings
- /admission @ 375px: form overflows on the right (responsive)
- /admission: "Submit application" hardcoded (form.tsx:42, footer.tsx:18, button.tsx:31)
--fix)Auto-fix the safe categories — each delegated to the niche keyword that defined the rule:
lang FAIL → replace hardcoded strings with dictionary keys (translation portion)lang (RTL) FAIL → swap physical Tailwind classes (ml-, pr-) for logical (ms-, pe-)debug FAIL → triage the console error and surface it for human judgmentflow and responsive failures stay manual — they need human judgment.
After fixes, re-run the affected passes only. Append a "Fix round N" section to the report.
On overall PASS or WARN (no FAIL), write to .claude/session-state.json:
{
"handover": {
"scope": "block",
"block": "<block>",
"status": "PASS",
"at": "<ISO timestamp>"
}
}
/release reads this sentinel and skips Stage 1 if recent (within 10 minutes).
READY FOR DEMOIf any FAIL persists after --fix: surface the blocking findings with file:line references and stop.
mainNot a replacement for /check. /check is the typecheck + build gate; /handover is the UI verification gate. Both feed /release.
For an autonomous fix-and-handoff (detect → adversarially verify → auto-fix the safe tiers → open a human-signoff issue), use /qa <block>. /handover reports; /qa reports, fixes, and persists a per-block QA verdict.