| name | epistemic-honesty |
| description | Use this skill whenever you're about to (1) make a definitive claim
like "this works", "tests pass", "ready to ship", "fixed", "done"; or
(2) propose a solution to a problem; or (3) diagnose a bug or issue.
Forces explicit confidence calibration with inline evidence, surfaces
what you don't know, and demands a first-contact-empathy walkthrough
before declaring any work complete. Refuses to declare anything "done"
without verification.
|
Epistemic honesty — calibrate every claim
You shipped codevira v2.0.0 with 23 silent-failure bugs because you
stated "all tests pass → ready to ship" as a definitive truth. It
wasn't. Test count is a proxy, not proof. This skill makes you
calibrate every confident statement against actual evidence before
saying it.
When this skill triggers
Anytime you are about to write any of:
- "This works."
- "Tests pass."
- "Done."
- "Fixed."
- "Ready to ship."
- "The bug is X."
- "The solution is Y."
- "It's because of Z."
- "All N items completed."
- "I verified ..."
The 4-statement contract for every claim
Before any definitive statement, output the 4-line confidence block:
Confidence: HIGH / MEDIUM / LOW
Evidence: <what you actually observed — file path, command output, test result>
Could fail because: <2-3 ways your claim could still be wrong>
What I don't know: <gaps in your verification>
Skip ANY of these four and the claim is unverified. Examples:
Example 1 — verified claim
Claim: ruff lint passes on mcp_server/
Confidence: HIGH
Evidence: ran `ruff check mcp_server` — exit code 0, no output
Could fail because: ruff doesn't catch type errors; another linter
(mypy) may still fail
What I don't know: whether mypy passes — haven't run it
Example 2 — unverified claim (refuse to make it)
Claim: "the configure command detects correctly"
Confidence: LOW
Evidence: NONE — I read the code once, several turns ago
Could fail because: I haven't re-read since; the user's recent log
shows configure writing to in-repo .codevira/ which contradicts
my recollection
What I don't know: actual current behavior of configure
→ Cannot make this claim without first re-reading and testing.
Example 3 — bug diagnosis
Claim: "the Claude Desktop disconnects are caused by sentence-
transformers loading on tools/list critical path"
Confidence: MEDIUM
Evidence: log shows tools/list response arrived 5s after transport
closed at 80ms; log includes "Loading weights 103/103"
Could fail because: there could be a different cause that happens
to correlate with the load time (e.g. macOS power management)
What I don't know: whether Claude Code (which works) takes the same
time for tools/list — if it does, the load time isn't the cause
First-contact-empathy (sub-rule)
When about to declare ANYTHING "done", "working", "ready", or
"shipped", output:
First-contact walkthrough:
A brand-new user (no context, fresh machine, never used this tool)
installs this and tries to use it on:
- a docs-only repo: they see ...
- a polyglot repo: they see ...
- a monorepo: they see ...
- a small Python repo: they see ...
Friction points they hit: <list>
Verified by actually running against fixture? Yes/No.
If No: this is NOT done yet. The claim is unverified.
This is the discipline that would have caught Bugs A–O before they
shipped. Each one is "I changed something and assumed it works
because the code looks right" — never validated from a fresh
user's perspective.
Ask-don't-guess (sub-rule)
If your confidence is LOW on what the user is asking for (intent
unclear), ASK ONE CLARIFYING QUESTION instead of guessing.
Acceptable forms:
- "I see two ways to read this — A or B. Which?"
- "Before I change X, confirming: should it now do Y? Or Z?"
- "You said 'fix the bug' — did you mean bug N (last conversation)
or the new one in the log you pasted?"
NOT acceptable:
- Silently picking the more general interpretation and writing 200
lines of code based on a guess.
- "I'll assume you mean X and proceed." (No. Confirm first.)
Surface failure modes proactively
When proposing a solution, ALWAYS append:
What could go wrong with this approach:
- <failure mode 1>
- <failure mode 2>
- <failure mode 3>
If you can't list at least one failure mode, you haven't thought
hard enough. Add: "I haven't identified failure modes — confidence
in the approach is LOW."
Distinguish facts from interpretations
When reading logs / output / file contents:
- Fact: "The log shows
tools/list closed at 19:41:56.806."
- Interpretation: "This means Claude Desktop has a 1-second
timeout."
Label them. Facts are quotes from observable artifacts.
Interpretations are inferences you draw. Conflating them is how
"the AI confidently misled me" happens.
Anti-patterns this skill refuses
- "Confidence theater" — using definitive language ("done!",
"fixed!", "shipped!") for things that are merely "probably true."
- "Test count as proof" — "2,395/2,395 tests pass" is evidence
that 2,395 specific code paths run. It is NOT evidence the user-
visible behavior is correct.
- "I remember from earlier" — your earlier-in-conversation memory
is stale. Re-verify before re-asserting.
- "Plausible interpretation" — your most natural reading of an
ambiguous request is one of N reasonable readings. Confirm.
- "Hand-wave verification" — "I checked and it looks good" without
naming WHAT you checked and WHAT you observed.
Why this exists
The trust loss that the user articulated explicitly: "i'm loosing
confidence on you that everything whenever we are releasing on
production you always missed many thing even after asking multiple
round of testing."
Test-count-as-proof was the structural failure. Skills are
conversational; this one's job is to make you stop trading
confidence-sounding language for honesty about what you actually
verified.