Я запускаю шесть агентов Claude Code параллельно с моего телефона. Без ноутбука, без настольного компьютера — только Termius на iOS и облачная VM.
Настройка
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
Цикл таков: запустить задачу, убрать телефон в карман, получить уведомление, когда Claude нужен ввод. Асинхронная разработка откуда угодно.
Инфраструктура
VM Vultr в Силиконовой долине:
| Spec | Value |
|---|---|
| Instance | vhf-8c-32gb |
| Cost | $0.29/час (~$7/день при работе) |
| Access | Только Tailscale (без публичного SSH) |
Я плачу только когда работаю. Два скрипта управляют жизненным циклом:
vm-start # Start VM, wait for Tailscale, connect via mosh
vm-stop # Halt VM
У меня также есть Shortcut для iOS, который напрямую вызывает API Vultr — запускаю VM с телефона еще до того, как открою Termius.
Публичный IP VM не имеет SSH-слушателя. Весь доступ осуществляется через частную сеть Tailscale. Эшелонированная защита: облачный файрвол блокирует все, кроме координации Tailscale, локальные nftables в качестве резервной копии, fail2ban для надежности.
Мобильный Терминал
Termius обрабатывает SSH и mosh на iOS/Android. Mosh — это ключ — он переживает смену сети. Переключение с WiFi на сотовую связь, прохождение через мертвую зону, перевод телефона в спящий режим. Соединение сохраняется.
mosh --ssh="ssh -p 47892" [email protected]
Одна загвоздка: mosh не пересылает SSH-агент. Для git-операций, требующих аутентификации GitHub, я использую обычный SSH внутри tmux.
Постоянство Сессии
Оболочка автоматически подключается к tmux при входе. Закройте Termius, откройте снова через несколько часов — все на месте.
# In .zshrc
if [[ -z "$TMUX" ]]; then
tmux attach -t main 2>/dev/null || tmux new -s main
fi
Несколько агентов Claude работают в параллельных окнах. C-a c для нового окна, C-a n для переключения. Хорошо работает на телефонной клавиатуре.
Push-Уведомления
Это то, что делает мобильную разработку практичной. Без уведомлений вы бы постоянно проверяли терминал. С ними можно отойти.
Хук в ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [{
"matcher": "AskUserQuestion",
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/poke-notify.sh question"
}]
}]
}
}
Когда Claude вызывает AskUserQuestion, срабатывает хук. Простой скрипт извлекает вопрос и отправляет POST на webhook Poke:
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\"}"
Телефон вибрирует. Уведомление показывает вопрос. Нажмите, ответьте, продолжайте.
Модель Доверия
Я запускаю Claude Code в разрешительном режиме. VM изолирована — нет доступа к производственным системам, нет секретов, кроме необходимых для разработки. Худший случай: Claude делает что-то неожиданное на одноразовой VM.
Контроль расходов добавляет еще один уровень. VM стоит $0.29/час. Даже если что-то выйдет из-под контроля, дневной лимит ограничен.
Параллельная Разработка
Git worktrees позволяют мне запускать несколько функций одновременно:
~/Code/myproject/ # main
~/Code/myproject-sidebar/ # feature branch
~/Code/myproject-dark-mode/ # another feature
Каждое worktree получает свое окно tmux с агентом Claude. Распределение портов основано на хеше — детерминировано из имени ветки, без конфликтов:
hash_val = sum(ord(c) for c in branch_name)
django_port = 8001 + (hash_val % 99)
Шесть агентов, шесть функций, один телефон.
Что Это Позволяет
Проверять PR в ожидании кофе. Запускать рефакторинг в поезде. Исправлять баг с дивана во время просмотра ТВ.
Схема: запустить задачу, которая займет у Claude 10-20 минут, заняться чем-то другим, получить уведомление, ответить, повторить. Разработка вписывается в промежутки дня вместо требования выделенного времени за столом.
Компоненты
| Tool | Purpose |
|---|---|
| Vultr | Облачная VM ($0.29/час, оплата по использованию) |
| Tailscale | Частная сеть, безопасный доступ |
| Termius | SSH-клиент для iOS/Android |
| mosh | Сетеустойчивая оболочка |
| tmux | Постоянство сессии |
| Poke | Push-уведомления через webhook |
| Claude Code | Собственно работа |
Настройка заняла одну сессию Claude Code для создания — дал ему свой API-ключ Vultr и доступ к gh, попросил безопасную dev VM. Теперь я кодирую с телефона.
Обсудите эту статью на Hacker News