Writing
7 TOTAL · REVERSE CHRONOLOGICAL · FEED.XML
001
2026.10.15
The Smallest Eval Harness

After chucking the first version of the eval harness for Zoltar, I started over with a minimal version that I could easily understand. I've learned that an LLM judge can tell me if a pass rate improved, but it can't yet tell me if the pass rate is good enough.

8m
002
2026.10.07
When Vibe Coding Goes Bad

I didn't realize I was vibe-coding my project until I tried to write an article about its testing infrastructure and couldn't. The solution turns out to be writing documentation by and for humans.

10m
003
2026.09.03
Exporting Claude Code transcripts

Claude Code logs every session locally in an undocumented JSONL format. I wrote cctx to turn those logs into markdown transcripts you can commit and review alongside the code, so the reasoning behind a decision is preserved and not just its outcome.

6m
004
2026.06.15
Why Legal AI Keeps Fabricating Citations

You can't stop an AI feature from hallucinating, but you can keep nonconforming data out of production documents by storing state in an authoritative database, structuring updates with tool-calls, and validating data before it reaches the database.

4m
005
2026.06.04
The Correct Number of Retries is One

Building a reliable system around an LLM means dealing with its weird failure modes. The conventional wisdom on retries doesn't fit — a second failure isn't a model problem. It's a signal that the validator, prompt, or schema needs work.

9m
006
2026.05.14
FTS Is The Workhorse: Four queries against a personal conversation archive

When searching a body of text, the default reflex is to reach for a hybrid search that combines full-text search (FTS) with semantic searches. On a personal corpus, hybrid search consistently underperforms one of its components; FTS is usually but not always the right default.

12m
007
2026.04.29
Your Agent's Context Window Is State, Not Input

When you include the complete message history in the context window, the model will treat it as implicit state, and implicit state drifts. Instead, aggressively prune the message history and provide the model with an authoritative state.

6m