tengu_plugin_hooks_modules
A Claude Code feature flag, read out of the shipped bundle. It has been in the build since v2.1.242, including the newest one read.
Tools a plugin registers reach the model through a local loopback MCP server.
Not Anthropic's. This is the line from the earliest changelog entry here that named it, v2.1.242.
In the changelogs
16Releases whose published page names tengu_plugin_hooks_modules.
-
v2.1.283
Write live mods for Claude Code that reload inside your session
A new bundled skill writes mods (plugins adding panes, status lines, toasts or hooks) that reload live once you agree for the session
gate cited by this entry
-
v2.1.283
Hook modules that don't match a tool call are skipped earlier
Claude Code now checks hook modules against key fields of a tool call itself and skips those that don't match, instead of sending every call to every module
gate cited by this entry
-
v2.1.280
Hooks modules (plugin tests) early-access gate and messages
Plugin hook tests now give a specific reason when they can't run: rollout off, or disabled locally
gate cited by this entry
-
v2.1.275
Plugin hook modules loading gains a 'built-ins only' mode
Plugin hook loading gains a 'built-ins only' mode that can skip loading installed plugins' hooks
gate cited by this entry
-
v2.1.275
Installed (non-built-in) plugins' hooks modules gated behind a new rollout flag, off by default
Hooks modules for installed (non-built-in) plugins now require a rollout flag, off by default
gate cited by this entry, found in this entry's text, named in this entry
-
v2.1.259
Plugin hooks as JS modules — gated off by default
Plugins can load hooks from real JS modules with per-action permission checks, but the rollout gate defaults off.
found in this entry's text, named in this entry, gate cited by this entry
-
v2.1.247
Clickable buttons in plugin UI, built end to end but dark in this build
Plugin buttons work end to end in terminal and desktop, but plugin hook modules are switched off.
named in this entry, gate cited by this entry, found in this entry's text
-
v2.1.247
Programmatic prompt submission gains origin and wait, which hooks cannot forge
Hooks can see where a prompt came from and whether it queues, and cannot fake either.
gate cited by this entry, found in this entry's text
-
v2.1.246
Plugin JavaScript modules stay off, and the flag reader is off even for them
Plugin JavaScript modules can read flags, abort turns and detect the app, but they do not load at all.
gate cited by this entry, found in this entry's text
-
v2.1.242
Plugin-registered tools are served over a local MCP server
Tools a plugin registers reach the model through a local loopback MCP server.
gate cited by this entry, found in this entry's text
-
v2.1.242
Plugin model calls are capped by an allowlist and a session budget
Plugin-triggered model calls are limited to allowed models and a per-session token budget.
gate cited by this entry, found in this entry's text
-
v2.1.242
Plugin hooks modules: a JavaScript engine for plugin hooks, off unless enabled remotely
Plugin hooks.json gains a modules key for code-registered hooks, off unless enabled remotely.
gate cited by this entry, found in this entry's text
-
v2.1.242
Plugins can ship JavaScript hook modules that run in a shared Bun worker, built but switched off
Plugins could ship JavaScript hook modules running in a worker, but loading is refused here.
gate cited by this entry, found in this entry's text
-
v2.1.242
Plugins get a small persistent key/value store
Plugins get a private key/value store that survives between sessions.
gate cited by this entry, found in this entry's text
-
v2.1.242
Plugin hook code is parsed and rejected unless it follows a strict shape
Plugin hook code is parsed and rejected before running if it strays outside a narrow shape.
gate cited by this entry, found in this entry's text
-
v2.1.242
Terminal output is routed through a rendering hook that nothing currently answers
Nine parts of the terminal ask a hook before drawing, but nothing can answer yet.
gate cited by this entry, found in this entry's text
Gate readings
3| Release | Resolved | This account | Anonymous | Compiled default |
|---|---|---|---|---|
| v2.1.283 read on another version | Not enough to say | no value returned | no value returned | off |
| v2.1.280 read on another version | Not enough to say | no value returned | no value returned | off |
| v2.1.275 read on another version | Off by default, switched on for this account | on | on | off |
Two arms, because they disagree: this account is the one account this site reads and anonymous is a baseline with no identity attached. A reading says nothing about your account, and off cannot rule out a rollout both readings sit outside of. What these readings can and cannot show.
Flag server, over time
18| Read as | Reading | From | Until | Version installed |
|---|---|---|---|---|
| anonymous | on | 2026-10-17T05:30:04Z | 2026-10-22T09:05:04Z | v2.1.302 to v2.1.308 |
| this account | on | 2026-10-07T18:00:12Z | 2026-10-22T09:05:04Z | v2.1.292 to v2.1.308 |
| anonymous | no longer carried | 2026-10-17T05:25:57Z | 2026-10-17T05:25:57Z | v2.1.302 |
| anonymous | on | 2026-10-01T17:20:31Z | 2026-10-17T05:10:04Z | v2.1.287 to v2.1.302 |
| this account | off | 2026-10-07T17:59:34Z | 2026-10-07T17:59:34Z | v2.1.293 |
| this account | on | 2026-10-01T18:20:06Z | 2026-10-07T17:10:05Z | v2.1.287 to v2.1.292 |
| this account | off | 2026-10-01T17:25:05Z | 2026-10-01T18:10:08Z | v2.1.286 |
| this account | on | 2026-10-01T17:20:31Z | 2026-10-01T17:20:31Z | v2.1.287 |
| anonymous | off | 2026-09-30T19:55:04Z | 2026-10-01T16:30:06Z | v2.1.286 |
| this account | off | 2026-09-30T19:55:04Z | 2026-10-01T16:30:06Z | v2.1.286 |
| anonymous | on | 2026-09-30T19:15:05Z | 2026-09-30T19:50:04Z | v2.1.286 |
| this account | on | 2026-09-30T19:15:05Z | 2026-09-30T19:50:04Z | v2.1.286 |
| anonymous | off | 2026-09-30T17:30:08Z | 2026-09-30T18:45:07Z | v2.1.285 |
| this account | off | 2026-09-30T17:30:08Z | 2026-09-30T18:45:07Z | v2.1.285 |
| anonymous | on | 2026-09-30T17:26:32Z | 2026-09-30T17:26:32Z | v2.1.286 |
| this account | on | 2026-09-30T17:26:32Z | 2026-09-30T17:26:32Z | v2.1.286 |
| this account | off | 2026-09-29T21:10:05Z | 2026-09-30T17:15:06Z | v2.1.285 |
| anonymous | off | 2026-09-29T21:05:06Z | 2026-09-30T17:15:06Z | v2.1.285 |
One row per unbroken stretch of one reading, newest first, from snapshots taken every twenty-five minutes or so. No longer carried is not off: it means the flag server stopped returning the gate at all, which is what a retired experiment looks like. The version column is what was installed when the reading was taken, not what caused it.
First cited
2The earliest release whose published evidence quoted tengu_plugin_hooks_modules was v2.1.242, 24 Aug 2026. That is the oldest release this project wrote about it, so it is a floor on the name's age and not the release that introduced it. It is not a presence reading: which builds carried the name is the table below.
Presence across releases
3Build by build
56One row per release since the first build this name was read out of. Absent means the build was read and the name was not in it, never mined means no bundle for that release was ever archived, and a declared type or a default is only ever what that release's own bundle stated.
Read out of the published npm bundle release by release, and out of Anthropic's own documentation as this site captured it. Nothing on this page is a description anybody here wrote about what the feature flag does. All feature flags.