Claude Code now validates the updatedInput your hooks return

Claude Code v2.1.300 (October 14, 2026) changed how hook-modified tool input is handled. The changelog entry:

Changed hooks: updatedInput from PreToolUse and PermissionRequest hooks is now validated like Claude's own input: unknown keys are dropped, and input the tool rejects denies the call

What it means for a hook

A hook can return updatedInput to replace a tool's arguments before it runs. The docs say it replaces the entire input object, so you include unchanged fields alongside modified ones.

{
  "hookSpecificOutput": {
    "hookEventName": "PreToolUse",
    "permissionDecision": "allow",
    "updatedInput": {
      "field_to_modify": "new value"
    }
  }
}

The changelog describes two behaviors:

The docs also state that permission rules are evaluated against the input your hook returns, not the input Claude sent. For PermissionRequest hooks, the modified input is re-evaluated against deny and ask rules.

What to check

Run your hooks against a few real calls. If one returns extra keys or omits a required field, expect a denial instead of a run. Compare your output with the tool's input fields.

Sources: Claude Code changelog, 2.1.300 and the hooks reference.