一覧に戻る

ブログ

私の日常 Tactic Remote ワークフロー:セッション、通知、モバイルレビューループ

3つの Claude Code エージェントを並列実行し、完了時にプッシュ通知を受け、すべてを iPhone からレビューする — 理論ではなく、実際の日常ルーティン。

公開日 タグ: workflow / guide / productivity / practical
ブログ

このカテゴリのプロダクト/開発アップデートを確認できます。

カテゴリを見る

私は3つのプロジェクトで同時に Claude Code を動かしています。それぞれ異なるタスクを担当 — フロントエンド、バックエンド、テスト。どれかが完了したり承認が必要になったりすると、スマホにプッシュ通知が届きます。タップして、レビューして、承認して、立ち去る。

これが Tactic Remote を使った私の実際の日常ワークフローです。理論ではありません。毎日やっていることそのものです。

要約: 3つの tmux セッション、プロジェクトまたはタスクごとに1つ。Mac コンパニオンアプリが自動設定する hooks でプッシュ通知を送信。iPhone からレビュー、ワンタップで承認、歩き続ける。

セッションレイアウト

tmux セッションはツールごとではなく、プロジェクトごとに整理しています。各プロジェクトにはそれぞれの作業ディレクトリを持つ専用セッションがあります:

┌─────────────────────────────────────────────────┐
│                  Your Mac                        │
│                                                  │
│  tmux session: webapp      (~/code/webapp)       │
│    └─ Claude: "Refactoring auth to use JWT..."   │
│                                                  │
│  tmux session: api         (~/code/api)          │
│    └─ Claude: "Adding rate limiting..."          │
│                                                  │
│  tmux session: mobile      (~/code/mobile-app)   │
│    └─ Claude: "Fixing navigation crash..."       │
│                                                  │
└─────────────────────────────────────────────────┘
                      │
                      │  push notification:
                      │  "Claude Task Completed — webapp"
                      ▼
              ┌──────────────┐
              │   iPhone     │
              │  Claude      │
              │  Remote      │
              └──────────────┘

なぜウィンドウではなくセッションなのか?各 Claude Code インスタンスには独自の作業ディレクトリと独自の50,000行スクロールバックバッファが必要だからです。セッションならクリーンな分離が得られます — プロジェクト間の切り替えはセッションの切り替えであり、どのウィンドウ番号がどのタスクに対応するかを覚える必要はありません。

スマホからのセッション作成

Tactic Remote アプリから:

  1. セッションピッカーをタップ(画面上部)
  2. 「Create Session」をタップ
  3. 名前を付ける(例:webapp)
  4. パスピッカーでプロジェクトディレクトリを選択
  5. 「Start Claude」をタップ

内部的には以下が実行されます:

tmux new-session -d -s webapp -c ~/code/webapp
tmux set-option -t webapp history-limit 50000
tmux send-keys -t webapp -l 'claude'
tmux send-keys -t webapp C-m

その後、api と mobile でも同じことを繰り返します。3つのセッション、3つの独立した Claude Code インスタンス、それぞれ適切なプロジェクトにスコープされています。

通知パイプライン

ここがワークフロー全体を実用的にする部分です。通知がなければ、Claude が完了したかどうかスマホを何度もチェックし続ける必要があります。通知があれば、本当に立ち去ることができます。

セットアップ方法

Mac コンパニオンアプリがサーバー起動時に Claude Code hooks を自動設定します。手動セットアップは不要です。~/.claude/hooks/ に3つのシェルスクリプトを書き込みます:

#!/bin/bash
# claude-remote-stop.sh (auto-generated)
 
PORT="${CLAUDE_REMOTE_PORT:-8765}"
HOOK_SERVER_URL="http://localhost:${PORT}/hook"
 
TMUX_SESSION=""
if [ -n "$TMUX" ]; then
    TMUX_SESSION=$(tmux display-message -p '#S')
fi
 
PROJECT="$(basename "$PWD")"
TIMESTAMP=$(date +%s)
 
curl -s -X POST "$HOOK_SERVER_URL" \
    -H "Content-Type: application/json" \
    -d "{\"event\":\"Stop\",\"project\":\"$PROJECT\",\"tmux_session\":\"$TMUX_SESSION\",\"timestamp\":$TIMESTAMP}" \
    > /dev/null 2>&1 &
