Skip to content

$(...) 禁止の機械的担保 (deny ルール or hook) #12

Description

@ikeisuke

概要

$(...) を含むコマンドは Claude Code の安全ヒューリスティクスで毎回確認ダイアログが出るため、CLAUDE.md で「絶対に使わない」と指示しているが、メモリ的なルールなので Claude が忘れることがある。機械的に強制したい。

現状

CLAUDE.md より:

$(...) を含むコマンドは安全ヒューリスティクスにより毎回確認ダイアログが出る。
コマンド生成時は $(...) を絶対に使わないこと。

注意: PreToolUse hook でのブロックは許可ダイアログより後に実行されるため効果がない。

対応方針

A. deny ルールでパターンマッチ

"deny": [
  "Bash(*$\\(*)",
  "Bash(*`*)"
]

実機で 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 の「改善の約束は行動で示す」と整合

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions