Repository navigation
Stop stowing Claude Code's settings.json - #7
Merged
Merged
Conversation
Tracking that file cost 124 lines across 8 files — a clean filter, a .gitattributes entry, per-clone git config and index state that bootstrap.sh had to install and doctor.sh had to verify — plus a skip-worktree flag that aborts any checkout touching the file. It broke a merge the day it landed. What that bought: five keys that changed four times in five months, four of which Claude Code writes itself (enabledPlugins and extraKnownMarketplaces on plugin install, statusLine from /statusline, hooks from the settings skill). Only permissions.deny was hand-written, and it's eleven lines. The file is app-owned state that happens to contain some config, not config that happens to live in an app's directory — stow is for files we own. Leave it to Claude Code as a plain ~/.claude/settings.json and ignore the package path so an errant `stow --adopt` can't pull it back in. statusline.sh stays stowed: Claude Code only reads it. Reverts the machinery from a268ac8, keeping its **/.claude/.cc-writes/ ignore. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01AEPYeZgMsmFPVBbRvkFtM2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reverts the machinery from #6. Keeps its
**/.claude/.cc-writes/ignore.Why
#6 made
git statusclean, but the price was out of proportion to what tracking that file actually buys.Cost: 124 lines across 8 files — a Python clean filter, a
.gitattributesentry, per-clone git config and per-clone index state thatbootstrap.shhad to install anddoctor.shhad to verify, two CLAUDE.md caveats — plus askip-worktreeflag that aborts anycheckouttouching the file. It broke the merge of #6 itself, the day it landed:Benefit: five keys, changed four times in five months. Four of them Claude Code writes itself —
enabledPluginsandextraKnownMarketplaceson plugin install,statusLinefrom/statusline,hooksfrom the settings skill. Onlypermissions.denywas hand-written, and it's eleven lines.The structural point:
settings.jsonis app-owned state that happens to contain some config, not config that happens to live in an app's directory. Stow is for files we own.What changes
claude/.claude/settings.jsonleaves the stow package;~/.claude/settings.jsonis now a plain file Claude Code owns outright..gitignore, so an errantstow --adoptcan't pull it back in. (Deliberately not in the stowed global ignore — that would hide project-level.claude/settings.jsonin every repo, which is meant to be committed.)claude-settings-clean.py,.gitattributes, and thebootstrap.sh/doctor.sh/lib.sh/CLAUDE.md wiring are gone.claude/.claude/statusline.shstays stowed — Claude Code only reads it.Verification
Live settings preserved through the unstow (all 9 keys,
model: opus)../doctor.shgreen,claudestow package included.shellcheck bootstrap.sh doctor.sh lib.sh macos/*.shclean. Noclaude-settingsgit config orskip-worktreebit left on the clone.🤖 Generated with Claude Code
https://claude.ai/code/session_01AEPYeZgMsmFPVBbRvkFtM2