exit 0

次に、これらのスクリプトを ~/.claude/settings.json に登録し、Claude Code がライフサイクルイベント時に呼び出せるようにします:

{
  "hooks": {
    "Stop": [
      {
        "matcher": "*",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/claude-remote-stop.sh" }]
      }
    ],
    "Notification": [
      {
        "matcher": "*",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/claude-remote-notification.sh" }]
      }
    ]
  }
}

イベントフロー

Claude タスク完了
    │
    ▼
Claude Code hook 発火: claude-remote-stop.sh
    │
    ▼
curl POST http://localhost:8765/hook
  {"event": "Stop", "project": "webapp", "tmux_session": "webapp"}
    │
    ▼
Node.js サーバーが hook を受信 → 全 WebSocket クライアントにブロードキャスト
    │
    ├─► iPhone がフォアグラウンドの場合:
    │     ターミナルに表示: 📢 [Claude] Project completed
    │
    └─► iPhone がバックグラウンドの場合:
          システムプッシュ通知が表示
          タップ → セッションに直接遷移

重複排除

Claude は短時間に複数の hook イベントを発火することがあります — 例えば、複数のサブタスクを連続で完了した場合です。iOS アプリは3秒のウィンドウで重複排除を行います。同じイベント(同じプロジェクト、同じセッション、同じタイムスタンプ)が3秒以内に2回届いた場合、重複は静かに破棄されます。通知のスパムはありません。

レビューループ

典型的なレビューサイクルはこのようになります:

ステップ 1: 通知を受ける

スマホが振動:"Claude Task Completed — webapp"

コーヒーショップにいても、ソファにいても、ランチに向かって歩いていても。関係ありません。

ステップ 2: 出力を確認する

通知をタップ。Tactic Remote が webapp セッションに直接開きます。Claude のフル出力 — 変更内容、質問事項、テスト結果 — が表示されます。

ターミナルビューは Claude Code のフォーマットをすべて保持します:シンタックスハイライト、diff の色分け、UI の罫線文字。簡略化されたサマリーではなく、ANSI カラーでスマホにレンダリングされた本物のターミナル出力です。

出力が長い場合はスクロールアップ。50,000行の tmux スクロールバックバッファにより、不在中に Claude がページ分の出力を生成していても何も失われません。アプリは「Load More」で最大5,000行まで取得できます。

ステップ 3: 承認またはリダイレクト

よくある3つのシナリオ:

Claude がコマンド実行の許可を待っている場合:

Claude は以下のように表示します:

> Need permission to run: npm install bcrypt
> [y/n]

キーボードツールバーの Y ボタンをタップ。ワンタップ。Claude が続行します。

Claude が完了してプロンプトで待機中の場合:

新しい指示を入力:「認証モジュールのテストを書いて。」送信。Claude が次のタスクに取り掛かります。スマホをしまう。

Claude がエラーに遭遇してガイダンスが必要な場合:

エラーを読み、別の方法を説明するレスポンスを入力して送信。Claude がアプローチを調整します。

ステップ 4: 立ち去る

承認またはリダイレクト後、次のセッションに切り替えます(セッションピッカーをタップ、api をタップ)。もう1つのタスクを確認。まだ実行中なら、立ち去って次の通知を待ちます。

ループは:通知 → レビュー → アクション → 立ち去る。各サイクルは Claude が生成した内容に応じて30秒から2分です。

並列タスク戦略

複数の Claude インスタンスを並列実行するのは強力ですが、ある程度の規律が必要です。学んだことを共有します:

各タスクに明確で完全なブリーフを与える

「フロントエンドを作業して」のような曖昧な指示は送らないでください。具体的に:

Refactor the authentication module in src/auth/ to use JWT tokens
instead of session cookies. Update all route handlers that check
auth. Write tests. Run the existing test suite to make sure nothing
breaks.

プロンプトが具体的であるほど、Claude が入力を必要とするまで自律的に長く作業できます。曖昧なプロンプトは中断が増えることを意味します。

開始をずらす

