Changelog

Every release, newest first.

v1.0.0 (2026-07-26)

The first one. It works.

Added

The skill. You describe something boring you are about to do repeatedly. It asks you a few questions and writes the loop. It will not build one for a task you are doing once, and it will tell you so rather than politely taking your money, which is easy because it does not take money.

Three files per loop. A checker that exits 0 for pass, 1 for fail, and 2 for "you have set this up wrong." A runner that walks your list, retries failures three times, and parks the stubborn ones. And a plain document explaining what the loop does and what it cannot see, so future you has something to read at 2am.

Four reference docs. How the parts fit together, how to find a check when there is no obvious one, how to actually run the thing, and five patterns worth stealing.

Three templates, so you are not staring at an empty file.

An install script that symlinks it into ~/.claude/skills. One line. It is not a whole thing.

Fixed before anyone else could find them

We wrote a smoke test, pointed it at our own templates, and it immediately made us look bad. Three real bugs, all found before release, all of them the exact category of thing this project exists to catch.

The runner died instantly on a Mac. It used mapfile, which is bash 4 and up. macOS ships bash 3.2 from 2007. So on the most common developer machine in the world, the runner crashed on line 43 before doing a single thing. Great start.

The quarantine file was unreadable. When an item failed three times, the code that recorded why produced broken JSON. So the one file whose entire job is telling you what went wrong could not be opened. Beautiful.

The worst one. If you copied the runner and forgot to fill in the part that does the actual work, it would walk all 200 items, do absolutely nothing to any of them, and print a cheerful summary saying it was done. Every number in that report was true. Nothing happened. This is the single worst bug a loop can have and we shipped it into our own template. It now stops on item one and says so.

Also fixed, at some cost to our dignity

The website had a check that could not fail. There is a rule here that no em dashes are allowed anywhere on this site, enforced by a script that runs on every build. It used grep -P, which is a GNU thing. macOS ships BSD grep, which rejects it. The error was hidden, the failure got flipped into a success, and it printed PASS on every build for days while checking precisely nothing.

Which is, word for word, the thing this entire project is about. It has been rewritten, tested against a deliberately planted em dash, and watched to fail before being trusted again.

And one check that failed too much. A new image check reported 904 broken files. Reading five of them showed they were all SVG logos, which are valid images the check did not know about. Real count: three. If we had believed the 904, we would have cheerfully "fixed" 901 files that were fine.

How versions work

First number for breaking changes, second for features, third for fixes. This is the first release, so it is 1.0.0 and nothing has broken yet. Give it time.

Build a loop