<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blundersurfer</title>
    <link>https://blundersurfer.com/</link>
    <description>Recent content on Blundersurfer</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© 2026 Blundersurfer</copyright>
    <lastBuildDate>Sun, 19 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blundersurfer.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>IT Ops because I&#39;m lazy</title>
      <link>https://blundersurfer.com/projects/builds/servermonkey/</link>
      <pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blundersurfer.com/projects/builds/servermonkey/</guid>
      <description>Servermonkey is an MCP to help your agent do your IT ops for you.</description>
      <content>&lt;p&gt;&lt;a href=&#34;https://github.com/blundersurfer/servermonkey&#34;&gt;Get Servermonkey&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview.&lt;/h2&gt;
&lt;p&gt;I have a problem. My project list is far too long. I have a ton of tools I want to deploy, capabilities to expand into and dependencies for my lab. All of this would be fine, but I&amp;rsquo;m short on time, and picky about my lab. So what&amp;rsquo;s the answer for me? Lower the energy needed to stand up and maintain services in my lab. Luckily I&amp;rsquo;ve got a new Proxmox host and an AI agent. So enter servermonkey. This is my attempt to be comfortable letting my AI agent make changes to my environment.&lt;/p&gt;
&lt;h2 id=&#34;what-do-i-want-to-do&#34;&gt;What do I want to do?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Prevent the Agent from doing anything dangerous enough to bother me&lt;/li&gt;
&lt;li&gt;Limit the scope of issues of it does go sideways&lt;/li&gt;
&lt;li&gt;The agent needs enough permissions to do useful things&lt;/li&gt;
&lt;li&gt;The solution should be a building block. The goal isn&amp;rsquo;t to deploy stuff, it&amp;rsquo;s do do stuff with the deployed stuff.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;so-what-did-i-do&#34;&gt;So what did I do?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Give access tokens to my AI Agent&lt;/li&gt;
&lt;li&gt;Limit the access tokens to create, configure and start, but not stop or destroy resources. This limits the amount of cleanup I have to do.&lt;/li&gt;
&lt;li&gt;Persistent durable data is stored on my NAS through a SMB share so I don&amp;rsquo;t need to worry about the container volume being destroyed&lt;/li&gt;
&lt;li&gt;When in doubt or if access is limited the AI gives me the commands to run to perform an action. Ex: If my agent can&amp;rsquo;t ssh into a container I have to install ssh, configure the service and add the key first. This is usually a set of pct commands that take a minute or two to run. It&amp;rsquo;s annoying, but just annoying enough for me to read the bash scripts.&lt;/li&gt;
&lt;li&gt;The containers are only available locally. Network segmentation via VLAN, ID&amp;rsquo;s and meta data that indicate it an AI container, and a planning process to choose secure, widely used applications all limit the attack surface of the resource.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The goal here is to move quicker with less hassle. If it&amp;rsquo;s important enough for me to worry about it I should plan the deployment better.&lt;/p&gt;
&lt;h2 id=&#34;criticisms&#34;&gt;Criticisms&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&amp;ldquo;But isn&amp;rsquo;t this automating deploying a template and syncing from a repo?&amp;rdquo; Yes yes it is, when it works well. When there are issues telling the robot to &amp;lsquo;go fix it&amp;rsquo; takes the cognitive load off of creating tech debt for myself&lt;/li&gt;
&lt;li&gt;&amp;ldquo;It sounds like you don&amp;rsquo;t care about the services you&amp;rsquo;re installing.&amp;rdquo; Yep, the services are disposable and serve to solve a problem I have as quickly and as friction less as possible.&lt;/li&gt;
&lt;/ol&gt;
</content>
    </item>
    
    <item>
      <title>About</title>
      <link>https://blundersurfer.com/about/</link>
      <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blundersurfer.com/about/</guid>
      <description>About Blundersurfer.</description>
      <content>&lt;p&gt;Hi, I&amp;rsquo;m Blundersurfer.&lt;/p&gt;
