<?xml version='1.0' encoding='utf-8'?>
<rss xmlns:atom=http://www.w3.org/2005/Atom version=2.0>
  <channel>
<title>Ryan Nelson's Blog</title>
    <link>https://ryan.net/blog/</link>
    <description>Infrastructure archaeology and other constraints</description>
    <language>en-us</language>
    <atom:link href=https://ryan.net/blog/feed.xml rel=self type=application/rss+xml />
    <item>
      <title>Agents at the Bar</title>
      <link>https://ryan.net/blog/2026-06-07-agent-bar.html</link>
      <description>The coding agents take a break and have some beers after work. A story about architecture, discipline, and the Nelson Stack immune system.</description>
      <pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://ryan.net/blog/2026-06-07-agent-bar.html</guid>
    </item>
      <item>
    <title>USENIX '99: That Dinner in Monterey</title>
    <link>http://ryan.net/blog/2026-06-01-usenix-1999-monterey.html</link>
    <guid>http://ryan.net/blog/2026-06-01-usenix-1999-monterey.html</guid>
    <pubDate>Sun, 01 Jun 2026 12:00:00 +0000</pubDate>
    <description>In June 1999 I was at USENIX in Monterey. Linus Torvalds, Jordan Hubbard, Wilfredo Sanchez, Christos Zoulas, and more than twenty others at picnic tables in the afternoon sun. There is no public record of that dinner. This is mine.</description>
  </item>
  <item>
      <title>TIL: Claude Code Hooks Fire at Two Very Different Times</title>
      <link>https://ryan.net/blog/2026-03-30-hook-timing.html</link>
      <description>I had a bunch of Claude Code hooks set up to prevent bad behavior. Four out of five were wired to the wrong event — firing after Claude had already committed to a tool, not before. This also explains why I was swearing at Claude a lot last month.</description>
      <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink=true>https://ryan.net/blog/2026-03-30-hook-timing.html</guid>
    </item>
    <item>
      <title>Ten Whys: 66-Minute Jira Ticket Failure</title>
      <link>https://ryan.net/blog/2026-03-30-ten-whys.html</link>
      <description>A Claude instance took 66 minutes and three user interventions to file one Jira ticket. Here is the post-mortem: five whys on the failure, then five more on the root cause of the root cause. The failure was never about wrong credentials.</description>
      <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink=true>https://ryan.net/blog/2026-03-30-ten-whys.html</guid>
    </item>
    <item>
      <title>Five Whys + AI is a Surprisingly Good Debugging Combination</title>
      <link>https://ryan.net/blog/2026-03-23-five-whys.html</link>
      <description>Toyota developed the five whys in the 1950s. I've been using it with AI lately, and it works better than doing it alone. Here's a real example using a VPN tunnel failure that kept recurring because the real problem was never the IP.</description>
      <pubDate>Sun, 23 Mar 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink=true>https://ryan.net/blog/2026-03-23-five-whys.html</guid>
    </item>
    <item>
      <title>SpaceX Trails Over Venice Beach</title>
      <link>https://ryan.net/blog/2026-02-14-spacex-venice.html</link>
      <description>We're visiting Venice Beach tonight, got a lucky photo of cool SpaceX trails.</description>
      <pubDate>Fri, 14 Feb 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink=true>https://ryan.net/blog/2026-02-14-spacex-venice.html</guid>
    </item>
    <item>
      <title>Intrusion Countermeasures, Recreationally</title>
      <link>https://ryan.net/blog/2026-02-11-icm.html</link>
      <description>There's a line people like to repeat about cyberpunk. William Gibson imagined cyberspace, simstim, decks, the Sprawl. He missed the cell phone, but he got the mood exactly right. The network is alive. It's hostile in a curious way. What's been interesting about running local AI lately is that it feels like play again.</description>
      <pubDate>Tue, 11 Feb 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink=true>https://ryan.net/blog/2026-02-11-icm.html</guid>
    </item>
    <item>
      <title>My AI Agent Has a Kill Switch Now</title>
      <link>https://ryan.net/blog/2026-01-31-killswitch.html</link>
      <description>Like many dotcom Gen-X hipsters this week, I'm playing with OpenClaw - an AI agent in a Slack channel where I'm the only member. I can reach it from my phone. It has shell access to a Linux workstation in my barn. Also terrifying. So I built otp-challenger - TOTP verification for AI agents.</description>
      <pubDate>Fri, 31 Jan 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink=true>https://ryan.net/blog/2026-01-31-killswitch.html</guid>
    </item>
    <item>
      <title>Stealing Fire: Why My New Open Source Tools Borrow from Hackers</title>
      <link>https://ryan.net/blog/2026-01-20-stealing-fire.html</link>
      <description>I came to New York City in 1995. The dotcom explosion was happening. I was working as a sysadmin at an ISP. Here is a statistic that might terrify a modern Hiring Manager: I have never held a job where I did not have root. This is gonzo-sysops. But you learn things when you are five hops deep in a server that is currently on fire.</description>
      <pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink=true>https://ryan.net/blog/2026-01-20-stealing-fire.html</guid>
    </item>
    <item>
      <title>The Desire Path: Teaching 2025 AI to Survive 1990s Infrastructure</title>
      <link>https://ryan.net/blog/2026-01-18-desire-path.html</link>
      <description>There is a specific kind of intellectual satisfaction in building a ship in a bottle. For the last few months, this has been my reality with AI — asking Claude to SSH into jump hosts, launch tmux sessions, and type commands into shells.</description>
      <pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink=true>https://ryan.net/blog/2026-01-18-desire-path.html</guid>
    </item>
  </channel>
</rss>
