The model that wouldn't be forced
My structured output worked by forcing Claude to call a tool that didn't exist. Opus 5.5 stopped playing along, and the fix was to stop doing the trick.


My structured output worked by forcing Claude to call a tool that didn't exist. Opus 5.5 stopped playing along, and the fix was to stop doing the trick.

Accuracy came second when I picked models for krites. The licence file got there first, and one of those models is still in my lockfile with no licence at all...

Twenty agent sessions, one GitLab account on the Free plan and a rate limit that kept tripping. The swarm was the obvious suspect, right up until I traced it.

Forty-two comments telling a checker to stand down. I went through them one at a time to see what each was actually asserting, and some of them were wrong.

How big is a tool that does nothing? For go-tool-base it was 81 MB, and a comment in the code said it shouldn't have been.

I wrote my own OpenPGP packet code, then deleted the lot to prove I needed it. The reason I'd given turned out to be nonsense, and there was a better one waiting for me.

The busiest AI crawler on this blog nearly doubled in a month. Most of that wasn't the crawler at all, it was something hunting for .env files wearing its name.

Everything on AWS here runs on credentials that last minutes. Cloudflare I'd been clicking by hand, and bringing it in meant living with a long-lived secret and making it as small as I could.

A commit landed a month before I noticed it. By the time somebody told me, two of my own tools had already written workarounds for it without mentioning it.

I ran one job past three AI providers and had them vote. The voting was the easy part. Deciding what counted as agreement was not.
