Claude Code

権限プロンプト

purplemux が Claude Code の「これを実行してもよいですか?」ダイアログをインターセプトし、ダッシュボード・キーボード・スマートフォンから承認できるようにする方法。

Claude Code はデフォルトで権限ダイアログ — ツール呼び出し、ファイル書き込みなど — でブロックします。purplemux はそれが現れた瞬間にダイアログを捕まえ、あなたが今そばにいるデバイスに届けます。

インターセプトされるもの

Claude Code はいくつかの理由で Notification フックを発火します。purplemux は次の 2 種類の通知タイプだけを権限プロンプトとして扱います:

  • permission_prompt — 標準の「このツールを実行しますか?」ダイアログ
  • worker_permission_prompt — サブエージェントから来る同じもの

それ以外 (アイドル時のリマインダーなど) はステータス側で無視され、タブを 入力待ち に切り替えたりプッシュを送ったりしません。

発火したときに何が起きるか

  1. Claude Code が Notification フックを発行します。~/.purplemux/status-hook.sh のシェルスクリプトがイベントと通知タイプをローカルサーバに POST します。
  2. サーバはタブの状態を 入力待ち (アンバーのパルス) に切り替え、ステータス WebSocket で変更をブロードキャストします。
  3. ダッシュボードはプロンプトを タイムラインのインライン にレンダリングし、Claude が提供したのと同じオプションを表示します — モーダルもコンテキストスイッチもありません。
  4. 通知許可を与えていれば、needs-input で Web Push やデスクトップ通知が発火します。

Claude CLI 自体は依然として stdin で待機しています。purplemux は tmux からプロンプトのオプションを読み、あなたが選んだら回答を送り返します。

応答方法

3 つの等価な方法があります:

  • タイムラインで オプションをクリック
  • 数字キーを押す123
  • スマートフォンで プッシュをタップ — プロンプトに直接ディープリンクするので、そこで選択できます。

選択すると、purplemux が tmux に入力を送り、タブは ビジー に戻り、Claude はストリームの途中から再開します。他に確認すべきことはありません — クリック自体が確認になります。

連続するプロンプトは自動的に再取得
Claude が立て続けにいくつもの質問をすると、次の `Notification` が届くと同時にインラインプロンプトが新しいオプションで再描画されます。前のものを明示的に閉じる必要はありません。

モバイルフロー

PWA がインストールされていて通知が許可されていれば、ブラウザタブが開いていても、バックグラウンドでも、閉じていても Web Push が発火します:

  • 通知は「Input Required」と表示し、セッションを識別します。
  • タップすると、そのタブにフォーカスして purplemux が開きます。
  • インラインプロンプトはすでに描画されているので、ワンタップで選べます。

これが Tailscale + PWA のセットアップを推奨する一番の理由です — 承認をデスクから持ち出せます。

オプションをパースできない場合

まれに (purplemux が読み取る前にプロンプトが tmux のスクロールバックから流れてしまった場合)、オプションリストが空で返ってくることがあります。タイムラインには「プロンプトを読めませんでした」というカードが表示され、バックオフ付きで最大 4 回リトライします。それでも失敗したら、そのタブの ターミナル モードに切り替えて、生の CLI で答えてください — 内部の Claude プロセスはまだ待機しています。

アイドル時のリマインダーは?

Claude の他の通知タイプ — 例えばアイドル時のリマインダー — もフックエンドポイントに届きます。サーバはそれらをログに記録しますが、タブの状態を変えたり、プッシュを送ったり、UI プロンプトを表示したりはしません。これは意図的です: Claude を ブロック するイベントだけがあなたの注意を必要とするからです。

次のステップ