3つのセッションをまったく同時に開始しないでください。1つ開始し、作業が始まるのを待ち(約5秒で最初の出力が表示されます)、次を開始。これにより3つ同時に許可プロンプトが表示されること、つまり通知が一度に3つ届くことを避けられます。

忙しいものは最後にチェック

レビュー時は、最も長く実行されているセッションから始めましょう — 完了しているか詰まっている可能性が最も高いです。最も最近開始されたセッションはおそらくまだ作業中です。

意味のあるセッション名を使う

「Claude Task Completed — webapp」というプッシュ通知が届いたとき、考えずにそれが何を意味するか分かる必要があります。セッションに session1、session2、session3 と名前を付けないでください。プロジェクトやタスクにちなんだ名前にしましょう。

よく使うクイックアクション

チャットビュー下部のキーボードツールバーには、Claude Code とのインタラクション用に設計された特殊キーがあります:

ボタン動作使用場面
Yy キーを送信権限プロンプトの承認
Nn キーを送信権限プロンプトの拒否
EnterEnter を送信選択の確定
EscEscape を送信キャンセルまたは閉じる
TabTab を送信オートコンプリートまたはオプション切り替え
Ctrl+C中断を送信暴走プロセスの停止

Y と N ボタンが存在するのは、Claude Code の権限プロンプトが最も一般的なインタラクションだからです。スマホのキーボードで「y」と入力するのではなく、シングルタップで承認できることが、モバイルワークフローを実用的にしています。

私の .tmux.conf

最小限。特別なことはしていません:

# Big scrollback — Claude produces a LOT of output
set -g history-limit 50000
 
# Mouse scrolling (not used much from the phone, but helpful at the desk)
set -g mouse on
 
# Start window numbering at 1
set -g base-index 1

Tactic Remote はセッション作成時にスクロールバックを50,000に設定するので、.tmux.conf の設定は手動で作成したセッション用のバックアップです。

実践での一日の流れ

典型的な午前中:

8:00 AM — Mac に座る。3つのプロジェクトに作業が必要。Mac コンパニオンアプリから3つのセッションを作成(または iPhone からでも — どちらでも可)。

8:05 AM — 各セッションに Claude へ詳細なタスクを送信。キッチンへ。

8:20 AM — 最初の通知:api セッション完了。iPhone でレビュー。Claude がレート制限を追加し、テスト合格。次のタスクを送信:「API ドキュメントにレート制限ヘッダーを追加して。」

8:35 AM — 2つ目の通知:webapp セッションが承認待ち。開く。Claude が新しい依存関係をインストールしたい。問題なさそうか確認。Y をタップ。デスクへ。

8:50 AM — 3つ目の通知:mobile セッション完了。レビュー。問題なし。新しいタスクを開始。

9:00 AM — Mac に座る。3つのプロジェクトすべてが大きく進捗。git で diff を確認、コミット、プッシュ。

1時間、3プロジェクト、大半はコーヒーを入れて朝食をとっている間に完了。スマホベースのレビューループにより、Claude がデスクにいる私を待ってブロックされることはありませんでした。

ヒント

通知を即座に有効化。 hooks は Mac コンパニオンアプリが自動設定しますが、初回起動時に iPhone で通知許可を付与する必要があります。最初の起動時にこれを行ってください — ワークフロー全体がこれに依存しています。

Tactic Remote をドックに配置。 アクティブな開発セッション中は1日に20〜30回開きます。ワンタップでアクセスできることが重要です。

スクロールバックを信頼。 セッションに再接続すると、すべての出力がそこにあります。Claude に「何をした?」と聞く必要はありません — スクロールアップしてターミナル出力を直接読みましょう。

マイクロマネジメントしない。 このワークフローのポイントは、Claude に十分な量のタスクを与えて立ち去ることです。2分ごとにチェックしているなら、使い方を間違えています。15分のタスクを与え、通知を待ち、レビューしましょう。


サーバー、tmux、通知が内部でどのように動作するかの技術的詳細については、スマホから Claude Code をリモート実行するを参照してください。初期セットアップについては、はじめにを参照してください。

Tactic Remote を試す

スマートフォンからコーディングエージェントを操作

Mac、Windows、Linux 上の Claude Code や Codex などに接続。iPhone や iPad で進捗を確認し、次の指示を送れます。