obi-jam infrastructure beginner

Your VPS Is Costing You More Than the Invoice

I was spending more time maintaining the server my agent ran on than actually using the agent. The VPS wasn't expensive in dollars. It was expensive in attention — and attention is the one resource I can't scale.

The monthly bill was reasonable. Call it $10-70 for a VPS with enough headroom for an agent, a few services, and some storage. That’s a rounding error in a budget. Not the problem.

The problem was the SSH sessions. Twice a day, normally way more, something needed attention. A framework update broke a plugin. Disk space filled up from logs nobody was rotating. A scheduled job ran at the wrong time because the server timezone was UTC and nobody remembered that. Security patches needed applying. The agent framework itself needed upgrading, and the upgrade process was never clean.

Each session was 10-20 minutes. Not catastrophic. But those hours compound, and they always came from the same budget: the time I had to build the actual product.

The Problem

Running a personal agent on a rented VPS creates a maintenance surface that’s disproportionate to the value. You’re maintaining an operating system, a network configuration, a framework, and the agent itself — four layers of potential problems, all accessed via SSH from wherever you happen to be.

The VPS doesn’t just host the agent. It becomes a second job. A small one, but persistent. The kind that eats Tuesday evenings and Sunday mornings.

Why This Happens

VPS is the default recommendation for “always-on” applications. It’s good advice for web services that need geographic distribution, high availability, and public endpoints. But a personal agent doesn’t need any of that. It needs to be on when you message it. That’s it.

The VPS assumption carries enterprise requirements into a personal context. You end up with ops overhead designed for a team of three, managed by a team of one, serving an audience of two.

The Fix

Move the agent to local hardware. A Mac Mini on your desk, plugged into your home network, running the same Node.js process.

What you gain:

No monthly bill. The hardware is a one-time purchase. Power costs are negligible. The Mac Mini draws 10-15 watts idle.

No SSH. Problems are diagnosed on the machine in front of you, in a normal terminal, with normal tools. No key management, no port forwarding, no “was the firewall rule blocking port 3000 or 3001?”

Local Ollama for free. Apple Silicon runs local models well enough for simple agent tasks. You get a fallback LLM that costs zero per token and works offline.

Physical ownership of family data. If your agent handles family logistics — calendars, tasks, forwarded emails — that data lives on hardware in your house, not on a server in a data center you’ll never visit.

No framework. On a VPS, you need the framework because it handles process management, crash recovery, and upgrade paths. On local hardware with launchd, you don’t need the framework. Your code is 400 lines of Node.js that you wrote, understand, and can fix in 30 minutes.

What you keep:

launchd for process management. Auto-restart on crash. Start on boot. Log routing to files. The same reliability guarantee as a VPS, without the VPS — and it’s built into macOS, so there’s nothing to install.

<!-- ~/Library/LaunchAgents/com.your-agent.plist -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.your-agent</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/node</string>
    <string>/path/to/src/index.js</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <true/>
  <key>StandardOutPath</key>
  <string>/tmp/your-agent.log</string>
  <key>StandardErrorPath</key>
  <string>/tmp/your-agent.err</string>
</dict>
</plist>
launchctl load ~/Library/LaunchAgents/com.your-agent.plist

Auto-restart after power failure. In macOS System Settings, set the machine to restart automatically after a power failure. Plug it into a basic UPS if power reliability is a concern.

Discord (or any cloud transport) for remote access. The Mac Mini is on your home network but the agent is reachable through Discord, which handles the network traversal for you. No port forwarding, no dynamic DNS, no public IP.

The migration math:

VPS costs (annual):
  Hosting:       $480-840/year
  Maintenance:   ~100 hours/year (30 min × 2/week × 50 weeks)

Mac Mini costs (annual, after purchase):
  Electricity:   ~$15/year
  Maintenance:   ~10 hours/year (mostly "check launchd after macOS update")

The dollar savings are nice. The time savings are the real win.

Key Takeaway

The right hosting for a personal agent is the hosting that takes the least attention. For most people building agents for themselves or their family, that’s a machine on their desk — not a machine in someone else’s data center. Save the VPS for services that need to be on the public internet. Your agent just needs to be on your network.

FAQ

Should I run my personal agent on a VPS or a local machine like a Mac Mini?

For a personal or small-team agent, local hardware wins. A Mac Mini on your home network costs nothing monthly, gives you local Ollama for free inference, eliminates SSH maintenance, and keeps family-sensitive data on hardware you physically own. The VPS only wins if you need high availability from multiple locations or can't keep a machine running at home.

What's the hidden cost of running an agent on a rented VPS?

The monthly bill is the visible cost. The hidden costs are: SSH sessions to diagnose framework issues, security patching, disk space management, debugging network-specific problems, framework upgrade failures, and the cognitive overhead of maintaining remote infrastructure. For a personal agent, these hidden costs typically exceed the value the agent provides.

How do I keep an agent running 24/7 on a Mac Mini?

Use launchd, the process manager built into macOS. Write a plist that points to your Node.js entry point, set it to KeepAlive and RunAtLoad, and load it with launchctl. macOS handles auto-restart on crash and start on boot natively — no third-party process manager needed. Set your Mac Mini to auto-restart after power failure in System Settings for full resilience.

What about uptime guarantees if I run my agent locally?

For a personal or family agent, 'always on' means launchd keeps the process running and the Mac Mini reboots after power outages. You don't need five nines. If the power is out, you're probably not messaging your agent anyway. The uptime that matters is 'available when I need it,' which a Mac Mini behind a UPS handles easily.