`claude plugin enable|disable --scope project` rewrites .claude/settings.json and empties `footerLinksRegexes`

Status Open
Reported on v2.1.261
Maintainer reply None cached
Activity 0 comments · opened Sep 8, 2026

Version: Claude Code 2.1.261, macOS (Darwin 27.0.0)

What happens

Running claude plugin enable <plugin> or claude plugin disable <plugin> with --scope project (or with no scope when the plugin is installed at project scope) rewrites the whole .claude/settings.json:

  1. Keys are reordered (statusLine, subagentStatusLine, enabledPlugins, footerLinksRegexes move to the end).
  2. footerLinksRegexes is replaced with an empty array [] every time, whatever it contained. Tested with ["graft/[\\w./-]+\\.md"] and with the trivial ["graft/.*"]; both come back as [].
  3. Unknown top-level keys survive (a probe key "zzzProbe": 1 was kept), so this is specific to footerLinksRegexes, not a general schema strip.

Expected

Only enabledPlugins should change. Other keys and their order should be left as they were.

Repro

mkdir repro && cd repro && git init -q
mkdir .claude
cat > .claude/settings.json <<'EOF'
{
  "footerLinksRegexes": ["graft/.*"],
  "enabledPlugins": {}
}
EOF
claude plugin enable superpowers@claude-plugins-official --scope project
cat .claude/settings.json   # footerLinksRegexes is now []

Impact

The footerLinksRegexes entry is written by the @nanonets/graft tool's graft init to make its footer links clickable. Any plugin toggle silently removes it in a checked-in file, so the breakage lands in the repo unnoticed unless someone diffs settings after a plugin command.

View original on GitHub ↗