technical blog
Practical notes from agent systems, local infrastructure, search, memory, and testing.
Ninety minutes to a real tool
Nineteen paintings turned up on this site, made by an agent using a tool that was less than two hours old. imagegen went from first commit to Homebrew tap in seventeen minutes; ProseDown is the same story at seven days.
ai · agents · tools · craft July 2026Taste rules agents can fail
My time-anchor rule turned seven of nine openers into the same sentence. Catching that became kill-list entry 13.
ai · agents · design · testing June 2026Three attempts at an agent
A runaway auto-continue in February, an edge rewrite in April, and the live kernel that finally moved the durable record out of the transcript.
agents · architecture · ai · systems June 2026The report that refused to pick a winner
Two forged benchmark reports about an indexer that doesn't exist make the skeptic pass return ok: false and leave the compiled report incomplete.
ai · agents · research · reliability June 2026Four agent protocols, one spine
Four agent standards arrived inside two years, each with its own idea of a conversation. Fabric projects MCP, ACP, A2A, and AG-UI from one internal protocol, with every official conformance suite green in CI.
protocols · agents · mcp · a2a June 2026mem0 in Rust, byte for byte
Halfway through the port I caught myself editing the 33,653-character prompt I was supposed to copy. A byte-level verifier and 17-scenario parity harness had to pass before the 18.7 us/op benchmark meant anything.
agents · memory · rust · searchTests should try to refute the claim
The agent writes down what observation would prove the claim false, then tries to produce it. About 30 of SKILL.md's 122 lines say what not to report.
May 2026Four processes for one coding agent
In May I promised the README that a crashed session couldn't take the others down. No session had ever crashed; I built for it anyway.
May 2026Local Redis starts at the client
The first command node-redis sent my server was one I never issued: HELLO 3, then probes for capabilities and state. The install-Redis-everywhere tax is why the small Bun process answering it exists.
May 2026A goal file for Claude Code
A Stop hook blocks the turn from ending until the last message carries an exact promise tag. The goal lives in .claude/goals/current.goal.md, open to a text editor and git diff.
April 2026env.DB without a Cloudflare account
Two Workers, four bindings, and one dispatch into a disposable server on my laptop. The KV read returned the real getWithMetadata shape, with no Cloudflare account in the loop.
January 2026The 57-character system prompt
A valid Claude Code OAuth token, correct headers, and an authentication error that was really about one extra newline in the request body.
January 20268,410 places a train can be
Network Rail's feeds speak in STANOX codes. TrainTracker's finished part is the 8,410-row table that turns 87701 into East Croydon through two joins and a datum conversion.
December 2025BM25 before grep
The same query, twice: zero matches in plain mode, then five hits in cli.rs and the names the agent was missing.
December 2025Resolved to GitHub
Flipping 'Exclude Employees' cost one ecosystem more than half of its apparent activity. The dashboard resolves attendee lists to GitHub identities.
December 2025The Goldman/Docker test
The adoption story the whole industry reaches for, and I've used it myself. Goldman adopted Docker bottom-up and wrote a $95M cheque, but nobody has produced the funnel row the story implies.
December 2025Seven agents, fourteen minutes
Seven agents share a fourteen-minute clock; the coordinator's job is stopping the interviewer from asking the same question twice.
June 2023Recommendation math has fingerprints
One WHERE clause bans the hellthread while the follows stream ships unranked. These are the human choices inside a Bluesky custom feed generator.