原文(日本語に翻訳)
複数行のbashコマンドに対して「常に許可」を設定すると、無効なパーミッションパターンが生成されて設定が壊れていた問題を修正しました(anthropics/claude-code#25909)
原文(英語)
Fixed "Always allow" on multiline bash commands creating invalid permission patterns that corrupt settings (anthropics/claude-code#25909)
概要
Claude Codeでは、Bashコマンドの実行許可を求めるダイアログで「常に許可(Always allow)」を選択することで、同じコマンドを毎回承認することなく実行できます。しかし、複数行にわたるBashコマンドに対して「常に許可」を選択すると、設定ファイルに無効なパーミッションパターンが書き込まれ、設定ファイル全体が壊れてしまう問題がありました。この修正により、複数行コマンドの「常に許可」設定が正しく動作します。
基本的な使い方
複数行のBashコマンドに「常に許可」を設定する際の動作が修正されます。
bash
# Claude Codeで複数行コマンドを含む作業を実行
claude
> テストを実行してから、結果をファイルに保存してください
# Claudeが以下のような複数行コマンドを実行しようとする:
# npm test && \
# npm run coverage && \
# echo "完了" > results.txt
# 「常に許可」を選択した場合
# 修正後: 有効なパーミッションパターンが settings.json に保存される
# 修正前: 無効なパターンが書き込まれ settings.json が壊れていた実践例
ユースケース1: テスト実行の自動許可
テストコマンドを毎回承認せずに実行できるように設定する場合。
bash
claude
> このプロジェクトの全テストを実行してください
# Claudeが提案するコマンド:
# cd /path/to/project && \
# npm install && \
# npm test
# ダイアログ:
# [Bash コマンドの実行を許可しますか?]
# [はい] [いいえ] [常に許可]
# "常に許可" を選択
# 修正後: settings.json に正しいパターンが保存される:
# { "permissions": { "allow": ["Bash(npm install:*)", "Bash(npm test:*)"] } }ユースケース2: 設定ファイルの確認と修復
修正前のバージョンで破損した可能性のある設定ファイルの確認。
bash
# 設定ファイルを確認
cat ~/.claude/settings.json
# 破損している場合の症状:
# - JSONが無効な状態になっている
# - 複数行のコマンドがエスケープされずに保存されている
# - Claude Codeが起動時にエラーを出す
# 設定ファイルのバックアップと修復
cp ~/.claude/settings.json ~/.claude/settings.json.bak
# 問題のある permissions エントリを削除するか、
# ファイルを正常な状態に手動で修正する
# または settings.json を削除してリセット
rm ~/.claude/settings.jsonユースケース3: プロジェクト固有の許可設定
プロジェクトレベルの設定でコマンドを事前に許可しておく場合。
json
// .claude/settings.json (プロジェクト固有の設定)
{
"permissions": {
"allow": [
"Bash(git status:*)",
"Bash(npm test:*)",
"Bash(docker compose up:*)"
],
"deny": []
}
}bash
# この設定があれば、単一行コマンドは事前承認される
# 複数行コマンドの "常に許可" も修正後は正しく機能する
claude
> テストを実行してDockerコンテナを起動してください
# 承認ダイアログなしで実行される(事前許可済みコマンドの場合)注意点
- この修正は
settings.jsonの破損を防ぎますが、修正前のバージョンで既に破損している場合は手動修復が必要です。 - セキュリティ上の観点から、信頼できるコマンドにのみ「常に許可」を使用することを推奨します。
settings.jsonが壊れていた場合、Claude Codeの再起動時にエラーが発生することがあります。その際はファイルの修復または削除が必要です。- 許可パターンはワイルドカードをサポートしています(
*で任意の引数にマッチ)。 - 複数行コマンドの許可パターンは、コマンド全体ではなく各行のコマンドプレフィックスでマッチングされます。