# Cursorの機能と実践的な使い方
🪝 エージェントの行動に「自動整形」や「危険コマンドのブロック」を仕込みたくありませんか。CursorのHooksは、エージェントループの各段階に割り込むための仕組みです。
🏷️ タイトル: エージェントループ介入(JSON)
🔗 URL:
📘 概要
Hooksは、エージェントループを観察・制御・拡張するために起動されるプロセスです。stdioを通じて双方向にJSONでやり取りし、ループの定義済み段階の前後で実行されます。整形・監査ログ・秘密情報スキャン・危険操作のゲートなどに使えます。
⚙️ 機能の説明
設定は `hooks.json` に書き、優先順位はEnterprise → Team → プロジェクト(`
/.cursor/hooks.json`) → ユーザー(`~/.cursor/hooks.json`)です。主なイベントは次のとおりです。
・`beforeShellExecution` / `afterShellExecution`: シェル実行のゲートと後処理
・`beforeReadFile` / `afterFileEdit`: ファイル読み取り・編集の前後
・`beforeMCPExecution` / `beforeSubmitPrompt` / `sessionStart` / `stop` など
各フックはstdinでJSON(`conversation_id` `model` `hook_event_name` 等)を受け取り、stdoutにJSONを返します。制御系フックは `{"permission":"allow"|"deny"|"ask"}` を返し、`deny` 時は `user_message` / `agent_message` を添えられます。終了コードは 0 が成功、2 がブロック(deny相当)、それ以外はフェイルオープン(`failClosed:true` 指定時を除く)です。
🛠️ 実践的な使い方
編集後に自動整形するには `afterFileEdit` を使い、stdinのJSONから `.file_path` を取り出して `prettier --write` に渡すスクリプトを登録します。
危険SQLや破壊的コマンドは `beforeShellExecution` でブロックします。コマンド文字列を検査し、該当すれば `echo '{"permission":"deny","user_message":"このSQLは禁止です"}'` を返します。PIIや秘密情報のスキャンは `beforeReadFile` に登録し、`"failClosed": true` を付けて、スキャン失敗時はモデルに渡さず安全側に倒します。
💡 ユースケース
チーム全体に整形・lint・コミット規約を強制する。本番DBへの書き込みや `rm -rf` 等をゲートする。`sessionEnd` や `postToolUse` で監査ログを fire-and-forget で残す。`matcher` でツール種別やコマンドパターンを絞れば、必要なときだけフックを走らせられます。
⚠️ 注意点
パス基準に注意が必要です。プロジェクトフックはプロジェクトルートから、ユーザーフックは `~/.cursor/` から実行され、誤ったパスは静かに失敗します。既定はフェイルオープンなので、セキュリティ用途のフックには必ず `failClosed: true` を付けます。出力JSONが不正だとフック自体が失敗します。`hooks.json` は自動リロードされますが、反映されない場合は再起動を。クラウドエージェントは command 型のみ対応で、`sessionStart` や `beforeMCPExecution`、Tab系、prompt型フックは使えません。
#Cursor# #DevSecOps#