<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Felix Geelhaar — Field Notes</title><description>Long-form essays on shipping software with AI agents. Plan-of-record, evidence layers, agent runtimes, and the anti-patterns engineering teams ship when a model is in the loop.</description><link>https://felixgeelhaar.de/</link><language>en</language><item><title>21 patterns I keep seeing in teams shipping with AI coding agents.</title><link>https://felixgeelhaar.de/writing/21-patterns-shipping-with-agents/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/21-patterns-shipping-with-agents/</guid><description>A partial, in-progress list of the recurring dysfunctions, anti-patterns, and quiet wins from teams that ship software with AI coding agents day-to-day. Working notes, not a framework.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate></item><item><title>Deploy is not release. Release is not launch.</title><link>https://felixgeelhaar.de/writing/deploy-release-launch/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/deploy-release-launch/</guid><description>Three different verbs, three different owners, three different days. Decoupling them is the only honest way to ship software in 2026.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate></item><item><title>Cloud coding agents read your repo. Yours doesn&apos;t have to.</title><link>https://felixgeelhaar.de/writing/local-first-coding-agents/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/local-first-coding-agents/</guid><description>Why local-first is the right default for AI coding agents — and what choosing it actually costs.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate></item><item><title>Agents forget two ways. Most memory tools only fix one.</title><link>https://felixgeelhaar.de/writing/plan-and-evidence-two-memories/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/plan-and-evidence-two-memories/</guid><description>Plan-of-record and evidence layer are different primitives, solving different forms of forgetting. Most agent runtimes collapse them into one — or skip both — and pay the cost in the wrong direction.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate></item><item><title>Your AI subscription has a rate limit. Your agent doesn&apos;t know about it.</title><link>https://felixgeelhaar.de/writing/agent-rate-limit-headroom/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/agent-rate-limit-headroom/</guid><description>Flat-rate AI plans hide a cliff. The agent burns through your weekly Claude Max window, gets throttled mid-task, loses an hour of context. The fix isn&apos;t a different model — it&apos;s giving the agent visibility into the cap before it hits.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>Agents forget. The plan should remember.</title><link>https://felixgeelhaar.de/writing/agents-forget-plan-remembers/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/agents-forget-plan-remembers/</guid><description>AI coding agents lose context every session. The work doesn&apos;t. What survives the reset is the plan-of-record — and most teams don&apos;t have one.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>Your AI&apos;s memory is someone else&apos;s database.</title><link>https://felixgeelhaar.de/writing/ai-memory-yours/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/ai-memory-yours/</guid><description>Hosted memory layers and vector DBs hand the user&apos;s preferences, conversation history, and inferred claims to a vendor&apos;s infrastructure. The feature ships; the ownership doesn&apos;t.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>LLM calls broke your resilience playbook. Add these back.</title><link>https://felixgeelhaar.de/writing/llm-resilience-playbook/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/llm-resilience-playbook/</guid><description>Retry, circuit breaker, timeout — the patterns that kept services up for two decades don&apos;t cover the failure modes of services that call LLMs and tools. Here&apos;s what&apos;s missing.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>Three MCP tools in, you&apos;ve started rebuilding Gin. Stop.</title><link>https://felixgeelhaar.de/writing/mcp-server-application/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/mcp-server-application/</guid><description>Hand-rolling MCP servers on raw SDKs means re-solving input decoding, validation, schema generation, errors, middleware, and transports — five times, in five repos, each slightly wrong. The protocol is the easy part.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>Your security scanner can&apos;t see your AI code.</title><link>https://felixgeelhaar.de/writing/security-scanner-ai-blind/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/security-scanner-ai-blind/</guid><description>SAST tools stopped evolving at HTTP request validation. AI features live on top of HTTP, but the failure modes — prompt injection, embedding leakage, agent over-privilege, MCP hardening — happen at the LLM call site, in places traditional scanners don&apos;t look.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>Switch statements are a state machine in denial.</title><link>https://felixgeelhaar.de/writing/statecharts-over-switch/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/statecharts-over-switch/</guid><description>Every team modeling order lifecycles, payment sagas, incident workflows — and now AI agent runtimes — ends up with the same 400-line switch block, three boolean flags, and a Slack channel where the bugs surface. The fix is to make the FSM a first-class artifact.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>The Logger&apos;s Trilemma was a sampling artifact.</title><link>https://felixgeelhaar.de/writing/loggers-trilemma/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/loggers-trilemma/</guid><description>The Logger&apos;s Trilemma says you can have two of speed, developer experience, and observability. The trilemma was a sampling problem; modern slog handlers can ship all three.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate></item><item><title>An agent runtime is five primitives. Most fake at least three.</title><link>https://felixgeelhaar.de/writing/cognitive-stack/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/cognitive-stack/</guid><description>Memory, time perception, commitment tracking, typed action, control plane — the missing infrastructure beneath the model. Most agent frameworks glue substitutes together and call it done.</description><pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate></item><item><title>Every 200-team rollout ends in a Google Sheet. Fix it in Jira.</title><link>https://felixgeelhaar.de/writing/jira-campaign-orchestration/</link><guid isPermaLink="true">https://felixgeelhaar.de/writing/jira-campaign-orchestration/</guid><description>Security patches, migrations, compliance audits — large-scale initiatives are fan-out problems Jira&apos;s defaults don&apos;t solve. Teams reach for spreadsheets and lose every benefit of the workflow they left.</description><pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate></item></channel></rss>