Sweep 19 Sep 2026 · 02:36Z Build v2.1.278 500 read Stable v2.1.267 Latest v2.1.278 Next v2.1.278 Feeds RSS JSON llms.txt Unofficial
Claude Code v2.1.273 ·

Stricter safety checks for declare, typeset, local, export, readonly, and unset commands

Claude Code now catches more shell commands that could be reinterpreted unsafely by the real shell before running them

TierYou'll noticehow much it should matter to you
Useful1my rating, 1 to 5
Signal1worth watching, 1 to 5
AreaBash Safetywhat it touches
KindImprovementsin v2.1.273,
Group of 5 You'll notice

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, and local commands 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.
  • export and readonly commands are now also rejected when their operand looks like an array assignment (matching flag patterns the shell would evaluate as a compound array assignment).
  • unset no 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 differential flag, 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.

Read from
Names in the bundledeclaretypesetlocal
Since it was published

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.

Confirmed since Anthropic's documentation has since written up declare, on Configuration reference. When set, Cowork, Chat and Code sessions connect the managed list above and the servers the desktop serves from the administrator's org-plugins directory, plus only servers declared by other plugins (user-installed or marketplace) that mat… third-party/claude-desktop/configuration see the edit
Added since A small documentation edit on Hooks reference touched a line naming declare after this was published. [Cloud sessions](/docs/en/claude-code-on-the-web) don't read your local `~/.claude/settings.json`; hooks there come from the repo, meaning its `.claude/settings.json` in a session with one repository and the plugins it declares in any sess… hooks see the edit
Confirmed since Anthropic's documentation has since written up local, on All settings. | [`syncClaudeAiPlugins`](#syncclaudeaiplugins) | Stop loading the [plugins enabled on your claude.ai account](/docs/en/plugins-reference#synced-plugins) and stop downloading new ones | Plugins and skills | User, local, or managed | settings-reference see the edit
Added since A small documentation edit on Deploy managed settings touched a line naming local after this was published. * [`useAutoModeDuringPlan`](/docs/en/settings-reference#useautomodeduringplan), [`syncClaudeAiSkills`](/docs/en/settings-reference#syncclaudeaiskills), and [`syncClaudeAiPlugins`](/docs/en/settings-reference#syncclaudeaiplugins), where a `… managed-settings see the edit
How sure we are
One source agreesOne thing we can check says the same as this entry.
Anthropic's documentation agreesA small documentation edit on Deploy managed settings touched a line naming local after this was published.

See this entry in the whole of v2.1.273 →