{"version":"2.1.246","anchor":"the-plugin-worker-names-the-plugin-that-wedged-it-and-respaw","canonical_anchor":"the-plugin-worker-names-the-plugin-that-wedged-it-and-respaw","heading":"The plugin worker names the plugin that wedged it, and respawns clean","tier":"notice","area":"Plugins","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.246\/e\/the-plugin-worker-names-the-plugin-that-wedged-it-and-respaw","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.246","markdown":"### The plugin worker names the plugin that wedged it, and respawns clean\n\nWhen a plugin crashes the hooks worker, Claude Code now names the right plugin and restarts cleanly.\n\n**What**\n\nWhen the process running plugin hooks crashes, Claude Code now scans every slot of the shared marker array instead of only the first to identify which plugin was responsible, unloads it, and respawns from the declared plugin set rather than whatever was live at the moment of the crash.\n\n**Details**\n\n- Anything the crashed plugin was holding back is kept in a separate crashed-withholders record until that plugin reloads or is disabled.\n- Builds and loads abandoned mid-flight are logged, and each module records a failure stage and reason, such as `engine.create` or `the $ build`, surfaced in the plugin UI log.\n- Heartbeat idleness now counts pending flushes, so a worker mid-flush is not treated as idle.\n\n**Evidence**\n\n`the respawn reloads the declared set`\n\n- Area: Plugins\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 2\/5"}