Plugins can load hooks from real JS modules with per-action permission checks, but the rollout gate defaults off.
New machinery loads a plugin's hooks from actual JS modules (function hooks) rather than only declarative config, with permission checks for call_handler, run_script, and get_handlers actions. A loader logs hooks module of plugin "X" not loaded: ... with reasons such as --bare mode, disableAllHooks, or the rollout flag being off. The rollout is controlled by a growthbook gate, tengu_plugin_hooks_modules, that defaults to off, and can be forced on or off via the CLAUDE_CODE_ENABLE_FUNCTION_HOOKS env var, which takes priority over the gate.
The entry above is what we published on the day. These lines were added later, as Anthropic's own pages caught up, and they sit beside the original rather than replacing it.
Claude Code [managed settings](/docs/third-party/claude-desktop/code#interaction-with-claude-code%E2%80%99s-own-managed-settings) deployed on the device govern these hooks as they do in the Claude Code CLI: `disableAllHooks` turns them off…third-party/claude-desktop/extensions see the edit
If you start Claude Code in [bare mode](/docs/en/headless#start-faster-with-bare-mode), by passing `--bare` or setting `CLAUDE_CODE_SIMPLE=1`, recording stays off unless you pass `--system-prompt-snapshot on`. Before v2.1.268, sessions tha…cli-reference see the edit
If you start Claude Code in [bare mode](/docs/en/headless#start-faster-with-bare-mode) by passing `--bare` through `extraArgs` or setting `CLAUDE_CODE_SIMPLE=1`, recording stays off unless you set `snapshot: true` on the object form of `sy…agent-sdk/modifying-system-prompts see the edit
Anthropic's documentation has since written up --bare, on Modifying system prompts.
New in this build: CLAUDE_CODE_ENABLE_FUNCTION_HOOKS