Source Intelligence

DisclaimerUnofficial, and not affiliated with Anthropic. Nearly all of this is read straight out of what ships: npm bundles, captured prompts, published docs. Anthropic's own notes go in verbatim, marked as theirs. The rest is my reading, and every entry carries the strings behind it. If one looks wrong, vote it down and say why.

All of v2.1.236 Home All releases olderv2.1.235 v2.1.237newer
Claude Code v2.1.236

Plugin and skill sync abort when the sync directory has been tampered with

You'll notice
Useful2 Signal2
Elsewhere

Sync aborts with a clear message if anything in the sync path looks tampered with.

What

Before writing, sync now checks every path component from the config home down to the sync root and its staging and staging_pid folders, and aborts the whole round if any of them is a symlink or not a directory. Failures show up as "sync root refused (a symlink or stray file is in the way, or it was removed mid-round)" instead of silently writing through.

Details
  • The root is re-verified partway through each round, when files are landed.
  • Replacing an existing plugin directory now moves the old one aside, either renaming it to a .replaced-<pid>-<rand> directory or moving it to a trash directory under the config home, and restores it if the replacement fails.
  • New warning telemetry: plugins_sync_root_refused, skills_sync_root_refused, plugins_sync_trash_move_failed, plugins_sync_promotion_failed, skills_sync_manifest_unreadable.
  • No flag guards this; it is the sync path for everyone on this build.
Evidence

sync root refused (a symlink or stray file is in the way, or it was removed mid-round)

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

See this entry in the whole of v2.1.236 →