&lt;p&gt;This site is where I put things worth writing down — blog posts, project
notes, and longer-form documentation of work I want to remember.&lt;/p&gt;
&lt;h2 id=&#34;elsewhere&#34;&gt;Elsewhere&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href=&#34;https://github.com/blundersurfer&#34;&gt;@blundersurfer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href=&#34;https://bsky.app/profile/blundersurfer&#34;&gt;@blundersurfer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Reddit: &lt;a href=&#34;https://www.reddit.com/user/blundersurfer&#34;&gt;u/blundersurfer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blundersurfer.com/index.xml&#34;&gt;RSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;colophon&#34;&gt;Colophon&lt;/h2&gt;
&lt;p&gt;Hugo + PaperMod, deployed to Cloudflare Pages, sources on Forgejo.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Git</title>
      <link>https://blundersurfer.com/cheatsheets/git/</link>
      <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blundersurfer.com/cheatsheets/git/</guid>
      <description>The git commands I reach for most — and the few I reach for rarely enough to forget.</description>
      <content>&lt;h2 id=&#34;everyday&#34;&gt;Everyday&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git status -sb                  &lt;span style=&#34;color:#75715e&#34;&gt;# short status with branch info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git log --oneline --graph -20   &lt;span style=&#34;color:#75715e&#34;&gt;# compact graph&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git diff --staged               &lt;span style=&#34;color:#75715e&#34;&gt;# what&amp;#39;s about to be committed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git add -p                      &lt;span style=&#34;color:#75715e&#34;&gt;# interactively stage hunks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git commit --amend --no-edit    &lt;span style=&#34;color:#75715e&#34;&gt;# fix the last commit&amp;#39;s files, keep the message&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;undoing&#34;&gt;Undoing&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git restore &amp;lt;file&amp;gt;              &lt;span style=&#34;color:#75715e&#34;&gt;# discard unstaged changes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git restore --staged &amp;lt;file&amp;gt;     &lt;span style=&#34;color:#75715e&#34;&gt;# unstage without losing edits&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git reset --soft HEAD~1         &lt;span style=&#34;color:#75715e&#34;&gt;# uncommit last commit, keep changes staged&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git reflog                      &lt;span style=&#34;color:#75715e&#34;&gt;# find a commit you thought you lost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;branches&#34;&gt;Branches&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git switch -c feature/x         &lt;span style=&#34;color:#75715e&#34;&gt;# create + switch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git switch -                    &lt;span style=&#34;color:#75715e&#34;&gt;# jump back to previous branch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git branch -vv                  &lt;span style=&#34;color:#75715e&#34;&gt;# see tracking branches&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git push -u origin feature/x    &lt;span style=&#34;color:#75715e&#34;&gt;# push + set upstream&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;submodules&#34;&gt;Submodules&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone --recurse-submodules &amp;lt;url&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git submodule update --init --recursive   &lt;span style=&#34;color:#75715e&#34;&gt;# after a plain clone&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git pull --recurse-submodules             &lt;span style=&#34;color:#75715e&#34;&gt;# update parent + submodules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;rewriting&#34;&gt;Rewriting&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git rebase -i HEAD~5            &lt;span style=&#34;color:#75715e&#34;&gt;# squash, reorder, edit last 5 commits&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git commit --fixup &amp;lt;sha&amp;gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# mark a commit for autosquash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git rebase -i --autosquash HEAD~10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;remotes&#34;&gt;Remotes&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git remote -v                   &lt;span style=&#34;color:#75715e&#34;&gt;# list remotes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git remote set-url origin &amp;lt;url&amp;gt; &lt;span style=&#34;color:#75715e&#34;&gt;# swap remote&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git fetch --all --prune         &lt;span style=&#34;color:#75715e&#34;&gt;# tidy up deleted remote branches&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content>
    </item>
    
    <item>
      <title>Hello World</title>
      <link>https://blundersurfer.com/blog/hello-world/</link>
      <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blundersurfer.com/blog/hello-world/</guid>
      <description>First post — making sure the pipes are hooked up.</description>
      <content>&lt;p&gt;This is the first post on Blundersurfer. If you can read this, Hugo built the site and
Cloudflare Pages served it.&lt;/p&gt;
&lt;p&gt;Nothing interesting here yet — the real writing starts next.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Search</title>
      <link>https://blundersurfer.com/search/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://blundersurfer.com/search/</guid>
      <description>Search posts</description>
      <content></content>
    </item>
    
  </channel>
</rss>
