Mods reference changedplugins/mods/reference
Nearest release: v2.1.296, published 2 hours before upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Upstream edited this page at 9 Oct 2026 19:26 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 9 Oct 2026 19:37 UTC.
Upstream edited
Recorded here
Lines+3added
Lines−2removed
From line
52
where the diff opens
First seen
1 Oct 2026
this site's first read of the page
Recorded edits32to this page, all time
The whole hunk
from line 52, old and new numbered
/
from line 52
5252| :- | :- | :- |
5353| [`tool.call`](/docs/en/plugins/mods/events#guard-or-change-a-tool-call) | A tool is about to run | `next(e)`, `{ deny: reason }`, or `{ result }` |
5454| [`tool.check`](/docs/en/plugins/mods/events#where-settings-hooks-run-in-the-order) | Claude Code decides whether a tool call may run, after the `tool.call` and `PreToolUse` hooks. `next(e)` resolves to the decision the rules, the permission mode, and those hooks reached. | `{ decision }`, which is `allow`, `ask`, or `deny` |
55| `tool.describe` | Once for each tool, when its description is first sent to Claude | `{ description }`, optionally with `isDeferred` set to `true` to put the tool behind [tool search](/docs/en/mcp#scale-with-mcp-tool-search) or `false` to load it upfront |
55| `tool.describe` | Once for each tool, when its description is first sent to Claude. A second time for an MCP tool when Claude loads it through [tool search](/docs/en/mcp#scale-with-mcp-tool-search), with `e.description` set to the text Claude reads for the loaded tool. | `{ description }`, optionally with `isDeferred` set to `true` to put the tool behind tool search or `false` to load it upfront |
5656
5757#### Agent and organization fields on `tool.check`
5858
from line 113
113113| `session.end` | The session ends, or `/clear`, `/resume`, or `/branch` runs. `e.reason` is `clear`, `resume`, `logout`, `prompt_input_exit`, or `other`. `/branch` reports `resume`. | `next(e)` |
114114| `session.compact` | The conversation is about to be compacted | `{ skip: reason }` |
115115| [`session.receive`](/docs/en/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/en/plugins/mods/api#send-and-receive-messages-between-sessions) | A message arrives from, or is about to go to, another agent or session. See [Send and receive messages between sessions](/docs/en/plugins/mods/api#send-and-receive-messages-between-sessions). | `{ consumed: reason }` for `receive`, `{ isDelivered: false, reason }` for `send` |
116| `session.append` | Once for each row the conversation keeps, such as a prompt, a response block, a tool result, or a notice, before it's stored | `next({ ...e, message })` to rewrite the row's `content` |
116| `session.append` | Once for each row the conversation keeps, such as a prompt, a response block, a tool result, or a notice, before it's stored | `next({ ...e, message })` with a changed `message.content`, to rewrite the row's text blocks or the `content` of a `tool_result` block in it |
117117| `session.attach`, `session.detach` | Another app connects to or disconnects from the session | `next(e)` |
118118| `session.measure` | After each turn, and when a plan limit's percent used changes | `next(e)` |
119119
from line 286
286286| `$.ui.invalidate('ui.render')` redraws | Throttled to 10 a second, or 30 in the terminal for the visible pane, the expanded band, and the hint line under the prompt. Calls that come sooner are coalesced. |
287287| `$.ui.toast` | Shown for 4 seconds unless you pass `{ timeoutMs }` |
288288| A pane opened without the user asking | Placed from 144 terminal columns, 110 after they've opened it once |
289| Scopes, such as functions, blocks, and loops, nested inside one another in one file of a hooks module | 2,000 |
289290| Command, tool, subagent type, and pane names | Letters, digits, `_`, and `-`, up to 64 characters |
290291| One `claude plugin test` test | 5 seconds unless the test sets `timeoutMs` |
291292
No line in this hunk matches that.