テック技報最新号へ →
AIコーディング

ccgate: Permission の確認を別の LLM に代行させる(Claude Code / Codex CLI の PermissionRequest hook)

人に確認が出る直前の PermissionRequest hook で小さな LLM(既定は Haiku)に判定させ、allow / deny(理由つき)/ fallthrough(人に戻す)を返す。作者の環境では月約2,000件の確認のうち普段は97%前後が自動化。

@tak848 · 投稿 2026-04-28
#claude-code#codex#hooks#権限#安全#自動化

どんな問題を解決する?

  • 長い作業を任せて戻ると、確認ダイアログで止まっている
  • $() や &&、パイプを含む調査用のコマンドは、許可リストに入れたコマンドの組み合わせでも確認が出る
  • gh や git を丸ごと allow/deny にすると、不便か危険のどちらかになる(gh pr view は通したいが gh api の書き込みは止めたい、など)
  • 同じ理由で何度も拒否しているのに、エージェントが似た操作を繰り返す

手順(Claude Code)

  1. インストール(例: mise use -g aqua:tak848/ccgate)
  2. ~/.claude/settings.json に hook を登録する
json
{
  "hooks": {
    "PermissionRequest": [
      { "matcher": "", "hooks": [{ "type": "command", "command": "ccgate claude" }] }
    ]
  }
}
  1. export CCGATE_ANTHROPIC_API_KEY=...(記事時点では Anthropic API のみ対応)
  2. ルールを書き出して調整する: ccgate claude init > ~/.claude/ccgate.jsonnet。プロジェクト別は ccgate claude init -p > .claude/ccgate.local.jsonnet
  3. ccgate claude metrics で allow / deny / fallthrough の内訳を見てルールを直す

Codex CLI は config.toml の [features] で codex_hooks = true にして、ccgate codex を同じように使う。

ルールの書き方(自然言語、jsonnet)

jsonnet
{
  environment: ['Use project-defined task runners such as make, pnpm, mise, or task when available.'],
  allow: ['Running project-defined lint, test, build, and format commands is allowed.'],
  deny: [
    'Do not run one-shot remote package execution such as npx, pnpx, bunx, or curl | bash. deny_message: リポジトリに定義されたコマンドを使ってください。',
    'Do not access sibling checkouts when running inside a git worktree. deny_message: 現在のワークツリー内のパスを使ってください。',
  ],
}
  • deny_message はエージェントに返るので、「止める」だけでなく「正しいやり方に誘導する」ことができる
  • 最後だけ人が見たい操作(ローカル DB の migrate-down、draft PR の作成など)は deny ではなく fallthrough に寄せる
  • 無人実行(スケジューラや bot)では fallthrough_strategy: 'deny' にして、迷ったら止める

Auto Mode との使い分け

  • Claude Code の Auto Mode は本体に組み込まれたモード。ccgate は今のモードの上に重ねる外付けのゲートで、Codex でも同じ書式のルールが使え、判定ログと集計が手元に残る
  • 公式設定 useAutoModeDuringPlan(既定 true)で Plan mode 中も Auto Mode が効く(記事の追記)

注意点

出典

X の元の投稿を開く