map
Skill10 starsChanged 4 months agoMITView on GitHub
Map the fog before you build. Use when uncertainty is high (aperture A3–A4), the terrain is unfamiliar, the taste is "I'll know it when I see it", or you are porting a reference implementation. Walks the task through four unknown-quadrants — known knowns (settled ground with file evidence), known unknowns (one blast-radius-ordered question at a time), unknown knowns (tacit taste surfaced by putting something concrete in front of the user), and unknown unknowns (a swept landmine field) — then hands over one durable four-quadrant map, a tweakable build plan, and a copy-paste implementation prompt. What you deliver is the map, not a build; you do not write code until it is handed over.
31 other projects use a version of this.
Adopted by
Most recently taken up by
- Yeachan-Heo/oh-my-claudecodetheir own version, first seen Nov 8, 2026
- SethGammon/Citadeltheir own version, first seen Nov 4, 2026
- uwonu606/claude-skillstheir own version, first seen Nov 1, 2026
- vidit19sharma/neogentstheir own version, first seen Nov 1, 2026
- duthaho/skillhubtheir own version, first seen Oct 31, 2026
- ES-92/esctheir own version, first seen Oct 20, 2026
Used with
Projects with it also use ultragoal, cost and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Yeachan-HeoSkillultragoal
Create and execute durable repo-native multi-goal plans over Codex goal mode artifacts.
Also in 3 projects that use this
maxvaegaSkillcost
Estimate what Claude Cowork / Claude Code conversations would cost if run on the pay-per-token Claude API instead of the subscription. Reports token counts and cache-aware API cost in USD and EUR, for the current conversation or for the whole history (cost per conversation). Trigger when the user asks things like "how much would this conversation cost on the API", "API cost of my Cowork conversations", "token usage / token count", "cost per conversation", "/cost", or wants to compare subscription vs API pricing.
Also in 3 projects that use this
marylinSkillrecover
Recover work from a crashed or interrupted session. Use when Claude crashed mid-task, after an unexpected exit, when you see 'stale sessions detected', or when you lost context and need to figure out what was happening.
Also in 3 projects that use this
thoughtbotSkilltrace
Run a scenario and record what actually happened.
Also in 4 projects that use this
POSTTTTSkilltidy
Clean up and organize a project's file structure — group loose files into logical folders (images/, scripts/, styles/, etc.), remove empty directories, and delete genuinely unnecessary files. Use when the user asks to "clean up the project", "organize the files", "tidy the directory", "sort these into folders", "remove empty folders", or "get rid of junk files". Always understands the project and updates references BEFORE moving anything, never deletes load-bearing files, and gets approval before changing the file tree.
Also in 3 projects that use this
javatarzSkillwiki
Access and manage the local GitHub Wiki clone. Use this skill when you need to read wiki content (architecture, design docs, guides), update wiki documentation, check wiki status, or push wiki changes. The wiki contains high-level system design and architectural documentation.
Also in 4 projects that use this
Other versions31 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 31
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
- Yeachan-Heo/oh-my-claudecode★ 41ksame name
- baojie/shiji-kb★ 3.4ksame name
- SethGammon/Citadel★ 927same name
- zeuikli/claude-code-workspace★ 155same name
- mbwsims/claude-universe★ 71same name
- yha9806/academic-writing-toolkit★ 54same name
- sea-gold/skills★ 26same name
- myclaude-sh/myclaude-creator-engine★ 25same name
- ilanbm/kpopper★ 12same name
21 more not listed
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.
In this repository24 other files it gives its agents.
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 2 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 22 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
When uncertainty is high, the expensive mistake is a confident build in the wrong direction.
- Distinctive: line 21
Show, don't ask: Never make the user describe intent from a blank page.
- Distinctive: line 47
Known unknowns — one question at a time: Ask the single highest-blast-radius question first (the answer that reshapes the most), not a wall …
- Very specific: line 110
If probe code turns out worth keeping, that is a promotion: a fresh /ratchet:build under the full proof/seam gates, then ratchet retract …
- Very specific: line 172
Run /ratchet:map when the aperture earns it, not on a reversible one-liner:
“Common” is measured: kept by at least 6 in 10 of the 22 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
/ratchet:map — the fog-of-war gate
When uncertainty is high, the expensive mistake is a confident build in the wrong
direction. /ratchet:lock says: infer the missing value, name the assumption, move. That
is correct for low-uncertainty work. This command is its counterweight for the
high-uncertainty case — it maps the terrain before the build, so a wrong assumption is a
one-line correction on paper instead of a rewrite three PRs deep. What you deliver is the
map, not a build. You do not write code until it is handed over.
Method grafted from the
explore-unknownsskill; expressed in ratchet's own vocabulary — general mechanism, own words, backed by ratchet state. (Same graft discipline as the aperture dial.)
Two moves make the walk work:
- Show, don't ask. Never make the user describe intent from a blank page. Put something concrete in front of them — a sample, a throwaway mock, a few competing directions — and let them point at it. Recognition is cheap; invention is expensive.
- Pre-draft their reply. Close each turn with lettered options answerable in a few characters, so the user reacts instead of composing.
Step 0 — Load state, then scan the terrain
ratchet status
ratchet snapshot repoScan first. Gather what already exists, what is half-built, and what was tried and reverted — before you open your mouth. Serial questions on unread terrain waste the user's attention.
Procedure
Walk the four quadrants in order, naming the current one. Disclose material findings the moment you hit them; never close a quadrant off-screen.
- Known knowns — settle the ground. State the facts, each cited to
file:line. Mark every assumption separately and say you will treat it as true until corrected, so a wrong premise gets caught now instead of after the build. - Known unknowns — one question at a time. Ask the single highest-blast-radius question first (the answer that reshapes the most), not a wall of them. Give lettered options with a recommended answer. Close each question exactly one way, in front of the user: user answer, territory (you researched it, then show question + finding), probe (only touching the repo can answer it — commission a probe card, below), or OPEN (deferred, with what would unblock it and the route that will close it: ask-user, probe, park with owner+reason, promote to an assumption with a kill test, or a defect).
- Unknown knowns — extract the tacit. The user cannot articulate what they don't know they know. Do not ask abstractly. Put something concrete in their hands — sample data, a throwaway mock, three or four incompatible renderings of the same thing — and let the reaction expose the taste. Probe the offhand context: the downstream consumer, the runtime it lands in, the acceptance bar of whoever owns it next. Record what each reaction changes.
Unknown unknowns — sweep for landmines. Hunt the silent failure modes a shallow read misses: wrong-by-default data, stale denormalizations, unwritten conventions the code enforces but no doc records, prior attempts that were abandoned or rolled back — the reason they died is usually the trap you are about to re-hit, and latent bugs this path inherits. Worst first. Each as a card:
evidence: <file:line> why it bites: <mechanism> what it changes: <task impact> status: decided | OPEN | sharp-edge- Hand over the map. One page, all four quadrants — shape it like
templates/unknowns-map.mdand write it to.ratchet/unknowns-map.md. OPEN items live on the map, not buried in chat — and every OPEN item names its route out (ask-user, probe, park with owner+reason, assumption+killTest, or defect). An OPEN item with no route is a stall with a receipt, not mapped fog. Add a tweakable build plan ordered by what might change (judgment calls first, routine work compressed at the bottom) and a copy-paste implementation prompt. Then stop — implementation is a separate engagement. The map stays live through the build:/ratchet:buildrecords deviations back onto it.
Probes — when the map must touch (build-for-learn)
Some fog only appears by touching: an unknown unknown no read can surface, a taste no
question can extract. For those, do not ask harder — commission a probe: a time-boxed,
reversible, throwaway build whose proof-of-done is knowledge, not code. Shape it like
templates/probe-card.md:
PROBE: <the unknown this closes>
- Hypothesis: <what touching should show>
- Smallest reversible touch: <mock | spike | failing test | fixture | instrumentation>
- Allowed surfaces: <files it may touch — nothing else>
- Proof of learning: <the observation that closes the unknown, either way>
- Stop condition: <time-box / attempt cap>Probe code dies; probe findings live. Serialize the lifecycle:
ratchet artifact add '{"kind":"probe","title":"probe: <unknown>","status":"v0","holes":["disposal: pending"]}'
# run it via /ratchet:build in build-for-learn mode, then — findings first, then dispose:
ratchet state append decisions '{"choice":"<what it settled>","rejected":"<losing hypothesis>","tripwire":"<what reopens it>"}'
ratchet retract <probe-id> --reason "disposed: code reverted; finding recorded as <id>"The disposal: pending hole drains confidence until the probe is retracted, and the
cold-start scan flags a live probe as residue — undisposed probe code cannot read clean.
If probe code turns out worth keeping, that is a promotion: a fresh /ratchet:build
under the full proof/seam gates, then ratchet retract <probe-id> --reason "promoted: <the
keep-build>" --superseded-by <new-artifact-id>. The CLI enforces both: a probe retraction
must start disposed: or promoted:, and a promotion must name its superseder. Nothing
ships because a probe happened to leave it behind. An unfinished probe (stop condition
hit) closes its item as OPEN with what it did learn.
Output contract
QUADRANT WALK: current <quadrant> · coverage <n/4> · stopped for user reaction? <yes/no>
KNOWN KNOWNS:
- <settled fact> — evidence: <file:line>
- <assumption> — treated as true until challenged
KNOWN UNKNOWNS:
- Q: <question> | recommend: <lettered answer> | closed by: user | territory | probe | parked(owner) | OPEN + route | unblocks: <what>
PROBES (if any commissioned):
- probe: <unknown> | hypothesis: <expected> | touch: <smallest reversible> | stop: <time-box>
UNKNOWN KNOWNS:
- tacit constraint: <extracted> | reshaped the target: <how>
UNKNOWN UNKNOWNS:
- landmine: <name> | evidence: <file:line> | why it bites: <mechanism> | changes: <impact> | status: decided | OPEN | sharp-edge
HANDOVER MAP: path <.ratchet/unknowns-map.md> · OPEN items <n> · build plan <yes/no>
IMPLEMENTATION PROMPT: <copy-paste line that launches the build with the map's context>Serialize
The map is durable state, not scrollback. Record it so the next context resumes cold:
ratchet artifact add '{"kind":"unknown-map","title":"unknowns map: <target>","status":"handoff","path":".ratchet/unknowns-map.md","holes":["<each OPEN item>"]}'
ratchet state append decisions '{"choice":"<closed known-unknown>","rejected":"<the option not taken>","tripwire":"<what would reopen it>"}'
ratchet state append assumptions '{"text":"<tacit/working assumption>","killTest":"<cheapest falsification>","status":"untested"}'
ratchet state append openLoops '{"text":"OPEN: <question> — unblocks: <what>","status":"open"}'
ratchet state set phase cut
ratchet state set nextCommand "/ratchet:build"Real landmines that are actual failures (not just sharp edges) are defects, not notes:
ratchet defect add '{"severity":"high","summary":"<landmine that will bite the build>"}'The map's OPEN loops, untested assumptions, and artifact holes all drain
ratchet score confidence on purpose — an unclosed unknown is tracked pressure, not a
forgotten one. The score cannot read ship-ready while the fog is still on the board.
The CLI holds both ends of the fog loop itself: ratchet score aperture records
fog: pre-build map required as an open loop the moment mapRequired fires (writer
callers), and ratchet artifact add with kind:"unknown-map" closes it when the map
lands — scored fog can never live only on stdout.
Meter — when to reach for this
Run /ratchet:map when the aperture earns it, not on a reversible one-liner:
ratchet score aperture '{"ambiguity":_,"terrain":_,"taste":_,"blastRadius":_,"reversibility":_}'- A0–A2 → don't.
/ratchet:lock+ infer-and-build is the right, anti-ceremony move. - A3 → map the fog, then build.
- A4 → map the fog, hand over the plan/options, and stop — do not build until constraints are locked.
Also reach for it directly (whatever the score) on a reference-implementation port, an "I'll know it when I see it" request, or a mid-build deviation that needs capturing.
Next: when the map is handed over and the user picks the build plan → /ratchet:build.
At A4, lock the open constraints first (/ratchet:lock) and stop before building.
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.

