Repository navigation
v0.13.0
Your repository has been writing to your model's context window this whole time, and nobody has been reading the bill. π§Ύ
v0.13.0 adds two sweeps that read it for you β and they start by counting, not by guessing.
π /dobby:trim-context β find out what your comments actually cost
Point it at a repository and the first thing it does is boring on purpose: it enumerates every tracked file and parses the comments out of them with real grammars. No regex, no vibes. On one production app that census came back with 24,113 comments across 1.83 MB β roughly 434,000 tokens sitting in code that every agent reads past on its way to the actual logic.
Only after that does any judgment happen. The skill proposes what to cut, in cost order, and waits for you: text that restates what the code plainly says goes, and the load-bearing stuff stays. Shebangs stay. biome-ignore directives stay. The comment explaining why you round half-up because the tax authority rejects banker's rounding β that one stays, because deleting it is how someone reintroduces the bug in eight months. Generated files are never touched at all.
It owns comments exclusively. No other sweep in the kit will go near them.
βοΈ /dobby:anti-slop β the voice pass, judged in context
The other sweep asks a different question: does this prose fabricate significance? Throat-clearing openers, the "it's not just X β it's Y" reversal that distinguishes nothing, bold bullet triads that define each term with itself.
It judges contextually and in any language, and that word is doing real work. Measuring this very repository is what settled the design: leverage and harness sit on every banned-word list on the internet, and both are domain terms in our own glossary. A skill that banned words by occurrence would have started its career by mangling the architecture vocabulary. So it doesn't ban anything β every finding names the pattern, quotes the exact text, and offers the smallest fix that works. It never claims a human or a model wrote something, and it never touches code comments.
Its taxonomy adapts Peter Yang's no-ai-slop, MIT attribution intact.
π Both sweeps remember what they already read
Coverage lives in a tracked .dobby/sweeps.json, keyed per file and per skill, hashed against exact final bytes. Your first run is a full sweep; every run after that only looks at what actually changed. Neither sweep can certify the other's work.
Everything is approval-gated, written by disjoint workers, and independently reviewed before any coverage is recorded. No new CLI command, config key, check, hook, or gate β these are inference, not enforcement, and your quality gate stays exactly as mechanical as it was.
π What the smoke tests caught
Both skills were driven end to end against throwaway fixtures before shipping, and that found two things static review had waved through. The ledger would never have become tracked in any real consumer, because .dobby/ is ignored β every run would have redone the full sweep, forever. And the two skills had incompatible ledger shapes, so whichever wrote second would have made the first fail closed. Both fixed here. The external reviewer then caught a third: an unbounded worker fan-out that could blow past the concurrency cap. Also fixed.
Worth saying plainly, because it's the useful part: none of these were found by reading the diff.
β οΈ One honest limitation
The bundled SQL grammar can't parse Postgres RLS or ACL statements, and Tree-sitter's error recovery poisons the whole file when it trips β so on a Supabase-style migrations directory, expect a large chunk of .sql to come back uncounted (43 of 58 files in the repo we measured). We evaluated the alternative grammar and rejected it: no WASM prebuild, identical failures when compiled by hand, and a lost provenance chain.
It's declared in the contract, in PROVENANCE.md, and in the extractor's own output. Coverage fails closed rather than pretending.
π¦ Upgrade
bun update @kvnwolf/dobbyNothing is required of you β both skills are opt-in and user-invoked. When you want both, run /dobby:trim-context first, then /dobby:anti-slop. And be ready for the first sweep of a mature repository to propose more than you expect. That's the point.