{"version":"2.1.311","anchor":"plugin-hooks-modules-can-now-load-sealed-from-org-provided","canonical_anchor":"plugin-hooks-modules-can-now-load-sealed-from-org-provided","heading":"Plugin hooks modules can load sealed from organization-provided texts, with a reworked load check","tier":"internal","area":"Plugins","scope":"both","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.311\/e\/plugin-hooks-modules-can-now-load-sealed-from-org-provided","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.311","markdown":"### Plugin hooks modules can load sealed from organization-provided texts, with a reworked load check\n\nPlugin hooks modules can now load from organization-provided texts instead of disk, and the check deciding whether a hooks module may load moved into one helper\n\n**Unclear.** How an organization supplies the code, and so when the sealed loading is used, is not established.\n\n**What**\n\nA plugin is an add-on package for Claude Code. A hooks module is the code a plugin runs at set points in a session. How Claude Code decides whether a hooks module may load has changed:\n\n- Sealed loading: plugin loading can now take a set of module texts and read from it instead of from disk. Modules loaded this way are marked `sealed: !0`.\n\n- Surface modules: a sealed module may not name surface modules. If it does, loading fails with the error `it names surface modules`.\n\n- Restriction message: a new message ties this to `CLAUDE_CODE_RESTRICT_PERSONAL_CONFIG`, using the wording 'not the organization's plugin'.\n\n- One load check: the decision whether a hooks module may load now lives in one helper that considers where the plugin came from and whether it is held or managed. Before, the check was written inline with the message 'it carries your claude.ai uploads, and this session doesn't let them run in-process hooks (CLAUDE_CODE_RESTRICT_PERSONAL_CONFIG)', which is no longer built there.\n\n- Settings changes: when settings change, Claude Code now counts the updates still in progress, in `settingsChangesUnfinished`, while the parts that react to them run.\n\n**Why**\n\nThis prepares for hook plugins managed by an organization, which can be loaded from texts the organization supplies rather than from files on your machine. With `CLAUDE_CODE_RESTRICT_PERSONAL_CONFIG` set, the message you see when a hooks module is refused may read differently.\n\n- Area: Plugins\n- Tier: Under the hood\n- Useful: 3\/5\n- Signal: 4\/5\n- Scope: both\n- Heads-up: no"}