hooks
A Claude Code settings key, read out of the shipped bundle. It was in the build from v2.1.138 and was gone by v2.1.284.
Run your own commands as hooks at points in Claude Code's lifecycle
Anthropic's own wording. Read off All settings, captured 2026-10-22.
In the changelogs
30Releases whose published page names hooks.
-
v2.1.305
Plugin checking gains a folder-layout check and a
--profile directoryoptionclaude plugin validatenow also runs a folder-layout check, and plugin loading now checks key plugin files stay within allowed foldersfound in this entry's text
-
v2.1.304
/usage now says when you can try again after a rate limit
When /usage is rate limited, its message now shows when it can be tried again instead of saying "try again in a moment"
found in this entry's text
-
v2.1.296
Plugin agents now warn about misspelled and unsupported settings
Plugin agent files now log a warning for settings Claude Code does not recognize, suggest the likely intended name, and flag more ignored ones
found in this entry's text
-
v2.1.290
Removing a worktree no longer deletes folders that hold git's own files
When dropping a worktree, Claude Code now leaves its folder in place with a warning if it holds git's own files
found in this entry's text
-
v2.1.280
Plugin hooks manifest dedup warning for hooks/hooks.json
Claude Code now warns instead of double-loading a plugin's hooks.json if it's also listed explicitly
found in this entry's text
-
v2.1.280
Self-hosted runner: session-scoped git config for lifecycle hooks
Self-hosted runner sessions now get their own git config so lifecycle hooks use separate signing and protocol rules from the main checkout
found in this entry's text
-
v2.1.280
Duplicate hooks file message reworded
Duplicate-hooks-file error message shortened, dropping the auto-load explanation
found in this entry's text
-
v2.1.267
Plugin hooks.json now warned on unknown/malformed keys
Claude Code now warns about unknown or malformed keys in a plugin's hooks.json
found in this entry's text
-
v2.1.267
New "safeguards" permission-context capability
Permission settings gained a new 'safeguards' flag alongside remote tools, hooks, and plugins
found in this entry's text
-
v2.1.267
Remote control now filters/strips forwarded plugin and safeguard settings per capability
Remote control now strips plugin and safeguard settings from forwarded requests unless explicitly permitted
found in this entry's text
-
v2.1.267
New 'safeguards' trust category added to the remote-io flag-settings filter, with skip reporting
Remote connections get a new 'safeguards' trust category that blocks unverified attempts to disable protections
found in this entry's text
-
v2.1.265
New plugin settings field: payloadSlots
Plugin settings gain a new payloadSlots field alongside shell settings and hooks
found in this entry's text
-
v2.1.265
Hook lookup API reworked from Map lookups to accessor methods
Internal hook lookups switched from raw map access to dedicated accessor methods
found in this entry's text
-
v2.1.257
Skills reject top-level PreToolUse/PermissionRequest hooks in frontmatter
A skill declaring permission hooks outside the hooks object no longer loads them or its allowed-tools.
found in this entry's text
-
v2.1.257
Same top-level-hooks guard extended to plugin hooks.json files
A plugin hooks.json with permission hooks outside the hooks key now throws instead of loading malformed config.
found in this entry's text
-
v2.1.257
Hooks module scanning now flags PreToolUse/PermissionRequest declared outside the hooks object
Permission hooks declared at the top level of hooks.json now give a message pointing at the misconfiguration.
found in this entry's text
-
v2.1.248
Sandbox summary rows are grouped by category
The sandbox summary is now grouped into commands, environment variables and markers.
found in this entry's text
-
v2.1.246
Per-class memory caps on spawned processes, wired through but off for everything except Bash
Memory limits now reach npm, git, tmux, LSP, MCP and hooks, but everything except Bash is excluded.
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.
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.
found in this entry's text
-
v2.1.238
Agents in untrusted folders can no longer define inline MCP servers
Agents in untrusted folders can no longer define inline MCP servers; trust the project to allow it.
found in this entry's text
-
v2.1.238
Unreadable plugin hook files are reported instead of skipped
A plugin whose hooks file cannot be read now shows a load failure instead of silently doing nothing.
found in this entry's text
-
v2.1.234
Slack workflow tokens and webhook URLs are scrubbed
Slack workflow tokens and webhook URLs are now scrubbed from text before it leaves your machine.
found in this entry's text
-
v2.1.229
Self-hosted runner can install launcher hooks sent by the server
The self-hosted runner writes server-supplied hook scripts for a session and deletes them afterwards.
found in this entry's text
-
v2.1.213
Hook System:
policySettingsSourcefound in this entry's text
-
v2.0.54
Enterprise Hook Control:
allowManagedHooksOnlyPolicy Settingfound in this entry's text
-
v2.0.36
Enhanced Plugin Hook Loading
found in this entry's text
-
v2.0.31
Hook Removal Edge Case
found in this entry's text
-
v1.0.103
npm Plugin Support
found in this entry's text
-
v1.0.54
Settings Configuration Improvements
found in this entry's text
First cited
0No release's published evidence quotes this name. The ledger indexes the Evidence lines of every changelog on this site, so this says nobody here has ever quoted it; it says nothing about how old the name is.
Presence across releases
2Build by build
149One 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 settings key does. All settings keys.