{"version":"2.1.319","anchor":"bash-parser-tracks-variable-assignments-and-zsh-math-guard","canonical_anchor":"bash-parser-tracks-variable-assignments-and-zsh-math-guard","heading":"Bash parser adds zsh arithmetic guard and tracks variable assignments","tier":"notice","area":"Bash Safety","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.319\/e\/bash-parser-tracks-variable-assignments-and-zsh-math-guard","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.319","markdown":"### Bash parser adds zsh arithmetic guard and tracks variable assignments\n\nThe parser behind Bash permission checks now guards zsh arithmetic, tracks variable assignments, and compaction gains a hand-over-at-stop step\n\n**Unclear.** It is not stated whether these changes make any shell commands ask for permission more or less often.\n\n**What**\n\nBefore Claude Code runs a shell command, it parses the command (breaks it into its parts) to decide whether it is safe or needs your permission. That parser changes in this release:\n\n- `zshMathGuard`: when it is set, the parser handles `#` followed by `$`, and flags a `((` sequence as `zshMathDiff`. This is about zsh arithmetic, which zsh can read differently from bash.\n\n- Variable assignments: the parser now collects nested `variable_assignment` parts of a command into an assignments list.\n\n- `for` loops: the parser tracks the head of a `for` loop. What happens when parsing fails for `$(( ))` and `for (( ))` also changes.\n\nSeparately, compaction (summarizing a conversation to free up space) gains `handOverAtStop` when `keepThroughStop` is set.\n\n**Why**\n\nThese parts feed the Bash permission check, so commands that use zsh arithmetic or variable assignments may be judged differently than before.\n\n- Area: Bash Safety\n- Tier: You'll notice\n- Useful: 1\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}