{"meta":{"title":"GitHub Copilotフックリファレンス","intro":"Copilot CLIとCopilot cloud agentのフックのフック イベント、構成形式、入力ペイロードを検索します。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/copilot","title":"GitHub Copilot"},{"href":"/ja/copilot/reference","title":"リファレンス"},{"href":"/ja/copilot/reference/hooks-reference","title":"フック リファレンス"}],"documentType":"article"},"body":"# GitHub Copilotフックリファレンス\n\nCopilot CLIとCopilot cloud agentのフックのフック イベント、構成形式、入力ペイロードを検索します。\n\n## Introduction\n\nフックは、セッション中に特定のライフサイクル ポイントで実行される外部コマンドであり、カスタム自動化、セキュリティ制御、統合を有効にします。\n\nフックは、CopilotとCopilot CLIの 2 つのCopilot cloud agentサーフェスでサポートされています。 構成形式とイベント ペイロードのほとんどは同じですが、実行環境と発生する可能性のあるイベントのセットは異なります。\n\nこの記事全体を通して、2 つのサーフェス間で異なる動作については、\"CLI のみ\" と \"クラウド エージェントのみ\" に関するメモで説明します。 マークされていないものは両方に適用されます。\n\n## フックの場所\n\nフックが実行される場所と、フック構成ファイルを格納できる場所は、サーフェスによって異なります。\n\n* **Copilot CLI** — フックは、CLI と同じシェル内の開発者のローカル コンピューターで実行されます。 この記事で説明するすべてのフック イベントは、CLI でサポートされています。\n\n  フックは、次のソース (ポリシー、ユーザー、プロジェクト、プラグイン) の順に読み込まれ、結合されます。 同じイベントが複数のソースに出現すると、すべてのソースからのすべてのフック エントリが実行されます。\n\n  * **ポリシー レベルのフック ファイル** — プラットフォームに適したポリシー ディレクトリ内の JSON ファイル。アルファベット順に読み込まれます。 ポリシーフックはマシン全体に適用され、他のすべてのフックより前に読み込まれます。\n    `disableAllHooks`では無効にできず、フォルダーの信頼状態に関係なく使用できます。 以下 [のポリシー フックを](#policy-hooks) 参照してください。\n  * **リポジトリ レベルのフック ファイル** — リポジトリ ルートに `.github/hooks/*.json` 。\n  * **ユーザーレベルのフックファイル** — ユーザーレベルの hooks ディレクトリ内のファイル。 既定では、これは macOS と Linux では `~/.copilot/hooks/`、Windows では `%USERPROFILE%\\.copilot\\hooks\\` です。\n    `COPILOT_HOME`が設定されている場合は`$COPILOT_HOME/hooks/`。\n  * **リポジトリ設定のインライン `hooks` ブロック — リポジトリ**の最上位レベルの `hooks` (Git committed) または `.github/copilot/settings.json` (通常は gitignored およびユーザー固有) の`.github/copilot/settings.local.json` フィールド。 リポジトリ内のツール間 `.claude/settings.json` ファイルと `.claude/settings.local.json` ファイルも読み取られます。\n  * **ユーザー レベルの構成のインライン `hooks` ブロック** — `hooks`の最上位にある`~/.copilot/settings.json` フィールド。\n  * **インストールされたプラグインによって提供されるフック** - プラグインのインストールディレクトリ内の独自の `hooks.json` (または `hooks/hooks.json`の下)で各プラグインによって宣言されます。\n\n* **Copilot cloud agent** — フックは、クラウド エージェントがジョブごとにプロビジョニングする一時的な Linux サンドボックス内で実行されます。 サンドボックスは非対話型であり、ネットワークが制限されており、ジョブが終了すると破棄されます。 イベントのサブセットが発生し、`bash` (または `command`) エントリのみが受け入れられます。\n\n  フック構成は、複製されたリポジトリ `.github/hooks/*.json` ファイルから読み込まれます。\n\n### ポリシーフック\n\n> \\[!NOTE]\n> **Copilot CLI だけ。** ポリシー フックは、 Copilot cloud agentではサポートされていません。\n\nポリシー フックは、管理者によって読み込まれるマシン全体のフックです。 他のすべてのフックより前に読み込まれ、`disableAllHooks`では無効化できません。\n\nポリシー フックは、次の 2 つのソースから検出されます。\n\n* **ファイルシステム**: プラットフォームに適したポリシー ディレクトリ内の JSON ファイル。アルファベット順に読み込まれます。\n  * Linux/macOS: `/etc/github-copilot/policy.d/*.json`\n  * ウィンドウズ： `C:\\ProgramData\\GitHub\\Copilot\\policy.d\\*.json`\n* **Windows Registry**: `HKLM\\Software\\Policies\\GitHub\\Copilot` の値 (各サブキーは、JSON ポリシー ドキュメントを含む `Policy` REG\\_SZ 値を保持します)。\n\nポリシー フック ファイルでは、ユーザーとプロジェクトのフック (`{ \"version\": 1, \"hooks\": { ... } }`) と同じフック構成形式が使用されます。 POSIX システムでは、ポリシー ファイルは root によって所有され、グループまたはワールド書き込み可能である必要はありません。\n\nポリシー フックは、エンタープライズ IT 管理者が使用することを目的としており、インストールするには管理者特権が必要です。 エンド ユーザーは変更できません。\n\n## クラウド エージェントの実行環境\n\nこのセクションは **、Copilot cloud agentにのみ**適用されます。 フック スクリプトの記述方法とクラウド エージェント ジョブのフック エントリの構成方法に影響する制約について説明します。\n\n| 財産                                                                                                        | 値                                                                                                                                                                   |\n| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| オペレーティング システム                                                                                             | Linux。 コマンド フックの `bash` フィールドのみが受け入れられます。 `powershell` エントリは無視されます。 クロスプラットフォーム `command` フィールドはフォールバックとして受け入れられます。                                                 |\n| 作業ディレクトリ                                                                                                  |                                                                                                                                                                     |\n| `/workspace` リポジトリを複製する場合は  。それ以外の場合は `/root`。 フック エントリに `cwd` を設定する場合、またはスクリプトからファイルを参照する場合は、このパスを使用します。 |                                                                                                                                                                     |\n| Filesystem                                                                                                | 儚い。 フックによって書き込まれたファイル (ログ、CSV、トランスクリプト) は、ジョブの終了時に破棄されます。 フック出力を保持するには、 `http` フック エントリを介して送信します。                                                                   |\n| アウトバウンドネットワーク                                                                                             | クラウド エージェント ファイアウォールによって制限されます。 既定では、GitHubと Copilot ホスト名にのみ到達できます。他のホスト (`https://hooks.example.com` など) に到達するには、管理者が構成したファイアウォール許可規則が必要です。                        |\n| 使用可能な環境変数                                                                                                 |                                                                                                                                                                     |\n| `GITHUB_COPILOT_API_TOKEN` と `GITHUB_COPILOT_GIT_TOKEN` はサンドボックスで設定されます。                                  |                                                                                                                                                                     |\n| `COPILOT_AGENT_PROMPT` は、ジョブが呼び出されたプロンプトを保持します。                                                           |                                                                                                                                                                     |\n| `HOME` は `/root`に設定されているため、 `~/...` パスを解決するすべてのフック スクリプトがエフェメラル サンドボックスに書き込まれます。                          |                                                                                                                                                                     |\n| `GITHUB_TOKEN` が設定されていません。                                                                                |                                                                                                                                                                     |\n| 対話機能                                                                                                      | 完全に非対話型。 エージェントは、すべてのツールのアクセス許可が事前に付与された状態で実行されるため、アクセス許可ダイアログは表示されないため、ユーザーに通知は表示されません。                                                                            |\n| 構成の検出                                                                                                     | クラウド エージェント ジョブでは、既定で存在するフック構成は、複製されたリポジトリ内で `.github/hooks/*.json` のみです。 サンドボックスには、ユーザー レベルのフック ファイル、 `settings.json`、 `config.json`、またはインストールされているプラグインは付属していません。 |\n\n## フック構成形式\n\nフック構成ファイルでは、バージョン `1`で JSON 形式が使用されます。\n\n> \\[!NOTE]\n> ディレクトリから読み込まれたフック構成ファイル (たとえば、 `.github/hooks/`) に無効なフック項目が含まれている場合、その項目のみが削除されてログに記録されます。同じファイル内の有効な兄弟フックは引き続き読み込まれます。 構造エラー (無効な JSON、不適切な `version`、または配列以外のイベント リスト) は、ファイル全体を拒否します。\n> `settings.json`でインラインで定義されたフックは厳密なままです。項目レベルの検証エラーでは、`hooks` フィールド全体が拒否されます。 他の構成ファイルは、常に個別に読み込まれます。\n\n### コマンド フック\n\nコマンド フックはシェル スクリプトを実行し、すべての種類のフックでサポートされています。\n\n> \\[!NOTE]\n> **クラウド エージェントのみ。** クラウド エージェントは、Linux サンドボックスでフックを実行します。 `bash` フィールドのみが有効です。`powershell`エントリは無視されます。 クロスプラットフォーム `command` フィールドはフォールバックとして受け入れられます。\n\n```json\n{\n  \"version\": 1,\n  \"hooks\": {\n    \"preToolUse\": [\n      {\n        \"type\": \"command\",\n        \"bash\": \"YOUR_BASH_COMMAND\",\n        \"powershell\": \"YOUR_POWERSHELL_COMMAND\",\n        \"cwd\": \"OPTIONAL/WORKING/DIRECTORY\",\n        \"env\": { \"VAR\": \"VALUE\" },\n        \"timeoutSec\": 30\n      }\n    ]\n  }\n}\n```\n\n| フィールド                                                        | タイプ                                                                                                                                 | 必須  | Description                                      |\n| ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | --- | ------------------------------------------------ |\n| `bash`                                                       | 文字列                                                                                                                                 |     |                                                  |\n| `bash`、`powershell`、または `command` のいずれか                      | Unix のシェル コマンド。                                                                                                                     |     |                                                  |\n| `command`                                                    | 文字列                                                                                                                                 |     |                                                  |\n| `bash`、`powershell`、または `command` のいずれか                      | クロスプラットフォーム フォールバック。 これらのフィールドが存在しない場合は、 `bash` と `powershell` の両方にコピーされます。明示的な `bash` または `powershell` エントリは、それぞれのプラットフォームで優先されます。 |     |                                                  |\n| `cwd`                                                        | 文字列                                                                                                                                 | いいえ | コマンドの作業ディレクトリ (リポジトリルートまたは絶対ディレクトリに対する相対ディレクトリ)。 |\n| `env`                                                        | オブジェクト                                                                                                                              | いいえ | 設定する環境変数 (変数拡張をサポート)。                            |\n| `powershell`                                                 | 文字列                                                                                                                                 |     |                                                  |\n| `bash`、`powershell`、または `command` のいずれか                      | Windowsのシェル コマンド。                                                                                                                   |     |                                                  |\n| `timeout`                                                    | 数値                                                                                                                                  | いいえ |                                                  |\n| `timeoutSec`のエイリアス (秒単位)。                                    |                                                                                                                                     |     |                                                  |\n| `timeoutSec`が存在しない場合にのみ使用されます。両方が存在する場合は`timeoutSec`が優先されます。 |                                                                                                                                     |     |                                                  |\n| `timeoutSec`                                                 | 数値                                                                                                                                  | いいえ | タイムアウト (秒単位)。 既定値: `30`。                         |\n| `type`                                                       | `\"command\"`                                                                                                                         | いいえ | フックの種類。 省略すると、既定値は `\"command\"` になります。            |\n\n#### 進行状況メッセージ\n\nコマンド フックは、実行中に CLI タイムラインに進行状況の状態行を出力できます。 最終的な出力を書き込む前に、 `{\"type\": \"progress\", \"message\": \"...\"}` JSON オブジェクトを stdout に書き込みます。\n\n```bash\necho '{\"type\": \"progress\", \"message\": \"Checking policy...\"}'\n# ... perform work ...\necho '{\"permissionDecision\": \"allow\"}'\n```\n\n一時的な状態行を出力するように `\"temporary\": true` を設定します。 一時的な項目は前の一時的な項目を置き換え、タイムラインに蓄積されるのではなく、アシスタントが応答すると消去されます。\n\n```bash\necho '{\"type\": \"progress\", \"message\": \"Routing...\", \"temporary\": true}'\necho '{\"type\": \"progress\", \"message\": \"Thinking...\", \"temporary\": true}'\n# ... perform work ...\necho '{\"permissionDecision\": \"allow\"}'\n```\n\n進行状況メッセージは表示専用であり、フック出力や決定ロジックには影響しません。\n\n**進行状況メッセージが混在している場合の stdout の解析方法。** — CLI は、フックの実行時に stdout を 1 行ずつスキャンします。 トリミング後に `\"type\": \"progress\"` を含む単一の完全な JSON オブジェクトである行は、進行状況イベントとして処理され、**フックの出力ストリームから削除**されます。 他のすべての行 (進行状況メッセージではない空白行、プレーン テキスト、JSON オブジェクト) は、逐語的に保持されます。 フックが終了すると、保持された行は連結、トリミング、および 1 回の `JSON.parse` 呼び出しで解析されます。その結果、フックの出力 (この記事の他の場所で参照されている \"フック出力 JSON\") になります。 これは、以下のようなことを意味します。\n\n* (上の例のように) 最終的な決定オブジェクトと共に進行状況行を出力することは安全であり、目的のパターンです。進行状況行は JSON パーサーに到達しません。\n* 各進行状況メッセージは、それ自体の行にあり、その 1 行で有効な JSON である必要があります。 複数行形式または整形済みの進行状況オブジェクトは進行状況として認識されず、出力ストリームに残されます。その結果、最終的な `JSON.parse` が失敗する場合があります。\n* これに対し、最終的な決定オブジェクトは複数の行にまたがる場合があり、進行状況 *認識* のみが行指向です。進行状況の削除後に残るものは、行区切り JSON としてではなく、1 つの JSON ドキュメントとして解析されます。\n* 残りの出力が空であるか、JSON として解析できない場合、フックは出力を生成しなかったものとして扱われ、既定の動作になります。 したがって、stdout 上の 2 つ以上の非進行 JSON オブジェクト (たとえば、2 つの `echo '{\"permissionDecision\": ...}'` 呼び出し) は無効な JSON に連結され、無視されます。最終的な決定オブジェクトは 1 つだけ出力されます。\n\n### HTTP フック\n\nHTTP フックは、入力ペイロードを JSON `POST` として URL に送信します。\n\n> \\[!NOTE]\n>\n> * 既定では、 `https://` URL のみが許可されます。\n>   `http://` が設定されている場合の `http://localhost`、`http://127.*`、および `http://[::1]` を除き、TLS 以外の `COPILOT_HOOK_ALLOW_LOCALHOST=1` リクエストは拒否されます。\n> *\n\n**クラウド エージェントのみ。** サンドボックスからの送信ネットワークはクラウド エージェント ファイアウォールによって制限されるため、 `url` は許可リストのホストをターゲットにする必要があります。\n\n```json\n{\n  \"version\": 1,\n  \"hooks\": {\n    \"postToolUse\": [\n      {\n        \"type\": \"http\",\n        \"url\": \"https://hooks.example.com/copilot\",\n        \"headers\": { \"X-Source\": \"copilot-cli\" },\n        \"allowedEnvVars\": [\"GITHUB_TOKEN\"],\n        \"timeoutSec\": 30\n      }\n    ]\n  }\n}\n```\n\n| フィールド                                                                            | タイプ       | 必須  | Description              |\n| -------------------------------------------------------------------------------- | --------- | --- | ------------------------ |\n| `allowedEnvVars`                                                                 | string\\[] | いいえ |                          |\n| `headers`値内で展開できる環境変数の名前。 設定する場合、 `url` は `https://`を使用する必要があります。                |           |     |                          |\n| `headers`                                                                        | オブジェクト    | いいえ | 要求ヘッダーには次が含まれます。         |\n| `timeout`                                                                        | 数値        | いいえ |                          |\n| `timeoutSec`のエイリアス (秒単位)。                                                        |           |     |                          |\n| `timeoutSec`が存在しない場合にのみ使用されます。両方が存在する場合は`timeoutSec`が優先されます。                     |           |     |                          |\n| `timeoutSec`                                                                     | 数値        | いいえ | タイムアウト (秒単位)。 既定値: `30`。 |\n| `type`                                                                           | `\"http\"`  | イエス |                          |\n| `\"http\"`である必要があります。                                                              |           |     |                          |\n| `url`                                                                            | 文字列       | イエス | ターゲット URL。               |\n| `http:`または`https:`を使用する必要があります。                                                  |           |     |                          |\n| `preToolUse`と`permissionRequest`では、応答でツールのアクセス許可を付与できるため、`https://`を使用する必要があります。 |           |     |                          |\n\n### プロンプト フック\n\nプロンプトは、ユーザーが入力したかのように自動送信テキストをフックします。 これらは、 `sessionStart`でのみサポートされます。 テキストには、自然言語プロンプトまたはスラッシュ コマンドを指定できます。\n\n> \\[!NOTE]\n> **Copilot CLI だけ。** プロンプト フックは、 **新しい対話型セッション**でのみ起動します。 再開時には起動せず、非対話型プロンプト モード (`-p`) では起動しません。\n\n> \\[!NOTE]\n> **クラウド エージェント。** クラウド エージェント ジョブは非対話形式で ( `-p`と同様に) 実行されるため、 `prompt` フック エントリが起動しない可能性があります。 依存する前に、環境内の動作を確認します。\n\n```json\n{\n  \"version\": 1,\n  \"hooks\": {\n    \"sessionStart\": [\n      {\n        \"type\": \"prompt\",\n        \"prompt\": \"YOUR_PROMPT_TEXT_OR_SLASH_COMMAND\"\n      }\n    ]\n  }\n}\n```\n\n| フィールド                 | タイプ        | 必須  | Description                         |\n| --------------------- | ---------- | --- | ----------------------------------- |\n| `type`                | `\"prompt\"` | イエス |                                     |\n| `\"prompt\"`である必要があります。 |            |     |                                     |\n| `prompt`              | 文字列        | イエス | 送信するテキストは、自然言語メッセージまたはスラッシュ コマンドです。 |\n\n## フック イベント\n\n次の表に、サポートされているすべてのイベントを示します。\n**\\[クラウド エージェント**] 列には、クラウド エージェントの下でイベントが発生したかどうかを示し、動作の違いをメモします。\n\n| Event                                                                                                   | 次の場合に起動します。                                                                                                                                                                                                                                                                                                                                        | 処理された出力                                                                           | クラウド エージェント                                                                                                |\n| ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |\n| `agentStop`                                                                                             | メイン エージェントがターンを終了します。                                                                                                                                                                                                                                                                                                                              | はい — 継続をブロックして強制できます。                                                             | 火災。                                                                                                        |\n| `decision: \"block\"` により、さらに 1 ターンが消費されますが、このターンはジョブのタイムアウト時間にもカウントされます。                                 |                                                                                                                                                                                                                                                                                                                                                    |                                                                                   |                                                                                                            |\n| `errorOccurred`                                                                                         | 実行中にエラーが発生します。                                                                                                                                                                                                                                                                                                                                     | いいえ                                                                               | 火災。                                                                                                        |\n| `notification`                                                                                          | CLI がシステム通知 (シェルの完了、エージェントの完了またはアイドル状態、アクセス許可プロンプト、引き出しダイアログ) を出力すると非同期的に起動します。 Fire-and-forget: セッションをブロックしません。                                                                                                                                                                                                                                   |                                                                                   |                                                                                                            |\n| `matcher` 上で `matcher` の正規表現パターン（`notification_type` フィールドの値）をサポートします。                                  | 省略可能 — セッションに `additionalContext` を挿入できます。                                                                                                                                                                                                                                                                                                         |                                                                                   |                                                                                                            |\n| **起動しません。** クラウド エージェントは、ユーザーに通知を表示しません (上記のクラウド エージェント実行環境の表の **\\[対話機能** ] 行を参照してください)。                |                                                                                                                                                                                                                                                                                                                                                    |                                                                                   |                                                                                                            |\n| `permissionRequest`                                                                                     | アクセス許可サービスが実行される前に発生します (ルール エンジン、セッション承認、自動許可/自動拒否、ユーザー プロンプト)。 マージされたフック出力が `behavior: \"allow\"` または `\"deny\"`を返す場合、その決定は、サンドボックス バイパス要求 (`requestSandboxBypass: true`) を除き、通常のアクセス許可フローをショートサーキットします。ただし、 `allow` はエスケープを事前に承認せず、 `deny` のみが伝達されます ( [`permissionRequest` デシジョン コントロール](#permissionrequest-decision-control) のサンドボックス バイパス例外を参照)。 |                                                                                   |                                                                                                            |\n| `matcher` 上で `matcher` の正規表現パターン（`toolName` フィールドの値）をサポートします。                                           | はい — プログラムで許可または拒否できます。                                                                                                                                                                                                                                                                                                                            | ツール呼び出しは事前に承認されているため、このフックは起動しないか、効果がありません。 代わりに、 `preToolUse` を使用してアクセス許可を決定します。 |                                                                                                            |\n| `postToolUse`                                                                                           | 各ツールが正常に完了した後。                                                                                                                                                                                                                                                                                                                                     | はい - ツールの結果を変更したり、モデルの追加のコンテキストを挿入したりできます。                                        | 火災。                                                                                                        |\n| `postToolUseFailure`                                                                                    | ツールがエラーで完了した後。                                                                                                                                                                                                                                                                                                                                     | はい — `additionalContext` を介して復旧ガイダンスを提供できます (コマンド フックの終了コード `2` )。                | 火災。                                                                                                        |\n| `preCompact`                                                                                            | コンテキストの圧縮が開始されようとしています (手動または自動)。 トリガー (`matcher`または`matcher`) でフィルター処理する`\"manual\"`正規表現パターン (`\"auto\"` フィールドの値) をサポートします。                                                                                                                                                                                                                           | いいえ - 通知のみ。                                                                       |                                                                                                            |\n| `trigger: \"auto\"`でのみ発生します。 手動圧縮を要求するユーザーはいません。                                                          |                                                                                                                                                                                                                                                                                                                                                    |                                                                                   |                                                                                                            |\n| `preToolUse`                                                                                            | 各ツールが実行される前。                                                                                                                                                                                                                                                                                                                                       | はい — 許可、拒否、または変更できます。                                                             | 火災。                                                                                                        |\n| `\"ask\"`の決定は、ユーザーが回答できないため、`\"deny\"`として扱われます。                                                             |                                                                                                                                                                                                                                                                                                                                                    |                                                                                   |                                                                                                            |\n| `sessionEnd`                                                                                            | セッションが終了します。                                                                                                                                                                                                                                                                                                                                       | いいえ                                                                               | ジョブごとに 1 回起動します。                                                                                           |\n| `reason` は通常、 `\"complete\"`、 `\"error\"`、または `\"timeout\"`です。ユーザーがいないため、 `\"abort\"` と `\"user_exit\"` は想定されません。 |                                                                                                                                                                                                                                                                                                                                                    |                                                                                   |                                                                                                            |\n| `sessionStart`                                                                                          | 新しいセッションまたは再開されたセッションが開始されます。                                                                                                                                                                                                                                                                                                                      | 省略可能 — セッションに `additionalContext` を挿入できます。                                        | ジョブごとに 1 回、新しいセッションとして実行されます (再開ではありません)。 クラウド エージェントでの `prompt` エントリの動作については、上記のプロンプト フックに関するメモを参照してください。 |\n| `subagentStart`                                                                                         | サブエージェントが生成されます (実行前)。 エージェント名でフィルター処理するための `matcher` 正規表現パターン ( `matcher` フィールドの値) をサポートします。                                                                                                                                                                                                                                                      | 省略可能 — 作成をブロックすることはできませんが、 `additionalContext` はサブエージェントのプロンプトの前に付加されます。          | 火災。                                                                                                        |\n| `subagentStop`                                                                                          | サブエージェントが作業を完了しました。                                                                                                                                                                                                                                                                                                                                | はい — 継続をブロックして強制できます。                                                             | 火災。                                                                                                        |\n| `userPromptSubmitted`                                                                                   | ユーザーがプロンプトを送信します。                                                                                                                                                                                                                                                                                                                                  | 省略可能— `modifiedPrompt` は、SDK プログラム フックによってのみ受け入れられます。                             | ジョブに指定されたプロンプトに対して、最大 1 回だけ実行されます。 フォローアップのユーザー入力はありません。                                                   |\n| `userPromptTransformed`                                                                                 | ランタイムが送信されたプロンプトをモデル向けのコンテンツに変換した後、そのコンテンツが出力されてセッション履歴に保存される直前に発火します。 プライマリ メッセージと、バッチ送信内の上記のすべてのメッセージに対して実行されます。 変更のみ - モデルが受け取るコンテンツを書き換えることができますが、ターンをブロックまたは処理することはできません。 システム通知によってトリガーされることはありません。                                                                                                                                          | はい — モデル向けのコンテンツを書き換えることができます。                                                    | 火災。                                                                                                        |\n\n## フック イベント入力ペイロード\n\n各フック イベントは、フック ハンドラーに JSON ペイロードを配信します。 フック構成で使用されるイベント名によって選択される 2 つのペイロード形式がサポートされています。\n\n* **camelCase 形式 — camelCase** でイベント名を構成します (例: `sessionStart`)。 フィールドには camelCase が使用されます。\n* **互換性のある形式VS Code** — PascalCase でイベント名を構成します (例: `SessionStart`)。 フィールドはsnake\\_caseを使用してVS CodeCopilotの拡張形式と一致させます。\n\n### `sessionStart` / `SessionStart`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;      // Unix timestamp in milliseconds\n    cwd: string;\n    source: \"startup\" | \"resume\" | \"new\";\n    initialPrompt?: string;\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"SessionStart\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    source: \"startup\" | \"resume\" | \"new\";\n    initial_prompt?: string;\n}\n```\n\n### `sessionEnd` / `SessionEnd`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    reason: \"complete\" | \"error\" | \"abort\" | \"timeout\" | \"user_exit\";\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"SessionEnd\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    reason: \"complete\" | \"error\" | \"abort\" | \"timeout\" | \"user_exit\";\n}\n```\n\n### `userPromptSubmitted` / `UserPromptSubmit`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    prompt: string;\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"UserPromptSubmit\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    prompt: string;\n}\n```\n\n**Output:**\n\n```typescript\n{\n    modifiedPrompt?: string; // Replaces the prompt for the rest of the turn (SDK programmatic hooks only)\n}\n```\n\nプロンプトを変更せずに残すには、 `{}` または空を返します。\n\n> \\[!NOTE]\n> \\*\n> `modifiedPrompt` は SDK プログラム フックによってのみ受け入れられます。 コマンドおよび HTTP 設定ファイル `userPromptSubmitted` フックの出力は、`modifiedPrompt` を含めて破棄されます。 ホスト型またはステアリング Copilot cloud agent セッションで使用される、より軽量なフック処理ランタイムもそれを無視します。 これは、 `preToolUse`と同じランタイム分割です。\n>\n> * セッションを破損するのではなく、文字列以外の `modifiedPrompt`、 `modifiedTransformedPrompt`、または処理された `responseContent` 値は無視されます。フィールドに名前を付ける型警告がログに記録され、 `session.warning` イベントとして出力されます。 空の文字列のオーバーライドは、モデル向けのコンテンツを空白にする代わりに拒否されます。\n>   `null`\n>   `additionalContext`値は、リテラル テキスト `null`として挿入されるのではなく、存在しないものとして扱われます。 フック出力 (コマンド フックの stdout、HTTP フックの応答本文) は、呼び出しごとに 10 MiB に制限されます。メモリを使い果たすのではなく、より大きな応答が切り捨てられます。\n\n### `userPromptTransformed`\n\nランタイムが送信されたプロンプトをモデル向けのコンテンツに変換した後、そのコンテンツが出力されてセッション履歴に保存される直前に発火します。 プライマリ メッセージと、バッチ送信内の上記のすべてのメッセージに対して実行されます。 変更のみ - モデルが受け取るコンテンツを書き換えることができますが、ターンをブロックまたは処理することはできません。 システム通知によってトリガーされることはありません。\n\n**入力：**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;         // epoch-ms integer\n    cwd: string;\n    prompt: string;            // user prompt after userPromptSubmitted hooks have run\n    transformedPrompt: string; // runtime-transformed content the model will receive\n}\n```\n\n**Output:**\n\n```typescript\n{\n    modifiedTransformedPrompt?: string; // Replaces the model-facing content\n}\n```\n\n変換されたコンテンツを変更せずに残すには、 `{}` または空を返します。\n`modifiedTransformedPrompt` は、モデルに送信され、セッション履歴に保存されたコンテンツ (タイムラインに表示されるプロンプトは影響を受けません) のみを置き換え、セッションが再開されると、置換は変更されずに再生されます。\n\n### `preToolUse` / `PreToolUse`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    toolName: string;\n    toolArgs: unknown;\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\nPascalCase イベント名 `PreToolUse` で構成されている場合、ペイロードは snake\\_case フィールド名を使用して、VS CodeCopilot 拡張形式と一致します。\n\n```typescript\n{\n    hook_event_name: \"PreToolUse\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    tool_name: string;\n    tool_input: unknown;    // Tool arguments (parsed from JSON string when possible)\n}\n```\n\n**Claude 形式マッチャー (PascalCase `PreToolUse`): PascalCase** イベント名 `PreToolUse`で構成されたフック (Claude Code プラグインと Open Plugins 形式で使用) は、ネイティブ正規表現ルールではなく、Claude のマッチャー セマンティクスを適用します。\n\n* `*`、 `**`、または空の `matcher` 値がツールごとに起動します。\n* リテラル名、または `|` 区切りのオルタネーション（たとえば、`Bash` や `Edit|Write`）は、いずれかのトークンが以下の表にあるランタイム ツール名またはその Claude ツール名と等しい場合に一致します。\n* その他の値は、`^(?:PATTERN)$` としてアンカーされた大文字と小文字を区別する正規表現として扱われ、Claude のツール名（または Claude に相当するものがないツールの場合はランタイム名）に対してテストされます。\n\nPascalCase `PreToolUse`ペイロードは、`tool_name`をクロード ツール名として報告します (たとえば、`Bash`ではなく`bash`)。\n\n| ランタイム ツール                                   | クロード ツール名         |\n| ------------------------------------------- | ----------------- |\n| `bash`、`powershell`                         | `Bash`            |\n| `view`                                      | `Read`            |\n| `create`                                    | `Write`           |\n| `edit`、 `str_replace_editor`、 `apply_patch` | `Edit`            |\n| `grep`、`rg`                                 | `Grep`            |\n| `glob`                                      | `Glob`            |\n| `web_fetch`                                 | `WebFetch`        |\n| `web_search`                                | `WebSearch`       |\n| `ask_user`                                  | `AskUserQuestion` |\n| `update_todo`                               | `TodoWrite`       |\n| `task`                                      |                   |\n| `Agent` (リテラル `Task` も受け入れられます)             |                   |\n\nClaude に相当するものがないツールは、ランタイム名のままです。\n\n> \\[!IMPORTANT]\n> **`preToolUse` のコマンドと HTTP の失敗時の挙動:** コマンド `preToolUse` フックは、エラー時には**フェールクローズ**になります。つまり、フックの stdout JSON が `2` を報告していても、クラッシュまたはゼロ以外の終了（終了 `permissionDecision: \"allow\"` を含む）ではツール呼び出しが拒否されます。 コマンド フック **のタイムアウトは、 `preToolUse` および管理者が展開したポリシー フックの場合でも、常にフェールオープン**です。タイムアウトしたフックでは警告が表示され、ツールの呼び出しは拒否されるのではなく、通常のアクセス許可フローを通過できます。 HTTP `preToolUse` フックは **フェールオープンです。** ネットワーク エラー、タイムアウト、または 2xx 以外の応答は、既定のアクセス許可フローにフォールバックします。 セキュリティ要件に一致するバリアントを選択します。\n\n### `postToolUse` / `PostToolUse`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    toolName: string;\n    toolArgs: unknown;\n    toolResult: {\n        resultType: \"success\";\n        textResultForLlm: string;\n    }\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"PostToolUse\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    tool_name: string;\n    tool_input: unknown;\n    tool_result: {\n        result_type: \"success\";\n        text_result_for_llm: string;\n    }\n}\n```\n\n### `postToolUseFailure` / `PostToolUseFailure`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    toolName: string;\n    toolArgs: unknown;\n    error: string;\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"PostToolUseFailure\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    tool_name: string;\n    tool_input: unknown;\n    error: string;\n}\n```\n\n### `agentStop` / `Stop`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    transcriptPath: string;\n    stopReason: \"end_turn\";\n    stop_hook_active: boolean; // true when this turn was already forced to continue by a prior \"block\" decision from this hook\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"Stop\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    transcript_path: string;\n    stop_reason: \"end_turn\";\n    stop_hook_active: boolean;\n}\n```\n\n### `subagentStart`\n\n> \\[!NOTE]\n> 組み込みの `general-purpose` エージェントは、 `subagentStart` または `subagentStop` イベントを出力しません。\n> `explore`、`task`、`code-review`、`rubber-duck`、`research`、`security-review`など、他のすべての組み込み YAML ベースのエージェントと、ユーザー定義のカスタム エージェントは、これらのイベントを生成します。\n\n**入力：**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    transcriptPath: string;\n    agentName: string;\n    agentDisplayName?: string;\n    agentDescription?: string;\n}\n```\n\n### `subagentStop` / `SubagentStop`\n\nサブエージェントが正常に処理を完了した際、親エージェントに結果を返す前に発生します。\n`stopReason` は現在常に `\"end_turn\"`。 このフックは、大規模な応答を伴うスピル処理の前に実行されるため、`response` (または `last_assistant_message` 互換形式の場合は VS Code) には、サブエージェントの最終応答テキストがすべて格納されます。\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    transcriptPath: string;\n    agentId: string;\n    agentType: string;\n    agentName: string;\n    agentDisplayName?: string;\n    response: string;       // Full final subagent response text\n    stopReason: \"end_turn\";\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"SubagentStop\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    transcript_path: string;\n    agent_id: string;\n    agent_type: string;\n    agent_name: string;\n    agent_display_name?: string;\n    last_assistant_message: string; // The `response` text\n    stop_reason: \"end_turn\";\n}\n```\n\n### `errorOccurred` / `ErrorOccurred`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    error: {\n        message: string;\n        name: string;\n        stack?: string;\n    };\n    errorContext: \"model_call\" | \"tool_execution\" | \"system\" | \"user_input\";\n    recoverable: boolean;\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"ErrorOccurred\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    error: {\n        message: string;\n        name: string;\n        stack?: string;\n    };\n    error_context: \"model_call\" | \"tool_execution\" | \"system\" | \"user_input\";\n    recoverable: boolean;\n}\n```\n\n### `preCompact` / `PreCompact`\n\n**camelCase の入力:**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    transcriptPath: string;\n    trigger: \"manual\" | \"auto\";\n    customInstructions: string;\n}\n```\n\n\\*\\*\nVS Code 互換性のある入力:\\*\\*\n\n```typescript\n{\n    hook_event_name: \"PreCompact\";\n    session_id: string;\n    timestamp: string;      // ISO 8601 timestamp\n    cwd: string;\n    transcript_path: string;\n    trigger: \"manual\" | \"auto\";\n    custom_instructions: string;\n}\n```\n\n## `preToolUse` デシジョン コントロール\n\n`preToolUse` フックは、JSON オブジェクトを stdout に書き込むことでツールの実行を制御できます。\n\n| フィールド                        | 価値観                                                                                           | Description                          |\n| ---------------------------- | --------------------------------------------------------------------------------------------- | ------------------------------------ |\n| `permissionDecision`         |                                                                                               |                                      |\n| `\"allow\"`、 `\"deny\"`、 `\"ask\"` | ツールが実行されるかどうか。 空の出力では、既定の動作が使用されます。 クラウド エージェントでは、ユーザーが応答できないため、 `\"ask\"` は `\"deny\"` として扱われます。 |                                      |\n| `permissionDecisionReason`   | 文字列                                                                                           | エージェントに表示される理由。 決定が `\"deny\"`場合に必要です。 |\n| `modifiedArgs`               | オブジェクト                                                                                        | 元のツールの代わりに使用するツール引数を置き換えます。          |\n\nCopilot CLIフックアクセス許可プロンプトを表示できる場合、ユーザーは省略可能なフィードバックを拒否と共に入力できます。 そのフィードバックは、エージェントが受け取るメッセージ ( `Denied by user via preToolUse hook prompt: <permissionDecisionReason>. The user provided the following feedback: <feedback>`) に追加されます。\n\n## `agentStop`/ `subagentStop` デシジョン コントロール\n\n| フィールド                                                                                          | 価値観 | Description |\n| ---------------------------------------------------------------------------------------------- | --- | ----------- |\n| `decision`                                                                                     |     |             |\n| `\"block\"`、`\"allow\"`                                                                            |     |             |\n| `\"block\"` は、別のエージェントがプロンプトとして `reason` を使用するように強制します。                                          |     |             |\n| `reason`                                                                                       | 文字列 |             |\n| `decision`が`\"block\"`されたら、次のターンを求めるメッセージを表示します。                                                 |     |             |\n| `modifiedResponse`                                                                             | 文字列 |             |\n| \\*\\*                                                                                           |     |             |\n| `subagentStop` だけ。\\*\\* サブエージェントの完了が許可されたときに親に返される応答を置き換えます。サブエージェントの出力を編集または再フォーマットする場合に役立ちます。 |     |             |\n| `agentStop`には適用されません。                                                                          |     |             |\n\n`decision` と `reason` は、 `agentStop` と `subagentStop`の両方で同じように動作します。\n`modifiedResponse` は、 `subagentStop`にのみ適用されます。\n\n* 有効な `block` 決定が `modifiedResponse`よりも優先されます。フックが両方を返した場合、サブエージェントは続行され、書き換えは破棄されます。\n* 書き換えは、複数の一致するフック間で合成されません。 すべてのフックは同じ元の `response`を受け取り、 `modifiedResponse` を返す最後のフックが優先されます。リダクターとフォーマッタを連結しても、編集されたテキストはフォーマッタにフィードされません。\n* 出力フィールド名 (`decision`、 `reason`、 `modifiedResponse`) は、camelCase と VS Code 互換性のある構成の両方で同じです。\n\n> \\[!NOTE]\n> **ランナウェイ ガード。** 連続 `block` 継続が 8 回続いた後、CLI はフックをオーバーライドしてターンを終了し、無制限のループを防ぎます。 `stop_hook_active`の`agentStop`入力フィールドを使用して、このターンが既に強制的に続行され、上限に達する前に自己制限されていることを検出します。\n\n## `postToolUse`出力\n\n`postToolUse`フックは、JSON オブジェクトを stdout に書き込むことで、ツールの結果を変更したり、モデルの追加のコンテキストを挿入したりできます。\n\n```typescript\n{\n    modifiedResult?: {\n        resultType: \"success\";\n        textResultForLlm: string;\n    };\n    additionalContext?: string;\n}\n```\n\n| フィールド                                                                                                                   | タイプ    | Description |\n| ----------------------------------------------------------------------------------------------------------------------- | ------ | ----------- |\n| `modifiedResult`                                                                                                        | オブジェクト | 置換ツールの結果。   |\n| `resultType: \"success\"`が必要です。                                                                                           |        |             |\n| `resultType: \"failure\"`とともに返されると、障害は下流へルーティングされ、その後に`postToolUseFailure`が実行されます。                                        |        |             |\n| `additionalContext`                                                                                                     | 文字列    |             |\n| `textResultForLlm`に追加のガイダンスが追加され、同じターンのツール出力後にモデルに表示されます。 複数のフックが `additionalContext`を返すと、結果は二重改行で結合され、上限は 10 KB になります。 |        |             |\n\n元の正常な結果を維持するために、 `{}` または空の出力を返します。\n\n> \\[!NOTE]\n> `modifiedResult` は、SDK プログラム フックと command/HTTP config-file `postToolUse` フックの両方によって受け入れられます。\n\n**Matcher：**`toolName`に対してテストされた省略可能な正規表現。 正規表現パターンは、`matcher`としてコンパイルされた`^(?:PATTERN)$` フィールドの値であり、ツール名全体と一致する必要があります。 パターンが有効な正規表現でない場合、フックはスキップされます。 すべてのツールから結果を受け取るには、 `matcher` を省略します。\n\n```json\n{\n    \"type\": \"command\",\n    \"matcher\": \"bash|edit\",\n    \"bash\": \"./scripts/log-tool.sh\"\n}\n```\n\n## `permissionRequest` デシジョン コントロール\n\n> \\[!NOTE]\n> **Copilot CLI だけ。** `permissionRequest` フックは、Copilot cloud agentの下には適用されません。ツール呼び出しには、事前に承認されています (クラウド エージェント実行環境テーブルの **\\[対話]** 行を参照)。 `preToolUse`を使用して、クラウド エージェントでアクセス許可を決定します。\n\n`permissionRequest`フックは、アクセス許可サービスが実行される前 (ルール チェック、セッション承認、自動許可/自動拒否、ユーザー プロンプトの前) に起動します。 フックが `behavior: \"allow\"` または `\"deny\"`を返した場合、その決定は通常のアクセス許可フローをショートします。 何も返されない場合は、通常のアクセス許可処理に移行します。 これを使用して、ツール呼び出しをプログラムで承認または拒否します。特に、対話型プロンプトが使用できない CLI パイプ モード (`-p`) やその他の CLI CI の使用に便利です。 クラウド エージェントには適用されません。\n\n構成されているすべての `permissionRequest` フックは、要求ごとに実行されます (`read` と `hook` アクセス許可の種類を除き、フックの前にショートサーキットします)。 フック出力は、後のフック出力が以前の出力を上書きする形でマージされます。\n\n**サンドボックス バイパス例外:** サンドボックスのエスケープ (`toolInput`で`requestSandboxBypass: true`) を要求する要求の場合、フック `allow`は要求を事前に承認したり、ユーザー プロンプトをショートサーキットしたりしません。サンドボックスを離れることは特権エスカレーションであり、ユーザーは常に対話形式で確認する必要があります。 ここでは、サンドボックスの外部で実行を要求するシェル コマンドと、サンドボックス ネットワーク ポリシーが拒否する URL を持つ `web_fetch` について説明します。 引き続き伝達されるのは `deny` だけです (そのため、ポリシー フックでエスケープをブロックできます)。 `allow` (または決定なし) が通常のプロンプトに反映されます。\n\n**Matcher：**`toolName`に対してテストされた省略可能な正規表現。 正規表現パターンは、`matcher`として固定された`^(?:PATTERN)$` フィールドの値であり、完全なツール名と一致する必要があります。 設定すると、フックは一致するツール名に対してのみ起動します。\n\n> \\[!NOTE]\n> **Claude 形式マッチャー (PascalCase `PermissionRequest`): PascalCase** イベント名で構成されたフック `PermissionRequest` 、 `PreToolUse`と同じ Claude マッチャー セマンティクスを使用します。 マッチャー ルールとツール名テーブルについては、 [Claude 形式のマッチャー (PascalCase PreToolUse)](#claude-format-matchers-pascalcase-pretooluse) を参照してください。\n\nアクセス許可の決定を制御するために、JSON を stdout に出力します。\n\n| フィールド                             | 価値観                    | Description             |\n| --------------------------------- | ---------------------- | ----------------------- |\n| `behavior`                        |                        |                         |\n| `\"allow\"`、`\"deny\"`                | ツール呼び出しを承認または拒否するかどうか。 |                         |\n| `message`                         | 文字列                    | 拒否時に LLM にフェールバックされる理由。 |\n| `interrupt`                       | boolean                |                         |\n| `true`                            |                        |                         |\n| `\"deny\"`と組み合わせると、エージェントが完全に停止します。 |                        |                         |\n\n空の出力または`{}`を返して通常のアクセス許可フローに移行します。 コマンド フックの場合、終了コード `2` は拒否として扱われ、stdout JSON (ある場合) は `{\"behavior\":\"deny\"}`とマージされ、stderr は無視されます。\n\n## `notification` フック\n\n> \\[!NOTE]\n> **Copilot CLI だけ。** `notification`フックはCopilot cloud agentの下では起動しません。\n\n`notification` フックは、CLI がシステム通知を出力するときに非同期的に起動します。 これらのフックは「ファイア・アンド・フォーゲット」で、セッションをブロックすることは決してなく、エラーはログに記録され、スキップされます。\n\n**入力：**\n\n```typescript\n{\n    sessionId: string;\n    timestamp: number;\n    cwd: string;\n    hook_event_name: \"Notification\";\n    message: string;           // Human-readable notification text\n    title?: string;            // Short title (e.g., \"Permission needed\", \"Shell completed\")\n    notification_type: string; // One of the types listed below\n}\n```\n\n**通知の種類:**\n\n| タイプ                        | 起動時                                                    |\n| -------------------------- | ------------------------------------------------------ |\n| `shell_completed`          | バックグラウンド (非同期) シェル コマンドが終了する                           |\n| `shell_detached_completed` | デタッチされたシェル セッションが完了する                                  |\n| `agent_completed`          | バックグラウンド サブエージェントの終了 (完了または失敗)                         |\n| `agent_idle`               | バックグラウンド エージェントがターンを完了し、アイドル状態になり、`write_agent` を待機します |\n| `permission_prompt`        | エージェントがツールを実行するためのアクセス許可を要求する                          |\n| `elicitation_dialog`       | エージェントがユーザーに追加情報を要求する                                  |\n\n**Output:**\n\n```typescript\n{\n    additionalContext?: string; // Injected into the session as a user message\n}\n```\n\n`additionalContext`が返された場合、テキストは、そのセッションに先頭に追加されたユーザーメッセージとして挿入されます。 これにより、セッションがアイドル状態の場合に、さらにエージェントの処理がトリガーされる可能性があります。 アクションを実行しない場合は、 `{}` または空の出力を返します。\n\n**Matcher：**`notification_type`の省略可能な正規表現。 正規表現パターンは、`matcher`として固定された`^(?:PATTERN)$` フィールドの値です。 すべての通知の種類を受信するには、 `matcher` を省略します。\n\n## マッチャーのフィルタリング\n\nいくつかのイベントでは、各フック エントリに対してオプションの `matcher` 正規表現を受け付け、フックがどの呼び出しに対して起動するかをフィルターします。 これは `^(?:PATTERN)$` としてコンパイルされ、完全な値と一致する必要があります。 無効な正規表現を指定すると、フック エントリがスキップされます。\n\n\\| Event |\n`matcher` が照合される |\n\\|-------|------------------------------|\n\\| `notification` | `notification_type` |\n\\| `permissionRequest` | `toolName` |\n\\| `postToolUse` | `toolName` |\n\\| `preCompact` |\n`trigger` (`\"manual\"` または `\"auto\"`) |\n\\| `preToolUse` | `toolName` |\n\\| `subagentStart` | `agentName` |\n\n## フックマッチング用のツール名\n\n| ツール名         | Description                                                         |\n| ------------ | ------------------------------------------------------------------- |\n| `ask_user`   | ユーザーに明確な質問をします。 クラウド エージェントの下にはユーザーがないため、 `ask_user` は有用な結果を生成しません。 |\n| `bash`       | シェル コマンド (Unix) を実行します。                                             |\n| `create`     | 新しいファイルを作成します。                                                      |\n| `edit`       | ファイルの内容を変更します。                                                      |\n| `glob`       | パターンでファイルを検索します。                                                    |\n| `grep`       | ファイルの内容を検索します。                                                      |\n| `powershell` | シェル コマンドを実行する (Windows)。 クラウド エージェント (Linux サンドボックス) の下には表示されません。   |\n| `task`       | サブエージェント タスクを実行します。                                                 |\n| `view`       | ファイルの内容を読み取ります。                                                     |\n| `web_fetch`  | Web ページを取得します。                                                      |\n\n同じ種類の複数のフックが構成されている場合は、順番に実行されます。\n`preToolUse`の場合、フックが`\"deny\"`を返した場合、ツールはブロックされます。 ほとんどのイベントでは、フックエラー ( `2`以外の 0 以外の終了コード、またはタイムアウト) がログに記録され、スキップされます。\n**例外: `preToolUse` コマンド フックは、終了時 `2` およびタイムアウト以外のエラー時にはフェイルクローズします**—`2` 終了、クラッシュ、またはその他のゼロ以外の終了 (タイムアウトを除く) が発生した場合、フックの stdout JSON が `permissionDecision: \"allow\"` を示していても、ツール呼び出しは拒否されます。\n**タイムアウトは、 `preToolUse` や管理者が展開したポリシー フックを含め、常にフェールオープン**です。警告が表示され、ツールの呼び出しは拒否されるのではなく、通常のアクセス許可フローを通過します。\n\n## コマンド フックの終了コード\n\n| 終了コード                                                                                                                                        | Meaning                                  |\n| -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |\n| `0`                                                                                                                                          | 成功しました。                                  |\n| `stdout` は、フック出力 JSON (存在する場合) として解析されます。                                                                                                    |                                          |\n| `2`                                                                                                                                          | 既定では警告として扱われます。                          |\n| `stderr` はユーザーに表示されますが、実行は続行されます。                                                                                                            |                                          |\n| `permissionRequest`と`preToolUse`の場合、終了`2`は拒否として扱われます。`stdout` JSON は拒否決定とマージされ、その JSON レポートが`permissionDecision: \"allow\"`場合でもツール呼び出しは拒否されます。 |                                          |\n| `postToolUseFailure`の場合、終了`2`は`additionalContext`として扱われ、エージェントに表示されるエラーに`stdout`が追加されます。                                                     |                                          |\n| その他の 0 以外                                                                                                                                    | フックエラーとしてログに記録されます。 実行は継続されます（フェイルオープン）。 |\n| **例外: `preToolUse` はフェールクローズ**です。ゼロ以外の出口 (出口 2 以外) は、 `\"Denied by preToolUse hook (hook errored)\"`を使用したツール呼び出しを拒否します。                        |                                          |\n| タイムアウト                                                                                                                                       |                                          |\n| `timeoutSec` 後に終了。 エラーがログに記録され、実行が続行されます。                                                                                                    |                                          |\n| **タイムアウトは、 `preToolUse` や管理者が展開したポリシー フックなど、すべてのイベントでフェールオープン**されます。警告が表示され、フックが実行されていないかのように処理が続行されます。                                      |                                          |\n| `preToolUse`の場合、ツール呼び出しは拒否されるのではなく、通常のアクセス許可フローを通じて続行されます。 クラッシュしたフックや明示的に拒否されたフックは、引き続き「フェイルクローズ」となります。タイムアウトのみが例外となります。                    |                                          |\n\nほとんどのイベントでは、0 以外の終了とタイムアウトがログに記録され、スキップされます。エージェントの実行は続行されます。\n`preToolUse` コマンド フックでは、終了コード 2、クラッシュ、およびその他の非ゼロ終了はすべてフェイルクローズとなり、ツール呼び出しを拒否します。フックの `stdout` JSON が `permissionDecision: \"allow\"` を報告していても、終了コード 2 は常に拒否します。しかし、**タイムアウトは常にフェイルオープンです**。低速または到達不能なフックは、たとえそのフックが管理者によってポリシーとして展開されていたとしても、ツール呼び出しや処理を気付かれないままブロックしてはなりません。\n\n## すべてのフックを無効にする\n\n`disableAllHooks`は、フック構成をディスク上に保持し、実行を停止する場合に使用します。次に例を示します。\n\n* 問題をデバッグし、構成を削除せずにフックが原因であることを確認する必要があります。\n* セットアップを失うことなく、機密性の高いタスク (コード レビュー、リリース ブランチ、シークレットの操作) 中に自動化を一時停止します。 (**Copilot CLI のみ**)。\n* ソース管理にフックファイルを配置し、共同作成者が自身のリポジトリ `settings.json` でオプションを設定することで、ローカルでその適用を無効にできるようにします。 (**Copilot CLI のみ**)。\n* 対話型セッション中に低速またはノイズの多いフックを一時的に消音する。 (**Copilot CLI のみ**)。\n\nファイル内のすべてのフックを削除せずにスキップするには、 `disableAllHooks` を最上位レベルで `true` に設定します。\n\n```json\n{\n  \"version\": 1,\n  \"disableAllHooks\": false,\n  \"hooks\": {\n    \"preToolUse\": [ /* hook entries */ ]\n  }\n}\n```\n\n動作は、フラグを設定する場所によって異なります。\n\n* **1 つの `.github/hooks/*.json` ファイル内** では、そのファイルで宣言されているフックのみがスキップされます。\n  Copilot CLIとCopilot cloud agentの両方によって称賛されます。\n* **リポジトリの最上位レベルの `settings.json`** — **Copilot CLI のみ。** すべてのソース (リポジトリ ファイル、ユーザー ファイル、プラグイン、インライン フック ブロック) のすべてのフックは、そのリポジトリ内のセッションではスキップされます。 ポリシー フックは影響を受けず、引き続き実行されます。 クラウド エージェントは `settings.json`を読み込まない。\n\n## 詳細については、次を参照してください。\n\n* [GitHub Copilot CLI でフックを使用する](/ja/copilot/how-tos/copilot-cli/customize-copilot/use-hooks)\n* [GitHub Copilotフックリファレンス](/ja/copilot/reference/hooks-reference)\n* [GITHUB COPILOT CLI コマンド リファレンス](/ja/copilot/reference/copilot-cli-reference/cli-command-reference)\n* [GitHub Copilot クラウド エージェントの概念](/ja/copilot/concepts/agents/cloud-agent)"}