Claude Code now catches more shell commands that could be reinterpreted unsafely by the real shell before running them
What
When Claude Code decides whether a shell command is simple enough to run without invoking the full shell, it now rejects more edge cases that could behave differently than expected:
declare,typeset, andlocalcommands are rejected as too complex unless their operand is a plain variable name with a simple, inert value, since the real shell could otherwise treat it as an array subscript, an expanded name, or a compound assignment.exportandreadonlycommands are now also rejected when their operand looks like an array assignment (matching flag patterns the shell would evaluate as a compound array assignment).unsetno longer just checks for a bare variable name; it also allows a second, more permissive pattern under certain conditions, but anything that still doesn't match either pattern is now rejected as too complex, since the shell might expand or evaluate it unexpectedly.- These rejections are now marked internally with a
differentialflag, replacing a fixed classification that was previously used for these cases.
Why
These checks exist to stop Claude Code from treating a shell command as "simple" when the real shell could actually parse or evaluate it in a surprising way (for example, expanding into an array assignment). Tightening them reduces the chance that a command behaves differently than Claude Code's analysis assumed.
The entry above is what we published on the day. These lines were added later, as Anthropic's own pages caught up, and they sit beside the original rather than replacing it.
| Startup exits with `Administrator policy requires a Cloud gateway sign-in on this machine` | The developer's environment sets `ANTHROPIC_API_KEY` or `ANTHROPIC_AUTH_TOKEN`, their settings configure an [`apiKeyHelper`](/docs/en/settings-r…claude-apps-gateway-deploy see the edit
Turn off the download of the [skills enabled for your claude.ai account](/docs/en/skills#how-synced-skills-behave). Claude Code downloads them into `~/.claude/skills/synced/` in [terminal sessions where you sign in with your claude.ai acco…settings-reference see the edit
Anthropic's documentation has since written up unset, on All settings.