skills/visual-recap/SKILL.md
Use this skill to turn a PR, branch, commit, or working-tree diff into a visual recap — a single self-contained, theme-aware HTML page with before/after UI wireframes, schema/API contract summaries, a file footprint map, and annotated key-change diffs — so a reviewer sees the SHAPE of a change before reading raw lines. Invoke it when the user says "recap this PR", "visual recap", "show me what this branch changed", "summarize this diff visually", "make this PR reviewable", "explain what changed", or before reviewing any large, multi-file, UI-heavy, or schema/API-touching change. Code-review agents (code-auditor, architecture-reviewer) should produce one as the opening artifact of any big review. NOT for small single-file diffs — those review faster as a raw diff via the critique skill.
npx skillsauth add b-open-io/prompts visual-recapInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A visual recap is the reverse of a plan: instead of describing a change you are about to make, it describes the change that was just made, at a higher altitude than line-by-line review. A reviewer scans the shape of the change — what UI moved, which contracts changed, where the risky lines live — before spending attention on literal lines. Diffs hide the shape of a change; the recap restores it.
Heavily inspired by BuilderIO's /visual-recap, adapted for this stack: the
deliverable is a single self-contained HTML file built from
assets/template.html — no hosted service, no external requests, works offline,
theme-aware in light and dark. When the Artifact tool is available in the
session, publish it as an Artifact (default-private); otherwise write it locally
and open it in the browser.
Build a recap when a change is large, multi-file, UI-heavy, or touches schema,
API contracts, permissions, or architecture — anywhere a reviewer benefits from
a map before the territory. Skip it for small, single-file, or obvious diffs: a
recap is review overhead, and a tiny change reviews faster as a plain diff
(Skill(bopen-tools:critique) / bunx critique --web --open). The recap
complements the raw diff, it never replaces it — recap first for shape, critique
for lines.
When invoked mid-session after work has happened, the default scope is the whole work unit — original implementation, later bug fixes, tests, docs — not just the most recent edit. Use the diff plus conversation context to separate work-unit changes from unrelated pre-existing dirty state, and exclude the unrelated edits. If scope is genuinely ambiguous, state your assumption in one line rather than blocking on a question.
Resolve the diff mechanically before authoring anything:
# PR / branch (three-dot: changes since divergence, not target drift)
git diff --numstat main...HEAD
git diff --name-status main...HEAD
git diff main...HEAD -- <file> # per-file, for key changes
# single commit: git show <sha>
# working tree: git diff HEAD
# GitHub PR: gh pr diff <number>
Structured sections are true by construction only if derived from the actual changed lines. File paths, field names, types, methods, routes, line numbers, and before/after code MUST come mechanically from the real diff — never inferred, rounded, or invented. You write freely only in the prose narrative: the why, the decisions, the risk read. A confidently wrong recap is worse than no recap, because a reviewer who trusts the summary skips the very line the summary got wrong. When the diff doesn't contain a fact, leave it out; when you infer something (like a rendered layout you didn't screenshot), label it inferred in a caption.
Copy assets/template.html (in this skill directory) and fill it top to bottom.
Every section maps to a template block; delete sections that don't apply rather
than padding them.
references/wireframe.md before authoring any wireframe. Delete
the section for non-UI changes.table.model cards for schema entities (per-field
added/modified/removed/renamed badges; show the prior type with
<span class="was">), endpoint cards for API changes (method, path, params
as they exist AFTER the change; mark removed routes and breaking changes
with the breaking badge plus a note-risk). Delete if no contracts moved.tab-summary saying what the hunk changes and why, a split diff of the
load-bearing hunks (≤~150 lines per tab; collapse boring stretches with a
ln skip row), and a few annotation callouts anchored to line numbers.
Brand-new files get an annotated walkthrough of the new code instead of a
one-sided diff. Never leave a diff unlabeled.Architecture or data-flow shifts get a diagram block (CSS panels from the
template — diagram-panel / diagram-node / diagram-arrow, two panels for
before/after) placed near the narrative. Use diagrams for structure and flow
only; rendered UI always gets wireframes, never a diagram.
Lean is not thin. A recap that is one wireframe plus a sentence under-serves the reviewer as much as boilerplate over-serves them. Before authoring, make a surface inventory from the diff: changed routes, components, dialogs, role/permission variants, empty/error states, shared abstractions. Each meaningful item either gets represented or is intentionally omitted because it's tiny or not reviewer-visible.
The recap's center of gravity is comparison:
ba-grid (labels live in the column
headers, never inside the frame). The grid auto-stacks wide surfaces
(browser, desktop) and puts narrow ones (mobile, popover, panel)
side by side.was values usually beats two full side-by-side tables;
use two cards only when the whole contract was replaced.diagram-panels, Before and After.recaps/<slug>.html in the repo (gitignored or committed, follow the
project's lead) or the session scratchpad for throwaway recaps.--wf-*
tokens — never hard-code hex in content, or the dark theme breaks.<!doctype>/<html>/<head>/<body>
skeleton and keep the <style>, content, and <script> — the Artifact
harness provides the document shell).open recaps/<slug>.html (macOS) and report the absolute
path.The recap page is the deliverable — never paste the recap inline into chat as a wall of markdown; inline summaries are the thing a recap replaces. A 2-3 sentence handoff plus the link/path is the right chat footprint.
.env values. Redact them in every block, caption, and annotation
(sk-•••, <redacted>) — the recap must be safe to share with anyone who
may review the code.After the reviewer reads the recap, feedback arrives in chat or PR comments.
Revise the same recap file in place so it still covers the whole work unit plus
the correction — don't replace a broad recap with a narrow recap of only the
latest feedback. Pair with Skill(bopen-tools:critique) when the reviewer wants
to drop from the recap into the full raw diff.
tools
This skill should be used when a Claude Code session needs to keep working after Anthropic usage runs out, or when the user asks to run the Claude Code harness on GPT-5.6 Sol. Trigger phrases include "my Anthropic usage ran out", "I'm out of Claude usage", "usage limit reached, what now", "keep working on another model", "run Claude Code on GPT-5.6 Sol", "use GPT-5.6 Sol as the model", "set up claudex", "claudex isn't working", "route the harness through CLIProxyAPI", or "bill against my ChatGPT/Codex subscription". It stands up a local proxy so the Claude Code CLI runs on OpenAI's Codex backend as an escape hatch, and diagnoses that setup when it drifts. macOS + Homebrew.
testing
This skill should be used when the user asks to "open Visual Wayfinder", "answer a Wayfinder ticket visually", "turn this decision into a configurator", "show Wayfinder choices as a dashboard", "prototype the Wayfinder questionnaire", or wants interactive choice cards, tradeoff controls, rankings, ranges, toggles, and consequence previews for one active Wayfinder decision. It wraps the Wayfinder skill and JSON Render; it never replaces the tracker or resolves more than the active decision.
development
This skill should be used when the user asks to "make a visual proposal", "write this up so I can share it", "present these options visually", "diagram the trade-offs", "turn this plan into something reviewable", or requests a shareable design pitch, architecture proposal, RFC, options comparison, or visual roadmap for work that has not been built. It produces one self-contained, theme-aware HTML page led by grounded diagrams. Use visual-review instead for completed code changes; do not use this skill for internal task tracking.
tools
This skill should be used when the user asks to "add plugin settings", "make a plugin configurable", "store per-project plugin configuration", "use settings.local.json", "create a plugin state file", "expose skill settings in Agent Master", or "add a skill interface". Distinguishes official Claude Code settings from project-owned configuration and documents bOpen Agent Master skill interface discovery.