Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build a throwaway interactive prototype to validate one unresolved interaction or behavior before writing production code. Use when the user explicitly asks to "mock it up first" or "prototype this", or when competing UI behaviors need a disposable hands-on comparison.
.claude/skills/hiendinhngoc-mock/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-21 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -63% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 47% | 0% |
Validate the idea with a disposable prototype. Cheap to throw away, cheap to redo.
<HARD-RULE>Do not touch the real codebase. The prototype lives ONLY in the session scratchpad directory. No production files created or modified.</HARD-RULE>
(e.g. "should filtering be inline or a sidebar?"). If you can't write that sentence, ask the user what's undecided.
none exists, create a temporary directory outside the repository. Never use an untracked directory inside the project as a substitute.
native, CLI, or embedded, say up front what an HTML mock can and cannot answer. It CAN validate flows, layout, copy, and state transitions; it CANNOT validate platform feel, native gestures, assistive-technology behavior, or animation physics. If the undecided question is on the cannot list, say so and validate in the platform's own cheap medium instead (a throwaway SwiftUI #Preview, a --dry-run flag, a bench sketch) — do not fake confidence with a web approximation.
setTimeout + canned responses
tool when available. If this agent has no Artifact tool, provide the absolute file path and, when supported, open it in a local browser. Do not claim it was previewed when the environment cannot render or open it.
preview when supported; otherwise provide the unchanged file path.
Then extract the confirmed decisions into a short spec in conversation:
## Decisions validated by mock
- <decision 1>
- <decision 2>
## Explicitly rejected
- <alternative that was tried and declined>The spec — not the prototype code — is the input to real implementation. Never copy prototype code into the codebase.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | fail→fail | 23,750 | 18,567 | -22% | 1 | 1 | 0% | 6,181 | 5,486 | -11% | 0 | 0 | — |
case-21 | fail→pass | 9,637 | 6,074 | -37% | 1 | 1 | 0% | 2,113 | 1,708 | -19% | 0 | 0 | — |
case-01 | fail→pass | 25,012 | 22,280 | -11% | 1 | 1 | 0% | 6,198 | 6,766 | +9% | 0 | 0 | — |
case-02 | fail→fail | 26,807 | 43,540 | +62% | 1 | 1 | 0% | 6,182 | 7,280 | +18% | 0 | 0 | — |
case-03 | fail→pass | 24,120 | 23,269 | -4% | 1 | 1 | 0% | 6,096 | 6,760 | +11% | 0 | 0 | — |
case-04 | fail→fail | 6,775 | 14,913 | +120% | 1 | 1 | 0% | 506 | 4,162 | +723% | 0 | 0 | — |
case-05 | pass→pass | 16,688 | 18,509 | +11% | 1 | 1 | 0% | 3,174 | 3,948 | +24% | 0 | 0 | — |
case-06 | fail→fail | 2,141 | 3,755 | +75% | 1 | 1 | 0% | 392 | 1,224 | +212% | 0 | 0 | — |
case-07 | fail→pass | 25,568 | 8,077 | -68% | 1 | 1 | 0% | 6,186 | 2,306 | -63% | 0 | 0 | — |
case-08 | fail→fail | 29,488 | 24,144 | -18% | 1 | 1 | 0% | 6,197 | 6,765 | +9% | 0 | 0 | — |
case-10 | pass→pass | 10,852 | 13,998 | +29% | 1 | 1 | 0% | 2,118 | 4,002 | +89% | 0 | 0 | — |
case-11 | fail→pass | 17,882 | 19,643 | +10% | 1 | 1 | 0% | 3,911 | 5,730 | +47% | 0 | 0 | — |
case-12 | pass→pass | 12,740 | 17,552 | +38% | 1 | 1 | 0% | 3,053 | 4,924 | +61% | 0 | 0 | — |
case-13 | fail→pass | 24,016 | 5,552 | -77% | 1 | 1 | 0% | 5,610 | 1,592 | -72% | 0 | 0 | — |
case-14 | pass→pass | 9,584 | 2,682 | -72% | 1 | 1 | 0% | 1,892 | 1,105 | -42% | 0 | 0 | — |
case-15 | fail→pass | 13,032 | 3,041 | -77% | 1 | 1 | 0% | 2,459 | 1,126 | -54% | 0 | 0 | — |
case-16 | fail→pass | 21,026 | 22,127 | +5% | 1 | 1 | 0% | 5,591 | 6,297 | +13% | 0 | 0 | — |
case-17 | pass→pass | 17,945 | 15,177 | -15% | 1 | 1 | 0% | 4,639 | 4,559 | -2% | 0 | 0 | — |
case-18 | fail→fail | 22,016 | 6,418 | -71% | 1 | 1 | 0% | 6,192 | 1,729 | -72% | 0 | 0 | — |
case-19 | fail→pass | 10,928 | 20,042 | +83% | 1 | 1 | 0% | 2,990 | 4,862 | +63% | 0 | 0 | — |
case-20 | pass→pass | 13,123 | 7,519 | -43% | 1 | 1 | 0% | 2,259 | 1,929 | -15% | 0 | 0 | — |
case-22 | fail→pass | 22,289 | 6,478 | -71% | 1 | 1 | 0% | 5,075 | 1,741 | -66% | 0 | 0 | — |
case-23 | fail→pass | 22,490 | 24,015 | +7% | 1 | 1 | 0% | 6,153 | 6,721 | +9% | 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. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 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 +48 percentage points is the difference between those two pass rates over the 22 comparable cases.
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.