education
Vibe Coding From Your Phone Without VPN Chaos
May 4, 2026
You want to build with AI. The network keeps getting in the way.
VPN on: Claude works, the bank app locks you out. VPN off: the bank works, ChatGPT says it’s not available in your region. Google Maps thinks you’re in Singapore. Then you pick up the phone and do the same dance there.
At some point you’re not coding anymore. You’re remembering which tunnel is on.
The fix isn’t a better VPN. It’s a different shape of network, and it does two things a VPN can’t:
- Rules instead of a switch. Only AI traffic takes the detour. Everything else goes direct, from where you actually are.
- One private network for all your devices. Phone, computer and server can reach each other. The public internet can’t reach any of them.
That’s the whole article. The rest is why, and how.
Why a VPN is the wrong tool
A VPN is a switch. On means all of your traffic leaves through a server in another country. Off means none of it does.
flowchart TB phone["Your phone<br/>VPN on"] vpn["VPN server<br/>in another country"] ai["Claude / ChatGPT<br/>works"] bank["Bank app<br/>blocked: suspicious location"] maps["Maps, local search<br/>wrong country"] laptop["Your computer<br/>project, agent, dev server"] phone ==>|"everything"| vpn vpn --> ai vpn --> bank vpn --> maps phone -.-x|"no way in"| laptop classDef good stroke:#4ade80,color:#f5f5f5 classDef bad stroke:#ef4726,color:#f5f5f5 class ai good class bank,maps,laptop bad
You only needed one kind of traffic to look foreign. The VPN made all of it foreign. So you toggle it all day.
And look at the bottom of that picture. Even with the VPN on, your phone still can’t reach your computer. The VPN connects you outward, to the internet. It does nothing for the thing you actually need when you’re coding away from your desk: getting to your own project.
On iPhone it’s worse. iOS gives you one VPN slot. A commercial VPN and Tailscale can’t run at the same time, so you’re forced to choose.
What we build instead
One small VPS (about $5 a month). Tailscale on the VPS, the computer and the phone. That’s it.
flowchart TB
subgraph mesh["Your private network (Tailscale)"]
direction LR
phone["Phone<br/>Moshi, browser"]
laptop["Computer<br/>herdr, agents,<br/>dev server"]
vps["Small VPS<br/>AI exit + Pi-hole"]
phone <--> laptop
laptop <--> vps
phone <--> vps
end
ai["Claude / ChatGPT"]
web["Everything else<br/>bank, maps, local sites"]
internet["Strangers on<br/>the public internet"]
vps -->|"rule: AI domains only"| ai
phone -->|"direct, real location"| web
laptop --> web
internet -.-x|"no open ports, nothing to find"| mesh
classDef good stroke:#4ade80,color:#f5f5f5
classDef outside stroke:#737373,color:#a3a3a3
class ai,web good
class internet outside
style mesh fill:#141414,stroke:#ef4726,stroke-width:2px,color:#f5f5f5phone + computer + VPS, reachable only by each other
Two ideas. Each one fixes half of the chaos.
Idea 1: rules, not a switch
Tailscale has a feature called App Connectors. You give it a short list of domains, and only traffic to those domains goes out through the VPS. Something like this:
claude.ai
claude.com
anthropic.com
chatgpt.com
openai.comThat list is the whole policy. Claude and ChatGPT see a request from the VPS. Your bank sees you in Hong Kong, because for your bank you are in Hong Kong. Maps, local search, delivery apps: all direct, all normal.
Nothing to toggle. Tailscale stays on all day, on every device, and the rules decide per request.
Idea 2: one network, zero public doors
When a device joins Tailscale, it gets a private address that only your other devices can reach. The connections are encrypted (WireGuard) and go straight between your devices wherever possible.
So your phone can open a terminal on your computer. It can open the dev server the agent just started. It can grab a file off the VPS. It works from home, from a café, from the airport, and the computer can sit behind whatever router it’s behind.
What you don’t do matters just as much:
- No open SSH port on the internet.
- No dev server published “just for a minute”.
- No cloud IDE panel with a login page anyone can find.
From the outside, your machines are invisible. There’s no door to knock on. The usual way people give their phone access to their computer is to open a port, and that’s exactly the door bots scan for all day. Here you never open one.
VPN vs proxy vs mesh
| VPN | Proxy | Tailscale mesh + VPS | |
|---|---|---|---|
| Only AI traffic goes abroad | No, everything does | Sometimes, if every app is set up | Yes, by domain rule |
| Bank and maps keep your real location | No | Depends on the app | Yes |
| Phone can reach your computer | No | No | Yes |
| Anything exposed to the internet | Nothing extra | Nothing extra | Nothing |
| Daily effort | Toggling | Per-app config | None after setup |
A VPN is fine when you want the whole device to look like it’s somewhere else. That’s not the problem here. The problem is that your phone, your computer, your agent and your AI accounts all live in different places. Only the mesh puts them in one.
The stack on top of the network
The network is the foundation. It gets your phone to your computer. What you run over it decides whether working from the phone is pleasant or painful. Here’s what I actually use every day:
| Layer | Tool | Job |
|---|---|---|
| Network | Tailscale + a small VPS | One private network, AI routed by rule |
| Phone terminal | Moshi | A terminal that survives Wi-Fi to 5G, and a push when an agent needs you |
| Agent workspace | herdr | Every agent in one place, with a live state: working, blocked, done |
| Files | Taildrop | Screenshots and builds straight to the phone |
Each of the two middle layers got its own article, because each one changed how I work.
Moshi is the phone side. It uses Mosh instead of plain SSH, so the session doesn’t die when you walk out of the house or lock the screen. And it hooks into the agents: when one finishes or asks for permission, my phone buzzes. I approve, it keeps going.
herdr is the computer side. It runs all my agents in persistent workspaces, one per project. Close the laptop, the agents keep working. Open Moshi on the phone, attach, and the sidebar shows who’s working and who’s waiting on me.
(Termius, or any SSH app with tmux on the computer, also works. That’s where I started, and it’s fine for a first week. It’s just not what I use anymore: no agent notifications, and every network switch means reconnecting.)
So from the phone you can:
- see which agent is waiting on you, and answer it
- restart a dev server and read the logs
- open the private preview URL and test the prototype on the real screen, before anything is deployed
- get files and screenshots back through Taildrop
That preview one is the multiplier. Checking a button on mobile no longer means a deploy. The agent runs the site on your computer, you open it on your phone, inside your own network.
For me this easily saves five hours a week. Not in one big block. In small cuts: VPN toggles, wrong-country search results, locked bank apps, walking back to the desk, deploying just to look at something.
It stays boring
I don’t want to sell a setup that needs babysitting. Here’s the full change history of my Tailscale policy:
| Date | Change |
|---|---|
| 2026-04-15 | Initial App Connector rules for Claude and ChatGPT |
| 2026-04-19 | Added claude.com when Anthropic moved traffic off claude.ai |
Two changes. Tailscale and Pi-hole on the VPS have been running since April 15, no restarts. That’s the standard: set it up once, fix the one real-world surprise, then forget it exists.
Cost
You stop paying for a VPN. You pay about $5 a month for a VPS that does more than a VPN ever did: it’s your AI exit, it’s always-on infrastructure your agents can use, and it runs Pi-hole, which blocks ads and trackers for every device on the network.
What the workshop covers
We set up, on your devices:
- a small VPS
- Tailscale on phone, computer and server
- App Connector rules for OpenAI and Anthropic
- Moshi on the phone, with agent notifications
- herdr on the computer, so agents keep running when you disconnect
- private preview URLs for local prototypes
- Taildrop for files
- optional Pi-hole
You leave with a working environment, not a prompt library. One private network where your phone, computer, server and AI agents behave like one system, and the rest of the internet can’t see any of it.
That’s when vibe coding from your phone stops being a stunt and becomes how you work.
Interested in this?
Learn about AI Education →