What
Claude Code now runs plugin loading and reloading through an admission-control pipeline before a plugin takes effect:
- Reloading a hooks module now computes where the reloaded plugin would be inserted among already-loaded plugins, and runs it past judges (checking its before/after neighbors, whether it's native, and its tier) that can refuse the reload. If refused, the currently running version stays loaded instead of being silently swapped out.
- A new pipeline runs a
plugin.registerhook event past other already-admitted plugins (acting as 'judges') before each plugin is admitted into a build. A plugin can be refused with a reason, which is logged as eitherrefused at plugin.register: ...orrefused by <plugin>: ....
Why
This gives already-loaded plugins a say in whether a new or reloaded plugin is allowed to take effect, and it surfaces a clear log message when a plugin is refused instead of failing silently or swapping in an incompatible version.
Names in the bundleplugin.register
Documented inclaude-code/plugins/mods/admin
The entry above is what we published on the day. These lines were added later, as Anthropic's own pages caught up, and they sit beside the original rather than replacing it.
Confirmed since
Anthropic's documentation has since written up plugin.register, on Manage mods for your organization.
Each time another mod is about to load, your mod receives the list that `claude plugin validate` prints, in an event named [`plugin.register`](/docs/en/plugins/mods/reference#other-mods). A mod in `prependPlugins` can read that list and re…plugins/mods/admin see the edit
One source agreesOne thing we can check says the same as this entry.
Anthropic's documentation agrees
Anthropic's documentation has since written up plugin.register, on Manage mods for your organization.