<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Open-Source on Evan Coleman</title><link>https://edc.me/tags/open-source/</link><description>Recent content in Open-Source on Evan Coleman</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 08 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://edc.me/tags/open-source/index.xml" rel="self" type="application/rss+xml"/><item><title>Introducing xcode-remote: A Feedback Loop for AI Agents That Write Swift</title><link>https://edc.me/posts/introducing-xcode-remote/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://edc.me/posts/introducing-xcode-remote/</guid><description>&lt;p>My coding agents live on a headless Mac, supervised by &lt;a href="https://edc.me/posts/introducing-leo/">Leo&lt;/a>. They run in launchd background sessions: no GUI, no logged-in desktop, nobody at the keyboard. For most work that&amp;rsquo;s fine. An agent can write Swift, run tests, even boot a simulator headlessly and screenshot it. What it can&amp;rsquo;t do is put the app in front of me.&lt;/p>
&lt;p>The apps I want to watch run on the Mac I&amp;rsquo;m sitting at, in a simulator there or on the iPhone paired to it. So for a while the loop closed through me: the agent builds, I copy the &lt;code>.app&lt;/code> over, launch it, squint at Console, and paste crash reports back into the conversation. That got old fast.&lt;/p></description></item><item><title>Introducing Leo: From OpenClaw to Native Claude Code</title><link>https://edc.me/posts/introducing-leo/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><guid>https://edc.me/posts/introducing-leo/</guid><description>&lt;p>Like many, I participated in the AI agent revolution that is &lt;a href="https://github.com/openclaw/openclaw">OpenClaw&lt;/a> early this year. In the beginning, it was magical. It managed my inbox and calendar, kept me up to date on news. I even tried using it for coding.&lt;/p>
&lt;p>It wasn&amp;rsquo;t long before I started to get frustrated. OpenClaw is a genuinely impressive
project, but it moves fast and updates would frequently break things. It got to the point where I found myself spending more time making sure things were working than actually getting any benefit out of it. Eventually I found myself reaching for Claude Code more than my OpenClaw agent.&lt;/p></description></item><item><title>Introducing MacroBrewery: A Collection of Swift Macros for Code Generation</title><link>https://edc.me/posts/introducing-macrobrewery/</link><pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate><guid>https://edc.me/posts/introducing-macrobrewery/</guid><description>&lt;p>If you&amp;rsquo;ve worked on a Swift codebase of any size, you&amp;rsquo;ve written the same boilerplate code hundreds of times. Memberwise initializers. Builder patterns. Enum case accessors. Test stubs. It&amp;rsquo;s tedious, error-prone, and frankly, boring.&lt;/p>
&lt;p>Swift 5.9 introduced macros, and I finally had a way to solve this properly. So I built &lt;a href="https://github.com/evandcoleman/MacroBrewery">MacroBrewery&lt;/a>, a collection of macros that generate the repetitive code I was tired of writing by hand.&lt;/p>
&lt;h2 id="whats-included">What&amp;rsquo;s Included&lt;/h2>
&lt;h3 id="autoinit">@AutoInit&lt;/h3>
&lt;p>Generates memberwise initializers that improve on Swift&amp;rsquo;s built-in one: optionals default to &lt;code>nil&lt;/code>, properties with default values preserve them as parameter defaults, and you can set any access level.&lt;/p></description></item></channel></rss>