--dangerously-skip-permissionsが保護パスへの書き込み承認後にaccept-editsモードにダウングレードされていた問題の修正
原文(日本語に翻訳)
Bash経由で保護パスへの書き込みを承認した後、--dangerously-skip-permissionsが静かにaccept-editsモードにダウングレードされていた問題を修正しました。
原文(英語)
Fixed --dangerously-skip-permissions being silently downgraded to accept-edits mode after approving a write to a protected path via Bash
概要
--dangerously-skip-permissionsフラグはすべての権限確認をスキップしてClaude Codeを実行するためのオプションです。このバグでは、Bashツール経由で保護されたパスへの書き込みをユーザーが承認した後、このフラグが静かにaccept-editsモード(ファイル編集のみを自動承認するモード)にダウングレードされてしまう問題がありました。これにより、ユーザーが意図していないモードへの切り替えが無告知で発生し、その後のBashコマンドが期待通りに動作しない可能性がありました。v2.1.98でこの問題が修正されました。
基本的な使い方
修正前の動作(問題のある挙動)
bash
# --dangerously-skip-permissions で起動
$ claude --dangerously-skip-permissions
# 保護パスへのBash書き込みを承認
> # Claudeが /etc/hosts への書き込みを試みる
> [承認する] を選択
# この後、知らないうちにモードがダウングレードされていた
# --dangerously-skip-permissions → accept-edits モード(サイレントダウングレード)
# その後のBashコマンドが権限プロンプトを表示するようになる(予期しない動作)
> rm -rf /tmp/cache
# → 突然権限プロンプトが表示される(本来はスキップされるはずが...)修正後の動作(v2.1.98以降)
bash
# --dangerously-skip-permissions で起動
$ claude --dangerously-skip-permissions
# 保護パスへのBash書き込みを承認
> # Claudeが /etc/hosts への書き込みを試みる
> [承認する] を選択
# 修正後:モードが維持される
# --dangerously-skip-permissions のまま継続
# その後のBashコマンドも権限プロンプトなしで実行される(期待通りの動作)
> rm -rf /tmp/cache
# → 権限プロンプトなしに実行される ✓実践例
シナリオ1:自動化スクリプトでのClaude Code使用(修正後)
完全自動化を目的とした環境でのClaude Code使用で一貫した動作が保証されます。
bash
#!/bin/bash
# 自動化スクリプト例
# システム設定ファイルの更新を含む自動タスク
claude --dangerously-skip-permissions <<EOF
以下のタスクを実行してください:
1. /etc/hosts にエントリを追加してください
2. その後、依存するサービスの設定ファイルを更新してください
3. サービスを再起動するスクリプトを実行してください
EOF
# 修正前:手順1の後、手順2・3でモードがダウングレードされ手動承認が必要になることがあった
# 修正後:全手順が一貫して--dangerously-skip-permissionsモードで実行されるシナリオ2:Dockerコンテナ内でのCI/CD使用(修正後)
コンテナ環境でのClaude Code自動実行が安定します。
dockerfile
# Dockerfile
FROM ubuntu:22.04
RUN npm install -g @anthropic-ai/claude-code
# CI用の自動実行スクリプト
COPY run_claude.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/run_claude.shbash
# run_claude.sh
#!/bin/bash
# コンテナ内での完全自動実行
claude --dangerously-skip-permissions "プロジェクトのセットアップと設定ファイルの更新を行ってください"
# 修正後:保護パス操作後もモードが維持され、全タスクが完了するシナリオ3:モードダウングレードの影響を受けていたシナリオ(修正前の問題)
bash
# 修正前に問題が発生していたシナリオ:
$ claude --dangerously-skip-permissions
# ステップ1: Bashで保護パスへの書き込みを実行・承認
> cp /tmp/config.json /etc/app/config.json # /etc/ は保護パス
[承認]
# ステップ2: 続けてBashコマンドを実行しようとする
> systemctl restart app-service
[突然権限プロンプトが表示される]
# → サイレントダウングレードにより、ユーザーが気づかないまま動作が変わっていた
# 修正後:ステップ2でも権限プロンプトなしで実行されるシナリオ4:保護パスとは何か
この修正で対象となる「保護パス」について:
保護パスの例:
- /etc/ (システム設定ディレクトリ)
- /usr/ (システムプログラム)
- /var/ (可変データ)
- ~/.ssh/ (SSHキー)
- ~/.config/ (ユーザー設定)
- その他、Claude Codeが書き込み前に確認を求めるパス
通常のパス(保護なし):
- /tmp/ (一時ファイル)
- ~/projects/ (ユーザープロジェクト)
- カレントディレクトリ配下注意点
--dangerously-skip-permissionsは名前が示す通り、危険なフラグです。信頼できる環境(Dockerコンテナ、隔離されたCI環境など)以外での使用は推奨されません。- このフラグを使用する場合は、Claude Codeがシステムファイルを含む任意のファイルを変更・削除できることを十分に理解してください。
- 修正前は保護パスへの書き込み後にサイレントダウングレードが発生していたため、意図しない動作が起きていた可能性があります。v2.1.98にアップデートした後は動作が一貫します。
- 本番環境での使用は避け、必ずテスト・開発環境でのみ使用してください。