概要
$(...) を含むコマンドは Claude Code の安全ヒューリスティクスで毎回確認ダイアログが出るため、CLAUDE.md で「絶対に使わない」と指示しているが、メモリ的なルールなので Claude が忘れることがある。機械的に強制したい。
現状
CLAUDE.md より:
$(...) を含むコマンドは安全ヒューリスティクスにより毎回確認ダイアログが出る。
コマンド生成時は $(...) を絶対に使わないこと。
注意: PreToolUse hook でのブロックは許可ダイアログより後に実行されるため効果がない。
対応方針
A. deny ルールでパターンマッチ
実機で deny の glob 仕様を確認(バッククォート/特殊文字エスケープが効くか不明)。
B. SessionStart hook で環境変数注入
BASH_ENV 等で command_not_found_handler 的に $(...) 検知時に exit、というシェル側の仕組みは Claude Code の Bash ツールの起動形式上難しい。
C. UserPromptSubmit / Stop hook でログ監査
$(...) を含むコマンドが実行されたらセッション後にレポート。事後検出だが、再発時にユーザーが気づける。
D. Bash ツール wrapping
bin/ に claude-bash-guard を置いて BASH_ENV で読み込ませ、関数として $() を含む eval を弾く、という回り道。実装複雑。
推奨
A を実機検証 → 効くなら採用、効かなければ C をとりあえず実装(事後検出だけでも気づきの機会が増える)。
関連
- CLAUDE.md の該当セクションは結果に応じて更新
- AGENTS.md の「改善の約束は行動で示す」と整合
概要
$(...)を含むコマンドは Claude Code の安全ヒューリスティクスで毎回確認ダイアログが出るため、CLAUDE.md で「絶対に使わない」と指示しているが、メモリ的なルールなので Claude が忘れることがある。機械的に強制したい。現状
CLAUDE.md より:
対応方針
A. deny ルールでパターンマッチ
実機で deny の glob 仕様を確認(バッククォート/特殊文字エスケープが効くか不明)。
B. SessionStart hook で環境変数注入
BASH_ENV等でcommand_not_found_handler的に$(...)検知時に exit、というシェル側の仕組みは Claude Code の Bash ツールの起動形式上難しい。C. UserPromptSubmit / Stop hook でログ監査
$(...)を含むコマンドが実行されたらセッション後にレポート。事後検出だが、再発時にユーザーが気づける。D. Bash ツール wrapping
bin/にclaude-bash-guardを置いてBASH_ENVで読み込ませ、関数として$()を含む eval を弾く、という回り道。実装複雑。推奨
A を実機検証 → 効くなら採用、効かなければ C をとりあえず実装(事後検出だけでも気づきの機会が増える)。
関連