<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Craig Midwinter — Blog</title>
        <link>https://midwinter.io/blog</link>
        <description>Notes on making computers do the work: AI development workflows lately, and before that, the years I wired up my house. Home Assistant, Hue, agent pipelines, and one voice actor who reads my cat&apos;s litter box.</description>
        <language>en</language>
        <atom:link href="https://midwinter.io/feed.xml" rel="self" type="application/rss+xml"/>
        <lastBuildDate>Fri, 14 Aug 2026 12:00:00 GMT</lastBuildDate>
        <item>
            <title>Putting the pit crew loop to the test</title>
            <link>https://midwinter.io/blog/2026-08-putting-the-pit-crew-loop-to-the-test</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-08-putting-the-pit-crew-loop-to-the-test</guid>
            <pubDate>Fri, 14 Aug 2026 12:00:00 GMT</pubDate>
            <description>A couple of weeks ago I wrote about the pit crew loop -- my name for a gauntlet loop with a third role that does nothing but build instruments. Coining a loop is free. Knowing whether it buys anything costs about a million tokens per arm, and that&apos;s the bill this post pays.</description>
        </item>
        <item>
            <title>I put my own pipeline on rails and it ate my week</title>
            <link>https://midwinter.io/blog/2026-08-rails-ate-my-week</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-08-rails-ate-my-week</guid>
            <pubDate>Tue, 11 Aug 2026 12:00:00 GMT</pubDate>
            <description>My Claude subscription has a weekly usage meter, and I&apos;d stopped checking it, because two full days of heavy agent experiments had barely moved it. Two arms of my Rainbow Road head-to-head, roughly 1.75 million output tokens of kart racer between them, and the meter sat in single digits. Then I ran…</description>
        </item>
        <item>
            <title>220 assertions and a thumb</title>
            <link>https://midwinter.io/blog/2026-08-220-assertions-and-a-thumb</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-08-220-assertions-and-a-thumb</guid>
            <pubDate>Fri, 07 Aug 2026 12:00:00 GMT</pubDate>
            <description>I trust a green test suite the way I trust a firm handshake, and this week that finally embarrassed me in a way I can time with a stopwatch.</description>
        </item>
        <item>
            <title>The gauntlet loop needs a pit crew</title>
            <link>https://midwinter.io/blog/2026-08-the-gauntlet-loop-needs-a-pit-crew</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-08-the-gauntlet-loop-needs-a-pit-crew</guid>
            <pubDate>Mon, 03 Aug 2026 18:30:00 GMT</pubDate>
            <description>I&apos;ve been running a lot of gauntlet loops lately. If you haven&apos;t met the pattern, it&apos;s Matt Shumer&apos;s coinage-- his own write-up is the source to read, and Claude of Duty is the demonstration that made it famous: a Call of Duty-style FPS in Three.js, built from a single published prompt. The shape…</description>
        </item>
        <item>
            <title>Don&apos;t give the agent your inbox, give it a mail slot – mail-muncher</title>
            <link>https://midwinter.io/blog/2026-08-do-not-give-the-agent-your-inbox-mail-muncher</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-08-do-not-give-the-agent-your-inbox-mail-muncher</guid>
            <pubDate>Sat, 01 Aug 2026 20:45:00 GMT</pubDate>
            <description>I build a lot of tiny tools for tedious workflows. Population: one user, me. The reigning example is the booking pipeline for the podcast: every invitation lives in its own little directory with a status-- prospect, invited, confirmed, scheduled, recorded-- a tracker file shows where everyone…</description>
        </item>
        <item>
            <title>No draft, no commit – katra, the dev log my agents have to keep</title>
            <link>https://midwinter.io/blog/2026-07-no-draft-no-commit-katra-the-dev-log-my-agents-have-to-keep</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-07-no-draft-no-commit-katra-the-dev-log-my-agents-have-to-keep</guid>
            <pubDate>Thu, 16 Jul 2026 21:20:00 GMT</pubDate>
            <description>2026-08 Update: Katra is now open source: github.com/craigjmidwinter/katra. Written up from the katra entries and drafts of the time, published in the August relaunch-- anything that happened after July 16 is marked as a dated aside, because a post about honest records shouldn&apos;t quietly backdate…</description>
        </item>
        <item>
            <title>Cut a seam – what I do when the agent stops reading the manual</title>
            <link>https://midwinter.io/blog/2026-07-cut-a-seam-when-the-agent-stops-reading-the-manual</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-07-cut-a-seam-when-the-agent-stops-reading-the-manual</guid>
            <pubDate>Mon, 13 Jul 2026 20:50:00 GMT</pubDate>
            <description>2026-08 Update: Katra is now open source: github.com/craigjmidwinter/katra. Written up from the katra entries and drafts of the time, published in the August relaunch-- anything I learned after the fact is marked as a dated aside.</description>
        </item>
        <item>
            <title>Chat history is where context goes to die – my agents keep a dev blog now</title>
            <link>https://midwinter.io/blog/2026-06-chat-history-is-where-context-goes-to-die-my-agents-keep-a-dev-blog-now</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-06-chat-history-is-where-context-goes-to-die-my-agents-keep-a-dev-blog-now</guid>
            <pubDate>Fri, 05 Jun 2026 21:10:00 GMT</pubDate>
            <description>2026-08 Update: The little CLI in this post grew up, got renamed katra, and is now open source: github.com/craigjmidwinter/katra.</description>
        </item>
        <item>
            <title>Two models have to agree before anything ships – quorum review in Ripline</title>
            <link>https://midwinter.io/blog/2026-05-two-models-have-to-agree-before-anything-ships-quorum-review-in-ripline</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-05-two-models-have-to-agree-before-anything-ships-quorum-review-in-ripline</guid>
            <pubDate>Tue, 12 May 2026 22:05:00 GMT</pubDate>
            <description>I once asked a model to review a plan that the same model had written twenty minutes earlier. It had notes! Minor ones. Overall it found the plan thoughtful and well-structured, which, yes, of course it did-- I had essentially asked a guy to grade his own homework, and the guy is famously agreeable.</description>
        </item>
        <item>
            <title>Inverting the harness – who runs whom, Ripline and Claude Code edition</title>
            <link>https://midwinter.io/blog/2026-03-inverting-the-harness-who-runs-whom-in-ripline</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-03-inverting-the-harness-who-runs-whom-in-ripline</guid>
            <pubDate>Sun, 29 Mar 2026 20:15:00 GMT</pubDate>
            <description>Most days I live inside Claude Code. I type a thing, the agent reads files, runs commands, does the work, and I supervise like a foreman who&apos;s mostly there for moral support. In that arrangement the agent is the harness-- it&apos;s in charge of the loop, and everything else (the shell, the repo, me) is…</description>
        </item>
        <item>
            <title>Adding bureaucracy and red tape to my agents – structured artifacts and node contracts in Ripline</title>
            <link>https://midwinter.io/blog/2026-03-adding-bureaucracy-and-red-tape-to-my-agents-structured-artifacts-in-ripline</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2026-03-adding-bureaucracy-and-red-tape-to-my-agents-structured-artifacts-in-ripline</guid>
            <pubDate>Sun, 15 Mar 2026 21:40:00 GMT</pubDate>
            <description>I have a bad habit of kicking off multi-step agent runs and walking away. There&apos;s something great about coming back to finished work-- and something uniquely deflating about coming back to four completed pipeline steps that all ran perfectly on top of garbage produced in step one.</description>
        </item>
        <item>
            <title>Smart Home vs. Home Automation – What’s the difference?</title>
            <link>https://midwinter.io/blog/2018-07-smart-home-vs-home-automation-whats-the-difference</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2018-07-smart-home-vs-home-automation-whats-the-difference</guid>
            <pubDate>Thu, 05 Jul 2018 00:11:00 GMT</pubDate>
            <description>Whether you’re researching smart bulbs or exploring the capabilities of your new voice assistant, you’ve probably encountered the terms Smart Home and Home Automation, and you’ve got yourself wondering, is there a difference?</description>
        </item>
        <item>
            <title>I hired a dude who voices Nike commercials to tell me when my cat litter is full</title>
            <link>https://midwinter.io/blog/2018-06-i-hired-a-dude-who-voices-nike-commercials-to-tell-me-when-my-cat-litter-is-full</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2018-06-i-hired-a-dude-who-voices-nike-commercials-to-tell-me-when-my-cat-litter-is-full</guid>
            <pubDate>Wed, 04 Jul 2018 00:00:00 GMT</pubDate>
            <description>So, recently I decided to step my game up with my audio notifications for my home automation setup. I’m in the process of slowly redoing some of my YAML automations in Node-RED, and I thought what better of a time to make some improvements.</description>
        </item>
        <item>
            <title>Automatic Litterbox Notifications – Using an Home Assistant and Node Red with an external REST API</title>
            <link>https://midwinter.io/blog/2018-06-automatic-litterbox-notifications-using-an-home-assistant-and-node-red-with-an-external-rest-api</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2018-06-automatic-litterbox-notifications-using-an-home-assistant-and-node-red-with-an-external-rest-api</guid>
            <pubDate>Sun, 24 Jun 2018 00:03:00 GMT</pubDate>
            <description>Cleaning the cat litter– it’s the job the whole household fights over. Nothing is quite as glamourous as scooping shit out of a box in a dark corner of the basement.</description>
        </item>
        <item>
            <title>Making my dumb bed, smart – Home Assistant Bed Occupancy Sensor</title>
            <link>https://midwinter.io/blog/2018-05-making-my-dumb-bed-smart-home-assistant-bed-occupancy-sensor</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2018-05-making-my-dumb-bed-smart-home-assistant-bed-occupancy-sensor</guid>
            <pubDate>Sun, 20 May 2018 23:43:00 GMT</pubDate>
            <description>I’ll try not to be as long-winded as I usually am, but I’m pretty proud of the bed sensor I built. Here’s a video of it working in Home Assistant:</description>
        </item>
        <item>
            <title>Smart Garbage! – Pattern for deferring service calls in Home Assistant</title>
            <link>https://midwinter.io/blog/2018-05-smart-garbage-pt-1-pattern-for-deferring-service-calls-in-home-assistant</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2018-05-smart-garbage-pt-1-pattern-for-deferring-service-calls-in-home-assistant</guid>
            <pubDate>Wed, 16 May 2018 23:27:00 GMT</pubDate>
            <description>Garbage day is the same day every week, but somehow I haven’t developed a steady routine surrounding it. Our garbage is picked up out front, but the main way we enter and leave the house is through the back door. As a result, I’ve got a bad habit of forgetting to put out the garbage and recycling…</description>
        </item>
        <item>
            <title>Telegram keyboard and callbacks in Home Assistant with Node-RED</title>
            <link>https://midwinter.io/blog/2018-05-telegram-keyboard-and-callbacks-in-home-assistant-with-node-red</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2018-05-telegram-keyboard-and-callbacks-in-home-assistant-with-node-red</guid>
            <pubDate>Thu, 10 May 2018 22:56:00 GMT</pubDate>
            <description>Last week I made this blog post describing how to use the Telegram inline keyboard and callback functions within Home Assistant. I posted the article to Reddit and a user left a comment wondering how to accomplish this within Node-RED, so I thought I’d make a quick post on how to do that.</description>
        </item>
        <item>
            <title>The simple guide to Telegram&apos;s custom inline keyboard</title>
            <link>https://midwinter.io/blog/2018-05-the-simple-guide-to-creating-actionable-notifications-in-home-assistant-using-telegrams-custom-inline-keyboard-and-telegram_callbacks</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2018-05-the-simple-guide-to-creating-actionable-notifications-in-home-assistant-using-telegrams-custom-inline-keyboard-and-telegram_callbacks</guid>
            <pubDate>Fri, 04 May 2018 22:27:00 GMT</pubDate>
            <description>Note: If you&apos;d like to see how this is implemented with Node-RED instead, check this post.</description>
        </item>
        <item>
            <title>My house automatically orders pizza for me – Dominos Pizza automation using Home Assistant.</title>
            <link>https://midwinter.io/blog/2017-11-my-house-automatically-orders-pizza-for-me-dominos-pizza-automation-using-home-assistant</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2017-11-my-house-automatically-orders-pizza-for-me-dominos-pizza-automation-using-home-assistant</guid>
            <pubDate>Fri, 04 May 2018 22:17:00 GMT</pubDate>
            <description>Note: If you were linked here to see my telegram keyboard/callback implementation, I&apos;ve got a more complete example here</description>
        </item>
        <item>
            <title>NHL goal light celebration with Home Assistant and Philips Hue</title>
            <link>https://midwinter.io/blog/2018-02-nhl-goal-light-celebration-with-home-assistant-and-philips-hue</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2018-02-nhl-goal-light-celebration-with-home-assistant-and-philips-hue</guid>
            <pubDate>Sun, 11 Feb 2018 22:02:00 GMT</pubDate>
            <description>2025 Update: The Goalfeed integration is now a free addon instead of a component with a paid subscription. Everything else in this guide should still be relevant though. See Goalfeed Hassio Addon</description>
        </item>
        <item>
            <title>Night-time reading with KoReader and Philips Hue</title>
            <link>https://midwinter.io/blog/2017-12-my-nighttime-reading-setup-using-philips-hue-and-koreader</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2017-12-my-nighttime-reading-setup-using-philips-hue-and-koreader</guid>
            <pubDate>Fri, 19 Jan 2018 21:14:00 GMT</pubDate>
            <description>Just wanted to quickly post about my new night-time reading set-up since I’m pretty happy with it, so far. I hesitate to call this a scene, because when I think of a scene in the home automation context, I think of several entities getting set to a state by a single action trigger, and by that…</description>
        </item>
        <item>
            <title>Using Home Assistant and Philips Hue to create a full colour sunrise</title>
            <link>https://midwinter.io/blog/2017-12-using-home-assistant-and-philips-hue-to-create-a-full-colour-sunrise-alarm-clock</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2017-12-using-home-assistant-and-philips-hue-to-create-a-full-colour-sunrise-alarm-clock</guid>
            <pubDate>Wed, 06 Dec 2017 21:58:00 GMT</pubDate>
            <description>This is a new automation in my set-up, but it’s one I’m pretty happy with, not only because I think it’s a pretty cool effect, but for me, it’s actually a real money-saver.</description>
        </item>
        <item>
            <title>Quick Tip: Controlling Colour of Groups of Philips Hue Lights in Home Assistant</title>
            <link>https://midwinter.io/blog/2017-11-quick-tip-controlling-colour-of-groups-of-philips-hue-lights-in-home-assistant</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2017-11-quick-tip-controlling-colour-of-groups-of-philips-hue-lights-in-home-assistant</guid>
            <pubDate>Tue, 28 Nov 2017 22:12:00 GMT</pubDate>
            <description>Just a quick little tip for anybody using Philips Hue and Home Assistant--</description>
        </item>
        <item>
            <title>Philips Hue and Tasker – Use your lights as a notification for Text Messages</title>
            <link>https://midwinter.io/blog/2017-11-philips-hue-and-tasker-use-your-lights-as-a-notification-for-text-messages</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2017-11-philips-hue-and-tasker-use-your-lights-as-a-notification-for-text-messages</guid>
            <pubDate>Sun, 19 Nov 2017 22:57:00 GMT</pubDate>
            <description>A couple years ago, back when I first bought my Philips Hue lights, I posted this video of me using my lights as a notification for incoming text messages.</description>
        </item>
        <item>
            <title>Using the Xiaomi Mi Flora and Home Assistant for Twitter enabled plants</title>
            <link>https://midwinter.io/blog/2017-08-using-the-xiaomi-mi-flora-and-home-assistant-for-twitter-enabled-plants</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2017-08-using-the-xiaomi-mi-flora-and-home-assistant-for-twitter-enabled-plants</guid>
            <pubDate>Sun, 19 Nov 2017 21:34:00 GMT</pubDate>
            <description>2025 Update: The Mi Flora integration appears to be replaced by the Xiaomi BLE component. I haven&apos;t used it yet, but the same logic/process should apply</description>
        </item>
        <item>
            <title>Insteon SwitchLinc 2-wire Dimmer Review</title>
            <link>https://midwinter.io/blog/2017-07-insteon-switchlinc-2-wire-dimmer-review</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2017-07-insteon-switchlinc-2-wire-dimmer-review</guid>
            <pubDate>Wed, 09 Aug 2017 23:10:00 GMT</pubDate>
            <description>I&apos;ve got an old house with old electrical, and when it comes to smart lighting, the lack of common/neutral wire is a bit limiting. Luckily, Insteon makes these wicked little 2-wire dimmers that work in any traditional 2-wire box. I&apos;ve got 5 of these suckers in my house, and I can&apos;t say enough about…</description>
        </item>
        <item>
            <title>True MPD Jukebox using Raspberry Pi</title>
            <link>https://midwinter.io/blog/2017-07-raspberry-pi-jukebox</link>
            <guid isPermaLink="true">https://midwinter.io/blog/2017-07-raspberry-pi-jukebox</guid>
            <pubDate>Wed, 09 Aug 2017 21:28:00 GMT</pubDate>
            <description>Since my fiancée, Jess, and I are getting hitched in a few months, we&apos;ve obviously been in the midst of wedding planning (prior to starting work on this game). When discussing our options for music, we thought that the money we could spend on hiring a DJ could be better spent elsewhere. Initially…</description>
        </item>
    </channel>
</rss>
