trust-but-verify — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited trust-but-verify (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A subagent's report is a lead, not a fact. You trust it enough to investigate — never enough to act on unread.
When you delegate work to a subagent, what comes back is a claim about reality, filtered through a model that summarized, paraphrased, and sometimes hallucinated. The agent may be right. It may be confidently wrong. You cannot tell which from the report alone — the wrong ones look exactly as fluent as the right ones.
This skill is the discipline of closing that gap: before you build on, repeat, or report any claim an agent handed you, you re-open the primary source and confirm the claim against it. Every claim. With a citation.
No claim is verified until you have opened a primary source that confirms it and can quote where.
Two corollaries that do the real work:
UNVERIFIED, never a VERIFIED.30s is written.If you cannot find a source, the honest verdict is UNVERIFIED — and you say so out loud. Silently dropping an unsourced claim is worse than flagging it, because a clean report reads as "all confirmed."
For a returned report, work claim by claim:
cleanup.ts, runs 3 times, and was added in #493" is three claims (location, count, provenance), each with its own source and its own verdict. Bundled claims hide the false one inside the true ones.CONTRADICTED even if the underlying fact is true.UNVERIFIED.VERIFIED claims. Treat CONTRADICTED as the corrected truth. Treat UNVERIFIED as not-yet-true — surface it, don't silently rely on it.The skill lives or dies on this mapping. For each claim, the authoritative source is the thing that defines the fact — not a description of it. Match the claim type, go there, quote it.
| Claim is about… | Primary source (open this) | How to check |
|---|---|---|
| Code structure / location — "X is defined in Y at line N", "A calls B", "this file exports Z" | The code itself | Read the cited file; Grep for the symbol. Confirm file, symbol, and line. |
| Code behavior — "returns null on error", "throws on empty input", "the test passes" | The code, and for runtime claims, actually run it | Read the implementation/test. For "it passes / it works", run the test or command — don't trust "I ran it." |
Config / constants / flags — "timeout is 30s", "the env var is GSD_NOW_MS", "default is true" | The file where the value is defined | Grep the literal; read the definition site, not a doc that mentions it. |
| Project decisions / conventions — "we decided to use X", "the convention is Y", "this was deprecated" | CONTEXT.md, docs/adr/, AGENTS.md, docs/research/ | Read the relevant ADR or CONTEXT section. A decision with no record is UNVERIFIED, not "probably true." |
| User preferences / prior context — "the user prefers Z", "we agreed last session" | The memory directory (.../memory/*.md) | Read the memory file. Then re-confirm any file/symbol it names still exists — memory reflects when it was written, not now. |
| Library / framework / API behavior — "React's cleanup runs before the next effect", "this SDK method takes options", "fast-check runs 100 cases by default" | context7 docs for that library; else the installed source in node_modules. And the project's own config/usage of it. | resolve-library-id → query-docs. Cite the library + the doc passage. Don't reason from memory of the API. If the claim is about how the library behaves in this project, the upstream default is only half the source — check whether the repo overrides it (a setup/config file, a global option, a wrapper) before you call the default "verified." |
Language semantics — "in JS == coerces like this", "Python dicts preserve insertion order since 3.7" | The language reference / spec (via context7 or an authoritative doc) | Cite the spec/MDN passage. Your training memory of a language edge case is a lead, not a source. |
| External facts / versions / current state — "the latest version is N", "the API now returns 429" | The live source — WebFetch/WebSearch, the registry, the API itself | Hit the actual endpoint/registry. Cite the URL and what it returned. |
When a claim spans two types (a code fact and a library fact), it needs a source for each part.
There is deliberately no "probably true" verdict. The whole point is to refuse the comfortable middle where inference masquerades as confirmation.
UNVERIFIED is a real outcome, but reach it honestly. If the first source you check doesn't settle a claim, run one targeted follow-up before concluding — the agent may have been right but pointed you to the wrong place:
Grep the symbol across the repo (or dispatch a focused search agent) to find where it really lives.resolve-library-id + query-docs on context7 for that exact library.docs/adr/ and CONTEXT.md for the topic.If the re-dispatch surfaces the source, verdict accordingly (often CONTRADICTED on the specifics). If it comes back empty, now it's UNVERIFIED — and you've earned that verdict instead of assumed it.
Lead with the table so the audit is scannable. One row per atomized claim:
## Verification — <what the agent was asked to find>
| # | Claim | Verdict | Source (opened) | Note |
|---|-------|---------|-----------------|------|
| 1 | retry logic lives in `cleanup.ts:88` | VERIFIED | tests/.../cleanup.ts:88 | matches exactly |
| 2 | it retries 3 times | CONTRADICTED | tests/.../cleanup.ts:91 — `maxRetries = 5` | agent said 3, source says 5 |
| 3 | added in PR #493 | UNVERIFIED | `git log`/blame inconclusive; re-dispatch found no link | provenance unconfirmed |
**Safe to act on:** claims 1. **Corrected:** claim 2 → retries 5×. **Open:** claim 3 — provenance unverified.The closing line matters: it tells the reader (and future-you) exactly which claims earned the right to be built on, which were corrected, and which are still hanging. Never end with just the table and let the caller guess.
UNVERIFIED.CONTRADICTED on the wrong specific.VERIFIED.Verify the claims you're about to act on or repeat, in proportion to the cost of being wrong. A claim that decides an edit, a deletion, an API call, or something you'll tell the user deserves a fully-opened source. A passing aside that changes nothing doesn't need a forensic trail — but if you're unsure whether a claim is load-bearing, treat it as if it is. The failure mode this skill exists to prevent is acting on a fluent, confident, wrong report — so when in doubt, open the source.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.