Follow Discord
Sweep 28 Sep 2026 · 18:16Z Build v2.1.284 505 read Stable v2.1.277 Latest v2.1.284 Next v2.1.284 Feeds RSS JSON llms.txt llms-full.txt Unofficial

Claude Code v2.1.284 ·

Plugin hooks can be handed to a separate runner instead of running locally

Plugin hooks can now be passed to a separate plugin hook runner, possibly on another machine, with no visible way to switch it on yet

Group of 2 Under the hood Internal Changes
JSON All of v2.1.284
Under the hoodTier: how much it should matter to you
4Useful: my rating, 1 to 5
4Signal: worth watching, 1 to 5
HooksArea: what it touches
Internal ChangesKind: in v2.1.284,
What probably matters to youSection of the release

What

A hook is a command that Claude Code runs automatically at certain moments, such as before a tool is used. Plugins can bring their own hooks. Until now, every plugin hook ran as a process on your own machine. This release adds a pluginHookRunner, a separate runner that can take over plugin hooks. Its error text refers to a hook's "run on another machine". No visible way to switch it on was found.

  • Before running a plugin hook, Claude Code checks whether the runner holds(pluginId), meaning it has taken charge of that plugin.
  • If it has, the hook is not started as a local shell or process. It is sent to the runner's run(...) with {hook, hookEvent, jsonInput, pluginId, hookIndex}.
  • Cancelling the call ends it with an empty result.
  • Async and asyncRewake hooks, which run in the background, go through the same path under an async_hook_ id.
  • StatusLine and FileSuggestion hooks, and hooks with an env or shell-prefix override, stop early and do not run.
  • If a run fails, the failure is logged and the hook gives an empty result.
  • Registered hooks are split by whether the runner holds their plugin. When session-registered hooks are cleared, plugin hooks (those with a pluginRoot) whose plugin the runner still holds are now kept. Before, every plugin hook was dropped at that point.
  • Hook selection has a new path for plugins whose hooks are all type === "command".

Why

In practice, plugin hooks can now run somewhere other than your local machine, and hooks held by that runner are no longer thrown away when hooks are cleared. Some hook types and overrides are skipped on this path, so a plugin that depends on them may behave differently if the runner is in use.

How sure we are
Something disagreesSomething we can check disagrees with this entry, or the writer said they could not settle it.
The writer flagged doubtIt is not clear whether anything sets up the outside runner yet, so this may not be in use.

See this entry in the whole of v2.1.284 →

Feedback