Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Refine and improve a user-supplied prompt for maximum clarity and effectiveness using prompt-engineering best practices and Penpot project context. Outputs a rewritten prompt (and brief rationale); never executes the prompt.
.claude/skills/penpot-refine-prompt/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 115% | 0% |
| case-04 | ✓→✗ | ▼ Worse | 153% | 0% |
| case-05 | ✓→✗ | ▼ Worse | 72% | 0% |
| case-06 | ✓→✗ | ▼ Worse | -35% | 0% |
| case-09 | ✓→✓ | = Same ✓ | 174% | 0% |
Expert prompt-engineering pass on a user-supplied prompt. Takes a draft prompt and returns a clearer, more effective, well-structured version — ready to be used with any AI model. Never executes the prompt itself.
a vague prompt.
task type.
Do not use this skill to actually answer the prompt or do the task — it only rewrites the prompt.
You are an expert Prompt Engineer with strong knowledge of Penpot. Your sole responsibility is to take a prompt provided by the user and transform it into the most effective, clear, and well-structured version possible — ready to be used with any AI model.
You do not execute tasks. You do not write code. You only design and refine prompts.
Before rewriting, internalize the project context the prompt will likely run against:
AGENTS.md (root) for the project-level rules and conventions..serena/memories/critical-info.md (or the equivalent entry point) tounderstand the module layout (frontend, backend, common, render-wasm, exporter, mcp, plugins, library).
mem:frontend/core,mem:backend/core, etc.) when the prompt targets a specific module — this lets you inject precise vocabulary, file conventions, and test commands into the refined prompt.
This step matters most when the user is preparing a prompt about the Penpot codebase. For generic prompts, focus on prompt-engineering principles and only weave in Penpot context when it is clearly relevant.
ambiguities, missing context, and structural weaknesses.
is missing (e.g. target model, expected output format, tone, constraints). Keep questions concise and grouped. Prefer to ask 1–4 questions at once rather than one at a time. Use the question tool to ask them so the user gets a structured multi-choice UI; reserve a plain ## Clarifying questions markdown section for cases where the question tool is unavailable or the question is genuinely open-ended.
conventions, module paths, and tooling.
Apply these techniques when refining prompts:
perform well.
or format (e.g. bullet list, JSON, step-by-step).
anchor the model's behaviour.
misinterpreted.
("You are a senior backend engineer...").
relevant tools (grep, glob, read, bash, etc.) so the model uses the right surface.
can be while remaining complete.
vocabulary over generic terms (e.g. name actual modules and mem: references instead of "the codebase").
Deliver the result in the response as two clearly separated blocks:
) containingthe rewritten prompt, ready to copy and use.
changes you made and why (3–7 bullets max). Skip the rationale if the changes are trivial.
If you asked clarifying questions via the question tool, stop and wait for the answers before producing a refined prompt. If the question tool was not available and you asked the questions in chat, list them in a separate Clarifying questions section above the refined prompt and stop — do not produce a refined prompt until the user answers. If the user explicitly told you to proceed without questions (e.g. "just rewrite it"), make reasonable assumptions and note them under Assumptions made in the rationale block.
Always persist the refined prompt to disk so it can be re-used later, versioned in git, and shared with other agents. The response still contains the prompt and rationale blocks; the file is an additional artifact, not a replacement.
the surrounding fences) to .opencode/prompts/<descriptive-name>.md.
add-error-reports-management-rpc.md, backend-rpc-security-audit.md. No spaces, no uppercase, no version numbers or dates in the filename.
.opencode/prompts/ does not exist, create it before writing.refined prompt, not a log).
this one", "just show it in the chat"). When in doubt, save it.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 11,726 | 10,022 | -15% | 1 | 1 | 0% | 1,777 | 1,852 | +4% | 0 | 0 | — |
case-02 | fail→fail | 12,047 | 30,670 | +155% | 1 | 1 | 0% | 1,908 | 2,036 | +7% | 0 | 0 | — |
case-03 | fail→fail | 22,661 | 9,944 | -56% | 1 | 1 | 0% | 1,633 | 2,027 | +24% | 0 | 0 | — |
case-04 | pass→fail | 16,193 | 26,367 | +63% | 1 | 1 | 0% | 2,430 | 6,158 | +153% | 0 | 0 | — |
case-05 | pass→fail | 21,078 | 47,616 | +126% | 1 | 1 | 0% | 4,151 | 7,148 | +72% | 0 | 0 | — |
case-06 | pass→fail | 59,363 | 11,366 | -81% | 1 | 1 | 0% | 2,905 | 1,895 | -35% | 0 | 0 | — |
case-07 | fail→pass | 22,516 | 68,117 | +203% | 1 | 1 | 0% | 2,260 | 4,870 | +115% | 0 | 0 | — |
case-08 | fail→fail | 12,078 | 9,801 | -19% | 1 | 1 | 0% | 1,789 | 1,866 | +4% | 0 | 0 | — |
case-09 | pass→pass | 10,632 | 16,656 | +57% | 1 | 1 | 0% | 1,557 | 4,272 | +174% | 0 | 0 | — |
case-10 | fail→fail | 7,156 | 8,720 | +22% | 1 | 1 | 0% | 1,015 | 1,986 | +96% | 0 | 0 | — |
case-11 | fail→fail | 8,542 | 17,917 | +110% | 1 | 1 | 0% | 1,351 | 2,182 | +62% | 0 | 0 | — |
case-12 | fail→fail | 26,600 | 7,775 | -71% | 1 | 1 | 0% | 1,973 | 1,886 | -4% | 0 | 0 | — |
case-13 | fail→fail | 14,476 | 8,221 | -43% | 1 | 1 | 0% | 2,180 | 1,779 | -18% | 0 | 0 | — |
case-14 | fail→fail | 11,557 | 41,014 | +255% | 1 | 1 | 0% | 1,512 | 3,499 | +131% | 0 | 0 | — |
case-15 | fail→fail | 15,453 | 11,001 | -29% | 1 | 1 | 0% | 2,747 | 2,248 | -18% | 0 | 0 | — |
case-16 | fail→fail | 12,286 | 134,727 | +997% | 1 | 1 | 0% | 1,697 | 2,494 | +47% | 0 | 0 | — |
case-17 | fail→fail | 10,033 | 13,021 | +30% | 1 | 1 | 0% | 1,631 | 2,045 | +25% | 0 | 0 | — |
case-18 | fail→fail | 13,660 | 8,562 | -37% | 1 | 1 | 0% | 1,819 | 1,829 | +1% | 0 | 0 | — |
case-19 | fail→fail | 11,651 | 36,914 | +217% | 1 | 1 | 0% | 1,824 | 1,936 | +6% | 0 | 0 | — |
case-20 | fail→fail | 11,220 | 8,714 | -22% | 1 | 1 | 0% | 1,681 | 1,893 | +13% | 0 | 0 | — |
case-21 | fail→fail | 13,701 | 7,688 | -44% | 1 | 1 | 0% | 1,877 | 2,121 | +13% | 0 | 0 | — |
case-22 | fail→fail | 11,684 | 11,378 | -3% | 1 | 1 | 0% | 1,772 | 1,770 | -0% | 0 | 0 | — |
case-23 | fail→fail | 12,329 | 6,746 | -45% | 1 | 1 | 0% | 1,459 | 1,740 | +19% | 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 4 counted toward the lift figure. The other 19 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 -100 percentage points is the difference between those two pass rates over the 4 comparable cases. 19 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.