<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Poking things with sticks</title><description>Geoff Goodman writes about software, agents, and the projects that keep getting him nerd sniped.</description><link>https://blog.goodman.dev/</link><item><title>Continuous conversations with bounded context</title><link>https://blog.goodman.dev/blog/continuous-conversations-through-conversation-epochs/</link><guid isPermaLink="true">https://blog.goodman.dev/blog/continuous-conversations-through-conversation-epochs/</guid><description>How a conversation accepts new work and shortens old history without changing the model call already in progress.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The octopus architecture for AI agents</title><link>https://blog.goodman.dev/blog/octopus-agent-architecture/</link><guid isPermaLink="true">https://blog.goodman.dev/blog/octopus-agent-architecture/</guid><description>Why TorkBot uses one foreground conversation and sends slower work to semi-autonomous lanes.</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Building a continuous, durable personal agent</title><link>https://blog.goodman.dev/blog/building-a-continuous-durable-personal-agent/</link><guid isPermaLink="true">https://blog.goodman.dev/blog/building-a-continuous-durable-personal-agent/</guid><description>How I got nerd sniped by continuous personal agents and started building TorkBot.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Cancellation and disposal in modern JavaScript</title><link>https://blog.goodman.dev/blog/cancellation-and-disposal-in-modern-javascript/</link><guid isPermaLink="true">https://blog.goodman.dev/blog/cancellation-and-disposal-in-modern-javascript/</guid><description>Cancellation stops in-flight work; disposal cleans up resources. A pattern for doing both.</description><pubDate>Tue, 21 Nov 2023 00:00:00 GMT</pubDate></item><item><title>Simplifying asynchronous workflows with Context in JavaScript</title><link>https://blog.goodman.dev/blog/simplifying-asynchronous-workflows-with-context-in-javascript/</link><guid isPermaLink="true">https://blog.goodman.dev/blog/simplifying-asynchronous-workflows-with-context-in-javascript/</guid><description>A hierarchical Context interface for cancellation, deadlines, and timeouts in JavaScript.</description><pubDate>Mon, 20 Nov 2023 00:00:00 GMT</pubDate></item><item><title>Building Velcro, part 1: internet-wide npm module resolution</title><link>https://blog.goodman.dev/blog/building-velcro-part-1-internet-wide-npm-module-resolution/</link><guid isPermaLink="true">https://blog.goodman.dev/blog/building-velcro-part-1-internet-wide-npm-module-resolution/</guid><description>Why a browser-based editor needed a module resolver that works in URLs instead of one filesystem.</description><pubDate>Mon, 11 Nov 2019 00:00:00 GMT</pubDate></item><item><title>Custom error categories in ES2015+</title><link>https://blog.goodman.dev/blog/classes-of-errors-in-es2015/</link><guid isPermaLink="true">https://blog.goodman.dev/blog/classes-of-errors-in-es2015/</guid><description>Using Symbol.hasInstance to define error categories without relying on prototypical inheritance.</description><pubDate>Mon, 06 Nov 2017 00:00:00 GMT</pubDate></item></channel></rss>