August 13, 2026 · 6 min

When Your RSS Reader Gets Cloudflare-Banned: Diagnosing and Hardening a Feed Pipeline Against Bot Detection

The failure looked like nothing. No HTTP 500, no timeout exception, no DNS resolution error — just empty content coming back from a feed that had been working fine. Julia Evans’ blog had been a reliable source in LUMIS’s feed pipeline, and then one day it wasn’t, and the logs gave me almost nothing to work with. That’s the thing about Cloudflare blocking your bot: it doesn’t always slam a door in your face. Sometimes it just stops letting anything through and waits to see if you notice. ...

August 13, 2026 · 7 min

The Atomic INDEX Problem: Why Two-Step Knowledge-Base Writes Are a Reliability Trap

I’ve broken LUMIS’s knowledge base the same way three times now. Each time, the failure looked different on the surface — a session that hit context exhaustion mid-task, a /compact event that truncated the agent’s working memory, a clean session boundary where I just closed the terminal. Underneath, the failure was identical: a research artifact got written, the INDEX didn’t get updated, and the gap was invisible until something downstream tried to find that artifact and couldn’t. ...

August 7, 2026 · 7 min

DSLs as LLM Harnesses: How Constrained Output Languages Eliminate Whole Classes of Agentic Bugs

Last quarter I watched a Claude Code session spend forty minutes debugging a Python script it had generated itself. The script was supposed to walk a directory tree and emit structured metadata for each file it found. The logic was correct in outline — the right algorithm, reasonable variable names, sensible structure. What it kept getting wrong was subtler: a loop counter that was initialized inside the function body but read outside it after early returns, a zip() that silently truncated when the two lists weren’t the same length, a state dictionary that accumulated across calls because it was defined at module scope. Each bug was individually fixable. Together, they represented something more systematic: the failure modes that appear when you ask an LLM to generate multi-step procedural code in a general-purpose language. ...

August 7, 2026 · 7 min

Who Owns Your Second Brain?

When I moved my personal knowledge vault off GitHub, the decision felt almost embarrassingly small — a few configuration changes, a different sync target, maybe an afternoon of work. But the reasoning behind it turned out to be the same reasoning I keep returning to when I look at what the major AI platforms are now calling “memory.” The friction wasn’t technical. It was conceptual. I’d been treating my own thought history like source code: version-controlled, backed up, shareable by default. And that worked fine until I started thinking seriously about what that history actually contains. ...

July 30, 2026 · 6 min

Session-Start Hook Design: Merging Worktree Creation and Context Sweep into a Single Automated Step

I noticed the pattern before I decided to fix it: three separate signals in my own vault, all logged on the same day, all hovering in the 7-8 range, all pointing at the same seam in my session lifecycle. That’s usually how these things surface for me — not as a single “aha” but as a cluster of low-grade friction that finally crosses a threshold where it’s cheaper to fix than to keep tolerating. The seam was the gap between creating a git worktree for a new task and the moment the agent actually has enough context to do anything useful in it. ...