Before Claude Code runs a shell command, it reads the command to check it against your permission rules, which say what may run without asking. Before, it handled case statements (a shell way of choosing between options) with a simple count of where each one started and ended.
It now tracks the pattern groups inside case statements more closely. When it meets one of these unclear constructs, it treats the whole command as one it cannot read:
- patterns that start with
( - the
;|separator - heredocs (blocks of inline text) inside a pattern
- arrays inside a pattern
A command Claude Code cannot read asks for your approval instead of running automatically.
This makes it harder for a cleverly written command to slip past your permission rules. You may be asked to approve some commands that used to run without asking.