People keep asking me what my setup looks like, so this is the full guide.
My agents don’t run on my laptop anymore. They run on a cheap VPS that never sleeps, and I control them from my laptop and my phone. I can start a task at my desk, close the lid, and check on it from my phone while I’m out.
The biggest win for me is coding from my phone on the train. I don’t have to pull my laptop out and look like a creep.
The setup has seven steps:
- T3 Code on your laptop, the app you’ll drive everything from.
- A VPS, the always-on machine your agents live on.
- A VPS environment that matches your laptop, so agents can do the same work there.
- CLI Proxy (optional), if you have more than one subscription on a provider.
- T3 Code on the VPS, connected to your laptop with full permissions.
- Your laptop on the proxy (optional), so it shares the same pool of accounts.
- T3 Code on your phone, connected to both machines.
Once your agent has SSH access to the VPS, it can do most of this for you. I point out where that helps.
1. Install T3 Code on your laptop
T3 Code is a control surface for coding agents. It doesn’t replace Claude Code or Codex. It runs them for you, using the subscriptions you’re already logged into, and gives you one app to manage threads, worktrees, and machines.
Download the desktop app from the GitHub releases page. I recommend the nightly build (the releases tagged -nightly). It moves fast, and the newest features, including a lot of the remote-machine work in this guide, land there first. On macOS you can also install it with Homebrew: brew install --cask t3-code@nightly.
Before you open it, install at least one agent CLI on your laptop and log in:
# Claude Code
curl -fsSL https://claude.ai/install.sh | bash
claude auth login
# Codex
npm install -g @openai/codex
codex login
Open T3 Code, start a thread in any project, and check that your agent answers.
2. Get a VPS
Any Linux VPS works. I use Contabo because it’s cheap and reliable. Hetzner is a good alternative, and any other provider works too.
What I’d look for:
- Ubuntu 24.04, so every command in this guide works as written.
- At least 8 GB of RAM. Agents, language servers, Docker, and a headless browser add up quickly.
- A region close to you, so the terminal feels responsive.
Once it’s running, put it on Tailscale. Tailscale gives your laptop, phone, and VPS a private network. Every device gets a stable address and a name, and nothing has to be exposed to the public internet.
# on the VPS
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
Install Tailscale on your laptop and phone too, and sign in with the same account. From now on, you can reach the VPS by its tailnet name from anywhere.
3. Make the VPS feel like your laptop
Your agents on the VPS can only do what the VPS can do. If your laptop has Node, Bun, Python, Docker, and the GitHub CLI, the VPS needs them too. Otherwise the first npm install or docker compose up an agent runs will fail.
Go through what you actually use. For me that’s roughly:
# basics
sudo apt update && sudo apt install -y git build-essential curl unzip
# GitHub CLI, then log in so agents can push and open PRs
sudo apt install -y gh
gh auth login
# Node (via fnm), Bun, and uv for Python
curl -fsSL https://fnm.vercel.app/install | bash
curl -fsSL https://bun.sh/install | bash
curl -LsSf https://astral.sh/uv/install.sh | sh
# Docker
curl -fsSL https://get.docker.com | sh
# the agent CLIs, logged in just like on your laptop
curl -fsSL https://claude.ai/install.sh | bash
npm install -g @openai/codex
Then log the agent CLIs in (claude auth login, codex login), clone the repos you work on, and copy over any .env files your projects need.
4. Set up CLI Proxy (optional)
I have two Claude subscriptions and a Codex one. Before the proxy, I logged each machine into one account. When that account hit its five-hour limit, I logged out and logged into the other one by hand.
CLIProxyAPI fixes that. You log every account into it once, and it gives you a single endpoint that speaks the Anthropic and OpenAI APIs. Your tools point at that endpoint instead of at Anthropic or OpenAI directly. When one account hits its limit, the proxy cools it down and retries on the next one.
I run it in Docker on the VPS. Publish the port only on the VPS’s Tailscale address. Then only your own devices can reach it.
# /opt/cliproxy/docker-compose.yml
services:
cli-proxy-api:
image: eceasy/cli-proxy-api:latest
ports: ["<vps-tailscale-ip>:8317:8317"]
volumes:
- ./config.yaml:/CLIProxyAPI/config.yaml
- ./auths:/root/.cli-proxy-api
restart: unless-stopped
In config.yaml, set an API key for your own tools under access.api-keys, and a management.secret-key for the dashboard. Then log each account in, following the CLIProxyAPI README. The dashboard lives at http://<vps-tailscale-name>:8317/management.html and shows every account, its requests, and its remaining quota.
Now point the VPS’s agents at it. Claude Code reads its environment from ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "http://<vps-tailscale-name>:8317",
"ANTHROPIC_API_KEY": "<your proxy api key>"
}
}
Codex gets a custom provider in ~/.codex/config.toml:
model_provider = "fleet"
[model_providers.fleet]
name = "Fleet proxy"
base_url = "http://<vps-tailscale-name>:8317/v1"
env_key = "FLEET_PROXY_KEY" # an env var holding your proxy api key
wire_api = "responses"
Run a prompt with each CLI and check the proxy dashboard. If the request count goes up, it’s working.
5. Run T3 Code on the VPS and connect to it
Install the T3 server on the VPS. The install script takes a channel, so you can match the nightly desktop app:
curl -fsSL https://t3.codes/install.sh | T3CODE_CHANNEL=nightly sh
# keep it running in the background, across reboots
t3 service install
Because T3 runs the CLIs you installed in step 3, it uses the proxy from step 4 automatically. You don’t need to configure T3 for it.
Next, connect your laptop to it. There are two routes, and you can use both:
Route A: Tailscale. On the VPS, run:
t3 pair --tailscale
This publishes the server over HTTPS on your tailnet and prints a one-time pairing link and QR code. In the desktop app, go to Settings → Connections → Add environment and paste the link.
Route B: T3 Connect. On the VPS, run t3 connect and follow the sign-in. On your laptop, sign in to the same T3 Connect account in Settings → Connections and pick the environment. No Tailscale needed.
Two more things I had to fix on the server before everything worked:
The browser. T3 can give agents a headless browser on the VPS, but it needs Chrome and its libraries installed first:
t3 browser setup
On a root VPS, Chrome’s sandbox still won’t start, so disable it for the T3 service. The same override is where IS_SANDBOX=1 from step 3 goes:
systemctl --user edit t3code
[Service]
Environment=T3CODE_SERVER_BROWSER_SANDBOX=0
Environment=IS_SANDBOX=1
t3 service restart
Now start a thread on the VPS environment from your laptop. Ask the agent to run hostname. If it prints the VPS’s name, you’re driving the server.
6. Put your laptop on the proxy too (optional)
If you set up the proxy, point your laptop’s CLIs at it as well, so local threads draw from the same pool of accounts. Use the same ~/.claude/settings.json and ~/.codex/config.toml from step 4 on your laptop, and set FLEET_PROXY_KEY in your environment.
Restart T3 Code afterwards so the agents pick up the new settings. The proxy dashboard should show requests from both machines.
7. Put T3 Code on your phone
If you followed my advice and installed the nightly, you need the beta phone app. The App Store and Play Store versions can’t connect to nightly builds.
- iPhone and iPad: join the TestFlight beta.
- Android: join the beta group, then open the Play testing page with the same Google account and become a tester.
The nightly desktop app also shows these links as QR codes under Settings → General → Mobile app. On the stable build, use the regular iOS or Android app.
Connect it the same way as your laptop. With Tailscale, run t3 pair --tailscale on the VPS and scan the QR code from Settings → Environments in the app. With T3 Connect, sign in. To reach your laptop’s local threads from your phone, create a link in Settings → Connections on the desktop app.
Now you can start a long task, leave your desk, and check it from your phone. You can approve actions, send follow-ups, and start new threads from the app.
The result
- Your agents run on a machine that never sleeps.
- Your laptop and phone can both start, follow, and steer them.
- With the proxy, every tool on every machine draws from every subscription you pay for. When one account hits its limit, the next one takes over.
If the VPS breaks, you can rebuild it in an afternoon, and your agent can do most of the work.
If you get stuck on any step, find me on X at @timithechef.