{"version":"2.1.290","anchor":"plugin-hook-enginecreate-can-oust-a-failing-module-and-retr","canonical_anchor":"plugin-hook-enginecreate-can-oust-a-failing-module-and-retr","heading":"Plugin hooks modules recover better from failing and crashing plugins","tier":"notice","area":"Hooks","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.290\/e\/plugin-hook-enginecreate-can-oust-a-failing-module-and-retr","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.290","markdown":"### Plugin hooks modules recover better from failing and crashing plugins\n\nHooks-module loading now drops only the failing plugin and retries, keeps a plugin loaded after a worker crash, and adds new errors around engine.create\n\n**Unclear.** Exactly when one module pushes out another is not clear.\n\n**What**\n\nPlugins can supply hooks modules, code that runs when certain events happen in Claude Code, inside a separate background process called the hooks worker. How failures there are handled changed:\n\n- Build retries: when the modules are built, Claude Code now tracks which modules were pushed out by another and which failed. It retries without the pushed-out one and records why each unloaded module failed. Before, the first failed hook unloaded its module and the build was repeated.\n\n- Worker crashes: if the hooks worker dies while a hook is running, the plugin now stays loaded and the worker is replaced, so the hook's `.catch` can still run. Before, the plugin was unloaded with \"was unloaded: it crashed the hooks worker\".\n\n- New errors for plugin authors: user-tier plugins that never call `engine.create`, or that withhold or replace another plugin's `$.` names, now throw errors.\n\n- `__proto__` warning: a plugin that copies `$` by assignment loses `__proto__`, and a warning now says so.\n\n**Why**\n\nOne misbehaving plugin is less likely to take others down with it, and a crash no longer unloads the plugin outright. Plugin authors may see new errors if their plugin does not call `engine.create` or interferes with another plugin's names.\n\n- Area: Hooks\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}