Manage mods for your organization changedplugins/mods/admin
Nearest release: v2.1.311, published 3 hours after 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 26 Oct 2026 16:46 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 26 Oct 2026 17:07 UTC.
Upstream edited
Recorded here
Lines+38added
Lines−1removed
From line
91
where the diff opens
First seen
1 Oct 2026
this site's first read of the page
Recorded edits16to this page, all time
### Know which hooks of a user's mod don't run
The whole hunk
from line 91, old and new numbered
/
from line 91
9191
9292None of these controls sandboxes a mod. A mod you allow runs as the user, with the user's access to files, processes, and the network.
9393
94### Know which hooks of a user's mod don't run
95
96Where the [built-in guard](#know-what-happens-by-default) loads, a hook that a user's mod registers on one of these events never runs, and `/plugin` tells that user so in a note. In the [`session.append`](https://code.claude.com/docs/en/plugins/mods/reference#session) rows, `door` is the kind of stored row the hook is filtered to.
97
98| Hook on | What the event is |
99| :- | :- |
100| [`classic.<Event>`](https://code.claude.com/docs/en/plugins/mods/events#hook-the-settings-hook-events), such as `classic.Stop` | A [settings hook event](https://code.claude.com/docs/en/hooks.md#hook-events) |
101| [`prompt.compose`](https://code.claude.com/docs/en/plugins/mods/reference#prompts-and-what-claude-reads) | The system prompt's list of sections |
102| `prompt.section` | One section of the system prompt |
103| `prompt.context` | The context sent with a conversation's first message |
104| `prompt.attachment` | A message Claude Code adds for Claude, such as a reminder |
105| `skill.prompt` | A skill's text as it's expanded for Claude |
106| `attribution.text` | Commit or pull request attribution text |
107| [`session.compact`](https://code.claude.com/docs/en/plugins/mods/reference#session) | A compaction of the conversation |
108| `settings.read` | A read of settings, such as a mod's `$.settings.read` call |
109| `session.append{door=attachment}` | The stored row for a message Claude Code adds for Claude |
110| `session.append{door=hook-context}` | The stored row for context from a settings hook |
111| `session.append{door=compaction}` | The stored rows for a compaction's summary and boundary |
112
113The guard also passes over a user's hooks in some other cases, such as the descriptions of your organization's tools, on [`tool.describe`](https://code.claude.com/docs/en/plugins/mods/reference#tools), and the stored row for a skill's text. `/plugin` shows no note for those. If a hook on another event does nothing, see [Find out why a mod does nothing](https://code.claude.com/docs/en/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing).
114
115The note appears in the plugin's details and in the **Errors** tab of `/plugin`. It requires Claude Code v2.1.299 or later. It names each hook from the table as the mod registered it, as in this example:
116
117```text theme={null}
118Its hooks on classic.Stop, prompt.section do not run here: where an organization manages Claude Code, these events pass over the plugins you install
119Only a plugin that counts as your organization's own runs hooks on these events. An administrator sets that up in managed settings
120```
121
122To let these hooks run, change managed settings in one of two ways:
123
124* **Run the mod as your organization's**: [install the mod so that it counts as yours](#install-your-organizations-mods). Its hooks on these events then run, and the guard stays loaded for every other mod. The mod turns on for everyone who receives these settings, and it has to sit in a directory you place on each machine. If you list it in `prependPlugins`, keep `sec-default@builtin` in the list.
125* **Remove the guard**: leave `sec-default@builtin` out of `prependPlugins`. An empty list, `"prependPlugins": []`, is enough. You lose the whole guard, not only these events. A user's mod can then do what [the guard otherwise stops it from doing](#know-what-happens-by-default), and [the guard's options](#set-options-on-the-built-in-guard) don't apply.
126
127If you deliver a list without the guard through [server-managed settings](https://code.claude.com/docs/en/server-managed-settings.md#fetch-and-caching-behavior), the guard stays loaded until the server confirms the settings for the session. To confirm either change on a machine that runs v2.1.299 or later, open `/plugin` in a session there and check that the note is gone.
128
129A `session.append` hook with no `door` filter still runs and gets no note, but the stored rows in the table don't reach it.
130
94131## Decide whether to leave mods on
95132
96133A mod can do more than the other parts of a plugin because it runs inside Claude Code. It sees every prompt and tool call, can change them, and can allow or deny a tool call before a permission prompt appears.
from line 175
138175| `$.prompt.submit` | Submits a prompt, and can send it as the user's own words |
139176| `$.session.send` | Sends a message that another session's, subagent's, or [teammate's](https://code.claude.com/docs/en/agent-teams.md) Claude reads |
140177
141In the `hooks:` line, [`tool.call`](https://code.claude.com/docs/en/plugins/mods/reference#tools) and [`prompt.submit`](https://code.claude.com/docs/en/plugins/mods/reference#prompts-and-what-claude-reads) mean the mod sees every tool call and every prompt, and can change them. [`session.append`](https://code.claude.com/docs/en/plugins/mods/reference#session) means the mod can rewrite each row of the conversation before it's stored. [`ui.render{component=AskUserQuestion}`](https://code.claude.com/docs/en/plugins/mods/interface#change-what-claude-code-already-draws) means the mod can redraw the dialog Claude uses to ask the user a question. `tool.check` means the mod can approve or deny a tool call before a permission prompt appears. [Know what happens by default](#know-what-happens-by-default) lists which of your rules and hooks take precedence over its answer.
178In the `hooks:` line, [`tool.call`](https://code.claude.com/docs/en/plugins/mods/reference#tools) and [`prompt.submit`](https://code.claude.com/docs/en/plugins/mods/reference#prompts-and-what-claude-reads) mean the mod sees every tool call and every prompt, and can change them. [`session.append`](https://code.claude.com/docs/en/plugins/mods/reference#session) means the mod can rewrite each row of the conversation before it's stored, apart from [the rows the guard passes over](#hooks-the-guard-passes-over). [`ui.render{component=AskUserQuestion}`](https://code.claude.com/docs/en/plugins/mods/interface#change-what-claude-code-already-draws) means the mod can redraw the dialog Claude uses to ask the user a question. `tool.check` means the mod can approve or deny a tool call before a permission prompt appears. [Know what happens by default](#know-what-happens-by-default) lists which of your rules and hooks take precedence over its answer.
142179
143180## Choose how much to allow
144181
No line in this hunk matches that.