<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>TJ Miller</title><description>Developer, Father, Husband, Laravel Astronaut. I craft developer experiences.</description><link>https://tjmiller.me/</link><language>en</language><item><title>Apple Intelligence as a local rewrite engine</title><link>https://tjmiller.me/posts/apple-intelligence-rewrite-engine/</link><guid isPermaLink="true">https://tjmiller.me/posts/apple-intelligence-rewrite-engine/</guid><description>Apple&apos;s on-device model has been great for cleaning up dictation. The honest reason why, and the three places it falls short once you push it past reshaping text.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Where your voice actually goes when you dictate</title><link>https://tjmiller.me/posts/where-your-voice-goes/</link><guid isPermaLink="true">https://tjmiller.me/posts/where-your-voice-goes/</guid><description>Most dictation tools send your voice to a server to turn it into text. Sonari runs the model on your Mac, so the audio never leaves. Why I&apos;m building it that way.</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate></item><item><title>What Swift actors don&apos;t do</title><link>https://tjmiller.me/posts/what-swift-actors-dont-do/</link><guid isPermaLink="true">https://tjmiller.me/posts/what-swift-actors-dont-do/</guid><description>An actor serializes synchronous access, not two calls across a suspension. The transcription race that taught me the difference, and the four-line fix.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Where I&apos;ve Been</title><link>https://tjmiller.me/posts/where-ive-been/</link><guid isPermaLink="true">https://tjmiller.me/posts/where-ive-been/</guid><description>I&apos;ve been gone for four months, and I owe you an explanation. Since May 2025 I&apos;ve been struggling with the hardest mental health crisis of my life, and in February my wife had a catastrophic ankle injury that required me to step back from everything. I&apos;m using Laracon 2026 to come back to Prism and Iris sustainably, with real boundaries this time, because I&apos;m finally ready to show up again.</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Iris Task Delegation and Agent Updates</title><link>https://tjmiller.me/posts/iris-agent-updates/</link><guid isPermaLink="true">https://tjmiller.me/posts/iris-agent-updates/</guid><description>I pulled sub-agent processing out of Horizon and gave it its own daemon. A long-running loop fit better than a queue, and the whole system got simpler.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Let&apos;s Build Something Together</title><link>https://tjmiller.me/posts/lets-build-something-together/</link><guid isPermaLink="true">https://tjmiller.me/posts/lets-build-something-together/</guid><description>Creator of Prism and Iris. 20 years of code, 13 years of Laravel, and a passion for building at the intersection of Laravel and AI. I&apos;m looking for my next adventure</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Truths: The Refinement Update</title><link>https://tjmiller.me/posts/truths-refinement-update/</link><guid isPermaLink="true">https://tjmiller.me/posts/truths-refinement-update/</guid><description>The Iris truth system got a major overhaul. Stricter promotion filters out temporal garbage, conflict detection catches contradictions before they merge into frankentruths, and generation tracking shows how derived each fact is from its original evidence.</description><pubDate>Sat, 31 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Introducing Truths</title><link>https://tjmiller.me/posts/iris-truths/</link><guid isPermaLink="true">https://tjmiller.me/posts/iris-truths/</guid><description>I was updating docs when I realized the tier system was fundamentally flawed. We were using importance as a proxy for universality, and they&apos;re completely different things. This is how Truths fix that.</description><pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Customizing Iris</title><link>https://tjmiller.me/posts/customizing-iris/</link><guid isPermaLink="true">https://tjmiller.me/posts/customizing-iris/</guid><description>Learn how to extend Iris with custom tools and prompts using the local configuration system. We&apos;ll build a weather integration from scratch: an on-demand tool for fetching conditions and a context prompt that automatically injects weather data into every conversation.</description><pubDate>Sun, 25 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Multi-Generational Memory Consolidation</title><link>https://tjmiller.me/posts/multi-generational-memory-consolidation/</link><guid isPermaLink="true">https://tjmiller.me/posts/multi-generational-memory-consolidation/</guid><description>What happens when an AI assistant remembers too much? The same thing that happens to humans: you need to forget intelligently. Here&apos;s how I built multi-generational memory consolidation for Iris</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate></item><item><title>2025 and Beyond 🚀</title><link>https://tjmiller.me/posts/2025-and-beyond/</link><guid isPermaLink="true">https://tjmiller.me/posts/2025-and-beyond/</guid><description>Had a rollercoaster of 2025 but 2026 is exciting. Announcing Iris.</description><pubDate>Sat, 10 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Building Nova - The Foundation</title><link>https://tjmiller.me/posts/building-nova-foundation/</link><guid isPermaLink="true">https://tjmiller.me/posts/building-nova-foundation/</guid><description>Building my life co-pilot and partner. Lets talk about what we&apos;ve built so far, starting with the memory problem.</description><pubDate>Thu, 04 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Sparkle: Streaming with Tools</title><link>https://tjmiller.me/posts/sparkle-streaming-with-tools/</link><guid isPermaLink="true">https://tjmiller.me/posts/sparkle-streaming-with-tools/</guid><description>Streaming agent respones with Sparkle Server and tool usage</description><pubDate>Sat, 17 Aug 2024 00:00:00 GMT</pubDate></item><item><title>Catching up: Sparkle&apos;s Roadmap and Life&apos;s Lemons</title><link>https://tjmiller.me/posts/sparkle-roadmap-life-lemons/</link><guid isPermaLink="true">https://tjmiller.me/posts/sparkle-roadmap-life-lemons/</guid><description>I disappeared for a bit, here&apos;s the background and what&apos;s up with Sparkle.</description><pubDate>Mon, 29 Jul 2024 00:00:00 GMT</pubDate></item><item><title>Building Package Installers</title><link>https://tjmiller.me/posts/building-package-installers/</link><guid isPermaLink="true">https://tjmiller.me/posts/building-package-installers/</guid><description>Building package installers for Laravel and Lumen packages to make it super easy to get up and running.</description><pubDate>Thu, 25 Oct 2018 00:00:00 GMT</pubDate></item><item><title>Verifying Laravel Version Compatibility</title><link>https://tjmiller.me/posts/verifying-laravel-version-compatibility/</link><guid isPermaLink="true">https://tjmiller.me/posts/verifying-laravel-version-compatibility/</guid><description>Verifying Laravel version compatibility with TravisCI for package development.</description><pubDate>Fri, 14 Sep 2018 00:00:00 GMT</pubDate></item><item><title>Abstracting Request Keys</title><link>https://tjmiller.me/posts/abstracting-request-keys/</link><guid isPermaLink="true">https://tjmiller.me/posts/abstracting-request-keys/</guid><description>Abstracting API request/response keys to evolve codebases while upholding contracts.</description><pubDate>Fri, 23 Mar 2018 00:00:00 GMT</pubDate></item><item><title>Sentry Logging in Laravel</title><link>https://tjmiller.me/posts/sentry-logging-in-laravel/</link><guid isPermaLink="true">https://tjmiller.me/posts/sentry-logging-in-laravel/</guid><description>Using Sentry for Laravel application logging.</description><pubDate>Wed, 03 Jan 2018 00:00:00 GMT</pubDate></item><item><title>Linking Vessel Projects Together</title><link>https://tjmiller.me/posts/linking-vessel-projects-together/</link><guid isPermaLink="true">https://tjmiller.me/posts/linking-vessel-projects-together/</guid><description>Vessel is a great project, lets walk through linking multiple Vessel projects together.</description><pubDate>Fri, 22 Dec 2017 00:00:00 GMT</pubDate></item><item><title>Using Middleware to Configure a Service Class</title><link>https://tjmiller.me/posts/using-middleware-to-configure-a-service-class/</link><guid isPermaLink="true">https://tjmiller.me/posts/using-middleware-to-configure-a-service-class/</guid><description>Using HTTP middleware to configure a service class based on the request in Laravel.</description><pubDate>Tue, 19 Dec 2017 00:00:00 GMT</pubDate></item><item><title>Separate Interactive Test Suites</title><link>https://tjmiller.me/posts/separate-interactive-test-suites/</link><guid isPermaLink="true">https://tjmiller.me/posts/separate-interactive-test-suites/</guid><description>Using separate test suites in a Laravel project with PHPUnit.</description><pubDate>Wed, 11 Oct 2017 00:00:00 GMT</pubDate></item><item><title>An Approach to Testing Middleware</title><link>https://tjmiller.me/posts/an-approach-to-middleware-testing/</link><guid isPermaLink="true">https://tjmiller.me/posts/an-approach-to-middleware-testing/</guid><description>How I approach testing middleware in Laravel.</description><pubDate>Tue, 10 Oct 2017 00:00:00 GMT</pubDate></item></channel></rss>