外出先でのClaude Code

私は携帯電話から6つのClaude Codeエージェントを並列で実行しています。ノートパソコンもデスクトップもなく、iOSのTermiusとクラウド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が入力を必要とするときに通知を受け取ることです。どこからでも非同期開発。

インフラストラクチャ

シリコンバレーのVultr VM:

SpecValue
Instancevhf-8c-32gb
Cost$0.29/時間 (稼働時は~$7/日)
AccessTailscaleのみ (公開SSHなし)

作業時のみ支払います。2つのスクリプトがライフサイクルを管理します:

vm-start   # Start VM, wait for Tailscale, connect via mosh
vm-stop    # Halt VM

また、Vultr APIを直接呼び出すiOS Shortcutも持っています。Termiusを開く前に、電話からVMを起動します。

VMの公開IPにはSSHリスナーがありません。すべてのアクセスはTailscaleのプライベートネットワークを経由します。多層防御: クラウドファイアウォールはTailscale調整以外のすべてをブロック、バックアップとしてのローカルnftables、念のためfail2ban。

モバイルターミナル

TermiusはiOS/AndroidでSSHとmoshを処理します。moshが鍵です。ネットワークの移行に耐えられます。WiFiからセルラーに切り替え、デッドゾーンを歩き、電話をスリープにします。接続は持続します。

mosh --ssh="ssh -p 47892" [email protected]

1つの注意点: moshはSSHエージェントを転送しません。GitHub認証が必要なgit操作には、tmux内で通常のSSHを使用します。

セッション永続性

シェルはログイン時に自動的に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。電話のキーボードでうまく機能します。

プッシュ通知

これがモバイル開発を実用的にするものです。通知がなければ、常にターミナルをチェックすることになります。通知があれば、離れることができます。

~/.claude/settings.jsonのフック:

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "AskUserQuestion",
      "hooks": [{
        "type": "command",
        "command": "~/.claude/hooks/poke-notify.sh question"
      }]
    }]
  }
}

ClaudeがAskUserQuestionを呼び出すと、フックが起動します。シンプルなスクリプトが質問を抽出し、PokeのwebhookにPOSTします:

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/時間です。何かが暴走しても、1日の上限は制限されています。

並列開発

Git worktreesで複数の機能を同時に実行できます:

~/Code/myproject/              # main
~/Code/myproject-sidebar/      # feature branch
~/Code/myproject-dark-mode/    # another feature

各worktreeは、Claudeエージェントを持つ独自のtmuxウィンドウを取得します。ポート割り当てはハッシュベース—ブランチ名から決定論的で、競合なし:

hash_val = sum(ord(c) for c in branch_name)
django_port = 8001 + (hash_val % 99)

6つのエージェント、6つの機能、1つの電話。

これが可能にすること

コーヒーを待っている間にPRをレビュー。電車でリファクタリングを開始。テレビを見ながらソファからバグを修正。

パターン: Claudeに10〜20分かかるタスクを開始し、他のことをし、通知を受け取り、応答し、繰り返します。開発は、専用のデスク時間を必要とする代わりに、1日の隙間に収まります。

コンポーネント

ToolPurpose
VultrクラウドVM ($0.29/時間、従量課金)
Tailscaleプライベートネットワーク、安全なアクセス
TermiusiOS/Android SSHクライアント
moshネットワーク耐性シェル
tmuxセッション永続性
Pokewebhook経由のプッシュ通知
Claude Code実際の作業

セットアップはClaude Code 1セッションで構築されました。Vultr APIキーとghへのアクセスを与え、安全な開発VMを要求しました。今、私は電話からコーディングしています。


この記事についてHacker Newsで議論する