<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Building Vodou in Public</title><description>Debugging notes, dead ends, and measurements from building Vodou: an AI operating system with local memory and MCP orchestration.</description><link>https://blog.vodou.ai/</link><language>en-us</language><item><title>Your Agent&apos;s Memory Has No Idea Where It Was</title><link>https://blog.vodou.ai/page-axis-agent-memory/</link><guid isPermaLink="true">https://blog.vodou.ai/page-axis-agent-memory/</guid><description>Agent memory stores what was said and drops where it happened. Adding a page axis to a memory store took four live-only defects and a per-site permission model.</description><pubDate>Wed, 26 Aug 2026 17:19:46 GMT</pubDate><category>ai-agents</category><category>memory</category><category>retrieval</category><category>architecture</category><category>browser</category><author>Chad Priest</author></item><item><title>Your retired button is still mounted, still handling clicks</title><link>https://blog.vodou.ai/your-retired-button-is-still-mounted-still-handling-clicks/</link><guid isPermaLink="true">https://blog.vodou.ai/your-retired-button-is-still-mounted-still-handling-clicks/</guid><description>A refactor left an old injected control alive in the page. It called the retired handler, threw no error, and looked exactly like the button that replaced it.</description><pubDate>Wed, 26 Aug 2026 17:01:57 GMT</pubDate><category>javascript</category><category>chrome</category><category>debugging</category><category>webdev</category><author>Chad Priest</author></item><item><title>Your agent&apos;s approval gate is probably just a warning label</title><link>https://blog.vodou.ai/agent-approval-gates-that-actually-stop/</link><guid isPermaLink="true">https://blog.vodou.ai/agent-approval-gates-that-actually-stop/</guid><description>We shipped plan cards, real parallel tool calls and an approval gate for an MCP agent. The gate was decoration for two days, and the fan was never parallel.</description><pubDate>Wed, 26 Aug 2026 10:09:10 GMT</pubDate><category>ai-agents</category><category>mcp</category><category>orchestration</category><category>architecture</category><category>observability</category><author>Chad Priest</author></item><item><title>A silent failure looks exactly like a feature you never built</title><link>https://blog.vodou.ai/silent-failures-in-agent-surfaces/</link><guid isPermaLink="true">https://blog.vodou.ai/silent-failures-in-agent-surfaces/</guid><description>Shipping an agent surface into 22 chat sites we don&apos;t own: the Chrome gesture that doesn&apos;t survive an await, and three builds all claiming one version number.</description><pubDate>Wed, 26 Aug 2026 10:03:50 GMT</pubDate><category>ai-agents</category><category>observability</category><category>architecture</category><category>browser-extensions</category><category>memory</category><author>Chad Priest</author></item><item><title>Every copy of the rule agreed. That was the bug.</title><link>https://blog.vodou.ai/vocabulary-drift-in-agent-systems/</link><guid isPermaLink="true">https://blog.vodou.ai/vocabulary-drift-in-agent-systems/</guid><description>Four surfaces minted the same token four different ways, and all four agreed. How we found the drift, why the tests couldn&apos;t see it, and the guard that now can.</description><pubDate>Wed, 26 Aug 2026 09:59:36 GMT</pubDate><category>ai-agents</category><category>architecture</category><category>observability</category><category>mcp</category><category>llm</category><author>Chad Priest</author></item><item><title>Your isolated test lab isn&apos;t isolated: 3 rows, 8 daemons</title><link>https://blog.vodou.ai/your-isolated-test-lab-isnt-isolated/</link><guid isPermaLink="true">https://blog.vodou.ai/your-isolated-test-lab-isnt-isolated/</guid><description>My failure-injection harness wrote to the live database, health-checked a stranger&apos;s process, and leaked 8 daemons. Three bugs in the test, none in the code.</description><pubDate>Wed, 26 Aug 2026 09:27:05 GMT</pubDate><category>testing</category><category>debugging</category><category>sqlite</category><category>devops</category><author>Chad Priest</author></item><item><title>Node execFile was 2.7x slower: the spawn cost nothing</title><link>https://blog.vodou.ai/node-execfile-was-2-7x-slower-the-spawn-cost-nothing/</link><guid isPermaLink="true">https://blog.vodou.ai/node-execfile-was-2-7x-slower-the-spawn-cost-nothing/</guid><description>Two implementations of the same memory lookup, one over a Unix socket and one shelling out to a CLI. I blamed the subprocess. The timing block said otherwise.</description><pubDate>Wed, 26 Aug 2026 08:44:29 GMT</pubDate><category>node</category><category>performance</category><category>debugging</category><category>mcp</category><author>Chad Priest</author></item><item><title>Why My LLM Agent Fabricated Numbers From Stale Context</title><link>https://blog.vodou.ai/why-my-llm-agent-fabricated-numbers-from-stale-context/</link><guid isPermaLink="true">https://blog.vodou.ai/why-my-llm-agent-fabricated-numbers-from-stale-context/</guid><description>An agent replayed a ten-minute-old CPU reading as live. The bug wasn&apos;t the model: a guard checked whether cached tool output existed, not whether it was fresh.</description><pubDate>Wed, 26 Aug 2026 07:49:27 GMT</pubDate><category>typescript</category><category>llm</category><category>debugging</category><category>caching</category><author>Chad Priest</author></item><item><title>cached_tokens is 0 because your system prompt isn&apos;t stable</title><link>https://blog.vodou.ai/cached-tokens-is-0-because-your-system-prompt-isnt-stable/</link><guid isPermaLink="true">https://blog.vodou.ai/cached-tokens-is-0-because-your-system-prompt-isnt-stable/</guid><description>Our provider reported cached_tokens 0 of ~16K prompt tokens every turn. The cause: per-turn memory glued into the system prompt. Freeze the prefix instead.</description><pubDate>Wed, 26 Aug 2026 07:48:02 GMT</pubDate><category>llm</category><category>caching</category><category>typescript</category><category>debugging</category><author>Chad Priest</author></item><item><title>SQLite FTS5 quietly ANDs your search terms</title><link>https://blog.vodou.ai/sqlite-fts5-ands-your-search-terms/</link><guid isPermaLink="true">https://blog.vodou.ai/sqlite-fts5-ands-your-search-terms/</guid><description>Our search box returned zero results for any sentence longer than four words. The bug wasn&apos;t ranking or embeddings: it was one space in a join() call.</description><pubDate>Wed, 26 Aug 2026 07:45:27 GMT</pubDate><category>sqlite</category><category>search</category><category>debugging</category><category>javascript</category><author>Chad Priest</author></item></channel></rss>