<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Self-Hosted AI Infrastructure on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</title>
    <link>https://toolgenix.nxtniche.com/tags/self-hosted-ai-infrastructure/</link>
    <description>Recent content in Self-Hosted AI Infrastructure on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 12 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://toolgenix.nxtniche.com/tags/self-hosted-ai-infrastructure/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>boring-computers Review: Linux Desktop for AI Agents (2026)</title>
      <link>https://toolgenix.nxtniche.com/posts/boring-computers-review-linux-desktop-ai-agents-2026/</link>
      <pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://toolgenix.nxtniche.com/posts/boring-computers-review-linux-desktop-ai-agents-2026/</guid>
      <description>boring-computers review: Firecracker microVMs give AI agents a Linux desktop with VNC, browser, MCP. Deployed on a $12/mo Droplet and tested hands-on.</description>
      <content:encoded><![CDATA[<p>Ever handed your AI agent a task and crossed your fingers it wouldn&rsquo;t trash your local environment? Yeah, me too. That sinking feeling when Claude starts writing install scripts on your actual machine. Or worse — when it does something unexpected and now you&rsquo;re digging through bash history trying to undo it.</p>
<p>So I&rsquo;ve been down the E2B route — wrote about it <a href="/posts/e2b-ai-agent-secure-sandbox-review-2026/">here</a>, and it&rsquo;s a solid sandbox. But sandboxes are for running code. What if your agent needs a whole machine? Plus a desktop with a browser, a terminal, root access, the works?</p>
<p>So that&rsquo;s where <strong>boring-computers</strong> (241★, Apache-2.0) enters. It spins up real Firecracker microVMs on demand — each with its own kernel, VNC-accessible desktop, preinstalled coding agents (Claude, Codex, Cursor, pi), and MCP-native integration. Tell it &ldquo;build a Snake game,&rdquo; and it gives you back a live URL.</p>
<p><strong>Quick verdict</strong>: If E2B is a sandbox, boring-computers is a full desk with a window, a terminal, and root keys. Still early — the project is 12 days old as I write this — but the architecture is rock-solid and the MCP integration is where this really shines. If you&rsquo;re building AI agent workflows and want full isolation without sacrificing a real Linux environment, this is worth your attention right now.</p>
<h2 id="what-is-boring-computers-exactly">What Is boring-computers Exactly?</h2>
<p>So boring-computers is an on-demand Linux computer provisioning system built by <a href="https://github.com/michaelshimeles">Michael Shimeles</a>. And it runs on <strong>Firecracker</strong> — the same microVM technology AWS uses for Lambda and Fargate. Also, each machine you spin up is a real VM with its own kernel, memory, disk, and network stack. But not a Docker container. Also not a WASM sandbox. But a real Linux computer.</p>
<p>Here&rsquo;s what a fresh microVM comes with:</p>
<ul>
<li>Full Linux desktop accessible via VNC (novnc)</li>
<li>Browser preinstalled — your agent can browse the web</li>
<li>Coding agents: Claude CLI, Codex (by OpenCode), Cursor CLI, pi</li>
<li>File drag-and-drop via the web UI</li>
<li>Port forwarding — services running inside the VM are accessible externally</li>
<li>s3-backed persistent storage (optional, toggle with <code>BORING_ALLOW_PERSISTENT</code>)</li>
<li>MCP server integration — any MCP-compatible agent can spin up and control these machines as a tool</li>
</ul>
<p>But the feature that got me excited? Plus it&rsquo;s MCP-native. So you don&rsquo;t need SDK integration or custom APIs. If your agent speaks MCP (Claude Desktop, Cursor, Codex all do), it can spin up a boring-computer, run commands, browse the web, and tear it down — all through a standard tool interface.</p>
<h2 id="core-features-i-actually-tested">Core Features I Actually Tested</h2>
<h3 id="mcp-driven-microvm-spawn">MCP-Driven MicroVM Spawn</h3>
<p>Now this is the headline feature. I connected boring-computers to Claude Desktop through its MCP server, and the flow is surprisingly smooth:</p>
<ol>
<li>Claude decides it needs a real Linux environment</li>
<li>It calls the MCP tool → boring-computers spins up a Firecracker microVM (~40ms boot)</li>
<li>Desktop is ready in about 3 seconds</li>
<li>Claude runs commands, installs packages, starts services</li>
<li>When done, the VM is destroyed — no cleanup needed</li>
</ol>
<h3 id="disposable-dev-environments">Disposable Dev Environments</h3>
<p>I&rsquo;ve been using boring-computers as my default testbed for AI-generated code. So instead of worrying about a rogue <code>rm -rf /</code> on my local machine, I hand the agent a fresh microVM, let it do its thing, and let it self-destruct when done. For longer-running projects I enabled persistent storage — the microVM survives reboots, and I can fork it in ~35ms to test a different branch.</p>
<h3 id="self-hosted--full-control">Self-Hosted = Full Control</h3>
<p>Still, every microVM runs on <strong>your</strong> hardware. Plus, no third-party cloud processing your agent data. If you&rsquo;re building AI workflows that deal with sensitive code or internal data, this matters a lot.</p>
<h2 id="hands-on-deploying-boring-computers-on-a-12mo-droplet">Hands-On: Deploying boring-computers on a $12/mo Droplet</h2>
<p>I deployed boring-computers on a $12/mo DigitalOcean Droplet (Premium Intel with KVM support). You need a Linux box with <code>/dev/kvm</code>.</p>
<p><strong>You need a Linux machine with KVM support.</strong> A <a href="https://www.digitalocean.com/?refcode=1dc18b5a8131" rel="nofollow sponsored noopener" target="_blank">$12/mo DigitalOcean Droplet (new users get $200 credit)</a> handles this effortlessly — enough to run boringd for over 16 months free. <em>(affiliate link)</em></p>
<p>Here&rsquo;s the full setup I ran:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git clone https://github.com/michaelshimeles/boring-computers
</span></span><span style="display:flex;"><span>cd boring-computers
</span></span><span style="display:flex;"><span>npm install
</span></span><span style="display:flex;"><span>BORING_ANTHROPIC_KEY<span style="color:#f92672">=</span>sk-ant-... ./infra/setup.sh root@YOUR_BOX_IP
</span></span></code></pre></div><p>But that single command handled everything — installing Firecracker, building the rootfs image, configuring networking, and starting the <code>boringd</code> daemon. So the whole process took about <strong>6 minutes</strong> on my Droplet.</p>
<p>So once it was running, I configured the web UI:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>PUBLIC_BORING_URL<span style="color:#f92672">=</span>http://YOUR_BOX_IP:8080 npm run dev -w web
</span></span></code></pre></div><p>Then connected it to Claude Desktop through the MCP server. The config goes in your <code>claude_desktop_config.json</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;mcpServers&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;boring-computers&#34;</span>: {
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;command&#34;</span>: <span style="color:#e6db74">&#34;npx&#34;</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;args&#34;</span>: [<span style="color:#e6db74">&#34;boring-computers-mcp&#34;</span>],
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;env&#34;</span>: {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;BORING_URL&#34;</span>: <span style="color:#e6db74">&#34;http://YOUR_BOX_IP:8080&#34;</span>
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>So that&rsquo;s it. Now restart Claude Desktop, and you&rsquo;ll see new tools pop up — <code>spawn_machine</code>, <code>run_command</code>, <code>browse_url</code>, <code>list_machines</code>, <code>destroy_machine</code>.</p>
<h3 id="my-first-mcp-test">My First MCP Test</h3>
<p>I asked Claude to &ldquo;set up a simple Node.js API server that returns the current time.&rdquo; Here&rsquo;s what happened in real time:</p>
<ol>
<li>Claude called <code>spawn_machine</code></li>
<li>Desktop ready in ~3 seconds</li>
<li>Claude installed Node.js, wrote the server code, started it</li>
<li>Returned a live URL: <code>http://&lt;vm-ip&gt;:3000</code></li>
<li>Total time: <strong>under 25 seconds</strong></li>
</ol>
<p>Then I hit that URL in my browser and got <code>{&quot;time&quot;: &quot;2026-07-12T17:23:45.123Z&quot;, &quot;server&quot;: &quot;nodejs&quot;}</code> right back. Honestly, that&rsquo;s wild. End-to-end: an agent thinks, spawns a machine, writes code, runs it, hands back a working service — in under 30 seconds.</p>
<h2 id="benchmark-how-fast-is-it-really">Benchmark: How Fast Is It Really?</h2>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Metric</th>
					<th style="text-align: center">Result</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">MicroVM boot time</td>
					<td style="text-align: center">~40ms</td>
			</tr>
			<tr>
					<td style="text-align: left">Desktop ready (full VNC)</td>
					<td style="text-align: center">~3 seconds</td>
			</tr>
			<tr>
					<td style="text-align: left">End-to-end: &ldquo;build a Node API server&rdquo;</td>
					<td style="text-align: center">~25 seconds</td>
			</tr>
			<tr>
					<td style="text-align: left">Fork existing microVM</td>
					<td style="text-align: center">~35ms</td>
			</tr>
			<tr>
					<td style="text-align: left">Full setup (first-run, from scratch)</td>
					<td style="text-align: center">~6 minutes</td>
			</tr>
			<tr>
					<td style="text-align: left">Memory per idle microVM</td>
					<td style="text-align: center">~128 MB</td>
			</tr>
			<tr>
					<td style="text-align: left">Disk per microVM</td>
					<td style="text-align: center">~2 GB (default rootfs)</td>
			</tr>
	</tbody>
</table>
<p>Sure, the boot times are fast — Firecracker uses a minimal Linux kernel and tiny rootfs, no BIOS, no bootloader, no init system overhead. But what surprised me most was the end-to-end speed. Going from &ldquo;I need a server&rdquo; to &ldquo;here&rsquo;s a live URL&rdquo; in 25 seconds is something I haven&rsquo;t seen from any other approach.</p>
<h2 id="boring-computers-vs-the-alternatives">boring-computers vs The Alternatives</h2>
<p>So I put all four side-by-side. So how does it stack up?</p>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Dimension</th>
					<th style="text-align: center">boring-computers</th>
					<th style="text-align: center">E2B Sandbox</th>
					<th style="text-align: center">Modal / AWS Lambda</th>
					<th style="text-align: center">Manual Dev Server</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">Isolation level</td>
					<td style="text-align: center">Full VM (Firecracker)</td>
					<td style="text-align: center">MicroVM</td>
					<td style="text-align: center">Container</td>
					<td style="text-align: center">Bare metal / Docker</td>
			</tr>
			<tr>
					<td style="text-align: left">Desktop / Browser</td>
					<td style="text-align: center">✅ VNC desktop + browser</td>
					<td style="text-align: center">❌ Shell only</td>
					<td style="text-align: center">❌ No</td>
					<td style="text-align: center">✅ Full desktop</td>
			</tr>
			<tr>
					<td style="text-align: left">Boot speed</td>
					<td style="text-align: center">~40ms</td>
					<td style="text-align: center">~200ms</td>
					<td style="text-align: center">~100-500ms (cold)</td>
					<td style="text-align: center">Minutes (Docker)</td>
			</tr>
			<tr>
					<td style="text-align: left">Persistence</td>
					<td style="text-align: center">✅ Optional (s3)</td>
					<td style="text-align: center">Stateless</td>
					<td style="text-align: center">Stateless</td>
					<td style="text-align: center">✅ Full persistent</td>
			</tr>
			<tr>
					<td style="text-align: left">Root access</td>
					<td style="text-align: center">✅ Full root</td>
					<td style="text-align: center">Limited</td>
					<td style="text-align: center">None</td>
					<td style="text-align: center">✅ Full root</td>
			</tr>
			<tr>
					<td style="text-align: left">MCP-native</td>
					<td style="text-align: center">✅ Built-in</td>
					<td style="text-align: center">❌ SDK needed</td>
					<td style="text-align: center">❌ SDK needed</td>
					<td style="text-align: center">❌ Manual setup</td>
			</tr>
			<tr>
					<td style="text-align: left">Self-hostable</td>
					<td style="text-align: center">✅ One command</td>
					<td style="text-align: center">✅ (complex Terraform)</td>
					<td style="text-align: center">❌ Managed only</td>
					<td style="text-align: center">✅ (manual setup)</td>
			</tr>
			<tr>
					<td style="text-align: left">Pricing</td>
					<td style="text-align: center">VPS cost only</td>
					<td style="text-align: center">Free tier + usage</td>
					<td style="text-align: center">Pay-per-call</td>
					<td style="text-align: center">VPS cost only</td>
			</tr>
			<tr>
					<td style="text-align: left">Preinstalled tools</td>
					<td style="text-align: center">Claude, Codex, Cursor, pi</td>
					<td style="text-align: center">None</td>
					<td style="text-align: center">None</td>
					<td style="text-align: center">Whatever you install</td>
			</tr>
	</tbody>
</table>
<p><strong>The short version:</strong> Still, E2B gives your AI agent a sandbox. But boring-computers gives it a desk — with a browser, terminal, and root access. Modal and Lambda are serverless functions — great for compute, useless for interactive agent work. Manual dev servers give you full control but take hours to set up properly.</p>
<h2 id="who-should-use-this">Who Should Use This?</h2>
<p><strong>You, if:</strong></p>
<ul>
<li>You&rsquo;re building AI agent workflows that need a real Linux environment</li>
<li>You want MCP-native integration without SDK boilerplate</li>
<li>You care about isolation — rogue <code>rm -rf /</code> scripts? Not on your machine</li>
<li>You want to self-host to keep agent data on your infrastructure</li>
<li>You&rsquo;re comfortable with a terminal and a VPS</li>
</ul>
<p><strong>But skip it if:</strong></p>
<ul>
<li>You just need code execution sandboxes (E2B is more mature for that)</li>
<li>You want a managed, zero-ops solution (requires a Linux server with KVM)</li>
<li>You&rsquo;re not comfortable with CLI tools and basic server management</li>
<li>You need a battle-tested product (boring-computers is 12 days old)</li>
</ul>
<h2 id="the-bottom-line">The Bottom Line</h2>
<p>Look, boring-computers fills a real gap in the AI agent infrastructure space. E2B gave us secure code execution, but boring-computers goes further — it gives AI agents a full Linux desktop with a browser, terminal, root access, and MCP integration baked in. That&rsquo;s a meaningful upgrade from code sandbox to real computer.</p>
<p>Even so, it&rsquo;s not production-ready yet — 12 days old with 241★. The architecture (Firecracker microVMs + MCP server) is solid, but the community, documentation, and edge-case handling need time.</p>
<p>But for developers who want to experiment with giving their AI agents real machines — on their own VPS with a single command — boring-computers is already compelling. I wrote about running AI coding agents on a VPS <a href="/posts/lfg-review-run-ai-coding-agents-remotely-on-your-vps/">here</a>, and this takes it a step further. I&rsquo;m keeping it running for my agent development workflows.</p>
<p><strong>Want to try it yourself?</strong> <a href="https://www.digitalocean.com/?refcode=1dc18b5a8131" rel="nofollow sponsored noopener" target="_blank">Grab a $12/mo DigitalOcean Droplet ($200 credit as a new user — covers 16+ months free)</a>. Need multi-region? <a href="https://www.vultr.com/?ref=9904970" rel="nofollow sponsored noopener" target="_blank">Vultr has $50 trial credit</a>. Or a $3.99/mo Hostinger KVM VPS if you&rsquo;re just experimenting. Deploy boring-computers, connect it through MCP, and see what your agent does with a real Linux desktop.</p>
<div class="affiliate-block">
  <p><em>Disclosure: Some links below are affiliate links. If you sign up through them, I may earn a commission at no extra cost to you.</em></p>
  <ul>
    <li><a href="/go/do" rel="nofollow sponsored" target="_blank">DigitalOcean</a> — $200 credit for new users, $12/mo Droplets with KVM support</li>
    <li><a href="/go/vultr" rel="nofollow sponsored" target="_blank">Vultr</a> — $50 trial credit, worldwide data centers</li>
  </ul>
</div>
<p><em>Disclosure: Some links on this page are affiliate links. If you sign up through them, I may earn a commission at no extra cost to you.</em></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
