Start Debugging

Claude Code の自動モードが空変数の rm -rf を検知するようになりました

Claude Code の第28週リリース (v2.1.202-v2.1.206、2026年7月6日から10日) は、何も展開されなかった変数からパスが生成された rm -rf の前で自動モードを一時停止させ、古典的な rm -rf / の落とし穴をふさぎます。

シェルスクリプトを書く人なら誰もがこの惨事を見たことがあります。rm -rf "$BUILD_DIR/bin" のようなクリーンアップ行で $BUILD_DIR が一度も設定されておらず、コマンドが静かに rm -rf /bin へと展開されてしまうというものです。Claude Code の第28週リリース (v2.1.202 から v2.1.206、2026年7月6日から10日に公開) は、まさにこのケースに対する保護を自動モードに追加します。エージェントは、対象パスが何も展開されなかった変数から構築された rm -rf を実行する前に、一時停止して確認するようになりました。

なぜエージェントはあなたより頻繁にこれに陥るのか

あなたは破壊的なコマンドを一度書き、目で確認します。自動モードのエージェントはその場でシェルをつなぎ合わせ、3ターン前に設定した変数を再利用することがよくあります。前のステップが失敗してその変数を空のままにしていた場合、危険なのはモデルがわざと rm -rf / と入力することではありません。限定的で安全に見えるものを入力し、シェルがそれを展開の時点でルートレベルの削除に変えてしまうことです。

# The agent set this earlier, but the step that populated it failed
BUILD_DIR=""

# Looks scoped. Expands to: rm -rf /bin
rm -rf "$BUILD_DIR/bin"

# Same trap with an unset var under `set -u` off
rm -rf $ARTIFACTS_DIR/*

自動モードの分類器は、トランスクリプトで目にするであろうリテラルのテキストだけでなく、解決済みのコマンドを検査するようになりました。rm -rf が削除しようとしているパスが空の、あるいは未解決の変数にさかのぼる場合、エージェントは実行する代わりに一時停止し、あなたの承認のためにそれを提示します。

全面禁止ではなく、意図に基づく判断

これは Claude Code が v2.1.183 で引いたのと同じ設計方針です。このバージョンは、エージェントが独断で実行しようとする破壊的な Git および IaC コマンドをブロックしました。あなたが依頼した意図的な rm -rf ./build は、これまでどおり確認なしで実行されます。この保護は、変数が空になったために展開後の対象が意図よりもはるかに広くなる、という特定の落とし穴で作動します。

第28週より前は、自動モードは rm -rf "$BUILD_DIR/bin" を表面上の文字列で評価しており、それは狭いローカルな削除のように読めます。第28週以降は、シェルが実際に削除する対象に対してチェックが行われるため、空の $BUILD_DIR は青信号を確認の問いへと変えます。

第28週のそのほかの変更

同じリリース群は、自動モードをトランスクリプトの改ざんに対しても強化し (エージェントは自身のセッション履歴を静かに書き換えられなくなりました)、/doctor を問題を診断して修正できる完全なセットアップ点検へと変え、/checkup をそのエイリアスとして用意し、claude agents ビューを作り直して、各行が生のツール出力ではなく色付きの状態を示す語と分類器が書いた見出しを表示するようにしました。デスクトップアプリも今週、組み込みブラウザを備え、Claude はローカル開発サーバーのプレビューをすでに操作しているのと同じように、ドキュメントやデザインを開けるようになりました。

実際のリポジトリや CI のチェックアウトに対して自動モードでエージェントを走らせているなら、これはそれがあなたを救ってくれる日にだけ気づく類の保護です。詳細は Claude Code の changelog にあります。

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る