𝗠𝘆 𝗖𝗼𝗱𝗶𝗻𝗴 𝗔𝗴𝗲𝗻𝘁 𝗔𝘀𝗸𝗲𝗱 𝗣𝗲𝗿𝗺𝗶𝘀𝘀𝗶𝗼𝗻 𝗳𝗼𝗿 𝗘𝘃𝗲𝗿𝘆 𝗧𝗶𝗻𝘆 𝗦𝘁𝗲𝗽
私のAIアシスタントには大きな問題がありました。許可を求めるのを拒否したわけではありません。許可を求めすぎたのです。
PDFの読み込みのような単純なタスクを与えると、アシスタントは一歩進むごとに承認を求め、コマンドを実行し、そしてすぐに次の些細なステップのためにまた許可を求めてくるのでした。一つのタスクが、プロンプトの無限ループになってしまったのです。
承認プロンプトは必要です。ローカルのアシスタントには、コマンドの実行、ファイルの書き込み、アプリの起動を行う前に停止してほしいものです。しかし、実際の作業には多くのステップが必要です。PDFの読み込みには、Pythonの確認、コンバーターの探索、そのコンバーターの実行、そしてテキストの読み取りといった工程が含まれます。
すべてのステップで承認を求められると、リスクの評価を止めてしまいます。ただ邪魔を排除するためだけに、中断を次々とクリックし始めるのです。これは、安全システムを無視するように自分を訓練してしまうことになります。それは、安全策が全くない状態よりも危険です。
以前のワークフローは以下の通りでした:
- アシスタントがツールを選択
- ポリシーにより確認が必要
- ユーザーが承認
- ツールを実行
- アシスタントが次のツールのために再度確認を求める
アシスタントはユーザーの意図を見落としていました。あなたは一つの些細な試行を承認していたのではなく、タスク全体を承認していたのです。
私はCliGateの仕組みを変更しました。現在では、チャット内で最初の操作を承認すると、システムがフラグを立てます。これにより、その後のステップは新しい承認ラウンドなしで継続できるようになります。アシスタントは依然として実際の結果を受け取れるため、作業を続けることができます。
また、エスケープハッチとして /safe を追加しました。このコマンドを入力すると、明示的な確認モードが再び有効になります。
言語に関するバグも修正しました。システムがタスクを継続する際、プロンプトの言語が変わってしまうことがありました。例えば、中国語で話していると、アシスタントが次のプロンプトで英語に切り替わってしまうといった具合です。現在は、アシスタントがユーザーの最後の実際のメッセージを確認して、適切な言語を選択するようにしています。
解決策は、承認を無効にすることではありません。解決策は、「なぜユーザーが承認を与えたのか」を記憶することです。
ローカルツールについては、タスク単位の信頼(task-scoped trust)を利用してください:
- 大きな境界を越える前に確認する
- 現在のタスクに対する承認を記憶する
- 厳格モードに戻る手段を提供する
- システムメッセージによってユーザーの意図が変わらないようにする
これが、私がCliGateで承認機能を構築する方法です。これは、Claude Code、Codex CLI、およびGemini CLIのための、私のローカル・コントロールプレーンです。
あなたは「承認疲れ(approval fatigue)」にどのように対処していますか?ツール呼び出しごと、タスクごと、それともセッションごとに行っていますか?
私のコーディングエージェントは、あらゆる些細なステップで許可を求めてきた
しばらくの間、AI コーディングエージェントを使用していますが、それらは素晴らしいものです。しかし、助けになるどころか、むしろ妨げになってしまうほどの大きな欠点が一つあります。それは、あらゆる些細なステップごとに許可を求めてくることです。
「このファイルを読み込んでもいいですか?」
「このディレクトリを作成してもいいですか?」
「このコマンドを実行してもいいですか?」
これは、非常に消耗します。フローが途切れてしまうのです。複雑なタスクの真っ最中に、突然、AI のゲートキーパーをさせられることになります。それはペアプログラマーを雇っているというより、非常に有能だが極端に慎重なインターンのベビーシッターをしているような感覚です。
この絶え間ない中断は、膨大な認知負荷を生み出します。高レベルのアーキテクチャやロジックに集中する代わりに、エージェントの微細な意思決定を管理することに追われてしまうのです。
私は、問題はエージェントの能力ではなく、インタラクションのモデルにあるのだと気づきました。私たちは「Human-in-the-loop」が安全性のゴールドスタンダードであると教わってきましたが、実際には、それが生産性を著しく低下させる要因になり得ます。
そこで、私はアプローチを「Human-in-the-loop」から「Human-on-the-loop」へとシフトさせることにしました。
すべての動作を承認するのではなく、特定の境界内であればエージェントにより多くの自律性を与えるようにしたのです。ファイルの読み取り、テストの実行、ディレクトリの作成といったルーチンワークについては、許可を求めずに処理するように設定しました。私が介入するのは、大規模なリファクタリングやコードのデプロイといった、リスクの高いアクションが必要な時だけです。
結果はどうだったでしょうか? 私の生産性は飛躍的に向上しました。もはやベビーシッターをしているのではなく、指示を出しているのです。エージェントが雑用をこなし、私は大局的な視点に集中できています。
もし「permission fatigue(許可疲れ)」に悩んでいるなら、エージェントにもう少し自由を与えてみてください。鍵となるのは、自律性とコントロールの適切なバランスを見つけることです。