Automated summary
Runs one iteration of a Load → Run → Grade → Ask → Fold → Report loop on a target skill or prompt file so it improves against a real test input.
Strengths
- Enforces a fixed six-step sequence and forbids editing the target skill before the Fold step
- Forces user questions into A/B/C or yes/no form, each naming the trade-off and the consequence of every option
- Requires a diff or quoted before/after whenever the skill file is edited, and forbids marking a skill as done
- Refuses to start without a real test input, keeping the iteration grounded in a concrete case
Limitations
- Self-grading is performed by the same model that produced the output, so scores remain subjective
- The provided file is truncated, so the Ask, Fold and Report steps are not fully specified
- No automated validation of the resulting skill is included; quality gains rest on model judgement
Use it when a skill or prompt already exists and you want to sharpen it cumulatively from a real example instead of re-prompting ad hoc.
Avoid it when creating a skill from scratch with no test case available, or when you want a single-pass fix with no question-and-answer exchange.
Security analysis
CautionThis is a meta-prompting / prompt-refinement workflow. It never invokes the network, never touches secrets, and contains no obfuscated or destructive commands (no curl|sh, no rm -rf, no safety-disabling text). Its power comes from Write/Edit/Bash over the user's own skill files, and it edits those files before showing the diff, so it warrants 'caution' rather than 'safe' — but the intent is clearly legitimate authoring tooling.
- •Declares Bash alongside Write/Edit; although no explicit commands are given, the skill operates on live files on the user's disk
- •Fold step edits the target skill file and only shows the diff *after* the edit, with no pre-edit confirmation or backup
- •Load step will distill conversation and save a new skill.md without an explicit confirmation gate
- •No network, credential, or destructive-path instructions present — the risk is confined to local file mutation
Examples
Run the whetstone loop on ./skills/ticket-triage/skill.md using this support ticket as the test input: "Customer says the export button returns a 500 after the last deploy."Turn the crank on prompts/code-review.md — use this diff as the test input and give me two grade cycles before asking me anything.We've been tweaking this review prompt for the last 20 messages. Distill it into a skill.md, then run the whetstone loop on it with this sample PR as input.name: whetstone version: 0.3.0 description: | Run one "turn of the crank" on a target skill, prompt, or piece of guidance. Apply the skill to a real test input, self-grade against its own rules, improve the output, then surface ambiguities to the user as A/B questions and fold the answers back into the skill file. The skill is the durable artifact; the chat is exhaust. Use when the user says "run the whetstone loop", "sharpen this skill", "improve this prompt", "turn the crank on X", or wants to compound learnings into a versioned skill instead of re-prompting one-off. argument-hint: "[path/to/target/skill.md] [path/to/test-input]" allowed-tools:
- Read
- Edit
- Write
- Bash
- Glob
- Grep
Whetstone
You are running the Whetstone Loop: building a skill that sharpens itself. The skill file is the asset. The conversation is throwaway. Your job is to drive one turn of the crank — Load → Run → Grade → Ask → Fold → Report — without skipping steps.
Goal
Drive a single iteration on a target skill so that running it again on the same input would produce a better result with fewer questions. Leave the skill in a strictly-better state, with at least one open question seeded for the next turn.
Inputs you must identify before running
- Target skill file. A
skill.md(or equivalent guidance file) the user is iterating on. If none exists, your first job is to distill the prior conversation into one before continuing. - Test input. A real task the skill should handle. Refuse to start the loop without one — ask the user to paste a real example.
- Turn budget. How many self-grade/improve cycles before stopping. Default: 2. Hard cap: 3.
Hard rules
- Never edit the target skill file before Fold. Self-improvement during Grade happens in output drafts only; the skill file changes only after the user answers the Ask questions.
- Never ask the user open-ended questions like "what should I change?" Constrain to A/B/C or yes/no. Each question must name the trade-off explicitly, including the consequence of each option.
- Never mark the skill "done." Always leave at least one entry under
Open questionsso the next turn has somewhere to push. - Always announce each step in one sentence when running interactively so the user can interrupt before you commit to a path. When the run is captured as a written artifact (a turn doc), step headers replace the inline announcement — do not duplicate.
- Always show a diff (or quoted before/after) when editing the skill in Fold.
- Ask questions target the target skill only. Surface ambiguities the target skill did not specify. If you notice gaps in Whetstone itself while running, hold them — they only get raised when Whetstone is explicitly the target of a meta-run.
Soft rules
- Prefer 3 sharp questions over 8 vague ones in Ask.
- Prefer rewriting an existing rule with reasoning attached over adding a new rule with no
why. - Default to keeping the skill under 200 lines. If it grows past that, surface a split-vs-refactor question.
- Default test input picks: something small enough to fully grade in under a minute.
The loop
Execute these steps in order. Do not skip.
1. Load — locate or distill the skill
If a target skill.md exists, read it. If not, read the recent conversation and distill it into a draft skill.md using the structure: Goal / Hard rules / Soft rules / The loop (or process) / Examples / Edge cases / Open questions. Save it before continuing.
2. Run — apply the skill cold
Apply the skill to the test input exactly as written. Produce output. Show it to the user verbatim. Do not silently improve it here — Run is the cold-start baseline.
3. Grade — self-grade and improve
List every rule from Hard rules and Soft rules. For each, mark the Run output pass or fail and quote the offending span. Rewrite the output to address every fail. Re-grade. Stop the moment every rule passes — do not keep polishing for vague "quality." If the rule-passing output still feels weak, that is signal the rules are too loose; capture the felt-weakness as an Ask question instead. Halt also when the turn budget is exhausted. Show the final output and the final grade.
4. Ask — surface ambiguities as A/B questions
Identify 2–4 decisions you made during Grade that the skill did not fully specify. For each, write a question with named options and consequences:
Q1: <what was ambiguous>
A) <option A> — <consequence>
B) <option B> — <consequence>
Stop and wait for the user to answer. Do not proceed to Fold without answers.
5. Fold — bake answers into the skill
Edit the target skill.md so that re-running it on the same input would produce the user-preferred output without further questions. Update Hard rules, Soft rules, Examples, and Open questions as appropriate. Show the diff. Do not edit anything outside the skill file.
6. Report — summarize and stop
Do not start another turn unless the user asks. Print a short report: turns taken, rules added, rules changed, open questions remaining, suggested next test input.
Examples
Example: improving a pr-title skill
User has pr-title.md. They give you a diff as the test input.
- Run output:
Updated the auth middleware to handle expired tokens - Grade:
- Rule "imperative mood" —
Updatedfail (past tense). Rewrite:Update. - Rule "≤50 chars" — line is 52 chars fail. Rewrite tightens to 43.
- Final:
Update auth middleware for expired tokens— all rules pass.
- Rule "imperative mood" —
- Ask questions:
Q1: Refactors with no behavior change — prefix with "refactor:" or use a plain verb? A) refactor: prefix — clearer signal in changelogs. B) plain verb — shorter, matches existing repo style.Q2: PRs touching two unrelated areas — name both or pick the dominant? A) name both — accurate but long. B) dominant area only — punchy but loses information.
- Fold: user picks A, B. Add
Hard rule: Refactors use refactor: prefix.AddHard rule: For mixed-concern PRs, use the dominant area only; mention the secondary in the body.Remove these fromOpen questions. Add a newOpen question: How to title revert PRs.
Edge cases
- Skill conflicts with itself. Two rules disagree on the same input. Surface the conflict as an Ask question; do not silently pick one.
- User gives no test input. Refuse to start. Suggest the user paste a real example. Do not invent test inputs.
- Grade plateau on turn 1. If the first output passes every rule cold, the skill is too loose. Force an Ask question targeting whatever felt arbitrary while you were producing the output. During Fold, the answer parks under
Open questions; do not promote it directly to a Hard/Soft rule. Promote to a rule only after the same ambiguity surfaces on a second or third test input — one sighting is anecdote, two is pattern, three is rule. - Skill grows unwieldy. If the skill exceeds ~200 lines or has overlapping rule clusters, ask the user: split into multiple skills (A) or refactor in place (B)?
- User pushes back on a Fold edit. Treat their pushback as a fresh Ask answer; revise the diff before applying it.
Open questions
- How to handle conflicting reasoning when the user wants both options preserved — branching rules inside one skill, or fork into two skills?
- How to make a skill discoverable and usable across a team without becoming bureaucratic.
- When to retire a skill versus keep iterating on it.
- How to detect "skill rot" — when accumulated rules contradict each other and the skill needs a rewrite, not a tweak.
- Promotion threshold. Q3 (v0.2.0) set the policy "park first, promote after 2–3 sightings." Threshold is fuzzy — exactly how many sightings, and does the model track them automatically across turns, or does the human decide?
- Boundary between target-skill gaps and Whetstone-skill gaps. Q2 (v0.2.0) ruled "target only" during normal runs, but the model still has to classify ambiguities at the moment they arise. Heuristic for that classification not yet specified.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/whetstone-loop-mrwakaai/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/whetstone-loop-mrwakaai' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/whetstone-loop-mrwakaai/download' --output '.skill-downloads/whetstone-loop-mrwakaai/SKILL.md.part' && mv '.skill-downloads/whetstone-loop-mrwakaai/SKILL.md.part' '.skill-downloads/whetstone-loop-mrwakaai/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/whetstone-loop-mrwakaai/SKILL.md' && test -s '.skill-downloads/whetstone-loop-mrwakaai/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/whetstone' && cp -R '.skill-downloads/whetstone-loop-mrwakaai' '.claude/skills/whetstone'Codex
test -f '.skill-downloads/whetstone-loop-mrwakaai/SKILL.md' && test -s '.skill-downloads/whetstone-loop-mrwakaai/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/whetstone' && cp -R '.skill-downloads/whetstone-loop-mrwakaai' '.agents/skills/whetstone'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/whetstone-loop-mrwakaai'openskills read 'whetstone-loop-mrwakaai'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/whetstone-loop-mrwakaai/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
Create Interactive Maps with kepler.gl
Data & AI
Create interactive map visualizations and export standalone HTML using the keplergl Python package. Use to plot geospatial data from DataFrames, GeoJSON, or CSV.
Agent-Driven Parameter Optimization
Data & AI
Guide for optimizing configurable systems with a measurable objective, using bounded trials and evidence-based recommendations.
ICP Visitor Outreach
Data & AI
Identify signed-up users matching the ideal customer profile but stalled, and draft personalized outreach to re-engage them.