Agents shouldn't grade their own homework.
Jack Shelton
·
August 2026
·
6 min read
You'd give the agent bigger jobs if checking them didn't take longer than doing them. Checking means comparing everything it touched
the list you have against everything it should have touched
the list you don't — and only one of those two lists exists.
Guessless builds the second list. It readsJavaScript andTypeScript the way a compiler does, following every import through to what it actually points at — so a file that renamed it still counts, and an unrelated function with the same name doesn't. What comes back is areceipt: that's all of them
state: complete, that's all but these
state: partial · gaps named, or I can't answer this safely
state: refused.
Install
Requires Node.js 22+.
60 seconds
The question is: where is save actually used? Run the first file — the word appears three times in it, and not one of them is the answer.
Anyone can re-verify a saved receipt byte-for-byte: guessless reproduce bundle.json. Sites are semantic anchors, not line numbers, so citations survive code moving.
When you actually want this
In a 635-file / 161k-line trial, word-boundary grep for one symbol returned an answer where 13.5% of hits were a different same-name binding, indistinguishable without reading every file.
Guessless returned zero of them, named every site it couldn't resolve by its exact import specifier, and did it in ~5 seconds.
{{ fileCopy.body }}
Don't hope the agent double-checks. Gate it with a ~20-line stop-hook. See INTEGRATION.md.
No receipt, no accepted claim. CI verifies it again on the way in.
Grep is still the right search tool; this is not a search tool. Guessless exists for the one sentence grep can't sign.
Query surface
Strings and comments are never structural evidence (run one rg at the end for those). export * hides nothing. The full semantics live in each receipt, not in prose.
Library and MCP
The MCP server (npx -p @guessless/mcp guessless-mcp) gives any MCP harness the question worth asking before a change lands: what breaks if I rename this, delete this, or make this an entry point. The answer is the same receipt, with summary and paged views so a full impact set fits inside an agent's context budget.
How honest is it, really?
Everything above is measured, not estimated. When Guessless gets something wrong, that goes on this page next to what it got right.
- It never pointed at the wrong place. Every location it reported really was a use of that symbol. We checked all of them by hand against a list we had verified ourselves.
- It never missed a place without saying so. When it can't see somewhere, the receipt names that gap instead of quietly dropping it from the results. Getting there meant fixing six distinct classes of bug — one of which our own tests caught partway through. We fixed the defect and re-ran that test unchanged. It passed.
Limitations
refused, not guessed.complete receipt is scoped to the exact snapshot it hashes.