Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/debabsah/fable-method/fable-verifynpx skills add debabsah/fable-method --skill fable-verifygit clone --depth 1 https://github.com/debabsah/fable-methodWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00098 | $0.01238 |
| Opus 5 | $0.00049 | $0.00619 |
| Sonnet 5 | $0.00020 | $0.00248 |
| Haiku 4.5 | $0.00010 | $0.00124 |
Grade A, and why
fable-verify scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 40 lines — stays where its author put it; the contents beside it link to each section on GitHub.
fable-verify
"It ran" is not verification. Evidence before claims, always. Verify at the layer of the claim, not the layer below it.
The gate
Before any success/completion claim or expression of satisfaction:
- Identify the command or observation that would prove this specific claim.
- Run it fresh, in full (not a remembered earlier run; not a partial check).
- Read the whole output — exit code, counts, the actual values.
- Verify at the layer of the claim. Exit 0 / "deploy healthy" / "containers up" only proves the layer below the claim. If the claim is "the output is correct," look at the output. If it's "the page renders," look at the page. If it's "the definitions load," import them in the built artifact and count them.
- Only then state the claim — as ledger lines:
Verified: <claim> — ran <command> -> saw <result>, with anything unchecked underAssumed:orPROVISIONAL. If it fails, state the actual status with the output.
Sharpen it
- Know what pass looks like before you run it: pull the oracle from
.fable/project.md— the command and what green literally prints. Exit 0 with3 skippedis not the pass you meant. - The counting environment is binding: the oracle row's Counts where decides where green counts. Local green on a CI-counted claim stays
PROVISIONALuntil the environment of record agrees — quote it (e.g.gh pr checks). - Discharge residuals — durable write first, delete second: when this evidence settles an entry in
.fable/residuals.md, append its resolution to.fable/claims-log(as aVerified:line if that's what it became), then delete the line fromresiduals.md, then announce it. The order is load-bearing, not stylistic: interrupt it the other way round and you lose the residual and never record the claim — and that lostVerified:is exactly whatfable-debugneeds to falsify against when the behaviour later breaks. A residual is discharged only once its resolution is durable somewhere else. The counters treat any remainingAssumed:/PROVISIONALline as open. - Categorical over enumerated: assert a property over all items of a class, so the check inspects cases you didn't think to list. When it over-fires, diagnose scope vs. substance before loosening it.
- Oracle over the whole population: when reconstructing hidden logic, diff your candidate against a readable known-good output over every row, not a sample; state plainly which parts are transcribed vs. inferred.
- No known-good output? Manufacture the oracle with a metamorphic relation: state how the output must change when the input changes in a known way (add a row → the count rises by one; permute input order → the result is unchanged), then check that property. It turns hidden truth into a runnable check.
- A number derived from data is a claim about the data: before quoting a count, rate, or aggregate as fact, run one independent sanity check — reconcile against a known total, re-derive one row or sample by hand, or check an order-of-magnitude bound — and record the query that produced the number beside it. A figure that fails its sanity check ships as
PROVISIONALor not at all. - Experiential claims get experienced: when the claim is that an artifact renders, reads, or is usable — a page, dashboard, chart, document — the proving observation is entering its modality: open it, screenshot it, click the flow, and record what you literally saw as the
sawhalf of the ledger line. Green tests and zero-must-fix reviews prove the layer below, and the looking step only fires reliably when it is named — so on a project that ships such artifacts repeatedly, mint an experiential oracle row rather than trusting the habit. - Sample the tails: first item, last item, weirdest item — not just the middle.
- Use evidence you didn't generate: re-open the file you wrote, re-run, screenshot and read it, diff before/after, count what you claimed to count.
- Treat good news as suspect: a pass that came too easily is unverified until you can say why it's real. Distinguish "the build succeeded" (rehearsal) from "the thing loaded and ran" (reality).
- Re-check against the original request and any standing rules from scoping.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 40 lines · 98 tokens per session scan A 850254c840eb
fable-verify is a skill published in the GitHub repository debabsah/fable-method (1 stars, last pushed 1mo ago), licensed MIT. It adds 98 tokens to every session and 1,238 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
issue-triage
Issue triage: audit open issues, categorize, detect duplicates, cross-ref PRs, risk assessment, post comments. Args: "all" for deep analysis of all, issue numbers to focus (e.g. "42 57"), "en"/"fr" for language, no arg = audit only in French.
hud
Configure HUD display options (layout, presets, display elements).
moai-ref-ui-polish
UI polish and interface-completion reference: the small visual details — concentric border radius, optical alignment, shadow-vs-border, motion easing, typography smoothing, tabular numbers, icon stroke weight, hit areas — that separate polished interfaces from generic ones. Agent-extending skill that amplifies…
kelos
Author, debug, and operate Kelos resources (Task, Session, Workspace, AgentConfig, TaskSpawner) on Kubernetes. Use for Kelos CRDs, resource manifests, the kelos CLI, or live cluster operations. Do not use for ordinary Kelos repo code edits, tests, reviews, build/CI, or git tasks unless they involve those resources.
trellis-brainstorm
Guides collaborative requirements discovery before implementation. Creates task directory, seeds PRD, asks high-value questions one at a time, researches technical choices, and converges on MVP scope. Use when requirements are unclear, there are multiple valid approaches, or the user describes a new feature or complex…
mulmoterminal-keys
Bind keyboard shortcuts and fix keyboard/clipboard behaviour in MulmoTerminal. Writes keymap, which Settings cannot set at all — its Keyboard shortcuts section is read-only, listing every action bound or not plus a send row. Explains copyOnSelect, questionPaneEnabled and terminalSubmit, which have their own Settings…