Ik draai zes Claude Code agents parallel vanaf mijn telefoon. Geen laptop, geen desktop—alleen Termius op iOS en een cloud VM.
De Setup
flowchart LR
A[Phone] -->|Termius + mosh| B[Tailscale VPN]
B --> C[Vultr VM]
C --> D[Claude Code]
D -->|PreToolUse hook| E[Poke webhook]
E -->|Push notification| A
De cyclus is: start een taak, telefoon in je zak, krijg een melding wanneer Claude input nodig heeft. Asynchroon ontwikkelen vanaf elke locatie.
Infrastructuur
Een Vultr VM in Silicon Valley:
| Spec | Value |
|---|---|
| Instance | vhf-8c-32gb |
| Cost | $0.29/uur (~$7/dag wanneer actief) |
| Access | Alleen Tailscale (geen publieke SSH) |
Ik betaal alleen wanneer ik werk. Twee scripts beheren de levenscyclus:
vm-start # Start VM, wait for Tailscale, connect via mosh
vm-stop # Halt VM
Ik heb ook een iOS Shortcut die de Vultr API rechtstreeks aanroept—start de VM vanaf mijn telefoon voordat ik Termius zelfs maar open.
Het publieke IP van de VM heeft geen SSH listener. Alle toegang gaat via het privénetwerk van Tailscale. Verdediging in de diepte: cloud firewall blokkeert alles behalve Tailscale-coördinatie, lokale nftables als back-up, fail2ban voor de zekerheid.
Mobiele Terminal
Termius handelt SSH en mosh af op iOS/Android. Mosh is de sleutel—het overleeft netwerkovergangen. Schakel van WiFi naar mobiel netwerk, loop door een dode zone, zet de telefoon in slaapstand. De verbinding blijft bestaan.
mosh --ssh="ssh -p 47892" [email protected]
Eén valkuil: mosh stuurt geen SSH agent door. Voor git-operaties die GitHub-authenticatie nodig hebben, gebruik ik gewone SSH binnen tmux.
Sessiepersistentie
De shell maakt automatisch verbinding met tmux bij inloggen. Sluit Termius, open het uren later opnieuw, alles is er nog.
# In .zshrc
if [[ -z "$TMUX" ]]; then
tmux attach -t main 2>/dev/null || tmux new -s main
fi
Meerdere Claude agents draaien in parallelle vensters. C-a c voor nieuw venster, C-a n om te wisselen. Werkt goed op een telefoontoetsenbord.
Push Notificaties
Dit is wat mobiele ontwikkeling praktisch maakt. Zonder notificaties zou je constant de terminal moeten controleren. Met notificaties kun je weglopen.
De hook in ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [{
"matcher": "AskUserQuestion",
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/poke-notify.sh question"
}]
}]
}
}
Wanneer Claude AskUserQuestion aanroept, wordt de hook geactiveerd. Een eenvoudig script haalt de vraag op en POST naar Poke’s webhook:
QUESTION=$(echo "$EVENT_DATA" | jq -r '.tool_input.questions[0].question')
MESSAGE="$PROJECT_NAME: Claude needs input - $QUESTION"
curl -X POST "$API_URL" -d "{\"message\": \"$MESSAGE\"}"
Telefoon trilt. Notificatie toont de vraag. Tik, antwoord, ga verder.
Vertrouwensmodel
Ik draai Claude Code in permissieve modus. De VM is geïsoleerd—geen toegang tot productiesystemen, geen geheimen behalve wat nodig is voor ontwikkeling. Slechtste geval: Claude doet iets onverwachts op een wegwerpbare VM.
Kostenbeheersing voegt een extra laag toe. De VM kost $0.29/uur. Zelfs als iets ontspoort, is het dagelijkse maximum begrensd.
Parallelle Ontwikkeling
Git worktrees laten me meerdere features tegelijkertijd draaien:
~/Code/myproject/ # main
~/Code/myproject-sidebar/ # feature branch
~/Code/myproject-dark-mode/ # another feature
Elke worktree krijgt zijn eigen tmux-venster met een Claude agent. Poorttoewijzing is hash-gebaseerd—deterministisch vanaf branchnaam, geen conflicten:
hash_val = sum(ord(c) for c in branch_name)
django_port = 8001 + (hash_val % 99)
Zes agents, zes features, één telefoon.
Wat Dit Mogelijk Maakt
PR’s reviewen terwijl je wacht op koffie. Een refactor starten in de trein. Een bug fixen vanaf de bank terwijl je tv kijkt.
Het patroon: start een taak die Claude 10-20 minuten zal kosten, doe iets anders, krijg een melding, reageer, herhaal. Ontwikkeling past in de tussentijd van de dag in plaats van toegewijde bureautijd te vereisen.
De Componenten
| Tool | Purpose |
|---|---|
| Vultr | Cloud VM ($0.29/uur, pay-per-use) |
| Tailscale | Privénetwerk, veilige toegang |
| Termius | iOS/Android SSH-client |
| mosh | Netwerkbestendige shell |
| tmux | Sessiepersistentie |
| Poke | Push notificaties via webhook |
| Claude Code | Het eigenlijke werk |
De setup kostte één Claude Code sessie om te bouwen—gaf het mijn Vultr API-sleutel en toegang tot gh, vroeg om een veilige dev VM. Nu codeer ik vanaf mijn telefoon.
Bespreek dit artikel op Hacker News