What
Plugin hooks run in a sandbox, a walled-off space kept apart from Claude Code itself. Values passing out of that space were passed through vmClone only. They are now copied and checked first.
- Copying: values leaving the plugin environment are copied and frozen so they can't be changed afterwards. Records, arrays, maps, errors and other values are walked and copied.
- Refused values: functions, Proxies and unknown kinds are refused. Arguments that are not plain data are rejected with a message of the form "not plain data".
- Switch: copying is skipped when the host option
isLeavingUncopiedis set. That option is turned on when a separate internal check returns false, which suggests the change is being rolled out in stages.
Why
This hardens the boundary between plugins and Claude Code. Plugin authors should watch for it: a hook that returns functions or other non-plain values may now have them refused.
Something disagreesSomething we can check disagrees with this entry, or the writer said they could not settle it.
The writer flagged doubt
It is not clear what sets the option that lets values leave the sandbox uncopied.