<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Claude-Code on Linux Colorado</title><link>https://www.linuxcolorado.com/tags/claude-code/</link><description>Recent content in Claude-Code on Linux Colorado</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 17 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.linuxcolorado.com/tags/claude-code/index.xml" rel="self" type="application/rss+xml"/><item><title>Teaching an AI to Develop My RAW Photos: A Self-Hosted Linux Pipeline</title><link>https://www.linuxcolorado.com/post/2026-08-18-ai-raw-photo-pipeline/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-ai-raw-photo-pipeline/</guid><description>&lt;p&gt;I wanted to answer a specific question: could an AI agent do the &lt;em&gt;boring, careful&lt;/em&gt; parts of my photography workflow — the parts I actually skip because they take too long?&lt;/p&gt;
&lt;p&gt;Not &amp;ldquo;make my photos look good&amp;rdquo; in the Instagram-filter sense. I mean the tedious, correct-but-thankless work: pulling the right RAW off my server, applying the exact lens-correction data for the exact lens I used, denoising only the frames that need it, keeping the EXIF intact, filing everything under the right date, and getting a print onto photo paper without fighting a driver. The stuff a careful darkroom tech would do and a busy human never quite gets around to.&lt;/p&gt;
&lt;p&gt;So I built it. A local, self-hosted pipeline where &lt;strong&gt;Claude Code&lt;/strong&gt; can reach into my &lt;a href="https://immich.app"&gt;Immich&lt;/a&gt; library, pull original Canon CR3 RAW files, develop them in &lt;strong&gt;darktable&lt;/strong&gt; with camera- and lens-specific corrections, retouch in &lt;strong&gt;GIMP&lt;/strong&gt;, print on a networked Canon photo printer, and push finished JPEGs back into Immich as new assets — all driven through the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure class="post-figure" style="margin:1.5rem 0;text-align:center"&gt;
 &lt;img src="https://www.linuxcolorado.com/diagrams/raw-photo-pipeline.svg" alt="Diagram: Claude Code orchestrates over MCP — pull a CR3 RAW from Immich, develop in darktable with lensfun correction, retouch in GIMP, print on a networked Canon printer, and import the finished JPEG back into Immich" loading="lazy" title="Claude Code drives each tool over MCP; the RAW never leaves the LAN."
 style="max-width:100%;height:auto;display:block;margin:0 auto;border-radius:6px"&gt;
 &lt;figcaption style="font-size:.82rem;color:#667;margin-top:.5rem;font-style:italic"&gt;Claude Code drives each tool over MCP; the RAW never leaves the LAN.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Letting Claude Read My Firewall: an OPNsense MCP Server, and What It Found on My Network</title><link>https://www.linuxcolorado.com/post/2026-08-18-opnsense-mcp-network-forensics/</link><pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-opnsense-mcp-network-forensics/</guid><description>&lt;p&gt;I gave Claude a read-only window into my firewall. Not &amp;ldquo;pasted some logs into a chat&amp;rdquo; — an actual &lt;a href="https://modelcontextprotocol.io"&gt;Model Context Protocol&lt;/a&gt; server wrapping the &lt;strong&gt;OPNsense&lt;/strong&gt; API, so Claude Code could call &lt;code&gt;leasesSearchLease&lt;/code&gt;, &lt;code&gt;dnsReverseLookup&lt;/code&gt;, and dozens of other firewall functions on demand. Then I pointed it at a simple question — &lt;em&gt;what is actually on my network, and where does it all phone home?&lt;/em&gt; — and got a genuinely uncomfortable answer.&lt;/p&gt;
&lt;p&gt;This post is two things: how to stand up an OPNsense MCP server in Docker &lt;strong&gt;safely&lt;/strong&gt;, and the little network-forensics session it enabled, which is the real reason to build one.&lt;/p&gt;</description></item><item><title>/ipad-internet off: A Claude Code Skill That Cuts One Device's Internet at the Firewall</title><link>https://www.linuxcolorado.com/post/2026-08-18-ipad-internet-firewall-skill/</link><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-ipad-internet-firewall-skill/</guid><description>&lt;p&gt;I wanted one command — &lt;code&gt;/ipad-internet off&lt;/code&gt; — that instantly cuts the household iPad&amp;rsquo;s internet, and &lt;code&gt;/ipad-internet on&lt;/code&gt; to give it back. Simple ask. The interesting part is doing it &lt;em&gt;correctly&lt;/em&gt;: instantly (no waiting on a config save), reversibly, without disturbing the LAN (AirPlay, printers, local media should all keep working), and — most importantly — in a way that &lt;strong&gt;can never accidentally knock a different device offline.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It ended up as a &lt;a href="https://docs.claude.com/en/docs/claude-code"&gt;Claude Code&lt;/a&gt; skill backed by a careful bit of &lt;strong&gt;OPNsense&lt;/strong&gt; / &lt;code&gt;pf&lt;/code&gt; design. This post is about that design: why it uses a pf table instead of editing the config, how it survives the iPad&amp;rsquo;s shifting IP and Apple&amp;rsquo;s private Wi-Fi MAC, and the ownership guard that makes the &amp;ldquo;wrong device&amp;rdquo; failure mode structurally impossible.&lt;/p&gt;</description></item></channel></rss>