What
Before Claude runs a shell command, Claude Code checks it against your permission rules, the allow and deny lists that decide what runs without asking. A wrapper is a command such as time or nohup placed in front of the real command. How these checks treat wrappers and some shell variables has changed:
- Wrapper stripping now understands
time -p. Before, onlytime,nohupand a following--were removed. - If a wrapper such as
nohuportimeis followed by an option Claude Code doesn't recognise, the command is left unchanged rather than guessed at. timeandnohupnow refuse a wrapped command whose name is not a plain word.- Command names are normalised (put into a standard form) before rule matching, and that normalised form is also tried against your rules.
- A new check strips a leading
time(includingtime --) and runs the permission-rule match again, so a rule forgit statuscould also matchtime git status. This check only applies when the remote flagtengu_wild_octopusis on. Nothing has been read about that flag. - The tracker that follows shell variables now gives up (treats the command as too complex) on an unset or an appended variable when the command contains an expansion that can fail while running, because whether the name is cleared cannot be checked in advance. Variable assignments placed in front of a command after such an expansion are checked too.
Why
These changes affect which part of a command your permission rules see as the real command. In practice, fewer unusual compound commands are approved automatically, so you may see more permission prompts for them.