権限プロンプト
purplemux が Claude Code の「これを実行してもよいですか?」ダイアログをインターセプトし、ダッシュボード・キーボード・スマートフォンから承認できるようにする方法。
Claude Code はデフォルトで権限ダイアログ — ツール呼び出し、ファイル書き込みなど — でブロックします。purplemux はそれが現れた瞬間にダイアログを捕まえ、あなたが今そばにいるデバイスに届けます。
インターセプトされるもの
Claude Code はいくつかの理由で Notification フックを発火します。purplemux は次の 2 種類の通知タイプだけを権限プロンプトとして扱います:
permission_prompt— 標準の「このツールを実行しますか?」ダイアログworker_permission_prompt— サブエージェントから来る同じもの
それ以外 (アイドル時のリマインダーなど) はステータス側で無視され、タブを 入力待ち に切り替えたりプッシュを送ったりしません。
発火したときに何が起きるか
- Claude Code が
Notificationフックを発行します。~/.purplemux/status-hook.shのシェルスクリプトがイベントと通知タイプをローカルサーバに POST します。 - サーバはタブの状態を 入力待ち (アンバーのパルス) に切り替え、ステータス WebSocket で変更をブロードキャストします。
- ダッシュボードはプロンプトを タイムラインのインライン にレンダリングし、Claude が提供したのと同じオプションを表示します — モーダルもコンテキストスイッチもありません。
- 通知許可を与えていれば、
needs-inputで Web Push やデスクトップ通知が発火します。
Claude CLI 自体は依然として stdin で待機しています。purplemux は tmux からプロンプトのオプションを読み、あなたが選んだら回答を送り返します。
応答方法
3 つの等価な方法があります:
- タイムラインで オプションをクリック。
- 数字キーを押す — 1、2、3。
- スマートフォンで プッシュをタップ — プロンプトに直接ディープリンクするので、そこで選択できます。
選択すると、purplemux が tmux に入力を送り、タブは ビジー に戻り、Claude はストリームの途中から再開します。他に確認すべきことはありません — クリック自体が確認になります。
モバイルフロー
PWA がインストールされていて通知が許可されていれば、ブラウザタブが開いていても、バックグラウンドでも、閉じていても Web Push が発火します:
- 通知は「Input Required」と表示し、セッションを識別します。
- タップすると、そのタブにフォーカスして purplemux が開きます。
- インラインプロンプトはすでに描画されているので、ワンタップで選べます。
これが Tailscale + PWA のセットアップを推奨する一番の理由です — 承認をデスクから持ち出せます。
オプションをパースできない場合
まれに (purplemux が読み取る前にプロンプトが tmux のスクロールバックから流れてしまった場合)、オプションリストが空で返ってくることがあります。タイムラインには「プロンプトを読めませんでした」というカードが表示され、バックオフ付きで最大 4 回リトライします。それでも失敗したら、そのタブの ターミナル モードに切り替えて、生の CLI で答えてください — 内部の Claude プロセスはまだ待機しています。
アイドル時のリマインダーは?
Claude の他の通知タイプ — 例えばアイドル時のリマインダー — もフックエンドポイントに届きます。サーバはそれらをログに記録しますが、タブの状態を変えたり、プッシュを送ったり、UI プロンプトを表示したりはしません。これは意図的です: Claude を ブロック するイベントだけがあなたの注意を必要とするからです。
次のステップ
- セッションステータス — 入力待ち 状態の意味と検出方法。
- ライブセッションビュー — インラインプロンプトがレンダリングされる場所。
- ブラウザサポート — Web Push の要件 (特に iOS Safari 16.4+)。