What's new
Parallel hook execution (Claude Code behavior)
- All matching hooks now run in parallel via
Promise.allSettled - Identical handlers deduplicated by
command+argsacross groups - Deny-wins: one
deny/exit-2 blocks regardless ofallowfrom others stopProcessingwins over deny;updatedInputmerges in config orderadditionalContextconcatenated in config order (deterministic)- PostToolUse patches: first non-undefined
content/details/isErrorwins - Single-hook calls skip
allSettledoverhead
updatedToolOutput field (PostToolUse)
extractToolResultPatchnow reads Claude Code's actualupdatedToolOutputfield as the highest-prioritycontentsource- Above legacy
updatedToolResult.contentandupdatedMCPToolOutput - This was effectively a bug fix — hooks using the documented Claude field were silently ignored before
Type cleanup
CommonHookOutputnamed type (replacesReturnType<typeof>usage)CollectedHook/HookExecResultnamed types for parallel helpers
Full Changelog: v0.0.3...v0.0.4