👏
Claude Codeに絶対cdさせたくない(PreToolUse編)
Claude CodeにHooks機能が追加されましたね。神機能です。
このおかげで、ファイルの編集後にlintやformatを強制的に実行できるようになりました。
これだけでも強力ですが、個人的にもっと嬉しい点がありました。
これまで超ストレスだったのが、Bashツールで cd
してからコマンドを実行し、次のターンには自分がどこにいるのか忘れてしまっているClaudeくんです。
迷子になっていることもわからずmake test
するけど無情に返ってくる No rule to make target ...
なにしてるの?と何度思ったことか。
実際「なにしてるの?」って打ったら謝ってプロジェクトルートに帰ってました、いやわかるのかよ。
permissions
の deny
で指定しても、 cd
って引数 + && 他のコマンド
って使われることが多くて確実に防げないっぽいんですよね。それで困ってました。
だが、そんなストレスにもう悩まされることはありません。これで君はもうそこから動けない。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "jq 'if .tool_input.command | (startswith(\"cd \") or contains(\" cd \")) then halt_error(2) else empty end'"
}
]
}
]
}
}
公式ドキュメントにも記載があるように、exit code 2で返すと止められます。0以外でexitすると黄色い字で警告が出てしまうのでそこだけ注意です。
同じようなやり方で他のコマンドも止められるはずです。
Discussion