llm-tells
Skill2 starsChanged 56 days agoMITView on GitHub
Use as a final pass before commit or PR, or when text sounds AI-generated. Strips AI tells from code, comments, changelogs.
In this repository20 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- artifact-handoffSkill
- catalogSkill
- changelog-qualitySkill
- change-splittingSkill
- code-structureSkill
- comment-qualitySkill
- evidence-disciplineSkill
- factual-integritySkill
- language-style-samplingSkill
- plan-iteration-gateSkill
- pre-commit-checkSkill
- project-discoverySkill
- repo-hygieneSkill
- self-review-gateSkill
- skill-authoringSkill
- socratic-specSkill
- systematic-debuggingSkill
- upstream-hygieneSkill
The file
Files
LLM Tells — Final Pass
Final-pass checklist for generic repo (derived from kernel-readability but project-agnostic). Run after self-review-gate Gate1 before finishing.
Scope: text your patch adds/changes. Pre-existing prose out of scope — rewriting it inflates diff and collides with later patches touching same lines. Fix in own commit.
Verification — never invent
- Every number/quote/date/perf/hash/claim sourced this session (file, git log/show, cmd output, benchmark, crash dump, public tracker).
- If don't know, TODO — not plausible fill.
- Hashes exist in git log (
git show <hash>) when trailer claimsFixes: <hash>. - Links public and resolve — no private scheme (
file://, local report path). - Scope matches diff stat — no claims about untouched files.
Changelog
- Opens with "This patch …" or fix → rewrite to open with problem/current behavior in present tense.
- Bugfix doesn't lead with real-world symptom (who hits, what breaks / how observed) → add it; race: CPU0/CPU1 ladder or sequence.
- Vague justification ("improves performance", "more efficient") — replace with number + named workload + repro, or concrete reasoning. Don't invent numbers; if none say so.
- Marketing adjectives: robust, powerful, seamless, comprehensive, elegant, gracefully — cut.
- Hedging filler: "Note that", "Importantly", "It's worth noting" — cut, state fact directly.
- Double negative ("not X, not Y") — rewrite as positive condition it describes.
- Recap/"In summary" at end — cut; end on effect or trailer.
- Bulleted lists where prose fits — convert to paras; keep bullets only for genuinely parallel items or pasted data.
- No
Fixes:/Link:/Closes:where warranted by project CONTRIBUTING — add if project uses. - Doesn't say what change does NOT do / limits — add if non-trivial (but phrased positively: "Scope: X, Y. Follow-up: Z" not "This is not ...").
Positive framing — defines by negation (new)
- Tagline / first paragraph / skill description defines by what repo/thing isn't ("kernel-free", "not X", "no Y", "non-Z") → rewrite to what it IS and provides (capability, installable via, outcome). History / exclusion belongs in CONTRIBUTING provenance or docs/references/
<example>.md as worked example, not in README tagline or normative skill description. - Doc contains "This is not ...", "This repo is ...-free" in first 3 paragraphs → fix.
- On fix, link to generic-principles "Positive framing" where rule encoded.
Why: reader via search needs decide in 5 sec what they get. Defining by negation leaks internal history not actionable.
Comments
- Comment restates code ("/* increment counter */") — delete.
- Doc scaffolding on private helper — downgrade to plain WHY or delete; reserve full doc for exported public APIs.
- Doc comment left describing wrong function after helper inserted — still compiles.
- Multi-para essay / numbered "plan" comment — compress to 2-8 line WHY.
- Comment now contradicted by code change — rewrite in same diff.
- Subtle logic (locking, ordering, lifetime, invariant) with NO WHY — add.
- Comment defines by negation only ("Not kernel code") → rewrite to contract.
Code
- Function over ~40 logical lines — 40-line rule; extract intent-named helpers.
- Bare
{ }scoping blocks — declare at function top or helper. - goto-ladder where early returns read better — flatten.
- Drive-by changes mixed with logic change — split separate commit.
- Pre-existing code newly redundant (call turned no-op by new code, branch now unreachable) — remove, don't let comment explain dead step as if required. Check failure paths too: call unreachable on success may be only thing on early exit.
boolhelper action-named (drain,claim,flushreturning bool) — should useshould_/is_/needs_/can_/has_/try_predicate naming.- Missing rollback/cleanup on irreversible step flagged by plan-iteration (c).
Verification cmd
# Generic slop markers (placeholder check — adjust)
rg -n "robust|seamless|comprehensive|elegant" src/ 2>/dev/null | head
# Positive framing quick scan (first 3 paragraphs of docs/)
sed -n '1,10p' README.md | grep -i "not.*\|free\|non-" && echo "REVIEW: defines by negation?" || echo "OK"Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

