構成を絞り込んでいれば、スマートフォンから Claude Code の操作を承認するのはおおむね安全です。応答できるのはペアリングしたスマートフォンだけで、スマートフォンが応答できるのは Claude Code がもともと表示するはずだった prompt だけ、そしてスマートフォンの応答に関係なく deny ルールは適用されます。実際のリスクは人的・実務的なものです。小さな画面で読んでいないコマンドを承認してしまうこと、ロック解除されたスマートフォンを他人が手にすること、プロジェクトの情報がリレーサービスを経由し、ロック画面に表示されることです。前者はしっかり作られたリモート承認ツールが抑えてくれ、後者はいくつかの設定で管理できます。
01リモート承認の仕組み
Claude Code には PermissionRequest という hook イベントがあります。これは Claude Code がツールの使用許可を求めようとするときに実行されます。hook は allow または deny という判断を返すことができ、Claude Code は terminal での応答を待つ代わりにその判断を使います。リモート承認ツールはこの hook を利用し、リクエストをスマートフォンに送って待機し、あなたの応答を返します。JSON は PermissionRequest ガイドで紹介しています。
この設計には安全性に関わる3つの特性があります。いずれも Anthropic の hook ドキュメントに基づくものです:
- prompt が表示される場面でのみ発火します。permission mode や allow ルールですでに許可されている操作では、リクエストは発生しません。リモート承認によって、キーボードの前にいる場合以上の権限を Claude に与えることはできません。
- deny ルールが常に優先されます。hook が
allowを返しても、設定の deny ルールは回避されません。Read(./.env)を deny していれば、スマートフォンでタップしても Claude はそれを読めません。 - hook はあなたの権限で実行されます。コマンド hook はユーザーの全権限で実行されます。hook としてインストールしたプログラムは、あなたのアカウントがアクセスできるものなら何でも読み書きできます。つまり、スマートフォンだけでなく、どのツールを選ぶかもセキュリティの一部です。
02リスクと、それぞれを抑えるもの
他人が応答してしまう
最悪のケースは、意図しない人やデバイスが操作を承認してしまうことです。これを抑えるもの:
- ペアリング。スマートフォンが応答できるのは、ペアリング済みのコンピューターに対してだけです。Claude Code Notifier では、QR コードまたは24時間有効な6桁のコードでペアリングし、1台のコンピューターにつき最大3台のスマートフォンを登録できます。
- 取り消し。
ccn devicesでコンピューターとペアリング済みのスマートフォンを一覧し、ccn devices revoke <name>で削除できます。ccn forgetを実行すると、コンピューターとそのペアリング情報がサーバーから消去されます。 - スマートフォンのロック。ロック解除されたスマートフォンを持っていれば誰でも応答できます。スマートフォンはコンピューター上の Claude Code セッションの鍵だと考え、パスコードや生体認証でロックしてください。
読んでいないものを承認してしまう
スマートフォンでは、長いシェルコマンドはつい流し読みしがちです。次の習慣が役立ちます:
- allow をタップする前にコマンド全体を読んでください。問題ないと明らかに判断できなければ deny し、後で terminal で確認しましょう。
git push、デプロイ、パッケージのインストールなど、プロジェクト外の状態を変更する操作には、allow for the session ではなく allow once を使うことをおすすめします。- 危険なコマンドは設定の
askルールに、シークレットはdenyルールに入れておきましょう。そうすれば、危険なケースはキューの中のワンタップではなく、落ち着いて書いたルールで判断されます。構文はパーミッションモードのガイドで紹介しています。
実際にキーボードの前にいる場合
コンピューターの前に座っているときにリクエストがスマホにも届くと、同じ prompt に 2 か所(あなたとスマホ)から応答できてしまいます。Claude Code Notifier はコンピューターでの在席状況を確認します。直近 30 秒以内に入力があれば、スマホの応答は待たずに terminal が通常どおり確認を求めます。離席中であれば、terminal は指定した上限時間までスマホからの応答を待ち、キーボードに触れた時点で待機をやめます。アイドル判定はコンピューター上で行われ、その結果が送信されることはありません。
プロジェクトの情報がコンピューターの外に出る
リクエストを表示するには、その詳細を誰かがスマホに送る必要があります。これは自作かどうかにかかわらず、Claude Code のスマホ通知に共通するプライバシー上のトレードオフです。Claude Code Notifier の場合、プライバシーポリシーに定められているとおり次のようになります。
- アカウントはありません。各コンピューターとスマホはランダムな ID で識別されます。
- 通知に含まれうる内容:プロジェクト名とフォルダパス、Claude のメッセージまたは質問、prompt の冒頭部分、そしてパーミッション確認の場合はツール名と入力の要約(シェルコマンドやファイルパスなど、最大 200 文字)です。
- 送信先:Cloudflare 上で動作する TouchTap のリレーサーバーを経由し、push 配信のために短縮版が Apple または Google に送られます。プロジェクトのフォルダパスは Apple や Google には送信されません。
- 保存期間:サーバーは通知とそれに対する応答を 48 時間以内に削除します。リレーサーバーは IP アドレスを保存しません。
- 通信中:サーバーとの通信はすべて TLS(HTTPS および WSS)を使用します。リレーは配信のために通知内容を保持するため、これは通信の暗号化であり、エンドツーエンド暗号化ではありません。
- 販売しません:データの販売や広告への利用は行いません。
コンピューター上の ccn の認証情報はランダムなトークンです。デフォルトでは macOS ではキーチェーン、Windows では資格情報マネージャー、Linux では自分のユーザーアカウントだけが読めるファイルに保存されます。ccn config set credential_store でシステムのキーチェーンとファイルを切り替えられます。
機密性の高いコードを扱う場合、ポリシー自体も、スマホ通知が適切かどうか、またコンピューターごとにどの種類の通知を有効にするかを検討するよう勧めています。notify_on_done、notify_on_permission、notify_on_question は、コマンドラインまたはスマホアプリからコンピューターごとに個別にオフにできます。
ロック画面に表示される情報が多すぎる
コマンドやクライアントのプロジェクト名が書かれたバナーは、スマホをちらっと見た人なら誰でも読めてしまいます。iPhone でも Android でも、ロック解除するまで通知のプレビューを非表示にでき、全アプリまたは特定のアプリを対象に設定できます。iPhone では「設定」の「通知」から設定します。Android ではロック画面の通知設定にあり、通常は機密性の高いコンテンツを非表示にするオプションとして用意されています。
03リモート承認を自作する場合
PermissionRequest hook とチャットボットや push サービスを組み合わせれば、リモート承認を自作することもできます。ただしその場合は認証システムを作ることになります。応答できるのは自分だけであること、古い応答が新しいリクエストに適用されないこと、応答のないリクエストでセッションが止まったままにならないことを保証しなければなりません。共有のパブリック push サーバーでは、トピック名だけが第三者を締め出す手段なので、パスワードと同様に扱ってください。ntfy や Telegram、Slack、Discord のガイドでは通知のみの構成を紹介しています。こちらは何も承認できないため、リスクははるかに小さくなります。
04自分が書いていないリポジトリの hook
承認に限らず、すべての hook に当てはまるリスクがもう一つあります。hook はプロジェクトの .claude/settings.json にコミットできます。対話型セッションでは、Claude Code はそのフォルダのワークスペース信頼ダイアログを承認するまで hook を実行しないため、信頼する前にリポジトリの .claude/ 内のファイルを確認してください。claude -p や SDK での実行ではダイアログが表示されず、フォルダは信頼済みとして扱われるため、コミットされた hook が実行されます。自分が書いていないコードをスクリプトで実行する場合は、--settings '{"disableAllHooks": true}' を指定してください。
05Claude Code Notifier の位置づけ
Claude Code Notifier は TouchTap Ltd. が開発した独立したツールで、Anthropic が開発・推奨・後援しているものではありません。コマンドラインツールの ccn は Mac、Windows、Linux 上で Claude Code の hook として動作し、iPhone と Android のアプリから allow once、allow for the session、deny を選べます。ccn のソースは GitHub で公開されているので、インストール前に hook として何が実行されるのかを正確に確認できます。セットアップ方法はスマホからの承認ガイドで説明しています。
06よくある質問
スマホからの承認で deny ルールを上書きできますか?
できません。Claude Code は hook の戻り値にかかわらず deny ルールを評価します。リモート承認で応答できるのは、Claude Code がもともと表示するはずだった prompt だけです。
Claude Code Notifier はエンドツーエンドで暗号化されていますか?
いいえ。リレーサーバーとの通信には TLS を使用し、サーバーは通知と応答を 48 時間以内に削除します。リレーは配信中に内容を保持し、push 用に短縮版が Apple または Google に送られます。
スマホを紛失した場合は?
各コンピューターで ccn devices を実行してペアリング済みのスマホを一覧表示し、ccn devices revoke <name> で紛失したスマホを削除してください。それまでは、スマホ自体のロックだけが他人による応答を防ぐ手段になります。
コードがコンピューターの外に出ることはありますか?
ccn がファイルをアップロードすることはありません。通知には、リクエストの表示に必要な情報(プロジェクト名とフォルダ、Claude のメッセージまたは質問、prompt の冒頭部分、対象となるコマンドやファイルの短い要約)が含まれます。Claude のメッセージにはコードが引用されることもあるため、機密性の高いプロジェクトでは不要な種類の通知をオフにしてください。