// writing

Blog

The EQ was right, the phone moved: debugging a 5 dB gap in room correction

RoomEQ predicted its EQ would cut the error to 1.8 dB, then measured 6.8 dB. Four sweeps without moving the phone found the real cause, and changed how auto-tune compares before and after.

October 3, 2026 7 min read
pythondspmacos

Building an agentic pipeline that turns Figma designs into email-safe HTML

Why generating HTML email markup is a genuinely different problem from generating a web page, and how a four-stage pipeline with chained AI calls handles it.

September 11, 2026 4 min read
aitypescriptfigma

Streaming a real terminal to a phone: e2b-mobile's WebSocket architecture

Why a phone terminal needs a real PTY and a real ANSI emulator on both ends of the wire, not just a text box that appends strings.

September 8, 2026 4 min read
mobiletypescriptwebsockets

Two-stage contradiction detection: why one embedding threshold isn't enough for agent memory

Real numbers from skull's memory system show why a single cosine-similarity cutoff can't safely tell 'the user changed their mind' from 'the user mentioned something related' — or from the wrong fact entirely.

August 30, 2026 5 min read
aipythonembeddings

Building a self-extending AI agent: how skull's skill system works

A terminal AI agent that writes its own tools at runtime — versioned, sandboxed by static analysis, and composable — and the failure modes that shaped each piece.

August 29, 2026 5 min read
aipythonagents

How tree-llm detects and breaks infinite tool-call loops

A path-based signature scheme for catching an LLM agent stuck calling the same tool with the same arguments, without blocking legitimate repeats in other branches.

May 26, 2026 4 min read
aitypescriptagents

A door that only opens once: nonces, TTLs, and acks over MQTT

How an unlock request from a phone becomes an actual relay click on an ESP32, and what stops a replayed MQTT message from opening the door twice.

April 30, 2026 4 min read
iotmqtttypescript