Under the hood
Plugin hooks now receive a deep copy of the event payload for UI and registration events, not the original
What
For a fixed list of plugin events, ui.open, ui.toast, ui.status, ui.log, ui.notice, ui.ask, tool.register, command.register, agent.register, prompt.fill, and prompt.suggest, Claude Code now passes hooks a deep copy of the event's data instead of the original object, before any hook has a chance to see or change it.
Why
This stops a plugin hook from being able to mutate the original event data that Claude Code itself still relies on, isolating hook side effects to their own copy for these UI and registration events.