一覧に戻る

ブログ

ヒューマン・イン・ザ・ループ:Tactic Remote の承認システムが開発者に制御を委ねる仕組み

Tactic Remote の承認システムは、hook を介して Claude Code のツール呼び出しを傍受し、プッシュ通知として iPhone に送信します。各アクションを明示的に承認または拒否するまで実行はブロックされます。

公開日 タグ: security / approvals / architecture / ai-safety
ブログ

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

カテゴリを見る

AI コーディングエージェントは強力ですが、監視のない力はリスクです。Tactic Remote は、開発者が開発環境内で AI エージェントが行うすべての重要なアクションを承認すべきだという信念のもとに構築されました。今回は、承認システムの仕組み、レイテンシへの影響、そして今後の展望について詳しく解説します。

承認が重要な理由

Claude Code はファイルの読み取り、ファイルの書き込み、shell コマンドの実行、外部サービスとのやり取りが可能です。これらのアクションにはそれぞれ実際の影響があります。プロンプトの誤解により、ファイルの削除、不正な git 操作、意図しない API 呼び出しが発生する可能性があります。

Anthropic は Claude Code にターミナルでユーザーに承認を求めるパーミッションシステムを組み込みました。しかし、Mac から離れている場合——通勤中、会議中、あるいは別の部屋にいる場合——これらのプロンプトは実行を無期限にブロックします。エージェントはただ待機するだけです。

Tactic Remote は、すべての承認プロンプトをリアルタイムで iPhone に送信することでこの問題を解決します。提案されたアクションを確認し、完全なコンテキストを把握した上で、タップして承認または拒否できます。エージェントはすぐに再開します。Mac への切り替えは不要です。

アーキテクチャ:Hook とインターセプト

承認システムは Claude Code の hook メカニズムの上に構築されています。Claude Code がツール呼び出しを実行しようとするとき——ファイル書き込み、shell コマンド、その他パーミッションが必要なアクション——Tactic Remote Mac コンパニオンが実行前にイベントをインターセプトします。

フローは以下の通りです:

  1. Claude Code がツール呼び出しを開始。 例えば、プロジェクトディレクトリで rm -rf node_modules && npm install を実行しようとします。
  2. Hook が発火。 Tactic Remote の hook スクリプトがツール名、引数、提案されたアクションの完全なコンテキストをキャプチャします。これは同期的に行われ、Claude Code は hook の戻りを待ってポーズ状態になります。
  3. Mac コンパニオンがアクションを評価。 設定された自動承認ルールに対してアクションをチェックします。アクションがルールに一致する場合(例:読み取り専用のファイル操作)、iPhone を介さず即座に承認を返します。
  4. 手動承認が必要な場合、プッシュ通知が送信される。 通知にはアクションタイプ、Claude が実行しようとしている内容の要約、判断に必要な十分なコンテキストが含まれます。
  5. iPhone アプリが承認リクエストを表示。 完全なコマンドまたはファイル差分、作業ディレクトリ、このアクションに至った会話のコンテキストを確認できます。
  6. 承認または拒否。 レスポンスは WebSocket 経由で Mac コンパニオンに送られ、結果が hook に返され、Claude Code のブロックが解除されます。

Claude Code の観点からは、チェーン全体が同期的です。hook を呼び出してレスポンスを受け取っただけです。承認が別のネットワーク上の電話を経由したことは認識しません。

iPhone での承認画面

承認画面は迅速で情報に基づいた判断ができるように設計されています。各リクエストには以下が表示されます:

  • アクションタイプ —— ファイル書き込み、shell コマンド、API 呼び出し、その他のツール呼び出し。
  • 完全なペイロード —— 実行される正確なコマンドまたは書き込まれる正確な内容。shell コマンドは要約や切り捨てされません。ファイル差分は変更される具体的な行を表示します。
  • 作業ディレクトリ —— アクションが実行される場所。影響範囲を評価できます。
  • 会話の抜粋 —— Claude がこのアクションを提案するに至った直近の数回のやり取り。リクエストの「理由」がわかります。
  • セッションメタデータ —— どの tmux セッションか、実行時間、このセッションで既に承認されたアクション数。

承認、拒否、またはフィードバックメッセージ付きの拒否が可能です。メッセージは Claude Code にフィードバックとして送信されます。

パフォーマンス:承認の速さは?

すべての接続モードにおける承認のラウンドトリップ時間を計測しています。これらの数値は、Claude Code の hook が発火してから承認レスポンスを受信して実行を再開するまでの時間です。

