6 6
7> Claude Code の mod の完全なリファレンス:フックモジュールの構成、イベント、mods API メソッド、描画箇所、サーフェス別の要素、制限、設定。7> Claude Code の mod の完全なリファレンス:フックモジュールの構成、イベント、mods API メソッド、描画箇所、サーフェス別の要素、制限、設定。
8 8
9[mod](/docs/ja/plugins/mods/overview.md) が処理できるイベント、呼び出せる mods API メソッド、描画できる描画箇所を調べられます。各項目は v2.1.290 時点の Claude Code CLI と Desktop アプリ、および v2.1.299 時点の VS Code 拡張機能を対象としています。各項目には名前と 1 行の説明があり、解説しているガイドのセクションがある場合はそこへのリンクも記載しています。9[mod](https://code.claude.com/docs/ja/plugins/mods/overview.md) が処理できるイベント、呼び出せる mods API メソッド、描画できる描画箇所を調べられます。各項目は v2.1.290 時点の Claude Code CLI と Desktop アプリ、および v2.1.299 時点の VS Code 拡張機能を対象としています。各項目には名前と 1 行の説明があり、解説しているガイドのセクションがある場合はそこへのリンクも記載しています。
10 10
11> [!NOTE]11> [!NOTE]
12>12>
13> 完全なリファレンスは Claude Code の [mod 用 TypeScript 宣言](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts)で、すべてのイベント、メソッド、要素が例とともに記述されています。GitHub 上のコピーは、インストールしている Claude Code のバージョンより古い場合があります。両者が食い違う場合は、[Claude Code がお使いのバージョン用に書き出すコピー](/docs/ja/plugins/mods/create.md#get-the-types-for-your-build)を信頼してください。13> 完全なリファレンスは Claude Code の [mod 用 TypeScript 宣言](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts)で、すべてのイベント、メソッド、要素が例とともに記述されています。GitHub 上のコピーは、インストールしている Claude Code のバージョンより古い場合があります。両者が食い違う場合は、[Claude Code がお使いのバージョン用に書き出すコピー](https://code.claude.com/docs/ja/plugins/mods/create.md#get-the-types-for-your-build)を信頼してください。
14 14
15## ファイル15## ファイル
16 16
18 18
19| ファイル | 必須 | 内容 |19| ファイル | 必須 | 内容 |
20| :- | :- | :- |20| :- | :- | :- |
21| `.claude-plugin/plugin.json` | はい | プラグインの[マニフェスト](/docs/ja/plugins/manifest-reference.md)。mod によって追加される必須フィールドはありません。 |21| `.claude-plugin/plugin.json` | はい | プラグインの[マニフェスト](https://code.claude.com/docs/ja/plugins/manifest-reference.md)。mod によって追加される必須フィールドはありません。 |
22| `hooks/hooks.json` | はい | `modules`:フックモジュールへのパスを 1 つ含む配列で、パスはこのファイルからの相対パスです(例:`"modules": ["./register.js"]`)。`hooks` の下に[設定フック](/docs/ja/hooks.md)を置くこともできます。 |22| `hooks/hooks.json` | はい | `modules`:フックモジュールへのパスを 1 つ含む配列で、パスはこのファイルからの相対パスです(例:`"modules": ["./register.js"]`)。`hooks` の下に[設定フック](https://code.claude.com/docs/ja/hooks.md)を置くこともできます。 |
23| [`hooks/register.js`](/docs/ja/plugins/mods/create#write-a-mod-yourself) などのフックモジュール | はい | mod のエントリポイント。`register(on, options)` をエクスポートします。名前は `.js`、`.mjs`、`.cjs`、`.jsx`、`.ts`、`.mts`、`.cts`、`.tsx` のいずれかで終わります。ES モジュールです。 |23| [`hooks/register.js`](https://code.claude.com/docs/ja/plugins/mods/create#write-a-mod-yourself) などのフックモジュール | はい | mod のエントリポイント。`register(on, options)` をエクスポートします。名前は `.js`、`.mjs`、`.cjs`、`.jsx`、`.ts`、`.mts`、`.cts`、`.tsx` のいずれかで終わります。ES モジュールです。 |
24| マニフェストの `types` で指定する [`types/index.d.ts`](/docs/ja/plugins/mods/interface#declare-the-values) | mod が `$.state` を使う場合、または mods API に名前空間を追加する場合 | `PluginState` の値と、mod が追加する名前空間を宣言します |24| マニフェストの `types` で指定する [`types/index.d.ts`](https://code.claude.com/docs/ja/plugins/mods/interface#declare-the-values) | mod が `$.state` を使う場合、または mods API に名前空間を追加する場合 | `PluginState` の値と、mod が追加する名前空間を宣言します |
25| 名前が `.test.ts` または `.test.tsx` で終わるファイル | いいえ | [`claude plugin test`](/docs/ja/plugins/mods/test#write-a-test) が実行するテスト |25| 名前が `.test.ts` または `.test.tsx` で終わるファイル | いいえ | [`claude plugin test`](https://code.claude.com/docs/ja/plugins/mods/test#write-a-test) が実行するテスト |
26 26
27`register` は `on` と `options` を受け取ります。`options` には、マニフェストが宣言する [`userConfig`](/docs/ja/plugins/components#user-configuration) フィールドの値が、デフォルト値を補った状態で入っています。27`register` は `on` と `options` を受け取ります。`options` には、マニフェストが宣言する [`userConfig`](https://code.claude.com/docs/ja/plugins/components#user-configuration) フィールドの値が、デフォルト値を補った状態で入っています。
28 28
29## フック関数29## フック関数
30 30
31mod は、イベントハンドラーである各フックを `register` 内で `on` を呼び出して登録します。`on` は、イベント名、省略可能な [matcher](/docs/ja/plugins/mods/events.md#filter-which-events-a-hook-handles)(イベントのフィールドに対するフィルター)、フックを受け取ります(例:`on('tool.call', { tool: 'Bash' }, async ($, e, next) => next(e))`)。`on` は、フックの[エラーハンドラー](/docs/ja/plugins/mods/events.md#handle-a-hook-that-fails)を設定する `.catch(handler)` メソッドを 1 つだけ持つ登録オブジェクトを返します。31mod は、イベントハンドラーである各フックを `register` 内で `on` を呼び出して登録します。`on` は、イベント名、省略可能な [matcher](https://code.claude.com/docs/ja/plugins/mods/events.md#filter-which-events-a-hook-handles)(イベントのフィールドに対するフィルター)、フックを受け取ります(例:`on('tool.call', { tool: 'Bash' }, async ($, e, next) => next(e))`)。`on` は、フックの[エラーハンドラー](https://code.claude.com/docs/ja/plugins/mods/events.md#handle-a-hook-that-fails)を設定する `.catch(handler)` メソッドを 1 つだけ持つ登録オブジェクトを返します。
32 32
33| 引数 | 内容 |33| 引数 | 内容 |
34| :- | :- |34| :- | :- |
35| [`$`](/docs/ja/plugins/mods/events#how-a-hook-handles-an-event) | mods API:[mods API メソッド](#mods-api-methods)のすべてのメソッド。各呼び出しは、名前空間、メソッドの順に省略せずに書きます(例:`$.fs.read('notes.md')`)。 |35| [`$`](https://code.claude.com/docs/ja/plugins/mods/events#how-a-hook-handles-an-event) | mods API:[mods API メソッド](#mods-api-methods)のすべてのメソッド。各呼び出しは、名前空間、メソッドの順に省略せずに書きます(例:`$.fs.read('notes.md')`)。 |
36| [`e`](/docs/ja/plugins/mods/events#how-a-hook-handles-an-event) | イベントの入力。深く凍結されたプレーンなデータです。変更するには、コピーを `next` に渡します。 |36| [`e`](https://code.claude.com/docs/ja/plugins/mods/events#how-a-hook-handles-an-event) | イベントの入力。深く凍結されたプレーンなデータです。変更するには、コピーを `next` に渡します。 |
37| [`next(e)`](/docs/ja/plugins/mods/events#how-a-hook-handles-an-event) | ミドルウェアと同様の次のハンドラー。このフックの後のフックを実行し、次に Claude Code の動作を実行します。イベントの結果に解決されます。 |37| [`next(e)`](https://code.claude.com/docs/ja/plugins/mods/events#how-a-hook-handles-an-event) | ミドルウェアと同様の次のハンドラー。このフックの後のフックを実行し、次に Claude Code の動作を実行します。イベントの結果に解決されます。 |
38| [`next.signal`](/docs/ja/plugins/mods/api#stop-background-work) | イベントが破棄されたときに中止される `AbortSignal` |38| [`next.signal`](https://code.claude.com/docs/ja/plugins/mods/api#stop-background-work) | イベントが破棄されたときに中止される `AbortSignal` |
39| `next.origin` | イベントを発火したものの `{ plugin, tier }`。Claude Code 自身は `{ plugin: 'engine', tier: 'core' }` です。mod の `tier` は、[mod が実行される順序](/docs/ja/plugins/mods/events.md#the-order-mods-run-in)における優先度グループで、`prepend`、`user`、`append`、`builtin` のいずれかです。 |39| `next.origin` | イベントを発火したものの `{ plugin, tier }`。Claude Code 自身は `{ plugin: 'engine', tier: 'core' }` です。mod の `tier` は、[mod が実行される順序](https://code.claude.com/docs/ja/plugins/mods/events.md#the-order-mods-run-in)における優先度グループで、`prepend`、`user`、`append`、`builtin` のいずれかです。 |
40| `next.budget` | フックの制限時間(ミリ秒):`next.budget.ms` は制限全体、`next.budget.remainingMs` は現時点の残り時間です |40| `next.budget` | フックの制限時間(ミリ秒):`next.budget.ms` は制限全体、`next.budget.remainingMs` は現時点の残り時間です |
41| `next.to(e, tier)` | 後の tier(`append`、`builtin`、`core` のいずれか)までスキップします。`next.to(e, 'append')` はユーザーがインストールした mod をスキップします。呼び出せるのは `prependPlugins` または `appendPlugins` にある mod だけです。 |41| `next.to(e, tier)` | 後の tier(`append`、`builtin`、`core` のいずれか)までスキップします。`next.to(e, 'append')` はユーザーがインストールした mod をスキップします。呼び出せるのは `prependPlugins` または `appendPlugins` にある mod だけです。 |
42| `next.error` | `.catch` ハンドラー内でのみ使用できます。フックが失敗した場合、`kind` は `throw` または `timeout` で、`message` はエラーのテキストです。イベントがそのフック自身、またはフックの外側にある mod のコードによる mods API 呼び出しの内部から発生したためにフックがスキップされた場合、`kind` は `re-entry` になります。`re-entry` には Claude Code v2.1.292 以降が必要です。 |42| `next.error` | `.catch` ハンドラー内でのみ使用できます。フックが失敗した場合、`kind` は `throw` または `timeout` で、`message` はエラーのテキストです。イベントがそのフック自身、またはフックの外側にある mod のコードによる mods API 呼び出しの内部から発生したためにフックがスキップされた場合、`kind` は `re-entry` になります。`re-entry` には Claude Code v2.1.292 以降が必要です。 |
43| `next.error.cause` | `kind` が `re-entry` の場合にのみ設定されます。イベントの発生元である mods API 呼び出しを `tool.call` または [`PreToolUse`](/docs/ja/hooks#pretooluse) フックが変更した場合、またはその呼び出しによって開始されたエージェントを `agent.spawn` フックが変更した場合は `rewritten` です。別の mod が mods API に追加したメソッドがそのイベントを発火した場合は、`rewritten` にも該当しない限り `lent` です。`lent` には Claude Code v2.1.292 以降、`rewritten` には v2.1.300 以降が必要です。 |43| `next.error.cause` | `kind` が `re-entry` の場合にのみ設定されます。イベントの発生元である mods API 呼び出しを `tool.call` または [`PreToolUse`](https://code.claude.com/docs/ja/hooks#pretooluse) フックが変更した場合、またはその呼び出しによって開始されたエージェントを `agent.spawn` フックが変更した場合は `rewritten` です。別の mod が mods API に追加したメソッドがそのイベントを発火した場合は、`rewritten` にも該当しない限り `lent` です。`lent` には Claude Code v2.1.292 以降、`rewritten` には v2.1.300 以降が必要です。 |
44| `next.called` | `.catch` ハンドラー内でのみ使用できます。フックが `next` を呼び出していた場合は `true` です。 |44| `next.called` | `.catch` ハンドラー内でのみ使用できます。フックが `next` を呼び出していた場合は `true` です。 |
45 45
46## イベント46## イベント
55 55
56| イベント | 発火するタイミング | フックが返せる値 |56| イベント | 発火するタイミング | フックが返せる値 |
57| :- | :- | :- |57| :- | :- | :- |
58| [`tool.call`](/docs/ja/plugins/mods/events#guard-or-change-a-tool-call) | ツールが実行される直前 | `next(e)`、`{ deny: reason }`、または `{ result }` |58| [`tool.call`](https://code.claude.com/docs/ja/plugins/mods/events#guard-or-change-a-tool-call) | ツールが実行される直前 | `next(e)`、`{ deny: reason }`、または `{ result }` |
59| [`tool.check`](/docs/ja/plugins/mods/events#where-settings-hooks-run-in-the-order) | `tool.call` フックと `PreToolUse` フックの後、Claude Code がツール呼び出しを実行してよいかを判定するとき。`next(e)` は、ルール、権限モード、それらのフックが下した判定に解決されます。 | `next(e)` または `{ decision }`(`decision` には `allow`、`ask`、`deny` のいずれかを設定し、任意で `reason` を指定できます) |59| [`tool.check`](https://code.claude.com/docs/ja/plugins/mods/events#where-settings-hooks-run-in-the-order) | `tool.call` フックと `PreToolUse` フックの後、Claude Code がツール呼び出しを実行してよいかを判定するとき。`next(e)` は、ルール、権限モード、それらのフックが下した判定に解決されます。 | `next(e)` または `{ decision }`(`decision` には `allow`、`ask`、`deny` のいずれかを設定し、任意で `reason` を指定できます) |
60| `tool.describe` | 各ツールにつき 1 回、その説明が初めて Claude に送信されるとき。MCP ツールの場合は、Claude が[ツール検索](/docs/ja/mcp.md#scale-with-mcp-tool-search)を通じてそのツールを読み込むときに 2 回目が発火し、`e.description` には読み込まれたツールについて Claude が読むテキストが設定されます。 | `{ description }`(任意で `isDeferred` を指定でき、`true` にするとツールをツール検索の背後に置き、`false` にすると最初から読み込みます) |60| `tool.describe` | 各ツールにつき 1 回、その説明が初めて Claude に送信されるとき。MCP ツールの場合は、Claude が[ツール検索](https://code.claude.com/docs/ja/mcp.md#scale-with-mcp-tool-search)を通じてそのツールを読み込むときに 2 回目が発火し、`e.description` には読み込まれたツールについて Claude が読むテキストが設定されます。 | `{ description }`(任意で `isDeferred` を指定でき、`true` にするとツールをツール検索の背後に置き、`false` にすると最初から読み込みます) |
61 61
62#### `tool.check` のエージェントと組織のフィールド62#### `tool.check` のエージェントと組織のフィールド
63 63
64`tool.check` フックでは、次のフィールドを読み取ることで、サブエージェントによる呼び出しとメインの会話による呼び出しを区別したり、組織がコネクタツールに承認を必要としているかどうかを確認したりできます。64`tool.check` フックでは、次のフィールドを読み取ることで、サブエージェントによる呼び出しとメインの会話による呼び出しを区別したり、組織がコネクタツールに承認を必要としているかどうかを確認したりできます。
65 65
66* **`e.agentId`**: [サブエージェント](/docs/ja/sub-agents.md)または[インプロセスのチームメイト](/docs/ja/agent-teams.md#choose-a-display-mode)が呼び出しを行う場合に設定され、メインの会話が呼び出しを行う場合は存在しません66* **`e.agentId`**: [サブエージェント](https://code.claude.com/docs/ja/sub-agents.md)または[インプロセスのチームメイト](https://code.claude.com/docs/ja/agent-teams.md#choose-a-display-mode)が呼び出しを行う場合に設定され、メインの会話が呼び出しを行う場合は存在しません
67* **`e.ceiling`**: [その設定が Claude Code に届くセッション](/docs/ja/mcp.md#organization-controls-on-connector-tools)で、組織が `ask` に設定したコネクタツールの場合は `ask`67* **`e.ceiling`**: [その設定が Claude Code に届くセッション](https://code.claude.com/docs/ja/mcp.md#organization-controls-on-connector-tools)で、組織が `ask` に設定したコネクタツールの場合は `ask`
68 68
69`tool.check` の `e.agentId` と `e.ceiling` には Claude Code v2.1.290 以降が必要です。69`tool.check` の `e.agentId` と `e.ceiling` には Claude Code v2.1.290 以降が必要です。
70 70
71#### `tool.check` の `e.isReadOnly` フィールド71#### `tool.check` の `e.isReadOnly` フィールド
72 72
73`tool.check` フックでは、ツールがこの呼び出しを読み取り専用と報告した場合に `e.isReadOnly` が `true` になります。それ以外の場合、このフィールドは `false` ではなく存在しません。この値はツール自身の報告であるため、このフィールドだけに基づいて呼び出しを承認する前に、[ツール呼び出しが読み取り専用かどうかを確認する](/docs/ja/plugins/mods/events.md#check-whether-a-tool-call-is-read-only)を読んでください。73`tool.check` フックでは、ツールがこの呼び出しを読み取り専用と報告した場合に `e.isReadOnly` が `true` になります。それ以外の場合、このフィールドは `false` ではなく存在しません。この値はツール自身の報告であるため、このフィールドだけに基づいて呼び出しを承認する前に、[ツール呼び出しが読み取り専用かどうかを確認する](https://code.claude.com/docs/ja/plugins/mods/events.md#check-whether-a-tool-call-is-read-only)を読んでください。
74 74
75`tool.check` の `e.isReadOnly` には Claude Code v2.1.304 以降が必要です。75`tool.check` の `e.isReadOnly` には Claude Code v2.1.304 以降が必要です。
76 76
80 80
81| イベント | 発火するタイミング | フックが返せる値 |81| イベント | 発火するタイミング | フックが返せる値 |
82| :- | :- | :- |82| :- | :- | :- |
83| [`prompt.submit`](/docs/ja/plugins/mods/events#rewrite-or-add-to-a-prompt) | プロンプトが送信されるとき | `next({ ...e, text })`、`next({ ...e, context })`、または `{ drop: reason }` |83| [`prompt.submit`](https://code.claude.com/docs/ja/plugins/mods/events#rewrite-or-add-to-a-prompt) | プロンプトが送信されるとき | `next({ ...e, text })`、`next({ ...e, context })`、または `{ drop: reason }` |
84| `prompt.fill`、`prompt.suggest` | テキストが下書きとして、または薄い表示の候補としてプロンプトボックスに入る直前 | テキストを変更した `next(e)` |84| `prompt.fill`、`prompt.suggest` | テキストが下書きとして、または薄い表示の候補としてプロンプトボックスに入る直前 | テキストを変更した `next(e)` |
85| `prompt.edit` | ユーザーがプロンプトボックスを編集するとき | `next(e)` |85| `prompt.edit` | ユーザーがプロンプトボックスを編集するとき | `next(e)` |
86| `prompt.autocomplete` | ユーザーがプロンプトボックスに入力し、カーソル位置で単語が終わるとき。`e.token` はその単語です。Claude Code はフックを待たず、Claude Code 独自のオートコンプリートの行が先に表示されます。 | `{ suggestions }`(Claude Code 独自の行の下に表示される `{ text, label, description }` の行のリスト)。行を選択すると、その `text` で単語が上書きされます。 |86| `prompt.autocomplete` | ユーザーがプロンプトボックスに入力し、カーソル位置で単語が終わるとき。`e.token` はその単語です。Claude Code はフックを待たず、Claude Code 独自のオートコンプリートの行が先に表示されます。 | `{ suggestions }`(Claude Code 独自の行の下に表示される `{ text, label, description }` の行のリスト)。行を選択すると、その `text` で単語が上書きされます。 |
87| `prompt.compose` | Claude Code がシステムプロンプトを生成するとき | `{ sections }`(送信順に並んだ `{ id, text, scope }` のリスト) |87| `prompt.compose` | Claude Code がシステムプロンプトを生成するとき | `{ sections }`(送信順に並んだ `{ id, text, scope }` のリスト) |
88| [`prompt.section`](/docs/ja/plugins/mods/events#rewrite-or-add-to-a-prompt) | システムプロンプトの名前付きセクションごとに 1 回。`e.name` は `prompt.compose` におけるそのセクションの `id` です。 | `{ text }`、またはセクションを省くには `{ text: null }` |88| [`prompt.section`](https://code.claude.com/docs/ja/plugins/mods/events#rewrite-or-add-to-a-prompt) | システムプロンプトの名前付きセクションごとに 1 回。`e.name` は `prompt.compose` におけるそのセクションの `id` です。 | `{ text }`、またはセクションを省くには `{ text: null }` |
89| [`prompt.context`](/docs/ja/plugins/mods/events#rewrite-or-add-to-a-prompt) | 会話ごとに 1 回、最初のメッセージとともに送信されるコンテキストについて | `{ blocks }` |89| [`prompt.context`](https://code.claude.com/docs/ja/plugins/mods/events#rewrite-or-add-to-a-prompt) | 会話ごとに 1 回、最初のメッセージとともに送信されるコンテキストについて | `{ blocks }` |
90| `prompt.attachment` | Claude Code がリマインダーなど独自のメッセージを Claude 向けに追加するとき。`e.type` は種類を示し、型で宣言されている種類については、テキストの元になった事実が `e.detail` に入っています。 | `{ text }`、または省くには `{ text: null }` |90| `prompt.attachment` | Claude Code がリマインダーなど独自のメッセージを Claude 向けに追加するとき。`e.type` は種類を示し、型で宣言されている種類については、テキストの元になった事実が `e.detail` に入っています。 | `{ text }`、または省くには `{ text: null }` |
91| `prompt.mention` | プロンプトで @ メンションされたファイルを Claude Code が読み込む直前。Claude Code v2.1.290 以降が必要です。 | 別のファイルを読み込むには `next({ ...e, path })`、または `{ deny: reason }` |91| `prompt.mention` | プロンプトで @ メンションされたファイルを Claude Code が読み込む直前。Claude Code v2.1.290 以降が必要です。 | 別のファイルを読み込むには `next({ ...e, path })`、または `{ deny: reason }` |
92| [`skill.prompt`](/docs/ja/plugins/mods/events#rewrite-or-add-to-a-prompt) | スキルのテキストが Claude 向けに展開されるとき | `{ text }` |92| [`skill.prompt`](https://code.claude.com/docs/ja/plugins/mods/events#rewrite-or-add-to-a-prompt) | スキルのテキストが Claude 向けに展開されるとき | `{ text }` |
93| `attribution.text` | Claude Code がコミットまたはプルリクエストの帰属テキストを作成するとき | `{ text }` |93| `attribution.text` | Claude Code がコミットまたはプルリクエストの帰属テキストを作成するとき | `{ text }` |
94 94
95#### `skill.prompt` のソースとフロントマターのフィールド95#### `skill.prompt` のソースとフロントマターのフィールド
98 98
99| フィールド | 型 | 内容 |99| フィールド | 型 | 内容 |
100| :- | :- | :- |100| :- | :- | :- |
101| `e.source` | string | スキルの提供元。エンタープライズ、個人、プロジェクトの[場所](/docs/ja/skills.md#where-skills-live)にあるスキルの場合は、それぞれ `policySettings`、`userSettings`、`projectSettings` です。その他の提供元では、`plugin`、`mcp`、`syncedSkills`、`built-in` などの語になります。 |101| `e.source` | string | スキルの提供元。エンタープライズ、個人、プロジェクトの[場所](https://code.claude.com/docs/ja/skills.md#where-skills-live)にあるスキルの場合は、それぞれ `policySettings`、`userSettings`、`projectSettings` です。その他の提供元では、`plugin`、`mcp`、`syncedSkills`、`built-in` などの語になります。 |
102| `e.pluginName` | string | `e.source` が `plugin` であるスキルの場合、そのプラグインの名前 |102| `e.pluginName` | string | `e.source` が `plugin` であるスキルの場合、そのプラグインの名前 |
103| `e.path` | string | スキルの `SKILL.md` ファイルの絶対パス。[コマンドファイル](/docs/ja/skills.md#where-skills-live)として書かれたスキルの場合は、その `.md` ファイルの絶対パス。組み込みスキルのように、このマシン上にファイルがないスキルの場合は存在しません。 |103| `e.path` | string | スキルの `SKILL.md` ファイルの絶対パス。[コマンドファイル](https://code.claude.com/docs/ja/skills.md#where-skills-live)として書かれたスキルの場合は、その `.md` ファイルの絶対パス。組み込みスキルのように、このマシン上にファイルがないスキルの場合は存在しません。 |
104| `e.frontmatter` | object | スキルのファイルのフロントマター(プレーンなデータとして) |104| `e.frontmatter` | object | スキルのファイルのフロントマター(プレーンなデータとして) |
105| `e.frontmatterProblem` | string | `e.frontmatter` にファイルのフロントマターまたはそのキーのいずれかが欠けている理由(例:`is a list or a single value, not a table`)。`e.frontmatter` がフロントマター全体を保持している場合、またはスキルにフロントマターがない場合は存在しません。 |105| `e.frontmatterProblem` | string | `e.frontmatter` にファイルのフロントマターまたはそのキーのいずれかが欠けている理由(例:`is a list or a single value, not a table`)。`e.frontmatter` がフロントマター全体を保持している場合、またはスキルにフロントマターがない場合は存在しません。 |
106 106
107フックは変更した `text` または `frontmatter` を `next` に渡せます。後続のフックは両方を読み取り、Claude は最終的な `text` を読みます。それ以外のフィールドを変更したフックは[失敗](/docs/ja/plugins/mods/events.md#handle-a-hook-that-fails)します。107フックは変更した `text` または `frontmatter` を `next` に渡せます。後続のフックは両方を読み取り、Claude は最終的な `text` を読みます。それ以外のフィールドを変更したフックは[失敗](https://code.claude.com/docs/ja/plugins/mods/events.md#handle-a-hook-that-fails)します。
108 108
109`skill.prompt` の `e.source`、`e.pluginName`、`e.path`、`e.frontmatter`、`e.frontmatterProblem` には Claude Code v2.1.299 以降が必要です。109`skill.prompt` の `e.source`、`e.pluginName`、`e.path`、`e.frontmatter`、`e.frontmatterProblem` には Claude Code v2.1.299 以降が必要です。
110 110
114 114
115| イベント | 発火するタイミング | フックが返せる値 |115| イベント | 発火するタイミング | フックが返せる値 |
116| :- | :- | :- |116| :- | :- | :- |
117| [`command.run`](/docs/ja/plugins/mods/api#add-a-command) | コマンドが実行される直前 | `{ text }`、`{}`、または `next(e)` |117| [`command.run`](https://code.claude.com/docs/ja/plugins/mods/api#add-a-command) | コマンドが実行される直前 | `{ text }`、`{}`、または `next(e)` |
118| `command.describe` | 各コマンドにつき 1 回、コマンド一覧のため | `{ description, argumentHint, isHidden }` |118| `command.describe` | 各コマンドにつき 1 回、コマンド一覧のため | `{ description, argumentHint, isHidden }` |
119| `config.set` | `/config` の行が変更される直前 | `next({ ...e, value })` または `{ deny: reason }` |119| `config.set` | `/config` の行が変更される直前 | `next({ ...e, value })` または `{ deny: reason }` |
120| `config.describe` | `/config` の各行につき 1 回 | `{ label, description, isHidden }` |120| `config.describe` | `/config` の各行につき 1 回 | `{ label, description, isHidden }` |
125 125
126| イベント | 発火するタイミング | フックが返せる値 |126| イベント | 発火するタイミング | フックが返せる値 |
127| :- | :- | :- |127| :- | :- | :- |
128| [`turn.start`](/docs/ja/plugins/mods/events#follow-a-turn) | ターンが始まるとき | `next(e)` |128| [`turn.start`](https://code.claude.com/docs/ja/plugins/mods/events#follow-a-turn) | ターンが始まるとき | `next(e)` |
129| [`turn.step`](/docs/ja/plugins/mods/events#follow-a-turn) | 1 つのリクエストがモデルに送信される直前 | `yield* next(e)`、または `next({ ...e, model })`、`next({ ...e, effort })` |129| [`turn.step`](https://code.claude.com/docs/ja/plugins/mods/events#follow-a-turn) | 1 つのリクエストがモデルに送信される直前 | `yield* next(e)`、または `next({ ...e, model })`、`next({ ...e, effort })` |
130| [`turn.complete`](/docs/ja/plugins/mods/events#follow-a-turn) | ターンが終了したとき | `next(e)`、または回答の下に 1 行表示するには `{ text }` |130| [`turn.complete`](https://code.claude.com/docs/ja/plugins/mods/events#follow-a-turn) | ターンが終了したとき | `next(e)`、または回答の下に 1 行表示するには `{ text }` |
131 131
132### セッション132### セッション
133 133
135 135
136| イベント | 発火するタイミング | フックが返せる値 |136| イベント | 発火するタイミング | フックが返せる値 |
137| :- | :- | :- |137| :- | :- | :- |
138| [`session.start`](/docs/ja/plugins/mods/api#add-a-command-or-a-tool) | 読み込まれた mod ごとに 1 回、最初のプロンプトの前。その mod の再読み込み後にも再度発火します。`/clear`、`/resume`、`/branch` の後には発火しません。 | `next(e)` |138| [`session.start`](https://code.claude.com/docs/ja/plugins/mods/api#add-a-command-or-a-tool) | 読み込まれた mod ごとに 1 回、最初のプロンプトの前。その mod の再読み込み後にも再度発火します。`/clear`、`/resume`、`/branch` の後には発火しません。 | `next(e)` |
139| `session.end` | セッションが終了するとき、または `/clear`、`/resume`、`/branch` が実行されるとき。`e.reason` は `clear`、`resume`、`logout`、`prompt_input_exit`、`other` のいずれかです。`/branch` は `resume` を報告します。 | `next(e)` |139| `session.end` | セッションが終了するとき、または `/clear`、`/resume`、`/branch` が実行されるとき。`e.reason` は `clear`、`resume`、`logout`、`prompt_input_exit`、`other` のいずれかです。`/branch` は `resume` を報告します。 | `next(e)` |
140| `session.compact` | 会話がコンパクト化される直前 | `{ skip: reason }` |140| `session.compact` | 会話がコンパクト化される直前 | `{ skip: reason }` |
141| [`session.receive`](/docs/ja/plugins/mods/api#send-and-receive-messages-between-sessions)、[`session.send`](/docs/ja/plugins/mods/api#send-and-receive-messages-between-sessions) | 他のエージェントやセッションからメッセージが届いたとき、またはそこへ送信される直前。[セッション間でメッセージを送受信する](/docs/ja/plugins/mods/api.md#send-and-receive-messages-between-sessions)を参照してください。 | `receive` では `{ consumed: reason }`、`send` では `{ isDelivered: false, reason }` |141| [`session.receive`](https://code.claude.com/docs/ja/plugins/mods/api#send-and-receive-messages-between-sessions)、[`session.send`](https://code.claude.com/docs/ja/plugins/mods/api#send-and-receive-messages-between-sessions) | 他のエージェントやセッションからメッセージが届いたとき、またはそこへ送信される直前。[セッション間でメッセージを送受信する](https://code.claude.com/docs/ja/plugins/mods/api.md#send-and-receive-messages-between-sessions)を参照してください。 | `receive` では `{ consumed: reason }`、`send` では `{ isDelivered: false, reason }` |
142| `session.append` | プロンプト、応答ブロック、ツールの結果、通知など、会話が保持する各行につき 1 回、保存される前 | 行のテキストブロック、または行内の `tool_result` ブロックの `content` を書き換えるには、`message.content` を変更した `next({ ...e, message })` |142| `session.append` | プロンプト、応答ブロック、ツールの結果、通知など、会話が保持する各行につき 1 回、保存される前 | 行のテキストブロック、または行内の `tool_result` ブロックの `content` を書き換えるには、`message.content` を変更した `next({ ...e, message })` |
143| `session.attach`、`session.detach` | 別のアプリがセッションに接続または切断するとき | `next(e)` |143| `session.attach`、`session.detach` | 別のアプリがセッションに接続または切断するとき | `next(e)` |
144| `session.measure` | 各ターンの後、およびプランの制限の使用率が変化したとき | `next(e)` |144| `session.measure` | 各ターンの後、およびプランの制限の使用率が変化したとき | `next(e)` |
150| イベント | 発火するタイミング | フックが返せる値 |150| イベント | 発火するタイミング | フックが返せる値 |
151| :- | :- | :- |151| :- | :- | :- |
152| `agent.offer` | サブエージェントの種類が Claude に提示されるとき | 提示しないようにするには `{ isOffered: false }` |152| `agent.offer` | サブエージェントの種類が Claude に提示されるとき | 提示しないようにするには `{ isOffered: false }` |
153| `agent.spawn` | サブエージェントまたは[エージェントチーム](/docs/ja/agent-teams.md)のチームメイトが起動する直前。チームメイトの場合、`e.isTeammate` は `true` です。 | モデルを選択するには `next({ ...e, model })`、または `{ deny: reason }` |153| `agent.spawn` | サブエージェントまたは[エージェントチーム](https://code.claude.com/docs/ja/agent-teams.md)のチームメイトが起動する直前。チームメイトの場合、`e.isTeammate` は `true` です。 | モデルを選択するには `next({ ...e, model })`、または `{ deny: reason }` |
154 154
155Claude が [`SendMessage`](/docs/ja/sub-agents#resume-subagents) ツールでサブエージェントを再開する場合、`agent.spawn` フックは再度実行されません。サブエージェントを再開する `SendMessage` 呼び出しを拒否するには、[`tool.call`](/docs/ja/plugins/mods/events#guard-or-change-a-tool-call) フックでそのツールにマッチさせてください。155Claude が [`SendMessage`](https://code.claude.com/docs/ja/sub-agents#resume-subagents) ツールでサブエージェントを再開する場合、`agent.spawn` フックは再度実行されません。サブエージェントを再開する `SendMessage` 呼び出しを拒否するには、[`tool.call`](https://code.claude.com/docs/ja/plugins/mods/events#guard-or-change-a-tool-call) フックでそのツールにマッチさせてください。
156 156
157### インターフェース157### インターフェース
158 158
159インターフェースイベントは、Claude Code が描画箇所を描画するときと、mod が描画したコントロールをユーザーが使用するときに発火します。`ui.render` フックが返すものについては、[インターフェースに描画する](/docs/ja/plugins/mods/interface.md)を参照してください。159インターフェースイベントは、Claude Code が描画箇所を描画するときと、mod が描画したコントロールをユーザーが使用するときに発火します。`ui.render` フックが返すものについては、[インターフェースに描画する](https://code.claude.com/docs/ja/plugins/mods/interface.md)を参照してください。
160 160
161| イベント | 発火するタイミング |161| イベント | 発火するタイミング |
162| :- | :- |162| :- | :- |
163| [`ui.render`](/docs/ja/plugins/mods/interface#pick-where-to-draw) | [描画箇所](#render-sites)が描画される直前 |163| [`ui.render`](https://code.claude.com/docs/ja/plugins/mods/interface#pick-where-to-draw) | [描画箇所](#render-sites)が描画される直前 |
164| `ui.resolve` | mod が読み込まれるとき、アプリ、描画箇所、mod の組み合わせごとに 1 回。結果は、`$.ui.resolve(e)` が読み取る要素テーブルになります。 |164| `ui.resolve` | mod が読み込まれるとき、アプリ、描画箇所、mod の組み合わせごとに 1 回。結果は、`$.ui.resolve(e)` が読み取る要素テーブルになります。 |
165| [`ui.press`](/docs/ja/plugins/mods/interface#respond-to-presses-and-typing)、[`ui.input`](/docs/ja/plugins/mods/interface#respond-to-presses-and-typing)、[`ui.select`](/docs/ja/plugins/mods/interface#respond-to-presses-and-typing) | mod が描画した `Button`、`Input`、`Select` が使用されたとき |165| [`ui.press`](https://code.claude.com/docs/ja/plugins/mods/interface#respond-to-presses-and-typing)、[`ui.input`](https://code.claude.com/docs/ja/plugins/mods/interface#respond-to-presses-and-typing)、[`ui.select`](https://code.claude.com/docs/ja/plugins/mods/interface#respond-to-presses-and-typing) | mod が描画した `Button`、`Input`、`Select` が使用されたとき |
166| `ui.focus`、`ui.scroll` | フォーカスされているコントロール、またはペインやバンドのスクロール位置が変わる直前 |166| `ui.focus`、`ui.scroll` | フォーカスされているコントロール、またはペインやバンドのスクロール位置が変わる直前 |
167| `ui.close` | ペインが閉じる直前。`e.id` はそのペインで、`e.origin.kind` は `plugin`、`person`、`unload` のいずれかです。 |167| `ui.close` | ペインが閉じる直前。`e.id` はそのペインで、`e.origin.kind` は `plugin`、`person`、`unload` のいずれかです。 |
168| [`ui.message`](/docs/ja/plugins/mods/interface#build-a-tree-from-elements) | `Client` 要素が自身の mod にデータを送信するとき |168| [`ui.message`](https://code.claude.com/docs/ja/plugins/mods/interface#build-a-tree-from-elements) | `Client` 要素が自身の mod にデータを送信するとき |
169| [`ui.fault`](/docs/ja/plugins/mods/interface#redraw-when-something-changes) | mod が描画した `Client` 要素の読み込み、描画、または実行が失敗したとき。`e.phase` は `load`、`render`、`run` のいずれかで、`e.reason` はエラーメッセージです。Claude Code v2.1.289 以降が必要です。 |169| [`ui.fault`](https://code.claude.com/docs/ja/plugins/mods/interface#redraw-when-something-changes) | mod が描画した `Client` 要素の読み込み、描画、または実行が失敗したとき。`e.phase` は `load`、`render`、`run` のいずれかで、`e.reason` はエラーメッセージです。Claude Code v2.1.289 以降が必要です。 |
170 170
171### 他の mod171### 他の mod
172 172
174 174
175| イベント | 発火するタイミング | フックが返せる値 |175| イベント | 発火するタイミング | フックが返せる値 |
176| :- | :- | :- |176| :- | :- | :- |
177| [`plugin.register`](/docs/ja/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | フックモジュールが読み込まれる直前。`e.uses` には、`claude plugin validate` が出力するのと同じ形で、そのモジュールのイベント、mods API 呼び出し、環境変数、状態が列挙されます。各呼び出しは `fs.read` のように `$.` プレフィックスなしで書かれます。 | `{ refuse: reason }` |177| [`plugin.register`](https://code.claude.com/docs/ja/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | フックモジュールが読み込まれる直前。`e.uses` には、`claude plugin validate` が出力するのと同じ形で、そのモジュールのイベント、mods API 呼び出し、環境変数、状態が列挙されます。各呼び出しは `fs.read` のように `$.` プレフィックスなしで書かれます。 | `{ refuse: reason }` |
178| `engine.create` | この mod 用の mods API が構築されているとき | 名前空間を追加した、変更済みの mods API。`user` [ティア](#the-hook-function)以外の mod は、名前空間を除外することもできます。 |178| `engine.create` | この mod 用の mods API が構築されているとき | 名前空間を追加した、変更済みの mods API。`user` [ティア](#the-hook-function)以外の mod は、名前空間を除外することもできます。 |
179 179
180`engine.create` で追加した名前空間のメソッドを他の mod のフックが呼び出すと、そのイベントに対するすべてのフックが戻るまで、メソッドの `$` 呼び出しはそのフックのコンテキストで実行されます。たとえば、相対パスはそのフックの作業ディレクトリを基準に解決され、ターンがそのフックを待っている間は `$.prompt.submit` が拒否されます。それ以降にメソッドが行う呼び出しは、mod 自身のコンテキストで実行されます。180`engine.create` で追加した名前空間のメソッドを他の mod のフックが呼び出すと、そのイベントに対するすべてのフックが戻るまで、メソッドの `$` 呼び出しはそのフックのコンテキストで実行されます。たとえば、相対パスはそのフックの作業ディレクトリを基準に解決され、ターンがそのフックを待っている間は `$.prompt.submit` が拒否されます。それ以降にメソッドが行う呼び出しは、mod 自身のコンテキストで実行されます。
189 189
190### 設定フックのイベント190### 設定フックのイベント
191 191
192各[設定フックのイベント](/docs/ja/hooks.md#hook-events)は、`classic.Stop` や `classic.PostToolUse` のように `classic.<Event>` という名前のイベントです。`e` はフックの stdin JSON です。192各[設定フックのイベント](https://code.claude.com/docs/ja/hooks.md#hook-events)は、`classic.Stop` や `classic.PostToolUse` のように `classic.<Event>` という名前のイベントです。`e` はフックの stdin JSON です。
193 193
194### mods API 呼び出し194### mods API 呼び出し
195 195
197 197
198## mods API メソッド198## mods API メソッド
199 199
200mods API は、すべてのフックが受け取る `$` 引数です。そのメソッドは `$.ui` などの名前空間にグループ化されています。この表では各名前空間のメソッドを名前で列挙しているため、`$.ui` の行の `open` は `$.ui.open(...)` の呼び出しを意味します。ガイドではよく使うものの使用例を示しており、[お使いのビルド用の型](/docs/ja/plugins/mods/create.md#get-the-types-for-your-build)ではすべてのメソッドが例とともに説明されています。200mods API は、すべてのフックが受け取る `$` 引数です。そのメソッドは `$.ui` などの名前空間にグループ化されています。この表では各名前空間のメソッドを名前で列挙しているため、`$.ui` の行の `open` は `$.ui.open(...)` の呼び出しを意味します。ガイドではよく使うものの使用例を示しており、[お使いのビルド用の型](https://code.claude.com/docs/ja/plugins/mods/create.md#get-the-types-for-your-build)ではすべてのメソッドが例とともに説明されています。
201 201
202| 名前空間 | メソッド |202| 名前空間 | メソッド |
203| :- | :- |203| :- | :- |
204| `$.plugin` | `name`、`root`:このプラグインの名前とディレクトリ |204| `$.plugin` | `name`、`root`:このプラグインの名前とディレクトリ |
205| [`$.ui`](/docs/ja/plugins/mods/interface#pick-where-to-draw) | `resolve`、`invalidate`、`open`、`close`、`panes`、`focus`、`scroll`、`toast`、`notify`、`status`、`log`、`notice`、`ask`、`copy`、`selection`、`blit` |205| [`$.ui`](https://code.claude.com/docs/ja/plugins/mods/interface#pick-where-to-draw) | `resolve`、`invalidate`、`open`、`close`、`panes`、`focus`、`scroll`、`toast`、`notify`、`status`、`log`、`notice`、`ask`、`copy`、`selection`、`blit` |
206| [`$.command`](/docs/ja/plugins/mods/api#add-a-command) | `register`、`run`、`list` |206| [`$.command`](https://code.claude.com/docs/ja/plugins/mods/api#add-a-command) | `register`、`run`、`list` |
207| [`$.tool`](/docs/ja/plugins/mods/api#add-a-tool) | `register`、`call`、`check`、`list` |207| [`$.tool`](https://code.claude.com/docs/ja/plugins/mods/api#add-a-tool) | `register`、`call`、`check`、`list` |
208| `$.agent` | `register`、`spawn`、`list`。`list()` はこのセッションのサブエージェントとチームメイトを返します。それぞれに `pending`、`running`、`waiting`、`idle`、`completed`、`failed`、`killed` のいずれかの `status` があり、`idle` と `waiting` には Claude Code v2.1.289 以降が必要です。 |208| `$.agent` | `register`、`spawn`、`list`。`list()` はこのセッションのサブエージェントとチームメイトを返します。それぞれに `pending`、`running`、`waiting`、`idle`、`completed`、`failed`、`killed` のいずれかの `status` があり、`idle` と `waiting` には Claude Code v2.1.289 以降が必要です。 |
209| [`$.model`](/docs/ja/plugins/mods/api#call-a-model) | `complete`、`fork`、`classify` |209| [`$.model`](https://code.claude.com/docs/ja/plugins/mods/api#call-a-model) | `complete`、`fork`、`classify` |
210| [`$.prompt`](/docs/ja/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`、`read`、`fill`、`suggest`、`compose`。Claude は、`submit({ text })` のテキストを、その mod を送信者として示す文の後に読みます。`submit({ text, asUser: true })` は、その文なしで、テキストをユーザー自身の言葉として送信します。 |210| [`$.prompt`](https://code.claude.com/docs/ja/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`、`read`、`fill`、`suggest`、`compose`。Claude は、`submit({ text })` のテキストを、その mod を送信者として示す文の後に読みます。`submit({ text, asUser: true })` は、その文なしで、テキストをユーザー自身の言葉として送信します。 |
211| `$.turn` | `abort` |211| `$.turn` | `abort` |
212| [`$.session`](/docs/ja/plugins/mods/api#send-and-receive-messages-between-sessions) | `messages`、`cwd`、`root`、`model`、`turns`、`id`、`repo`、`surfaces`、`usage`、`version`、`compact`、`send`、`append`、`authorize`。`usage()` は `{ startedAt, context, rateLimits, cost }` を返します:`context` には `tokens`、`window`、`percent` があり、`rateLimits` は `{ kind, percentUsed, resetsAt }` のリストです。 |212| [`$.session`](https://code.claude.com/docs/ja/plugins/mods/api#send-and-receive-messages-between-sessions) | `messages`、`cwd`、`root`、`model`、`turns`、`id`、`repo`、`surfaces`、`usage`、`version`、`compact`、`send`、`append`、`authorize`。`usage()` は `{ startedAt, context, rateLimits, cost }` を返します:`context` には `tokens`、`window`、`percent` があり、`rateLimits` は `{ kind, percentUsed, resetsAt }` のリストです。 |
213| `$.config` | `list`、`set` |213| `$.config` | `list`、`set` |
214| [`$.settings`](/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `read` |214| [`$.settings`](https://code.claude.com/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `read` |
215| [`$.env`](/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `get`、`set` |215| [`$.env`](https://code.claude.com/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `get`、`set` |
216| [`$.fs`](/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `read`、`write`、`list`、`exists`、`stat`、`ancestors`。`write` はアトミックではありません:ファイルの内容をその場で置き換えるため、別のプロセスが書き込み途中のファイルを読む可能性があります。複数のセッションが変更するデータは `$.store` に保存してください。 |216| [`$.fs`](https://code.claude.com/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `read`、`write`、`list`、`exists`、`stat`、`ancestors`。`write` はアトミックではありません:ファイルの内容をその場で置き換えるため、別のプロセスが書き込み途中のファイルを読む可能性があります。複数のセッションが変更するデータは `$.store` に保存してください。 |
217| [`$.store`](/docs/ja/plugins/mods/interface#keep-state) | `get`、`set`、`delete`、`keys`。マシン上のすべてのセッションが共有するキーバリューストアです。[複数のセッションから保存する](/docs/ja/plugins/mods/interface.md#save-from-more-than-one-session)を参照してください。 |217| [`$.store`](https://code.claude.com/docs/ja/plugins/mods/interface#keep-state) | `get`、`set`、`delete`、`keys`。マシン上のすべてのセッションが共有するキーバリューストアです。[複数のセッションから保存する](https://code.claude.com/docs/ja/plugins/mods/interface.md#save-from-more-than-one-session)を参照してください。 |
218| [`$.state`](/docs/ja/plugins/mods/interface#keep-a-value-in-\$-state) | リアクティブな状態:`get`、`set`。ヘルパーの `atom`、`read`、`update`、`derive`、`memberOf` は `claude-code` からインポートします |218| [`$.state`](https://code.claude.com/docs/ja/plugins/mods/interface#keep-a-value-in-\$-state) | リアクティブな状態:`get`、`set`。ヘルパーの `atom`、`read`、`update`、`derive`、`memberOf` は `claude-code` からインポートします |
219| [`$.clock`](/docs/ja/plugins/mods/api#run-work-in-the-background) | `now`、`sleep`、`after`、`every` |219| [`$.clock`](https://code.claude.com/docs/ja/plugins/mods/api#run-work-in-the-background) | `now`、`sleep`、`after`、`every` |
220| [`$.http`](/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `fetch` |220| [`$.http`](https://code.claude.com/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `fetch` |
221| [`$.process`](/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `run`、`spawn` |221| [`$.process`](https://code.claude.com/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `run`、`spawn` |
222| [`$.mcp`](/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `call`、`connect`。`connect(server)` は、自身のプラグインのマニフェストに記載されている MCP サーバーに接続します。 |222| [`$.mcp`](https://code.claude.com/docs/ja/plugins/mods/api#reach-files-processes-and-the-network) | `call`、`connect`。`connect(server)` は、自身のプラグインのマニフェストに記載されている MCP サーバーに接続します。 |
223| `$.audio` | `play`、`speak` |223| `$.audio` | `play`、`speak` |
224| `$.telemetry` | `log`、`mark`。レコードが送信されるのは、Claude Code または組み込みの mod が呼び出した場合だけです。 |224| `$.telemetry` | `log`、`mark`。レコードが送信されるのは、Claude Code または組み込みの mod が呼び出した場合だけです。 |
225 225
226## 描画箇所226## 描画箇所
227 227
228描画箇所は、Claude Code のインターフェースにおける拡張ポイントです。各行は `ui.render` フックにおける `e.component` の値で、`e.props` のフィールドと、それを描画するアプリを示しています。`e.surface` は描画しているアプリの名前で、`terminal`、`desktop`、`vscode` などです。各描画箇所でフックができることは、[Claude Code がすでに描画しているものを変更する](/docs/ja/plugins/mods/interface.md#change-what-claude-code-already-draws)で、選択肢ごとの例とともに説明しています。228描画箇所は、Claude Code のインターフェースにおける拡張ポイントです。各行は `ui.render` フックにおける `e.component` の値で、`e.props` のフィールドと、それを描画するアプリを示しています。`e.surface` は描画しているアプリの名前で、`terminal`、`desktop`、`vscode` などです。各描画箇所でフックができることは、[Claude Code がすでに描画しているものを変更する](https://code.claude.com/docs/ja/plugins/mods/interface.md#change-what-claude-code-already-draws)で、選択肢ごとの例とともに説明しています。
229 229
230VS Code 拡張機能での描画には、拡張機能のバージョン 2.1.299 以降が必要です。[機能フラグを取得しない](/docs/ja/env-vars.md#features-that-need-feature-flag-fetching)セッションでは、2.1.304 以降が必要です。拡張機能で描画が異なる点については、[VS Code 拡張機能で描画する](/docs/ja/plugins/mods/interface.md#draw-in-the-vs-code-extension)に一覧があります。230VS Code 拡張機能での描画には、拡張機能のバージョン 2.1.299 以降が必要です。[機能フラグを取得しない](https://code.claude.com/docs/ja/env-vars.md#features-that-need-feature-flag-fetching)セッションでは、2.1.304 以降が必要です。拡張機能で描画が異なる点については、[VS Code 拡張機能で描画する](https://code.claude.com/docs/ja/plugins/mods/interface.md#draw-in-the-vs-code-extension)に一覧があります。
231 231
232| 描画箇所 | `e.props` | `e.requestId` | 描画されるアプリ |232| 描画箇所 | `e.props` | `e.requestId` | 描画されるアプリ |
233| :- | :- | :- | :- |233| :- | :- | :- | :- |
234| [`Pane`](/docs/ja/plugins/mods/interface#pick-where-to-draw) | `title`、`isFocused`、`bodyColumns`、`placement`、`scroll`、`view` | ペインの `id` | Terminal、Desktop、VS Code |234| [`Pane`](https://code.claude.com/docs/ja/plugins/mods/interface#pick-where-to-draw) | `title`、`isFocused`、`bodyColumns`、`placement`、`scroll`、`view` | ペインの `id` | Terminal、Desktop、VS Code |
235| [`AbovePrompt`](/docs/ja/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 1 つのインスタンス | Terminal、Desktop |235| [`AbovePrompt`](https://code.claude.com/docs/ja/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 1 つのインスタンス | Terminal、Desktop |
236| `UserMessage` | `text`、`origin`、`isExpanded`、および origin に応じて `task` または `from` | メッセージ ID | Terminal、Desktop、VS Code |236| `UserMessage` | `text`、`origin`、`isExpanded`、および origin に応じて `task` または `from` | メッセージ ID | Terminal、Desktop、VS Code |
237| `AssistantMessage` | 返信のテキスト | メッセージ ID | Terminal、Desktop、VS Code |237| `AssistantMessage` | 返信のテキスト | メッセージ ID | Terminal、Desktop、VS Code |
238| `ToolUse`、`ToolResult`、`ToolGroup` | ツールの名前、入力、結果 | ツール呼び出し ID | Terminal、Desktop、VS Code |238| `ToolUse`、`ToolResult`、`ToolGroup` | ツールの名前、入力、結果 | ツール呼び出し ID | Terminal、Desktop、VS Code |
239| `CommandOutput` | `command`、`text` | メッセージ ID | Terminal、Desktop |239| `CommandOutput` | `command`、`text` | メッセージ ID | Terminal、Desktop |
240| [`AskUserQuestion`](/docs/ja/plugins/mods/interface#change-what-claude-code-already-draws) | 質問と選択肢 | ツール呼び出し ID | Terminal、Desktop、VS Code |240| [`AskUserQuestion`](https://code.claude.com/docs/ja/plugins/mods/interface#change-what-claude-code-already-draws) | 質問と選択肢 | ツール呼び出し ID | Terminal、Desktop、VS Code |
241| `ToolProgress` | `kind` | ツール呼び出し ID | Terminal |241| `ToolProgress` | `kind` | ツール呼び出し ID | Terminal |
242| [`Spinner`](/docs/ja/plugins/mods/interface#change-what-claude-code-already-draws) | `word`、`message`、`suffix`、`mode` | エージェント ID | Terminal、Desktop、VS Code |242| [`Spinner`](https://code.claude.com/docs/ja/plugins/mods/interface#change-what-claude-code-already-draws) | `word`、`message`、`suffix`、`mode` | エージェント ID | Terminal、Desktop、VS Code |
243| `TurnDuration` | `word`、`durationMs` | メッセージ ID | Terminal |243| `TurnDuration` | `word`、`durationMs` | メッセージ ID | Terminal |
244| `InfoNotice` | `text`、`command` | メッセージ ID | Terminal |244| `InfoNotice` | `text`、`command` | メッセージ ID | Terminal |
245| `SessionMode` | `modes` | 1 つのインスタンス | Terminal、Desktop |245| `SessionMode` | `modes` | 1 つのインスタンス | Terminal、Desktop |
251 251
252* **`Pane` またはバンドの幅**:`e.props.bodyColumns` に合わせて描画します252* **`Pane` またはバンドの幅**:`e.props.bodyColumns` に合わせて描画します
253* **トランスクリプトの横にある `Pane` の高さ**:`e.props.placement` が `'dock'` の場合、`e.props.scroll.bodyRows` がペインでツリーに使える行数です253* **トランスクリプトの横にある `Pane` の高さ**:`e.props.placement` が `'dock'` の場合、`e.props.scroll.bodyRows` がペインでツリーに使える行数です
254* **プロンプトの上にある `Pane` の高さ**:`e.props.placement` が `'inline'` の場合、ペインはツリーに合わせて上限まで大きくなり、`bodyRows` はその上限です。[`$.ui.open` の `rows` フィールド](/docs/ja/plugins/mods/interface#open-a-pane-at-the-right-time)で別の上限を指定できます。254* **プロンプトの上にある `Pane` の高さ**:`e.props.placement` が `'inline'` の場合、ペインはツリーに合わせて上限まで大きくなり、`bodyRows` はその上限です。[`$.ui.open` の `rows` フィールド](https://code.claude.com/docs/ja/plugins/mods/interface#open-a-pane-at-the-right-time)で別の上限を指定できます。
255 255
256ペインより高いツリーは、全体としてスクロールします。256ペインより高いツリーは、全体としてスクロールします。
257 257
258## 要素258## 要素
259 259
260要素は `ui.render` フックが返すツリーの構成要素で、`$.ui.resolve(e)` から取得します。[要素からツリーを構築する](/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)ではよく使う要素をターミナルでの描画例とともに紹介しており、[インターフェースギャラリー](/docs/ja/plugins/mods/gallery.md)にはほとんどの要素のスクリーンショットがあります。チェックマークは、そのアプリが要素を描画できることを示します。260要素は `ui.render` フックが返すツリーの構成要素で、`$.ui.resolve(e)` から取得します。[要素からツリーを構築する](https://code.claude.com/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)ではよく使う要素をターミナルでの描画例とともに紹介しており、[インターフェースギャラリー](https://code.claude.com/docs/ja/plugins/mods/gallery.md)にはほとんどの要素のスクリーンショットがあります。チェックマークは、そのアプリが要素を描画できることを示します。
261 261
262| 要素 | 主な props | Terminal | Desktop | VS Code |262| 要素 | 主な props | Terminal | Desktop | VS Code |
263| :- | :- | :-: | :-: | :-: |263| :- | :- | :-: | :-: | :-: |
264| [`Box`](/docs/ja/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex レイアウト、[`gap`、`padding`、`margin`](#box-spacing-steps)、`width`、`height`、[`borderStyle`](#box-border-styles)、`backgroundColor`、`position`、`hover` | ✓ | ✓ | ✓ |264| [`Box`](https://code.claude.com/docs/ja/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex レイアウト、[`gap`、`padding`、`margin`](#box-spacing-steps)、`width`、`height`、`minWidth`、`minHeight`、[`borderStyle`](#box-border-styles)、`borderColor`、`borderDimColor`、`backgroundColor`、`position`、`top`、`left`、`right`、`bottom`、`overflow`、`display`、`hover` | ✓ | ✓ | ✓ |
265| [`Text`](/docs/ja/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、[`bold`](#text-bold)、`italic`、`underline`、`dimColor`、`inverse`、`wrap`、[`size`、`weight`、`mono`、`tabular`](#text-typography) | ✓ | ✓ | ✓ |265| [`Text`](https://code.claude.com/docs/ja/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、[`bold`](#text-bold)、`italic`、`underline`、`strikethrough`、`dimColor`、`inverse`、`wrap`、[`size`、`weight`、`mono`、`tabular`](#text-typography)、`hover` | ✓ | ✓ | ✓ |
266| [`Button`](/docs/ja/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action` | ✓ | ✓ | ✓ |266| [`Button`](https://code.claude.com/docs/ja/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action`、`hover` | ✓ | ✓ | ✓ |
267| [`Link`](/docs/ja/plugins/mods/interface#link-in-the-desktop-app) | `href`、`label`。[制限](#limits)を参照してください。 | ✓ | ✓ | ✓ |267| [`Link`](https://code.claude.com/docs/ja/plugins/mods/interface#link-in-the-desktop-app) | `href`、`label`。[制限](#limits)を参照してください。 | ✓ | ✓ | ✓ |
268| [`Code`](/docs/ja/plugins/mods/gallery#show-code-and-changes) | `source`、`language`、`path`、`startLine`、`format`、`wrap` | ✓ | ✓ | ✓ |268| [`Code`](https://code.claude.com/docs/ja/plugins/mods/gallery#show-code-and-changes) | `source`、`language`、`path`、`startLine`、`format`、`wrap` | ✓ | ✓ | ✓ |
269| `Markdown` | `text`、`key`、`dimColor`、`onLinkPress`、`pressableLinks` | ✓ | ✓ | ✓ |269| `Markdown` | `text`、`key`、`dimColor`、`onLinkPress`、`pressableLinks` | ✓ | ✓ | ✓ |
270| [`Input`](/docs/ja/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`、`label`、`placeholder`、`value`、`submitLabel`、`onSubmit`、`onInput`、`autoFocus` | ✓ | ✓ | ✓ |270| [`Input`](https://code.claude.com/docs/ja/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`、`label`、`placeholder`、`value`、`submitLabel`、`onSubmit`、`onInput`、`autoFocus` | ✓ | ✓ | ✓ |
271| `Select` | `key`、`label`、`options`、`value`、`onSelect`、`autoFocus` | ✓ | ✓ | ✓ |271| `Select` | `key`、`label`、`options`、`value`、`onSelect`、`autoFocus` | ✓ | ✓ | ✓ |
272| `Svg` | SVG ドキュメント(最大 131,072 文字) | | ✓ | ✓ |272| `Svg` | SVG マークアップの `source`(最大 131,072 文字)、`alt` テキスト、`width`、`height`、`isInteractive` | | ✓ | ✓ |
273| [`Client`](/docs/ja/plugins/mods/interface#build-a-tree-from-elements) | `module`、`key` | ✓ | ✓ | |273| [`Client`](https://code.claude.com/docs/ja/plugins/mods/interface#build-a-tree-from-elements) | `module`、`key`、`props`、`width`、`height`、`flexGrow` | ✓ | ✓ | |
274| [`Raster`](/docs/ja/plugins/mods/interface#draw-a-grid-of-colored-cells) | `key`、`columns`(最大 512)、`rows`(最大 256)、`cells`。[色付きセルのグリッドを描画する](/docs/ja/plugins/mods/interface.md#draw-a-grid-of-colored-cells)を参照してください。 | ✓ | | |274| [`Raster`](https://code.claude.com/docs/ja/plugins/mods/interface#draw-a-grid-of-colored-cells) | `key`、`columns`(最大 512)、`rows`(最大 256)、`cells`。[色付きセルのグリッドを描画する](https://code.claude.com/docs/ja/plugins/mods/interface.md#draw-a-grid-of-colored-cells)を参照してください。 | ✓ | | |
275| `Image` | 最大 2 MiB の PNG または RGBA バイト、またはファイルパス、`columns` と `rows`(いずれも最大 255)、`alt` テキスト。[描画できるターミナル](/docs/ja/plugins/mods/gallery.md#image-and-client)を参照してください。 | ✓ | | |275| `Image` | `key`、最大 2 MiB の PNG や RGBA バイトなどの `source` またはファイルパス、`columns` と `rows`(いずれも最大 255)、`alt` テキスト。[描画できるターミナル](https://code.claude.com/docs/ja/plugins/mods/gallery.md#image-and-client)を参照してください。 | ✓ | | |
276 276
277`Button` のその他のルール:`action` は Claude Code 独自の[キーボードショートカットのアクション](/docs/ja/keybindings.md)の 1 つを指定し、そのアクションに対するユーザーの割り当てがコードまたは修飾キー付きのキーである場合、その割り当てでボタンが押されます。バンド内のボタンに数字の `hotkey` を指定すると、ユーザーが空のプロンプトにその数字だけを入力して手を止めたときにも発火します。1 つの描画内で 2 つのボタンが同じ `hotkey` を指定した場合は、後のボタンが優先されます。`autoFocus` はどのコントロールでも `true` しか受け付けないため、オフにするには props を省略してください。277`Button` のその他のルール:
278
279* **`action`**:Claude Code 独自の[キーボードショートカットのアクション](https://code.claude.com/docs/ja/keybindings.md)の 1 つを指定し、そのアクションに対するユーザーの割り当てがコードまたは修飾キー付きのキーである場合、その割り当てでボタンが押されます
280* **バンド上の数字ホットキー**:バンド内のボタンに数字の `hotkey` を指定すると、ユーザーが空のプロンプトにその数字だけを入力して手を止めたときにも発火します
281* **折りたたまれたバンド**:バンドが[折りたたまれている](https://code.claude.com/docs/ja/plugins/mods/interface.md#when-the-user-collapses-the-band)間は、`action` の割り当てもホットキーもバンド内のボタンを押しません
282* **1 つのホットキーに 2 つのボタン**:1 つの描画内で 2 つのボタンが同じ `hotkey` を指定した場合は、後のボタンが優先されます
283
284`autoFocus` はどのコントロールでも `true` しか受け付けないため、オフにするには props を省略してください。
278 285
279VS Code 拡張機能は一部の要素の props を無視し、それらを省略した場合と同じように要素を描画します。286VS Code 拡張機能は一部の要素の props を無視し、それらを省略した場合と同じように要素を描画します。
280 287
281* **`Box`**:`position` と `hover`288* **`Box`**:`position` とその `top`、`left`、`right`、`bottom`、`alignSelf`、`borderDimColor`、`hover`
282* **`Text`**:`size`、`mono`、`tabular`289* **`Text`**:`size`、`mono`、`tabular`、`hover`
283* **`Button`**:`hotkey`、`plain`、`autoFocus`、`action`。そのため VS Code では、ユーザーはクリックするか、ボタンにフォーカスがある状態で Enter キーを押してボタンを押します290* **`Button`**:`hotkey`、`plain`、`autoFocus`、`action`、`hover`。そのため VS Code では、ユーザーはクリックするか、ボタンにフォーカスがある状態で Enter キーを押してボタンを押します
284* **`Code`**:`language`、`path`、`startLine`、`format`、`wrap`。そのため、コードは色や行番号なしで描画され、`format: 'diff'` のブロックは差分の生のテキストを表示します291* **`Code`**:`language`、`path`、`startLine`、`format`、`wrap`。そのため、コードは色や行番号なしで描画され、`format: 'diff'` のブロックは差分の生のテキストを表示します
285* **`Input` と `Select`**:`autoFocus`292* **`Input` と `Select`**:`autoFocus`
293* **`Svg`**:`isInteractive`
286 294
287### `Box` の枠線スタイル295### `Box` の枠線スタイル
288 296
317 325
318`gap`、`padding`、`margin` にステップを設定すると、そのステップは横方向と縦方向の両方に同時に適用されます。たとえばターミナルと VS Code 拡張機能では、`padding: 'md'` は左右それぞれ 2 セル、上下それぞれ 1 行になります。326`gap`、`padding`、`margin` にステップを設定すると、そのステップは横方向と縦方向の両方に同時に適用されます。たとえばターミナルと VS Code 拡張機能では、`padding: 'md'` は左右それぞれ 2 セル、上下それぞれ 1 行になります。
319 327
320ステップ名には Claude Code v2.1.299 以降が必要です。それより前のリリースでは、ステップ名を使用するツリーの代わりに、Claude Code が[独自バージョンのサイトを描画します](/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)。328ステップ名には Claude Code v2.1.299 以降が必要です。それより前のリリースでは、ステップ名を使用するツリーの代わりに、Claude Code が[独自バージョンのサイトを描画します](https://code.claude.com/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)。
321 329
322### `Text` のタイポグラフィ props330### `Text` のタイポグラフィ props
323 331
330| `mono` | `true` でアプリの等幅書体を要求します | 無視されます(ターミナルは常に等幅) | 無視され、テキストは拡張機能独自の書体のままになります |338| `mono` | `true` でアプリの等幅書体を要求します | 無視されます(ターミナルは常に等幅) | 無視され、テキストは拡張機能独自の書体のままになります |
331| `tabular` | `true` で等幅の数字を要求し、その場で更新される数値や数値の列の位置を揃えます | 無視されます(ターミナルの数字はすでに 1 セル幅) | 無視されます |339| `tabular` | `true` で等幅の数字を要求し、その場で更新される数値や数値の列の位置を揃えます | 無視されます(ターミナルの数字はすでに 1 セル幅) | 無視されます |
332 340
333これら 4 つの props には Claude Code v2.1.299 以降が必要です。それより前のリリースでは、`size`、`weight`、`mono`、`tabular` を設定したツリーの代わりに、Claude Code が[独自バージョンのサイトを描画します](/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)。341これら 4 つの props には Claude Code v2.1.299 以降が必要です。それより前のリリースでは、`size`、`weight`、`mono`、`tabular` を設定したツリーの代わりに、Claude Code が[独自バージョンのサイトを描画します](https://code.claude.com/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)。
334 342
335#### `bold` を `weight` に置き換える343#### `bold` を `weight` に置き換える
336 344
337`Text` の `bold` は非推奨となり `weight` が推奨されていますが、引き続き動作します。`weight` を指定していない `Text` で置き換えるには、`bold: true` を `weight: 'semibold'` に変更すると、Claude Code v2.1.299 以降で同じ結果になります。345`Text` の `bold` は非推奨となり `weight` が推奨されていますが、引き続き動作します。`weight` を指定していない `Text` で置き換えるには、`bold: true` を `weight: 'semibold'` に変更すると、Claude Code v2.1.299 以降で同じ結果になります。
338 346
339v2.1.299 より前のリリースでは、`weight` を設定したツリーは描画されず、代わりに Claude Code が[独自バージョンのサイトを描画します](/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)。`Text` に `bold` と `weight` の両方を設定した場合、`bold` は効果を持ちません。347v2.1.299 より前のリリースでは、`weight` を設定したツリーは描画されず、代わりに Claude Code が[独自バージョンのサイトを描画します](https://code.claude.com/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)。`Text` に `bold` と `weight` の両方を設定した場合、`bold` は効果を持ちません。
340 348
341## 制限349## 制限
342 350
346| :- | :- |354| :- | :- |
347| 1 つのイベントに対するフック自体の実行時間(`next` 内や、`$.clock.sleep` 以外の mods API 呼び出し内の時間は含まない) | 10 秒。`prompt.edit` フックの場合は 50 ミリ秒 |355| 1 つのイベントに対するフック自体の実行時間(`next` 内や、`$.clock.sleep` 以外の mods API 呼び出し内の時間は含まない) | 10 秒。`prompt.edit` フックの場合は 50 ミリ秒 |
348| `.catch` ハンドラーの実行時間 | 1 秒 |356| `.catch` ハンドラーの実行時間 | 1 秒 |
349| すべての `session.end` フックの合計 | [SessionEnd フックの予算](/docs/ja/hooks.md#sessionend-input)と同じ長さ。変更しない限り 1.5 秒で、設定の `SessionEnd` フックが終了した時点から計測 |357| すべての `session.end` フックの合計 | [SessionEnd フックの予算](https://code.claude.com/docs/ja/hooks.md#sessionend-input)と同じ長さ。変更しない限り 1.5 秒で、設定の `SessionEnd` フックが終了した時点から計測 |
350| `$.process.run` のタイムアウト | デフォルトは 30 秒、最大 10 分 |358| `$.process.run` のタイムアウト | デフォルトは 30 秒、最大 10 分 |
351| `$.model.complete` の `maxTokens` | デフォルトは 1024、最大 64,000 またはモデルの出力上限 |359| `$.model.complete` の `maxTokens` | デフォルトは 1024、最大 64,000 またはモデルの出力上限 |
352| `$.fs.read` と `$.fs.write` | 1 ファイルあたり 4 MiB |360| `$.fs.read` と `$.fs.write` | 1 ファイルあたり 4 MiB |
354| `$.http.fetch` のレスポンス本文 | 4 MiB。`text` には最初の 4 MiB が格納され、残りは読み込まれません。`Content-Length` ヘッダーがそれより大きいサイズを宣言している場合は、代わりに呼び出しが reject され、その理由は `is over the 4194304-byte limit` で終わります。ただし、リダイレクト後の最後のリクエストが `HEAD` メソッドを使用する場合は除きます。`HEAD` の除外には Claude Code v2.1.296 以降が必要です。 |362| `$.http.fetch` のレスポンス本文 | 4 MiB。`text` には最初の 4 MiB が格納され、残りは読み込まれません。`Content-Length` ヘッダーがそれより大きいサイズを宣言している場合は、代わりに呼び出しが reject され、その理由は `is over the 4194304-byte limit` で終わります。ただし、リダイレクト後の最後のリクエストが `HEAD` メソッドを使用する場合は除きます。`HEAD` の除外には Claude Code v2.1.296 以降が必要です。 |
355| 1 回の `$.http.fetch` 呼び出し(リダイレクトと本文を含む) | 30 秒 |363| 1 回の `$.http.fetch` 呼び出し(リダイレクトと本文を含む) | 30 秒 |
356| 1 回の `$.http.fetch` 呼び出しがたどるリダイレクト | 5 回 |364| 1 回の `$.http.fetch` 呼び出しがたどるリダイレクト | 5 回 |
357| フックの `drop` の理由、または `config.set` の `deny` の理由 | 4,096 文字。これより長い理由は末尾が切り詰められ、drop または deny はそのまま適用されます。切り詰めには Claude Code v2.1.292 以降が必要で、それより前のバージョンではフックが代わりに[失敗](/docs/ja/plugins/mods/events.md#handle-a-hook-that-fails)します。 |365| フックの `drop` の理由、または `config.set` の `deny` の理由 | 4,096 文字。これより長い理由は末尾が切り詰められ、drop または deny はそのまま適用されます。切り詰めには Claude Code v2.1.292 以降が必要で、それより前のバージョンではフックが代わりに[失敗](https://code.claude.com/docs/ja/plugins/mods/events.md#handle-a-hook-that-fails)します。 |
358| 1 つのツリー内のテキスト | 最初の 100,000 文字が描画されます |366| 1 つのツリー内のテキスト | 最初の 100,000 文字が描画されます |
359| `Code` の `language` または `path`、`Select` オプションの `value`、または `Client` の `module` | 10,000 文字。これより長い場合、Claude Code は[その箇所を独自の表示で描画します](/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)。 |367| `Code` の `language` または `path`、`Select` オプションの `value`、または `Client` の `module` | 10,000 文字。これより長い場合、Claude Code は[その箇所を独自の表示で描画します](https://code.claude.com/docs/ja/plugins/mods/interface.md#build-a-tree-from-elements)。 |
360| `Link` の `href` | 2,048 文字。これより長い `href` があると、ツリー全体が描画されません。 |368| `Link` の `href` | 2,048 文字。これより長い `href` があると、ツリー全体が描画されません。 |
361| `$.store` | JSON の合計で 4 MiB |369| `$.store` | JSON の合計で 4 MiB |
362| `$.session.messages()` | 最新の 4,096 エントリ |370| `$.session.messages()` | 最新の 4,096 エントリ |
375| :- | :- | :- |383| :- | :- | :- |
376| `CLAUDE_CODE_PLUGIN_DIRS` | 環境、または `~/.claude/settings.json` の `env` | フラグを渡せないアプリ向けに、`--plugin-dir` と同様に読み込むプラグインディレクトリ。`:`(Windows では `;`)で区切った絶対パスです。 |384| `CLAUDE_CODE_PLUGIN_DIRS` | 環境、または `~/.claude/settings.json` の `env` | フラグを渡せないアプリ向けに、`--plugin-dir` と同様に読み込むプラグインディレクトリ。`:`(Windows では `;`)で区切った絶対パスです。 |
377| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | 環境 | `1` にすると、長時間実行される非対話型セッションが、保存時に `--plugin-dir` の mod を再読み込みします |385| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | 環境 | `1` にすると、長時間実行される非対話型セッションが、保存時に `--plugin-dir` の mod を再読み込みします |
378| `prependPlugins`、`appendPlugins` | 管理設定。ユーザー設定は、管理設定のないマシンで、認証情報が Team または Enterprise の `/login` ではないセッションの場合に限ります。 | `acme-guard@acme-tools` などのプラグイン ID のリスト。`prependPlugins` の mod はユーザーがインストールしたすべての mod の前に、`appendPlugins` の mod は後に、記載された順序で実行されます。[mod が実行される順序](/docs/ja/plugins/mods/events.md#the-order-mods-run-in)を参照してください。 |386| `prependPlugins`、`appendPlugins` | 管理設定。ユーザー設定は、管理設定のないマシンで、認証情報が Team または Enterprise の `/login` ではないセッションの場合に限ります。 | `acme-guard@acme-tools` などのプラグイン ID のリスト。`prependPlugins` の mod はユーザーがインストールしたすべての mod の前に、`appendPlugins` の mod は後に、記載された順序で実行されます。[mod が実行される順序](https://code.claude.com/docs/ja/plugins/mods/events.md#the-order-mods-run-in)を参照してください。 |
379| `allowManagedModsOnly` | 管理設定([組み込みガードのオプション](/docs/ja/plugins/mods/admin.md#set-options-on-the-built-in-guard)として) | [組織のものとみなされる](/docs/ja/plugins/mods/admin.md#install-your-organizations-mods) mod と、Claude Code に組み込まれた mod だけがフックを実行します。ユーザーの設定フックは引き続き実行されます。 |387| `allowManagedModsOnly` | 管理設定([組み込みガードのオプション](https://code.claude.com/docs/ja/plugins/mods/admin.md#set-options-on-the-built-in-guard)として) | [組織のものとみなされる](https://code.claude.com/docs/ja/plugins/mods/admin.md#install-your-organizations-mods) mod と、Claude Code に組み込まれた mod だけがフックを実行します。ユーザーの設定フックは引き続き実行されます。 |
380| `allowModsToOverrideDenyRules` | 管理設定([組み込みガードのオプション](/docs/ja/plugins/mods/admin.md#set-options-on-the-built-in-guard)として) | ユーザーがインストールした mod が、`deny` ルールで拒否されるツール呼び出しを承認できるようにします |388| `allowModsToOverrideDenyRules` | 管理設定([組み込みガードのオプション](https://code.claude.com/docs/ja/plugins/mods/admin.md#set-options-on-the-built-in-guard)として) | ユーザーがインストールした mod が、`deny` ルールで拒否されるツール呼び出しを承認できるようにします |
381| `allowManagedHooksOnly` | 管理設定 | 組織のものではないフックとインストール済みの mod をブロックします。[引き続き実行されるもの](/docs/ja/settings-reference.md#what-runs-under-allowmanagedhooksonly)を参照してください。 |389| `allowManagedHooksOnly` | 管理設定 | 組織のものではないフックとインストール済みの mod をブロックします。[引き続き実行されるもの](https://code.claude.com/docs/ja/settings-reference.md#what-runs-under-allowmanagedhooksonly)を参照してください。 |
382| `disableAllHooks` | 任意の設定ファイル | 管理設定では、インストール済みプラグインの mod やフックは一切実行されません。ユーザー自身の設定では、組織が管理するものは引き続き実行されます。[`disableAllHooks`](/docs/ja/settings-reference#disableallhooks) を参照してください。 |390| `disableAllHooks` | 任意の設定ファイル | 管理設定では、インストール済みプラグインの mod やフックは一切実行されません。ユーザー自身の設定では、組織が管理するものは引き続き実行されます。[`disableAllHooks`](https://code.claude.com/docs/ja/settings-reference#disableallhooks) を参照してください。 |
383| `disableSideloadFlags` | 管理設定 | 起動時に `--plugin-dir` と `--plugin-url` を拒否します |391| `disableSideloadFlags` | 管理設定 | 起動時に `--plugin-dir` と `--plugin-url` を拒否します |
384| `pluginConfigs` | ユーザー設定または管理設定 | mod の `userConfig` 値を保持します。キーは `acme-guard@acme-tools` などのプラグイン ID で、`--plugin-dir` で読み込んだ mod の場合は `first-mod@inline` のように名前と `@inline` です |392| `pluginConfigs` | ユーザー設定または管理設定 | mod の `userConfig` 値を保持します。キーは `acme-guard@acme-tools` などのプラグイン ID で、`--plugin-dir` で読み込んだ mod の場合は `first-mod@inline` のように名前と `@inline` です |
385 393
386`sec-default@builtin` は Claude Code に組み込まれたガードで、`/plugin` とデバッグログには `cc-plugin-sec-default` として表示されます。管理設定のあるマシン、または認証情報が Team か Enterprise の [`/login`](/docs/ja/authentication#authentication-precedence) であるセッションでは、ユーザーがインストールするすべての mod より先に読み込まれます。管理設定の `prependPlugins` が設定されている場合、このガードはそのリストに記載されているときにだけ、記載された位置で読み込まれます。394`sec-default@builtin` は Claude Code に組み込まれたガードで、`/plugin` とデバッグログには `cc-plugin-sec-default` として表示されます。管理設定のあるマシン、または認証情報が Team か Enterprise の [`/login`](https://code.claude.com/docs/ja/authentication#authentication-precedence) であるセッションでは、ユーザーがインストールするすべての mod より先に読み込まれます。管理設定の `prependPlugins` が設定されている場合、このガードはそのリストに記載されているときにだけ、記載された位置で読み込まれます。
387 395
388ソースは [Claude Code リポジトリの `mods/sec-default` ディレクトリ](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)にあります。396ソースは [Claude Code リポジトリの `mods/sec-default` ディレクトリ](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)にあります。
389 397
393 401
394| コマンド | 動作 |402| コマンド | 動作 |
395| :- | :- |403| :- | :- |
396| [`/plugin`](/docs/ja/plugins/mods/overview#see-which-mods-a-session-loaded) | 組み込みではない mod が読み込まれている場合、タブの下に `1 mod active · first-mod` のような行を表示します |404| [`/plugin`](https://code.claude.com/docs/ja/plugins/mods/overview#see-which-mods-a-session-loaded) | 組み込みではない mod が読み込まれている場合、タブの下に `1 mod active · first-mod` のような行を表示します |
397| [`claude plugin validate <directory>`](/docs/ja/plugins/mods/create#check-what-claude-code-reads-from-your-mod) | プラグインのマニフェストとフックモジュールを読み取り、エラー、処理するイベント、行う mods API 呼び出しを報告します。`--strict` は警告をエラーとして扱い、`--json` は機械可読なレポートを出力します。 |405| [`claude plugin validate <directory>`](https://code.claude.com/docs/ja/plugins/mods/create#check-what-claude-code-reads-from-your-mod) | プラグインのマニフェストとフックモジュールを読み取り、エラー、処理するイベント、行う mods API 呼び出しを報告します。`--strict` は警告をエラーとして扱い、`--json` は機械可読なレポートを出力します。 |
398| [`claude plugin test [directory]`](/docs/ja/plugins/mods/test#write-a-test) | ディレクトリ(指定しない場合はカレントディレクトリ)の下にある、名前が `.test.ts` または `.test.tsx` で終わるすべてのファイルを実行します。テストが失敗するとステータス 1 で終了します。 |406| [`claude plugin test [directory]`](https://code.claude.com/docs/ja/plugins/mods/test#write-a-test) | ディレクトリ(指定しない場合はカレントディレクトリ)の下にある、名前が `.test.ts` または `.test.tsx` で終わるすべてのファイルを実行します。テストが失敗するとステータス 1 で終了します。 |
399| [`claude --plugin-dir <directory>`](/docs/ja/plugins/mods/create#write-a-mod-yourself) | 1 つのセッションでプラグインディレクトリを読み込み、保存時にそのフックモジュールを再読み込みします。複数読み込むにはフラグを繰り返し指定します。 |407| [`claude --plugin-dir <directory>`](https://code.claude.com/docs/ja/plugins/mods/create#write-a-mod-yourself) | 1 つのセッションでプラグインディレクトリを読み込み、保存時にそのフックモジュールを再読み込みします。複数読み込むにはフラグを繰り返し指定します。 |
400| `/reload-plugins` | 実行時にプラグインを再読み込みします |408| `/reload-plugins` | 実行時にプラグインを再読み込みします |