About visual-recap
visual-recap is an agent skill for adding a structured, marker-delimited recap to GitHub pull requests. It classifies changes from the diff and specifies verification and primitive-map updates according to risk.
Key features
- 01Classify changes from the Git diff
- 02Add or replace a marked PR recap block
- 03Set verification steps by change risk
- 04Check and update the primitives map
Use cases
- 01Summarize a non-trivial pull request
- 02Document a plan before creating a PR
- 03Verify changes that add or reshape primitives
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ kentcdodds/ kcd-skills --skill visual-recapAfter installing, type/visual-recapin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/block-format.mdscripts/check-primitives-map.mjsclassify-primitives.mjsprimitives-map.mjsupsert-recap-block.mjsDetails
From the project READMESystem recap
When a change is non-trivial (a plan, a PR create or update, or a request for a visual recap), put one marker-delimited block in the PR description. GitHub renders it. It does not replace reading the diff.
When
Recap mode reads the diff, not memory. Claims about what changed must be
checkable against git diff <base>...HEAD (plus --stat). Session context may
explain intent only.
Run the classifier. Roll up to the highest of adds, then extends, then
composes. You still choose composes vs extends from the diff. adds is a
new map entry.
| Rollup | Risk | Also |
|---|---|---|
composes | low | Wiring and call sites only. |
extends | medium | Verify locally with the project's control CLI as the seeded user; a PR preview only when local cannot |
adds | high | Update primitives.yaml, run check-primitives-map.mjs, and the same local verify (preview when needed) |
Update primitives.yaml when this PR adds, removes, or materially reshapes a
primitive (new id, renamed meaning, or ownership roots that must change). Do
not edit summary for ordinary feature work. Call out a touched invariant from
that map at every risk.
Plan mode uses **Mode:** plan before a PR exists. Recap mode replaces that
block from git diff <base>...HEAD. In plan mode, say explicitly when the plan
requires no change to any primitive; that is the lowest-risk outcome.
The block shape is one example: references/block-format.md.
Command
node .agents/skills/visual-recap/scripts/classify-primitives.mjs --base <base> --head HEAD --json
node .agents/skills/visual-recap/scripts/upsert-recap-block.mjs <pr-number> <block-file>
node .agents/skills/visual-recap/scripts/check-primitives-map.mjs
The upsert script checks mermaid, then replaces the marker block or appends it. It does not edit text outside the markers. Re-run both commands after a significant push.
Failure
- The mermaid check exits non-zero. Fix the diagram. Keep
;out of sequence notes and messages. - The block file must start with
<!-- system-recap:start -->and end with<!-- system-recap:end -->. gh pr editfails withResource not accessible by integration (updatePullRequest). The script still prints the merged body. Apply that body with Cursor ManagePullRequest. Do not have Kody edit the PR.- A health check or login smoke is not medium or high verification. Prefer local control CLI proof; use a preview only when local cannot exercise the change. Do not cat the session cookie into curl or Python.