improve-prompt
Skill0 starsChanged 3 months agoMITView on GitHub
Turn a rough prompt draft into a well-rounded prompt by interviewing the user one question at a time. Use when the user has a half-formed idea and wants it sharpened before any work starts.
7 other projects use a version of this.
Adopted by
Most recently taken up by
- AcKeskin/contexturetheir own version, first seen Nov 1, 2026
- 26zl/universal-agent-skillstheir own version, first seen Oct 13, 2026
- zircote/improvertheir own version, first seen Oct 11, 2026
- team-attention/stanford-cs146s-krtheir own version, first seen Oct 8, 2026
- Thalisu/SKILLStheir own version, first seen Oct 1, 2026
- tomimor/skillstheir own version, first seen Jun 26, 2026
Other versions7 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 7
- team-attention/stanford-cs146s-kr★ 294same name
- 26zl/universal-agent-skills★ 2same name
- AcKeskin/contexture★ 2same name
- tomimor/skills★ 2same name
- Thalisu/SKILLS★ 1same name
- BhavinM/my-claude-setup★ 0same name
- zircote/improver★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 10 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
10
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 16
If an argument was provided, that's the draft.
- Distinctive: line 19
If no argument was provided, the draft is whatever idea is already sitting in the conversation — usually the user's previous message.
- Distinctive: line 26
Search the codebase, read the files, check the docs and ADRs, look at prior art — and for non-code drafts, whatever material the draft …
- Distinctive: line 64
Ask through the AskUserQuestion tool when the harness provides it.
- Distinctive: line 94
Ask about intent, constraints, and taste — not implementation.
- Distinctive: line 99
When two questions are entangled, ask the upstream one first.
- Distinctive: line 106
Run the draft against this checklist and ask about the gaps that matter.
- Distinctive: line 124
Stop when the remaining unknowns wouldn't change what gets built.
- Distinctive: line 142
Stop early and say so if the draft was already clear.
- Distinctive: line 147
Stop immediately when the user says enough.
- Distinctive: line 181
Keep it their idea. You're closing gaps, not annexing the project — if the refined prompt is twice the scope of the draft, you overreached.
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
The user has an idea but hasn't written a prompt that would actually get them what they want. Your job is to close that gap by asking — then hand back a prompt they recognise as their own idea, sharpened.
You are not designing the solution and you are not writing a spec. The deliverable is a prompt: the thing they'd paste into a fresh session to get the work done.
Getting the draft
If an argument was provided, that's the draft. It may be prose typed inline, or a
path to a file (notes.md, docs/idea.txt) — if it looks like a path, read it.
If no argument was provided, the draft is whatever idea is already sitting in the conversation — usually the user's previous message. Say which one you took, in a sentence, so a wrong guess gets corrected immediately rather than after six questions.
Answer it yourself before you ask
Search the codebase, read the files, check the docs and ADRs, look at prior art — and for non-code drafts, whatever material the draft points at. Every question you can retire with a grep is a question the user doesn't have to answer, and it makes the ones you do ask feel worth their time.
This is the biggest single lever on whether this skill feels useful or annoying.
"Which test framework should I use?" is a bad question when package.json answers
it. "Should this follow the pattern in auth/session.ts or the newer one in
auth/token.ts?" is a good question because you read both and found a real fork.
One caution: research settles what the repo says, not what's still true. When a fact you dug up will be baked into the deliverable itself — a number, a name, a duration the audience will read — surface it as the recommended answer to a question rather than trusting it silently ("the docs budget 50 minutes, so I'd say 'about an hour' — is that the number you want?"). Confirming costs the user one cheap yes; a stale fact carried into the final prompt costs them a wrong deliverable. Facts that merely steer your questions don't need this — only the ones the executor will repeat as truth.
A second failure is quieter, because the research genuinely happened. Quoting a file is safe: you read the line, the line says that. Three other kinds of claim are not, and they all fail the same way — counts ("five ADRs have a multi-line status"), exhaustive negatives ("no link to that course exists anywhere in either repo"), and progress or build state ("none of the tasks are done yet"). Each one needs you to have looked at everything, or is only true as of this minute. Yet in the finished prompt each reads with exactly the confidence of a quote, and the executor acts on it.
So carry the evidence you actually have. Counted them all? Give the number.
Sampled? Say what you sampled — "every one I opened had…". Claiming something
doesn't exist, or isn't built yet? Date it or say how to check: "as of the
current HEAD", "check whether converter/ exists before assuming it doesn't".
The hedge costs you a clause. A confident wrong count sends a fresh session off
to redo work that was already finished, and it will trust the number precisely
because everything else you cited was accurate.
Then ask, one at a time
Ask through the AskUserQuestion tool when the harness provides it. A question typed as plain chat text ends the turn, and to anything watching the session — a multiplexer like Herdr, a notification hook — that is indistinguishable from being finished: the user gets no signal that input is needed. The tool is what marks the session as blocked on their answer. Fall back to chat prose only when the tool doesn't exist.
Either way, one question per turn — the answer to each one shapes the next, and a batch of five forces the user to answer questions that a good earlier answer would have dissolved.
With every question, give your recommended answer and a one-line reason: make it the first option, mark it "(Recommended)", and put the reason in its description. Saying "yes" is far cheaper than composing an answer from scratch, and your guess being visibly wrong is itself fast, useful feedback. Open questions with no natural options still fit — offer your best two or three guesses, and "Other" lets the user type their own. The reason slips most easily on late, checklist-shaped questions — the done bar, the final confirm — where the recommendation feels self-evident. It isn't to the user: the one-line "because" (where the number comes from, which prior art the bar matches) is what lets them say yes without re-deriving your logic.
The draft says "add caching". I'd scope this to the read path only — the writes go through a queue already, so caching them would mostly add invalidation hazards. Read-only, or did you want writes in scope too?
A question earns its place only if different answers lead to materially different work. That's the whole test. If you'd build the same thing either way, don't ask — decide, and move on. Conventional defaults are yours to pick.
Ask about intent, constraints, and taste — not implementation. If the user could answer "how should this be architected", they'd have written that prompt already. What they own and you can't guess: who it's for, what done looks like, what's out of scope, what must not change, what they've already decided.
When two questions are entangled, ask the upstream one first. When the user says "I don't know" or "you pick", take your recommendation and carry it into the final prompt as a stated assumption rather than a requirement — the executor should know which parts are load-bearing and which were guesses.
What "well-rounded" means
Run the draft against this checklist and ask about the gaps that matter. Most drafts are missing two or three of these, not all of them.
- Outcome — what does done look like, and how would either of you know?
- Scope edges — what's deliberately not in this, so the executor doesn't wander
- Prior art — the files, docs, or examples the work should follow
- Constraints — stack, conventions, what must not be touched, length or budget
- Audience — who consumes the output, which sets tone and depth
- Output shape — a PR, a file, a report, a decision; and where it lands
- Already decided — calls the user has made, so they don't get re-litigated
- Failure modes — the edge cases they'd be annoyed to have missed
Non-coding drafts (writing, research, analysis) use the same checklist; audience, outcome, and output shape usually carry the most weight there.
When to stop
Stop when the remaining unknowns wouldn't change what gets built. That is the only gate — there is no question budget. A near-complete draft might be settled in two questions; a rough sketch of something genuinely complex might take fifteen, and if each one passes the materially-different-work test, all fifteen earned their place. Winding down while real gaps remain doesn't save the user anything — it just moves the ambiguity into the work, where it costs far more to resolve.
What should end an interview is a shift in the kind of question you're reaching for. While you're asking about intent, scope, constraints, and taste, you're pulling out things only the user knows. Once you find yourself asking how the thing should be built internally, you've crossed into decisions the executing session will make better with the code actually in front of it. That crossing is the signal to deliver — not a count.
Cheap confirmations never compete with substantive questions. Checking a fact you'll bake into the deliverable costs the user a one-word yes, so don't trade one away to keep the interview short.
Stop early and say so if the draft was already clear. "This is specific enough already — here it is tightened up, no questions needed" is a perfectly good outcome, and a much better one than manufacturing doubt to justify the skill. The user can always ask for more.
Stop immediately when the user says enough.
Deliver
Present the result in this shape:
## Refined prompt
```
<the prompt, ready to paste — written in the user's voice, as an instruction
to whoever executes it>
## Assumptions
- <only if there are any — each "you pick" answer, written as a call the
executor owns and may overturn>
```
**What changed:** <one or two lines — which gaps you closed>The prompt goes in a fenced block so it can be copied clean. Write it as a self-contained instruction that works in a fresh session with no memory of this conversation: everything discovered during the interview has to survive inside it, including file paths and prior art you found.
That is exactly why the assumptions sit inside the fence. They are the parts of the brief nobody actually decided — and the executor is the one who will run into them. Someone who copies the block and nothing else still has to be able to tell your guesses from the user's requirements; a flag stranded in the chat above the block is lost the moment the prompt travels, which is the one thing you built it to do. "What changed" is the opposite case: it's a note to the user about this conversation, meaningless to a fresh session, so it stays outside.
Keep it their idea. You're closing gaps, not annexing the project — if the refined prompt is twice the scope of the draft, you overreached. Length should serve precision; a tight paragraph beats a padded page.
Then ask whether to run it now or whether they're taking it elsewhere — through AskUserQuestion like every other question, so the wait is visible — and wait for the answer. Starting the work unasked defeats the point of a skill whose entire purpose is to get the instruction right before anything happens.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

