<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>pig-monkey.com - llm</title><link href="https://pig-monkey.com/" rel="alternate"></link><link href="https://pig-monkey.com/tag/llm/feed" rel="self"></link><id>https://pig-monkey.com/</id><updated>2026-04-19T16:56:20-07:00</updated><entry><title>Make VMs Great Again</title><link href="https://pig-monkey.com/2026/04/make-vms-great-again/" rel="alternate"></link><published>2026-04-19T00:00:00-07:00</published><updated>2026-04-19T16:56:20-07:00</updated><author><name>Pig Monkey</name></author><id>tag:pig-monkey.com,2026-04-19:/2026/04/make-vms-great-again/</id><summary type="html">&lt;p&gt;I have trust issues.&lt;/p&gt;
&lt;p&gt;When &lt;a href="https://claude.com/product/claude-code"&gt;Claude Code&lt;/a&gt; was released last year I was interested in playing with it, but struggled to find a way to run it in a secure, isolated manner. Trusting &lt;a href="https://code.claude.com/docs/en/sandboxing"&gt;its own sandbox&lt;/a&gt; was obviously not in the cards. I explored other people&amp;rsquo;s solutions &amp;ndash; mostly using …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I have trust issues.&lt;/p&gt;
&lt;p&gt;When &lt;a href="https://claude.com/product/claude-code"&gt;Claude Code&lt;/a&gt; was released last year I was interested in playing with it, but struggled to find a way to run it in a secure, isolated manner. Trusting &lt;a href="https://code.claude.com/docs/en/sandboxing"&gt;its own sandbox&lt;/a&gt; was obviously not in the cards. I explored other people&amp;rsquo;s solutions &amp;ndash; mostly using things like &lt;a href="https://github.com/containers/bubblewrap"&gt;Bubblewrap&lt;/a&gt; and &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; &amp;ndash; but none of them fully satisfied me. It also quickly became evident that most of the value from using Claude Code comes from the &lt;code&gt;--dangerously-skip-permissions&lt;/code&gt; argument, which gives it the ability to pursue a targeted task without constant permission requests. This requires even stricter isolation.&lt;/p&gt;
&lt;p&gt;Eventually I landed on a full virtual machine being the only viable option. I reinstalled &lt;a href="https://developer.hashicorp.com/vagrant"&gt;Vagrant&lt;/a&gt; for the first time in almost a decade and was off to the races.&lt;/p&gt;
&lt;p&gt;I was a heavy user of Vagrant in the twenty-teens. I still really like the interface. But when revisiting it today the software felt rather heavy and clunky. It defaults to using &lt;a href="https://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;, which has its own set of issues. There is a &lt;a href="https://github.com/vagrant-libvirt/vagrant-libvirt"&gt;community provided libvirt plugin&lt;/a&gt;, but that seems largely abandoned. &amp;ldquo;Abandoned&amp;rdquo; seems to be the word for most of the Vagrant community &amp;ndash; probably caused in part by the &lt;a href="https://www.theregister.com/2023/08/11/hashicorp_bsl_licence/"&gt;license change&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So for the past month I&amp;rsquo;ve been building &lt;a href="https://github.com/pigmonkey/migrant"&gt;Migrant&lt;/a&gt;, a lightweight VM management tool for running assumed-malicious AI agents in ephemeral environments. The heavy lifting is done by &lt;a href="https://libvirt.org/"&gt;libvirt&lt;/a&gt; and &lt;a href="https://www.qemu.org/"&gt;QEMU&lt;/a&gt;. Migrant started out as just a way to get a more Vagrant-like interface with modern tooling. I use &lt;a href="https://cloud-init.io/"&gt;cloud-init&lt;/a&gt; to initialize the image, &lt;a href="https://www.ansible.com/"&gt;Ansible&lt;/a&gt; to configure it, and libvirt for the VM management. But because the whole &lt;em&gt;raison d&amp;rsquo;être&lt;/em&gt; of the project is the fact that non-deterministic systems are inherently untrustworthy, Migrant expanded to have a suite of security features. It has network isolation, so the agent can&amp;rsquo;t compromise the rest of your LAN. It has shared folder isolation, so that the agent can&amp;rsquo;t exhaust the host disk or engage in any symlink traversal shenanigans. It has &lt;a href="https://www.wireguard.com/"&gt;WireGuard&lt;/a&gt; tunnel support, implemented host-side such that the VM cannot bypass it (because why wouldn&amp;rsquo;t you want to run all your agents through &lt;a href="https://mullvad.net/en"&gt;Mullvad&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I think it&amp;rsquo;s pretty great. I use it regularly.&lt;/p&gt;
&lt;p&gt;Migrant also serves as my testament as to how agentic coding should work. I&amp;rsquo;ve written it using Claude Code (initially running in a Vagrant-managed VM, but since the first public commit I&amp;rsquo;ve been building Migrant-in-Migrant), but it is the antithesis of &amp;ldquo;vibe coding&amp;rdquo;. I design the systems. I tell the agent how things should work. I review every line of code it produces. Most of the time I reject its first attempts. I take ownership of and responsibility for commits. The result, I think, is a pretty reasonable looking codebase.&lt;/p&gt;
&lt;p&gt;My conclusion thus far is that coding agents are useful tools. They&amp;rsquo;re an accelerant. They&amp;rsquo;re great for exploring a problem space. There&amp;rsquo;s no going back to software development without them, but if they&amp;rsquo;re not being actively driven by an opinionated human with domain-knowledge and expertise, what they produce is mostly crap. Maybe that will change the future. For now, if you&amp;rsquo;re not challenging every line of output from the clankers, you&amp;rsquo;re doing it wrong. I suspect this applies equally to the application of LLMs in other areas, but personally I haven&amp;rsquo;t found LLMs to be useful for anything other than writing code.&lt;/p&gt;</content><category term="general"></category><category term="toolchain"></category><category term="linux"></category><category term="shell"></category><category term="llm"></category></entry><entry><title>All Watched Over</title><link href="https://pig-monkey.com/2024/12/all-watched-over/" rel="alternate"></link><published>2024-12-17T00:00:00-08:00</published><updated>2024-12-17T20:00:48-08:00</updated><author><name>Pig Monkey</name></author><id>tag:pig-monkey.com,2024-12-17:/2024/12/all-watched-over/</id><summary type="html">&lt;p&gt;I had &lt;a href="https://theyseeyourphotos.com/"&gt;They See Your Photos&lt;/a&gt; use the &lt;a href="https://cloud.google.com/vision"&gt;Google Vision API&lt;/a&gt; to analyze my most recent selfie.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.flickr.com/photos/pigmonkey/54081998868/" title="The Pig Monkey in His Natural Habitat"&gt;&lt;img src="https://live.staticflickr.com/65535/54081998868_8f57538196_c.jpg" width="800" height="533" alt="The Pig Monkey in His Natural Habitat"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The foreground shows a man relaxing on a portable camping chair next to his touring bicycle. The bike is heavily laden with panniers suggesting a long journey. In the background, there is a …&lt;/p&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;I had &lt;a href="https://theyseeyourphotos.com/"&gt;They See Your Photos&lt;/a&gt; use the &lt;a href="https://cloud.google.com/vision"&gt;Google Vision API&lt;/a&gt; to analyze my most recent selfie.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.flickr.com/photos/pigmonkey/54081998868/" title="The Pig Monkey in His Natural Habitat"&gt;&lt;img src="https://live.staticflickr.com/65535/54081998868_8f57538196_c.jpg" width="800" height="533" alt="The Pig Monkey in His Natural Habitat"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The foreground shows a man relaxing on a portable camping chair next to his touring bicycle. The bike is heavily laden with panniers suggesting a long journey. In the background, there is a dry, scrubby landscape with low-lying vegetation and sparse trees under a clear blue sky. The location appears to be a trail or roadside somewhere in a temperate climate. The overall setting suggests a sense of adventure and self-sufficiency.&lt;/p&gt;
&lt;p&gt;A Caucasian male, appearing to be in his 30s, of seemingly middle-class economic status, is seen taking a break, enjoying a drink from a thermos. He seems relaxed and content; possibly on a solo bikepacking trip. His attire suggests an outdoor lifestyle and active pursuits. His expression appears peaceful and reflective. The image appears to be taken with a professional camera during daytime.&lt;/p&gt;
&lt;p&gt;The man&amp;rsquo;s sunglasses appear to be polarized, which might suggest he is protecting his eyes from glare on a bright sunny day. A small, almost invisible detail of a thin twig can be seen to the left of the bicycle tire. The overall setting suggests a planned stop during his journey, with equipment suggesting a well-prepared and experienced cyclist. The overall cleanliness of his equipment points to a tidy and organized individual.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It hallucinated panniers (the bike has a bar bag and saddle bag, not panniers &amp;ndash; get your luggage straight, Google). There is nothing heavy about my tea party load-out. I&amp;rsquo;m out for the afternoon. The thermos is on the ground; I&amp;rsquo;m drinking from a mug.&lt;/p&gt;
&lt;p&gt;But I do like to think of myself as well-prepared, experienced, tidy, and organized. I&amp;rsquo;m glad the Machine sees me that way. &lt;a href="https://www.youtube.com/watch?v=ixzUQPkaR-U"&gt;I feel seen&lt;/a&gt;.&lt;/p&gt;</content><category term="general"></category><category term="llm"></category><category term="quote"></category></entry></feed>