No silent assumptions
Skill logicleap-labs/claude-plugins/plugins/no-silent-assumptions/skills/no-silent-assumptions
Open Claude Code plugins for shipping AI output that's actually good. By Josh Matthews / LogicLeap Ltd.
npx -y skills add logicleap-labs/claude-plugins --skill no-silent-assumptionsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
MANDATORY before declaring code "done", "ready", or ending a turn after working with anything you couldn't fully verify — an environment you didn't inspect, a data shape you inferred, an API whose behavior you didn't test, an edge case you decided not to handle. Forces you to track every material guess while working and surface them in a short "Assumptions:" block before claiming done. Triggers on "I'll assume", "assuming the API returns", "probably fine", "should work", "not sure if", "guessing this is", "the data is presumably", "I didn't test", any inferred schema/env/config value.
SKILL.md
4.2 KB, as published. Nobody here has run it
No Silent Assumptions
A guess you didn't say out loud is a bug report the human files next week.
Every non-trivial change rests on guesses: what the env contains, what shape the data really has, what the API does on a 404, which edge cases can't happen. Making guesses is fine — the model can't verify everything. Burying them is not. A guess stated in your reply costs the human five seconds to confirm or correct; the same guess buried in a comment costs them a production incident.
The rule
Every material assumption gets surfaced before "done." Track them while you work, then list them in one short
Assumptions:block — what you assumed, and what breaks if it's wrong.
What counts as material
- Environment — a tool/version/path/service you assumed exists or is configured ("assuming Node 20", "assuming Redis is on localhost").
- Data shape — a schema, field, type, or nullability you inferred rather
than read ("assuming
user.emailis never null"). - API behavior — return values, error modes, ordering, pagination, rate limits you didn't test ("assuming the endpoint 404s rather than returning an empty list").
- Edge cases — inputs you decided can't happen ("assuming amounts are always positive").
Not material: things you actually verified this turn, documented invariants you can point to, and trivia (naming, formatting).
Step 1 — Track guesses as you make them
The moment you write code on top of something you didn't check, note it. The tells are in your own language: "assuming the…", "probably fine", "should work", "not sure if". Each one is an entry, not a comment to bury.
Step 2 — Verify the cheap ones
Half your assumptions cost one command to eliminate: read the schema, hit the endpoint, check the env. A verified fact beats a surfaced guess. Verify what you can, keep the rest.
Step 3 — Surface the rest before claiming done
End the turn with a short block, one line per guess, each with the blast radius if wrong:
Assumptions:
- The `orders.status` column only ever holds the five enum values I saw in the fixture — if there are legacy values, the switch falls through.
- The payments API retries idempotently on 5xx (didn't test) — if not, double-charge is possible.
- Dev and prod share the same Redis eviction policy — if prod is `noeviction`, this cache grows unbounded.
Three lines like that turn a silent risk into a two-minute review.
The Stop hook scans code you added this turn for guess-shaped language and
blocks the turn if you never surfaced an Assumptions: block. If a flagged
phrase is a documented invariant rather than a guess made this turn, declare
it:
NO-SILENT-ASSUMPTIONS: INTENTIONAL — "assumes sorted input" restates the function's documented contract
Avoiding false alarms
The gate is conservative by design: only multi-word guess-shaped phrases fire
("assuming the…", "guessing that…", "not sure if…", "probably works",
"might be null", "TODO: verify"). A bare "assume" in an assert message, a
variable named assumed_role, or the word "probably" alone never blocks. One
Assumptions: block anywhere in your reply satisfies it.
Kill switch
False positive: touch .no-silent-assumptions-off in the project root, or
export NO_SILENT_ASSUMPTIONS_GATE=off.
Pairs with
verify-before-done— the strongest move on any assumption is to verify it; this skill catches the ones you couldn't.no-stub— a stub hides missing code; a silent assumption hides missing knowledge. Surface both.scope-guard— "I assumed you also wanted X changed" is the assumption that one prevents.