シナリオ中央値P95
ローカルネットワーク、アプリがフォアグラウンド85ms + 人間の時間140ms + 人間の時間
ローカルネットワーク、アプリがバックグラウンド(プッシュ通知)1.2s + 人間の時間2.8s + 人間の時間
Cloudflare Tunnel、アプリがフォアグラウンド280ms + 人間の時間450ms + 人間の時間
Cloudflare Tunnel、アプリがバックグラウンド1.8s + 人間の時間3.5s + 人間の時間

「人間の時間」が支配的な要因です。実際には、ほとんどの開発者はセッションをアクティブに監視している場合、3〜8 秒以内に承認リクエストに応答します。システムのオーバーヘッドは判断時間と比較して無視できるレベルです。

重要なのは、自動承認ルールに一致するアクションに対しては承認システムのオーバーヘッドがゼロであることです。これらは iPhone を完全にバイパスし、Mac 上で 5ms 未満で解決されます。

自動承認ポリシー

すべてのアクションに手動レビューが必要なわけではありません。ファイルの読み取りは一般的に安全です。linter の実行はリスクが低いです。Tactic Remote は、どのアクションが iPhone をスキップして自動的に実行されるかを定義できる設定可能な自動承認ポリシーをサポートしています。

現在のポリシーオプション:

  • 読み取り専用ファイル操作 —— cat、read、ファイルリスト表示など、変更を伴わないアクション。
  • 特定のコマンドプレフィックス —— 例えば、npm test や cargo check で始まるすべてのコマンドを自動承認。
  • ディレクトリスコープ —— 特定のディレクトリ内のすべてのアクションを自動承認(スクラッチやテストディレクトリに便利)。
  • ツールタイプのホワイトリスト —— 特定のツールカテゴリからのすべてのアクションを承認。

ポリシーは Mac コンパニオンで設定され、iPhone アプリに同期されて可視化されます。セッションビューでアクティブなポリシーを確認でき、一時的にオーバーライドすることも可能です(例:本番デプロイ時に「すべて手動承認」に切り替え)。

フィードバック付き拒否

アクションを拒否する際、オプションでメッセージを添えることができます。このメッセージはユーザーがターミナルで入力したかのように Claude Code に返されます。Claude Code はこれをガイダンスとして扱い、アプローチを調整します。

例えば、Claude が設定ファイルの削除を提案し、あなたが「そのファイルを削除しないでください。git に含まれていないローカルオーバーライドが含まれています」と拒否した場合、Claude はフィードバックを受け入れ、代替アプローチを見つけます。これにより、同じマシンの前にいなくても、開発者とエージェントの間に真のフィードバックループが生まれます。

信頼性の保証

承認システムはフェイルセーフで設計されています:

  • 承認中に WebSocket 接続が切断された場合、hook はタイムアウトし拒否を返します。Claude Code は「パーミッション拒否」の結果を受け取り、アクションを停止します。
  • iPhone に到達できない場合(ネットワークなし、電源オフ)、保留中の承認は Mac コンパニオンで最大 10 分間キューに入ります。その時間内に電話が再接続すれば、キューに入った承認が配信されます。タイムアウト後は自動的に拒否されます。
  • Mac コンパニオンがクラッシュした場合、hook スクリプトがプロセスの欠落を検出し、拒否を返します。明示的な承認なしに Claude Code は実行を継続できません。

デフォルトの動作は常に拒否です。システムは続行するために肯定的な承認を必要とします。接続の切断やプロセスのクラッシュにより、未レビューのアクションが実行される状態は存在しません。

今後の展望

承認システムに対していくつかの改善を進めています:

詳細なポリシービルダー。 設定ファイルを編集せずに自動承認ポリシーを構築するための iPhone アプリ上のビジュアルインターフェース。ドラッグ&ドロップによるブール論理ルール:「git status または git diff に一致するが git push には一致しない shell コマンドを自動承認」。

セッションスコープの信頼エスカレーション。 特定のセッションに対して一時的に信頼レベルを引き上げる機能。例えば、大規模リファクタリングをアクティブに監視していてファイルごとに承認したくない場合に、「今後 15 分間、このセッションのすべてのファイル書き込みを自動承認」。

承認アナリティクス。 時系列での承認パターンを表示するダッシュボード——最も多く承認するアクション、最も多く拒否するアクション、履歴に基づく自動承認ポリシーの提案。

バッチ承認。 Claude Code が関連する一連のアクションを提案する場合(例:1 つの機能の一部として 5 ファイルを書き込む)、バッチとしてレビューし、セット全体を承認または拒否するオプション。

承認システムは、Tactic Remote を実際の開発作業に使えるものにしている中核です。自律的な AI エージェントは便利ですが、人間の監視を備えた自律的な AI エージェントこそが信頼に値します。この違いは重要であり、私たちはこの分野への投資を続けていきます。

Tactic Remote を試す

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

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