Skip to content

chore: .claude/settings.local.json is tracked in git — personal local settings with machine-specific paths and a broad home-read allow #370

Closed

Description

@dezren39

Problem

.claude/settings.local.json is tracked in git. By name and by Claude Code convention it is the local (personal, per-machine) settings file — the shared project file is settings.json. This is the only file under .claude/ in the repo, and .gitignore does not cover it (git check-ignore .claude/settings.local.json reports NOT-IGNORED; verified on main 2b0c539b).

Evidence (main 2b0c539b)

  • git ls-files .claude/ returns exactly one file: .claude/settings.local.json (917 bytes).
  • Its contents are one machine's personal permission allowlist, e.g.:
    • Read(//home/user/**) — a blanket read of another home directory
    • Read(//home/user/.claude/**), Read(//home/user/.config/openchamber/**), Read(//tmp/cc-extract/package/dist/**)
    • One-off Bash(...) allows naming files from a different checkout layout (home/common/default.nix, nixos/services/cloudflared/default.nix)
  • .gitignore ignores the analogous local override .env.local (line 104) but has no entry for .claude/settings.local.json.

Every clone therefore inherits a personal allowlist that (a) does nothing useful on any other machine (the /home/user/... paths are not this repo's layout), and (b) normalizes committing local agent settings — the next person's settings.local.json may carry broader or more sensitive allows.

Why it matters

Local settings files are the agent-tooling equivalent of .env.local: personal, machine-specific, and a standing invitation to leak local paths/permissions into a shared repo. The repo already untracked the same class of artifact in .opencode/ (#367, filed-only) and pkgs/launcher's binary (#353); this is the remaining *.local.* settings file still tracked.

Acceptance criteria

  • .claude/settings.local.json is no longer tracked (git ls-files .claude/ is empty, or only a deliberate shared settings.json remains).
  • .gitignore gains .claude/settings.local.json so it cannot be re-committed accidentally (git check-ignore matches).
  • If any of the allows are genuinely meant to be shared project permissions, they are moved to a new .claude/settings.json with repo-relative paths instead of /home/user/... absolutes; otherwise no replacement is needed.
  • No other file changes; the local file may remain on disk for its owner (untrack, do not necessarily delete content from history — history rewrite is out of scope).

Suggested fix

git rm --cached .claude/settings.local.json (or delete in the PR if the content is not needed) plus one .gitignore line — a small, low-risk change in the same class as #353/#355/#363.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions