🎃

Claude Codeのようなコーディングエージェントの承認疲れをAIで解決した

に公開

はじめに

Claude CodeやCline、Codex CLIなどのコーディングエージェントを使っていると、コマンドの実行やファイルの編集を求める承認ダイアログに何度も遭遇する。

最初のうちは内容を確認して承認しているのだが、だんだん面倒になってきて、ろくに確認せず反射的にEnterを押すようになってしまう。これがいわゆる「承認疲れ」の悪影響だ。

私の場合、セキュリティ的な問題や環境破壊を伴わなければ基本的に承認したいし、実際ほとんどの場合は承認している。ただ、claude --dangerously-skip-permissionsのように手放しでAIを行動可能にはさせたくない。かといって、--dangerously-skip-permissionsを安全に使うためにdevcontainerなどのサンドボックス環境を用意するのは面倒だったり、諸々の都合でできないこともある。

この問題を解決するために、私が開発しているccmanager
https://github.com/kbwo/ccmanager
にAuto Approval機能を実装した。(2025-12-04 v3.0.0で対応)

ccmanagerを知らない方は前回の記事
https://zenn.dev/kbwok/articles/33fad69555d005
を参照してほしい。簡単に説明すると、ccmanagerはClaude Codeを並列で動かすためのCLIツール。開発当初はClaude Codeのみに対応していたが、その後の改善により、設定すればCodex CLIなど他のコーディングエージェントでも使えるようになっている。

デモ動画:

上の動画では、テスト用のファイルを消すようにClaude Codeに指示しているが、この間に一切自分ではClaude Codeに対してキー入力を行わず(※)に、承認が行われている。(※: デモ用にccmanager内のモード切替のための入力だけ行っているが、Claude Codeにはその入力は渡されていないので関係ない)
黄色いバーが出ている間が自動承認の判断中の表示になっている。

承認疲れとは

承認疲れはClaude Codeの公式ドキュメントでも言及されている問題だ。

承認疲れ:繰り返し「承認」をクリックすることで、ユーザーが承認している内容に注意を払わなくなる可能性があります

コーディングエージェントを使っていると、ファイルの読み書きやコマンド実行など、さまざまな操作に対して承認を求められる。安全のための仕組みなのだが、何十回も承認を求められると、だんだん内容を確認せずに承認するようになってしまう。これでは実質的に承認機能の意味がなくなってしまう。

既存の解決策とその課題

Claude Codeには承認疲れを軽減するためのいくつかの機能が用意されている。

実行可能なコマンドの事前定義

多くのコーディングエージェントでは、事前に実行可能なコマンドを定義しておくことができる。しかし、事前に想定していないコマンドを実行しようとする場合には対応できない。また、コマンドの使い方次第では危険になりうるため、実行可能なコマンドとして定義したくないケースもある。例えば rm コマンドは通常のファイル削除には便利だが、rm -rf / のような使い方をされると致命的だ。

sandbox

sandboxモードを使えば、ファイルシステムへの影響を制限できる。しかし、sandbox内でも承認ダイアログは表示されるため、承認疲れの問題はそれほど軽減されない。

devcontainer

devcontainerを使えば、隔離された環境で安全に実行できる。ただ、devcontainerを用意するのは正直面倒くさい。プロジェクトごとに設定が必要だし、既存のプロジェクトに導入するのもプロジェクト固有の事情によってはハードルが高い。

--dangerously-skip-permissions

このオプションを使えば、本来承認が必要な操作を承認なしで実行できる。名前の通り危険なオプションで、手放しで使うのは怖い。悪意のあるコードを実行される可能性もあるし、意図しないファイル操作が行われる可能性もある。

他のコーディングエージェントでは使えない

devcontainerは例外として、ここまで挙げた解決策はClaude Code固有の機能だ。たとえClaude Codeで承認疲れを解決できたとしても、Codex CLIやClineなど別のコーディングエージェントを使うときに同じ方法が取れるとは限らない。

他のコーディングエージェントにsandboxやdevcontainer相当の機能があるとは限らないし、あったとしても設定方法や挙動が異なるだろう。コーディングエージェントを複数使い分けている場合、それぞれで別の対策を講じる必要があり、これも面倒だ。

Auto Approval機能

これらの課題を解決するために実装したのがccmanagerのAuto Approval(自動承認)機能だ。

ccmanagerはClaude CodeだけでなくCodex CLIなど複数のコーディングエージェントに対応している。そのため、使用するコーディングエージェントの設定とAuto Approval機能を設定すれば、どのコーディングエージェントでも同様に承認疲れを解決できる。

この機能は、コーディングエージェントから承認を求められたときに、その実行にセキュリティ的な問題がないかAI(デフォルトではHaikuモデルでのClaude Code)に自動的にチェックさせ、問題がなければ自動承認まで行う。

仕組み

仕組みはシンプルで、以下のような方法で実装している。

  1. セッションがプロンプト状態(入力待ち)になると、ccmanagerがそれを検知する
  2. 直前のターミナル出力を取得する
  3. その出力をclaude -p --model haikuに渡して、承認が必要かどうか判断してもらう
  4. 承認不要と判断されれば、carriage return(\r)を送信する(YesにEnterで回答するイメージ)
セッション一時停止 → ターミナル出力取得 → Claude (haiku) → 判断 → 問題なければEnter送信

単純な仕組みだが、別のClaudeインスタンスで判断することでコンテキスト汚染されていないClaudeに判断を委ねることができる。

コーディングエージェント自身に「この操作は安全ですか?」と聞いても、すでにタスクを遂行しようとしているコンテキストの中で判断するため、「安全です」と答える可能性が高い。ヘッドレスに実行される別のClaudeに判断させることで、より客観的な判断ができる。

また、セッション中はいつでもキー入力で中断できるので、自動承認が走っている途中でも手動で介入でき、自動承認中にエラーが発生した場合は、自動的に手動確認モードにフォールバックするので安心だ。

自動承認をするか判断するためのプロンプト

https://github.com/kbwo/ccmanager/blob/a0995e743e989f667617a391e25d49c127526215/src/services/autoApprovalVerifier.ts#L31-L50

claude -p --model haikuに渡しているプロンプトでは、以下のような判断基準を指示している。

手動承認が必要な場合:

  • ファイルの変更・削除
  • 権限昇格(sudo等)
  • ネットワーク操作
  • システムへの影響
  • コマンドインジェクションのリスク
  • 曖昧な状態

自動承認してよい場合:

  • ユーザーから明示的に指示がある操作
  • 読み取り専用の操作

つまり、セキュリティ的な懸念事項や破壊的な操作があれば手動承認を求め、懸念がない場合やユーザーからの明示的な指示がある場合は自動承認する、という方針だ。

制限事項

この機能はEnterで回答するようなCLI以外には使えない。ただ、私の観測範囲では、コーディングエージェントの承認ダイアログはEnterで回答できることが多いため、このような実装にしている。

使い方

ccmanagerでAuto Approval機能を有効にするには、2つの方法がある。

UIから有効化

ccmanagerを起動して、Configuration → Other & Experimental → Auto Approval (experimental) から有効化できる。

設定ファイルで有効化

設定ファイルに直接記述することもできる。

Linux/macOS:

~/.config/ccmanager/config.json
{
  "autoApproval": {
    "enabled": true
  }
}

カスタムコマンド

デフォルトではclaude -p --model haikuに判断させているが、カスタムコマンドを渡すこともできる。

カスタムコマンドを使う場合、出力は以下のJSON形式である必要がある。

{"needsPermission": true}

または

{"needsPermission": false}

needsPermissionがfalseの場合、自動的にEnterが送信される。

Codex CLIを使った判断

ドキュメントに記載しているが、Codex CLIのような、Claude Code以外のCLIコーディングエージェントを使って判断させることもできる。

決定論的な判断との組み合わせ

いくらセッション内のClaudeではないとはいえ、AIが判断するなら--dangerously-skip-permissionsとそれほど危険性が変わらないと考える人もいるかもしれない。

この機能ではカスタムコマンドを渡せるので、判断用のスクリプトを組めばより柔軟な制御ができる。例えば、危険なコマンドがターミナルの出力の中に含まれていれば自動承認を行わない、というような決定論的な判断と、AIによる判断を組み合わせることも可能だ。

#!/bin/bash
# 危険なコマンドが含まれていたら承認が必要と判断
if echo "$1" | grep -qE "(rm -rf|sudo|chmod 777)"; then
  echo '{"needsPermission": true}'
  exit 0
fi

# それ以外はAIに判断させて結果をJSON形式で返す

実装してみた結果

現在、Auto Approval機能はまだ実験的な機能だが、多くの場合で自動承認がうまくいき、私の開発時に承認疲れを実際に解決してくれている。

--dangerously-skip-permissionsのように完全に承認をスキップするわけではないので、セキュリティ的なチェックは入りつつ、面倒な承認作業から解放される。このバランスが気に入っている。

まとめ

  • コーディングエージェントの「承認疲れ」はドキュメントでも言及されている問題
  • sandbox、devcontainer、--dangerously-skip-permissionsでは完全に解決できない場面がある
  • ccmanagerのAuto Approval機能は、AIに承認の判断を委ねることで承認疲れを解決する
  • 別のClaude Code(haiku)を起動することで、コンテキスト汚染されていない判断ができる
  • カスタムコマンドで判断ロジックをカスタマイズすることも可能(JSON形式で出力)

興味がある方はぜひ試してみてほしい。

Discussion