はるさめ.dev

Claude Code で permissions.allow で自動実行を設定しても確認を求められる

に公開

※ 本記事の執筆、修正、校閲に AI を使用しています。

問題

Claude Code で Sandbox を有効にし、`excludedCommands` に "gh" を指定している環境で、permissions.allow"Bash(gh issue create *)" を追加しても自動実行されず、引き続き確認が求められました。

環境

Claude Code: 2.1.34

再現手順

1. .claude/settings.json に以下を設定する:

   {
     "sandbox": {
       "enabled": true,
       "excludedCommands": ["gh"]
     },
     "permissions": {
       "allow": ["Bash(gh issue create *)"]
     }
   }

2. Claude に body 付きの issue 作成を依頼する(例:「○○のバグについて issue を作成して」)

3. Claude が --body に複数行のテキストを含むコマンドを生成する:

gh issue create --title "バグ報告" --body "## 概要
   ○○が動作しない
   ## 再現手順
   1. ..."

```

4. body 内の改行によりワイルドカードがマッチせず、確認が求められる

※ 改行を含まないコマンド(例: gh issue create --title "test" --body "一行のみ")は 正常に自動実行されます。

原因

permissions の allow / ask / deny のパターンマッチで改行文字にマッチしないバグが原因です。

ref: [Bug] Auto-approve patterns don't match multiline commands (heredocs)

暫定対策

バグが修正されるまでは、CLAUDE.md に以下のようなルールを追加してコマンドに改行を含めないよう指示をするなどが回避策になります。

- Bash ツールを使ってコマンドを実行する際は、コマンド文字列に改行を含めないこと
  - permissions の allow ワイルドカード(`*`)は改行文字にマッチしないため、改行が含まれると許可パターンから漏れて実行が拒否される
  - 行継続(`\` + 改行)だけでなく、引数の値に含まれる改行文字も対象
  - `gh issue create` や `gh pr create` など body が長くなるコマンドは `--body-file` を使うこと
    - OK: `gh issue create --title "タイトル" --body-file ./temp/issue-body.md`
    - NG: `gh issue create --title "タイトル" --body "1行目\n2行目"` (body 内の改行で拒否される)

コメント

プロンプトだと AI が守ってくれなかったり、コマンドによっては改行を防げないようなケースもあるので他の解決策などがあればコメントいただけると嬉しいです。

コメント