Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate a hands-on browser walkthrough of a PR's user-facing changes to exercise before review; --publish posts the final version to the PR for QA.
.claude/skills/joshukraine-walkthrough/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 208% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 236% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 117% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 173% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 264% | 0% |
Generate a concise, click-by-click manual walkthrough of the current branch's user-facing changes, so the human orchestrator can exercise the feature in a browser before the formal /code-review. Seeing a feature work is faster than reading code or a PR description for catching UX problems.
This skill does not modify code or perform code review. It renders the walkthrough as a single self-contained HTML file — with click-to-copy commands, URLs, and logins — in both modes. By default it writes that HTML to the project's local tmp/ as scratch and opens it. With --publish it also uploads the HTML to the project's configured QA host (when one is declared in the project's CLAUDE.md) and posts a PR comment linking to it, with a Markdown rendition as a collapsible fallback (Markdown is the only thing a GitHub comment can render inline).
Where it sits in the workflow — two slots:
/create-pr and before /code-review, and re-run as needed. The orchestrator's iterative pre-flight check.--publish) — run once after /code-review and any review fixes, just before merge (or after merge, to backfill a walkthrough that was missed). Posts the final walkthrough to the PR so the QA tester can follow it after deploy.Not the same as:
/debrief — a heavy architecture and test-coverage write-up for milestones./qa-handoff — a broad, committed QA guide for a whole phase. /walkthrough --publish is the per-PR counterpart: one change, posted to the PR.--publish: Post the final walkthrough as a comment on the PR, regenerating it first so it matches the code under review. Run once, after review — normally just before merge, but it also works on an already-merged PR to backfill a missed walkthrough. See the Publishing section.If invoked with --publish, follow the Publishing the final walkthrough section below instead. Otherwise, generate a new walkthrough:
main/master).gh pr diff <N> for a PR, or git diff <base>...HEAD.gh pr view).Classify the diff:
If the diff has no user-facing surface, STOP. Do not generate a document. Tell the user plainly:
> No user-facing changes detected in this PR — a browser walkthrough doesn't apply. Proceed to /code-review.
If the change is user-facing — or a mix where the UI surface is worth exercising — continue.
db/seeds.rb), fixtures, or factories. Use exact credentials. Reserved-example logins (@example.com and friends) render as click-to-copy controls in the HTML; real-looking ones become plain-text placeholders — see Credentials in published artifacts under Publishing.CLAUDE.md for project-specific concerns to fold in: default locale and bilingual requirements, mobile-first/viewport rules, theme, accessibility.Plan the content using the principles below, then render it as a self-contained HTML file per Rendering the HTML artifact (the same renderer both modes use). Principles:
tmp/ directory — tmp/pr-<N>-walkthrough.html (or tmp/<branch-slug>-walkthrough.html if there is no PR). Not the system /tmp.--publish is the published snapshot.open tmp/pr-<N>-walkthrough.html) and tell them the path.> Exercise the walkthrough in the browser. If anything is off, fix it on the branch and re-run /walkthrough to refresh. When it looks right, proceed to /code-review — then publish the final version with /walkthrough --publish before merge.
Both modes render the walkthrough as a single self-contained HTML file using this skill's template.html and the shared house style. Same renderer; the only differences are called out inline.
template.html (this skill's directory) for the structure and ../_shared/house-style.html for the look.<style> block in place of the first HOUSE STYLE marker in <head>, and its <script> block in place of the second marker before </body>. The output must be a single self-contained .html (no external assets).{{PROJECT}}, {{PR}}, {{PR_LINK}} (link to the PR), {{FEATURE}} (short feature name), {{BRANCH}}, {{COMMIT}} (short SHA), {{DATE}}, {{ESTIMATE}}. Before a PR exists, use the branch name and point {{PR_LINK}} at the branch..callout block. For the --publish (post-merge) version, determine the project's launch status from its CLAUDE.md § "QA Testing Policy" (the Launch status: flag), then include the matching .callout:.callout.<button type="button" class="copy" data-copy="VALUE">VALUE</button> control (see Credentials in published artifacts). Only real/non-example credentials are the exception — render those as plain <code><your-admin-email></code>, never a copy control.Reliable way to inline the bulky house style without hand-copying it: write the filled template with two sentinel lines where the markers sit, then splice the <style> and <script> blocks out of house-style.html into them with a short script. Extract by the exact tags (<style> … </style>, <script> … </script>) — house-style.html keeps its instructional comment tag-free precisely so this match is unambiguous.
<style> and one <script>, with no instructional text leaked into the <head>. Grep the output for Inline the, Component vocabulary, EXTRACTION GUARDRAIL, or a stray --> before the first :root — any hit means a comment was captured instead of the real block. Re-extract by the exact tags and re-check. This has bitten us before; do not skip it.--publish)Run once, after /code-review and any review fixes — normally just before merge, but also valid on an already-merged PR to backfill a walkthrough that was missed. This renders the walkthrough as rich HTML, publishes it to the project's configured QA host (if any), and posts a PR comment with the live link and a collapsible Markdown fallback.
Credentials in published artifacts. A login may be a click-to-copy control only when it is a _reserved, non-routable example identity_: the email domain is an RFC 2606 reserved-for-documentation domain (example.com, example.net, example.org) or the .example TLD, and any accompanying password is an obviously-fake seed value (e.g. password), not a real secret. Such logins are documentation, not credentials — guaranteed unregisterable and non-deliverable — so publishing them as copy controls is safe and removes the single most repetitive step in any walkthrough (login). Anything else — a real or real-looking domain, an actual person's address, a live tenant, or a real password/token/API key — must be a plain-text placeholder (<code><your-admin-email></code>), never a copy control; pair it with a one-line note (local testers use the seeded login from db/seeds.rb; production testers use their own account). Never publish a real password, token, or secret in any form. The publish step stays human-gated regardless.
gh pr view). The PR may be open or merged — both are valid publish targets. Only stop if no PR exists at all.gh pr diff <N> exactly as steps 1–5 describe, so the published copy matches the code that merged.tmp/pr-<N>-walkthrough-published.md (the project-local tmp/, not the system /tmp). This is not a standalone deliverable — it exists only because a GitHub PR comment renders Markdown, not a full HTML page. It fills the collapsible fallback in the comment, and it is the entire comment body when the project declares no QA Publish Target. Mirror the same content as the HTML. Prepend a short block-quote note at the very top, gated on launch status (see the launch-status callout rule): pre-launch (or no policy declared) → testers verifying on production should use the production app and their own account in place of the local server and seed logins, and the steps and expected results are identical; post-launch → this walkthrough is local-dev-only, do not run it against the live site (it holds real data) — reproduce it on a local checkout using the seed logins.tmp/pr-<N>-walkthrough-published.html.tmp/pr-<N>-walkthrough-comment.md: a <details> block wrapping the Markdown fallback so the link sits above and the Markdown is a collapsible fallback below.markdown <details><summary>Markdown fallback</summary>
<contents of tmp/pr-<N>-walkthrough-published.md>
</details>
Do not include the link yourself — the publish pipeline prepends it.
open) and the comment-body Markdown to the user and get explicit approval. Posting a PR comment is outward-facing and notifies others — never post without a clear yes.bash ~/.claude/skills/_shared/publish-artifact.sh \ --html tmp/pr-<N>-walkthrough-published.html \ --label "PR #<N> walkthrough" \ --pr <N> \ --comment-body tmp/pr-<N>-walkthrough-comment.md \ --md-fallback-only tmp/pr-<N>-walkthrough-published.md
Behaviour:
The HTML (via template.html) is the primary artifact in both modes. This Markdown outline serves two remaining purposes: it's the content plan you fill in before rendering, and it's the exact shape of the collapsible PR-comment fallback that --publish posts (a GitHub comment renders Markdown, not the HTML page).
markdown# PR #<N> — Manual Walkthrough: <short feature name> A quick browser exercise of <feature> before formal review. ~<estimate> minutes. ## Setup 1. Start the app: `<command>` → <URL> 2. <Seed / reset / migration / dependency steps, or "No setup beyond the above."> 3. <Locale / viewport notes if relevant.> **Logins** (<auth mechanism>): | Role | Credentials | Notes | |------|-------------|-------| | <role> | <exact account> | <why this account> | <One literal sentence on how to log in.> ## Part 1 — <flow name> *(new in this PR)* 1. <Literal step.> ✅ <Expected result.> 2. ... ## Part N — <flow name> *(pre-existing — for context)* ... ## Not browser-testable <Anything covered only by automated tests, and why — or omit this section.> ## Cleanup <How to restore state. Note the file is gitignored scratch — delete when done.>
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 29,735 | 7,248 | -76% | 1 | 1 | 0% | 6,190 | 4,332 | -30% | 0 | 0 | — |
case-02 | fail→fail | 9,174 | 8,158 | -11% | 1 | 1 | 0% | 1,650 | 4,394 | +166% | 0 | 0 | — |
case-03 | fail→fail | 23,694 | 6,155 | -74% | 1 | 1 | 0% | 4,882 | 4,171 | -15% | 0 | 0 | — |
case-04 | pass→fail | 27,212 | 7,798 | -71% | 1 | 1 | 0% | 4,202 | 4,479 | +7% | 0 | 0 | — |
case-05 | pass→fail | 20,920 | 5,473 | -74% | 1 | 1 | 0% | 3,637 | 4,569 | +26% | 0 | 0 | — |
case-06 | fail→fail | 14,847 | 7,613 | -49% | 1 | 1 | 0% | 1,364 | 4,397 | +222% | 0 | 0 | — |
case-07 | fail→pass | 9,338 | 2,725 | -71% | 1 | 1 | 0% | 1,388 | 4,280 | +208% | 0 | 0 | — |
case-08 | fail→pass | 8,728 | 4,838 | -45% | 1 | 1 | 0% | 1,416 | 4,758 | +236% | 0 | 0 | — |
case-09 | fail→pass | 13,080 | 5,368 | -59% | 1 | 1 | 0% | 2,285 | 4,949 | +117% | 0 | 0 | — |
case-10 | fail→pass | 10,445 | 4,158 | -60% | 1 | 1 | 0% | 1,689 | 4,613 | +173% | 0 | 0 | — |
case-11 | fail→pass | 7,367 | 2,624 | -64% | 1 | 1 | 0% | 1,184 | 4,312 | +264% | 0 | 0 | — |
case-16 | fail→pass | 10,339 | 2,697 | -74% | 1 | 1 | 0% | 1,688 | 4,292 | +154% | 0 | 0 | — |
case-12 | fail→pass | 9,449 | 3,686 | -61% | 1 | 1 | 0% | 1,516 | 4,518 | +198% | 0 | 0 | — |
case-13 | fail→pass | 8,239 | 3,198 | -61% | 1 | 1 | 0% | 1,320 | 4,375 | +231% | 0 | 0 | — |
case-14 | fail→pass | 10,260 | 4,112 | -60% | 1 | 1 | 0% | 1,675 | 4,589 | +174% | 0 | 0 | — |
case-15 | fail→fail | 6,575 | 2,581 | -61% | 1 | 1 | 0% | 1,003 | 4,269 | +326% | 0 | 0 | — |
case-17 | fail→pass | 11,590 | 6,539 | -44% | 1 | 1 | 0% | 1,713 | 4,972 | +190% | 0 | 0 | — |
case-18 | pass→pass | 9,361 | 2,834 | -70% | 1 | 1 | 0% | 1,268 | 4,317 | +240% | 0 | 0 | — |
case-19 | fail→pass | 10,314 | 4,212 | -59% | 1 | 1 | 0% | 1,503 | 4,575 | +204% | 0 | 0 | — |
case-20 | fail→pass | 11,307 | 2,154 | -81% | 1 | 1 | 0% | 1,893 | 4,267 | +125% | 0 | 0 | — |
case-21 | fail→pass | 15,064 | 8,078 | -46% | 1 | 1 | 0% | 2,527 | 5,133 | +103% | 0 | 0 | — |
case-22 | fail→pass | 9,464 | 5,486 | -42% | 1 | 1 | 0% | 1,422 | 4,637 | +226% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 18 comparable cases. 5 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.