`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:
- Keys are reordered (
statusLine,subagentStatusLine,enabledPlugins,footerLinksRegexesmove to the end). footerLinksRegexesis replaced with an empty array[]every time, whatever it contained. Tested with["graft/[\\w./-]+\\.md"]and with the trivial["graft/.*"]; both come back as[].- Unknown top-level keys survive (a probe key
"zzzProbe": 1was kept), so this is specific tofooterLinksRegexes, 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.