{"name":"PostToolUse","slug":"posttooluse","family":"hook","title":"Hook events","noun":"hook event","description":"After a tool call succeeds","description_source":"docs","described_by":{"doc":"claude-code\/hooks","title":"Hooks reference"},"presence":{"first_seen":null,"removed_in":null,"in_current_build":false,"newest_mined":"2.1.309","builds":0,"mined_builds":150,"first_cited":{"version":"2.1.79","released_at":"2026-03-18 21:34:08","spans":6}},"aliases":[],"entries":[{"version":"2.1.309","anchor":"hook-output-handling-runsthere-hook-specific-output-now-ign","heading":"Hook output after a tool call is checked differently when the hook runs elsewhere","line":"Claude Code reworked how it checks a hook's tool-specific output; when the hook runs elsewhere, the tool input passes through and a refusal is ignored","released_at":"2026-10-22 20:34:13","reason":"found in this entry's text"},{"version":"2.1.300","anchor":"hooks-can-no-longer-silently-replace-tool-results-across-env","heading":"Hooks running elsewhere can no longer swap out a tool's result","line":"A PostToolUse hook that ran in another environment can no longer replace a tool's result, and Claude is told it read the original","released_at":"2026-10-14 14:27:26","reason":"found in this entry's text, named in this entry"},{"version":"2.1.299","anchor":"plugin-hooks-can-deny-agent-resume-withhold-results-and-ref","heading":"Plugins can now block agent wake-ups and withhold tool results","line":"Plugins can now refuse to resume or wake an agent, refuse a call or withhold a tool's result, and Claude Code reports each case","released_at":"2026-10-14 00:23:19","reason":"found in this entry's text"},{"version":"2.1.296","anchor":"posttooluse-hooks-can-rewrite-mcp-tool-output-via-updatedmcp","heading":"PostToolUse hooks can rewrite MCP tool results with updatedMCPToolOutput","line":"A PostToolUse hook can now replace an MCP tool's result using updatedMCPToolOutput when it does not set updatedToolOutput","released_at":"2026-10-09 16:58:10","reason":"found in this entry's text"},{"version":"2.1.296","anchor":"pretooluse-hook-stop-attachment-helper-and-422-to-400-error","heading":"PreToolUse hooks that stop a turn now get the same note as PostToolUse","line":"A PreToolUse hook that stops Claude from continuing now produces the same stop note as PostToolUse, and 422 API errors are shown as 400","released_at":"2026-10-09 16:58:10","reason":"found in this entry's text"},{"version":"2.1.295","anchor":"websearch-result-schema-gains-optional-snippet-for-posttoolu","heading":"Web search results can include page text for PostToolUse hooks","line":"Each web search hit can now carry an optional snippet of page text, passed to PostToolUse hooks but not into the tool result","released_at":"2026-10-08 18:22:58","reason":"found in this entry's text"},{"version":"2.1.295","anchor":"hook-output-is-restricted-for-personal-hooks","heading":"Your own hooks can no longer rewrite tool calls or answers in personal mode","line":"In a new personal mode, hooks from your own files can no longer change a tool call's input or certain tool results, and Claude Code says so","released_at":"2026-10-08 18:22:58","reason":"found in this entry's text"},{"version":"2.1.293","anchor":"hook-output-telemetry-and-remote-hook-sanitising","heading":"Hooks running away from the tool can no longer rewrite its input or result","line":"Hooks that ran somewhere other than the tool can no longer change its input or result: input changes become a denial, result changes are dropped","released_at":"2026-10-07 17:18:04","reason":"found in this entry's text"},{"version":"2.1.287","anchor":"remote-shell-tool-output-previews-and-progress-forwarded-to","heading":"Remote shell commands now pass on live progress and an output preview","line":"Shell commands run for a remote session now pass on live progress and keep the end of their output as a preview","released_at":"2026-10-01 16:59:25","reason":"found in this entry's text"},{"version":"2.1.287","anchor":"hook-matcher-helper-and-tool-call-log-dedupe","heading":"Hook matching covers PostToolBatch, and repeated refusal log entries are capped","line":"The matcher used for `PostToolUse` hooks now also covers `PostToolBatch`, and refused-request log entries are recorded once per day","released_at":"2026-10-01 16:59:25","reason":"found in this entry's text, named in this entry"}],"entries_total":49,"docs":[{"source":"claude-code","path":"hooks","title":"Hooks reference","documented":true},{"source":"claude-code","path":"agent-sdk\/hooks","title":"Intercept and control agent behavior with hooks","documented":true},{"source":"api","path":"managed-agents\/migration","title":"migration","documented":false},{"source":"claude-code","path":"agent-sdk\/agent-loop","title":"How the agent loop works","documented":false},{"source":"claude-code","path":"agent-sdk\/modifying-system-prompts","title":"Modifying system prompts","documented":false},{"source":"claude-code","path":"agent-sdk\/python","title":"Agent SDK reference - Python","documented":false},{"source":"claude-code","path":"agent-sdk\/typescript","title":"Agent SDK reference - TypeScript","documented":false},{"source":"claude-code","path":"changelog","title":"Claude Code changelog","documented":false},{"source":"claude-code","path":"claude-apps-gateway-config","title":"Claude apps gateway configuration","documented":false},{"source":"claude-code","path":"claude-directory","title":"Explore the .claude directory","documented":false}],"docs_total":14,"gates":[],"related":[],"url":"https:\/\/changelogs.core-directive.com\/reference\/hook\/posttooluse","family_url":"https:\/\/changelogs.core-directive.com\/reference\/hook.json"}