AgentSkillsCN

hooks-creator

设计、编写并审核 VS Code 的 Agent 钩子(生命周期钩子)。适用于提及 .github/hooks/*.json、钩子、PreToolUse、PostToolUse、SessionStart、Stop、UserPromptSubmit、PreCompact、SubagentStart、SubagentStop、生命周期自动化、安全策略以及代码质量自动化时。

SKILL.md
--- frontmatter
name: hooks-creator
description: VS Code の Agent hooks(ライフサイクルフック)を設計・作成・レビューする。.github/hooks/*.json、hook、PreToolUse、PostToolUse、SessionStart、Stop、UserPromptSubmit、PreCompact、SubagentStart、SubagentStop、ライフサイクル自動化、セキュリティポリシー、コード品質自動化に言及したときに使用する。

Agent Hooks 作成スキル(VS Code / GitHub Copilot)

このSkillは、VS Code の Agent hooks を設計し、ワークスペースへ追加する。Hooksはエージェントセッションのライフサイクルポイントでシェルコマンドを確定的に実行し、セキュリティ強制・コード品質自動化・監査ログなどを実現する。

まず決める

  • 目的: 何を自動化するか(セキュリティ制御、フォーマット、ログ、コンテキスト注入、承認制御)
  • イベント: どのライフサイクルポイントで発火するか
  • スクリプト: 実行するコマンドまたはスクリプト

ライフサイクルイベント一覧

イベントタイミング主な用途
SessionStart新しいセッション開始時リソース初期化、プロジェクトコンテキスト注入
UserPromptSubmitユーザーがプロンプト送信時リクエスト監査、システムコンテキスト注入
PreToolUseツール実行前危険操作のブロック、承認制御、入力変更
PostToolUseツール実行後フォーマッタ実行、結果ログ、追加アクション
PreCompactコンテキスト圧縮前重要コンテキストの退避
SubagentStartサブエージェント生成時サブエージェントの追跡・初期化
SubagentStopサブエージェント完了時結果集約、クリーンアップ
Stopセッション終了時レポート生成、リソース後処理

作成フロー

1) 配置場所を決める

スコープパス
ワークスペース(チーム共有).github/hooks/*.json
ワークスペース(ローカル).claude/settings.local.json
ワークスペース(共有).claude/settings.json
ユーザー全体~/.claude/settings.json

ワークスペースhooksがユーザーhooksより優先される。通常は .github/hooks/ にJSON ファイルを作成する。

2) フック設定ファイルを書く

JSON 形式で hooks オブジェクトを記述する:

json
{
  "hooks": {
    "<イベント名>": [
      {
        "type": "command",
        "command": "./scripts/my-hook.sh",
        "timeout": 15
      }
    ]
  }
}

3) コマンドプロパティを設定する

プロパティ説明
typestring必須。"command" 固定
commandstring実行コマンド(クロスプラットフォームデフォルト)
windowsstringWindows 固有コマンド
linuxstringLinux 固有コマンド
osxstringmacOS 固有コマンド
cwdstring作業ディレクトリ(リポジトリルートからの相対パス)
envobject追加の環境変数
timeoutnumberタイムアウト秒数(デフォルト: 30)

OS固有コマンドが定義されていない場合、command にフォールバックする。

4) フックスクリプトを作成する

フックは stdin で JSON を受け取り、stdout で JSON を返す

共通入力フィールド:

json
{
  "timestamp": "2026-02-09T10:30:00.000Z",
  "cwd": "/path/to/workspace",
  "sessionId": "session-identifier",
  "hookEventName": "PreToolUse",
  "transcript_path": "/path/to/transcript.json"
}

共通出力フィールド:

json
{
  "continue": true,
  "stopReason": "理由(モデルに表示)",
  "systemMessage": "ユーザーに表示するメッセージ"
}

終了コード:

コード意味
0成功: stdout を JSON としてパース
2ブロッキングエラー: 処理を停止しエラーをモデルに表示
その他非ブロッキング警告: 警告を表示し処理を続行

5) テストとデバッグ

  • /hooks コマンドで対話的にフック設定を管理できる
  • 出力パネルで GitHub Copilot Chat Hooks チャンネルを確認する
  • Chat ビューを右クリック → Diagnostics でフックの読み込み状態を確認する
  • スクリプトに実行権限があるか確認する(chmod +x

イベント別の入出力詳細

詳細な入出力仕様は references/EVENTS.md を参照。

よくあるパターン

テンプレートと実装例は references/TEMPLATES.md を参照。

セキュリティ上の注意

  • フックはVS Codeと同じ権限でシェルコマンドを実行する
  • 共有リポジトリのフックスクリプトは使用前に必ずレビューする
  • スクリプト内にシークレットをハードコードしない(環境変数やセキュアストレージを使う)
  • stdin からの入力を必ずバリデーション・サニタイズする(インジェクション防止)
  • chat.tools.edits.autoApprove 設定でフックスクリプトの自動編集を禁止することを推奨する

期待する出力

  • .github/hooks/<name>.json の新規作成、または既存フック設定の改善
  • 必要に応じてフックスクリプト(.github/hooks/scripts/ 等)を作成する
  • 変更時は「何をどう変えたか(イベント/コマンド/セキュリティ影響)」を短く添える

参照