Stop Making Your Agents Commute With You

By Rareș Gosman

The plan was to maximize what agents could do while I slept. By five in the morning the sleep had gone out the window and the sun was coming in through it. A persistent VM and an agent-aware terminal multiplexer let the work keep going without me.

AI AgentsSoftware Engineering

The plan was to maximize what the agents could do while I slept. The sleep went out the window. The sun came in through it.

If I stopped before finishing the planning phase, I would waste six hours of autonomous work overnight. So I sat there, polishing the last prompt, dispatching the next task, waiting for Codex to finish one more plan so it could chew on it while I slept. By five or six in the morning I could see the sky getting brighter, and at some point the math flipped: no point sleeping now.

I was building more than ever. I was not sleeping.

The laptop was the bottleneck

For a while I tried to take the laptop everywhere. Heading to my girlfriend's place, laptop comes. Biking across the Williamsburg Bridge, I would tether the laptop to my phone's hotspot so Codex could keep running mid-ride on a Citi Bike. That's not a workflow. That's a hostage situation.

The breaking point was simpler than that. Closing the lid puts the machine to sleep. A dead battery kills it. Bad Wi-Fi drops the connection to the model. The laptop's power state had become the uptime guarantee for work that didn't need me there.

Moshi put the agents on my phone

Someone on Reddit mentioned using Moshi to talk to Claude Code from their iPhone. I thought that was absurd. Then I installed it.

The attention to detail floored me. Customized notification sounds for different agent states. A session picker that showed every running project. I could fire off a Codex task, go for a run, and get a push notification when it finished or got stuck. No more checking in an hour later to find the agent had stalled two minutes in.

But I was still bound to my MacBook for the actual compute. Moshi gave me a window into the work, not a place for it to live.

exe.dev: a VM that keeps running

I had been running Codex locally on my Mac and on a Hetzner VPS for OpenClaw. Then Cloudflare started blocking the Hetzner IP. OpenClaw kept working, but the Codex CLI on the same machine got 429s. Strange.

So I started looking for something else. And then I remembered a logo I had seen months earlier on the worst website I had ever visited. All it said was exe.dev, and there was a fish. I had no idea what it was. Turns out I just wasn't the target audience yet.

exe.dev is a persistent Linux VM. The disk survives reboots. The machine doesn't stop when SSH disconnects. That's the whole pitch, and it was the one thing I actually needed.

What I still had to set up

To their credit, exe.dev does more than hand you a blank VM. Credentials are injected by an HTTPS proxy at the network edge, so agents can authenticate to GitHub and LLM providers without ever seeing the actual secrets. A built-in LLM gateway gives every VM managed model access with no API keys on disk. Their bundled agent, Shelley, runs out of the box with a mobile-friendly web UI. I did turn off one of those conveniences: their GitHub integration pushed and opened my PRs as exe-dev-github-integration[bot], and CodeRabbit wanted a separate paid seat to review that bot's PRs. So I use my own GitHub token on the VM.

Making the VM mine still took work: a Tailscale tunnel so Moshi can reach it over UDP, a dedicated OpenSSH listener for the phone, PATH fixes for every runtime I use. It's a Linux box with good defaults, and you still set it up like one.

Herdr replaced tmux

The session that keeps agents alive after I disconnect used to be tmux. Five named windows per project: agent, review, tests, servers, scratch. It worked, but I had no idea which agents were done unless I checked each pane.

Herdr fixed that. It reads each pane and marks every agent as working, blocked, or idle, and its Claude Code and Codex integrations let the agents report their own state. A little spinner shows what's running, so you see it at a glance instead of tabbing through panes. herdr --remote attaches a local terminal to the session on the VM.

Moshi used to ping my phone whenever an agent finished. These days I'd rather not get phone notifications at all. I SSH in when I want to check, and Herdr shows me which agents need me.

What doesn't move to the VM

Running agents remotely doesn't make their commands safe. Mine run with --yolo, no approval prompts, which I know is risky. The VM at least puts a wall around it: an agent that goes off the rails breaks the VM, not my laptop. If I copied every secret from my laptop onto it, I'd lose even that.

When Wi-Fi drops, I can't steer or stop anything until I reconnect. That's fine for autonomous work, bad for tight interactive editing. Local work still wins when I need instant feedback or offline access.

A remote machine also means trusting the provider's access controls, keeping the box updated, and not treating "it runs unattended" as permission to stop reading what it did.

What the commute looks like now

The phone is the window. The VM is the computer. Closing the window doesn't stop the computer.

I take the N train from Astoria to Union Square. I fire off a task from my phone, review what the agent is working on. The train drops below the East River and the signal dies. When I come up at Union Square the work is done. I'm the one commuting, not Claude.