コンテンツにスキップ
Zenn Dev Owayo Articles B9dcbf7322b329

Claude Code, Curosr, Windsurf のHooks設定を10倍楽にする claw-hooks

  • URL: https://zenn.dev/owayo/articles/b9dcbf7322b329
  • 日付: 2026-06-26
  • Tier: Tier 3
  • 要旨: Claude Code・Cursor・WindsurfなどのAIコーディングエージェントのHooks設定を、PythonやBashスクリプトを書かずにTOML設定だけで定義できるRust製ツール「claw-hooks」が公開された。エージェントごとに異なるJSON形式を内部で吸収するため、1つの設定ファイルで複数エージェントに対応できる。危険コマンドのブロックは rm_block = true の1行で完結し、AST解析(tree-sitter-bash)によってsudoやパイプ経由の間接的なコマンドも正確に検出する。ファイル保存時の拡張子別フォーマッター実行も extension_hooks に1行ずつ書くだけで設定でき、従来の複雑なスクリプトを大幅に簡素化できる。

詳細

claw-hooks は複数AIコーディングエージェントのHooks設定を統一するRust製シングルバイナリ(起動時間 <10ms)。

解決する問題:

  • エージェントごとにHooksのJSON構造が異なり(Claude Code: tool_input.command、Cursor: command直下、Windsurf: tool_info.command_line)、同じ機能でも別々のスクリプトが必要だった問題を解消

主な機能:

  • rm_block = true、kill_block = true、dd_block = true の1行でデフォルトメッセージ付き危険コマンドブロック
  • [[custom_filters]] でカスタムフィルターを定義。コマンドのみ(全ブロック)と command + args の組み合わせ(サブコマンド単位制御)の2モード
  • [extension_hooks] マップで拡張子別フォーマッター自動実行(例: “.rs” = [“rustfmt {file}"])
  • [[stop_hooks]] でエージェント終了時通知
  • –format cursor / –format windsurf フラグで各エージェントのJSON形式に自動変換
  • tree-sitter-bash によるAST解析で sudo rm、echo “setup” | xargs rm なども検出可能

設定の伝達方法:

  • Claude Code: ~/.claude/settings.json に claw-hooks hook を登録
  • Cursor: ~/.cursor/hooks.json に claw-hooks hook –format cursor を登録
  • Windsurf: ~/.codeium/windsurf/hooks.json に claw-hooks hook –format windsurf を登録

インストール: brew install owayo/claw-hooks/claw-hooks