What
The CLI's claude plugin test --file and claude plugin test commands now use a single shared helper, pluginTestRefusal, to decide why a plugin's hook-module tests can't run, replacing scattered inline conditional logic. The helper reports one of two reasons:
- If the hooks-modules feature isn't enabled yet, it tells the user to set
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1. - If the feature is enabled but hook modules are disabled locally (for example via
disableAllHooks,allowManagedHooksOnly, or an organization policy), it reports that instead.
Why
This gives a consistent, accurate explanation when plugin test refuses to run, instead of an unclear or inconsistent message, making it easier to figure out whether the fix is an environment variable or a local/managed policy setting.
tengu_plugin_hooks_modules Not enough to sayNothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.
This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.280: off
These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.
Read once, for one account on one subscription tier, against v2.1.280. It isn't a statement about your account. What a flag value here can and cannot tell you
A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.