Claude Code Settings Checker (Free): Lint settings.json Permission Rules

Find out why a Claude Code permission rule isn't working, before you lose an afternoon to it.

Claude Code Settings Checker (Free): Lint settings.json Permission Rules product illustration

What it does

Find out why a Claude Code permission rule isn't working, before you burn an afternoon on it. cc_lint.py reads your settings.json, settings.local.json or managed-settings.json and flags the mistakes Claude Code silently accepts: rules that never match, rules that are skipped at load time, allow rules a deny rule always beats, typos in keys and modes, and paths anchored in the wrong place.

Offline. Python 3.9+, no dependencies, no account, no network.

60-second demo

python3 tools/cc_lint.py examples/broken-settings.json      # see every check fire
python3 tools/cc_lint.py .claude/settings.json              # your project file
python3 tools/cc_lint.py --project .                        # user + project + local (+ managed) together

Exit code 0 = no errors, 1 = errors (add --strict to fail on warnings), so it drops into CI (examples/github-workflow.yml). --json gives machine-readable output, --quiet hides tips.

What it checks

CheckExample it catches
Invalid JSON, with a hint for comments/trailing commas["Bash(ls *)",]
Unknown top-level, permissions and sandbox keys, with "did you mean""modle", "allowedTools", "enable"
Invalid defaultMode"acceptEdit" (valid: default/manual, acceptEdits, plan, auto, dontAsk, bypassPermissions)
Rules that are accepted but never matchWrite(docs/**), Grep(src/**) (file checks use Edit(...) / Read(...))
Rules Claude Code skips or ignoresmcp__github(create_issue), Bash(command:rm *), unanchored allow globs like mcp__*
Misplaced :*Bash(git:* push) (the colon is literal mid-pattern)
Over-broad allow rulesBash, Bash(git *), Bash(* --version), URL-constrained curl rules
Allow rules a deny/ask rule always beatsallow Bash(aws s3 ls) + deny Bash(aws *)
Path anchorsRead(/Users/alice/.ssh/**) (single / = settings root; use //), /path in user settings resolves under ~/.claude/
WebFetch syntaxWebFetch(https://x.com/a) -> WebFetch(domain:x.com)
Risky modes in repository settings"defaultMode": "bypassPermissions" in .claude/settings.json
Cross-scope conflicts (--project)allowed in settings.local.json but denied in settings.json (deny wins)
Missing secret protection (tip)no Read(.env) / Read(~/.ssh/**) deny rule

Rules are checked against the Claude Code permissions and settings reference (code.claude.com/docs, November 2026). The key list in tools/cc_keys.json comes from the settings reference; update it if a newer Claude Code adds keys.

Honest limits

  • It checks the rules you wrote. It can't see session rules, CLI flags, mods or hooks that also decide permissions.
  • Bash rules match command text, not programs: no linter can make Bash(curl *) a security boundary. Use the sandbox for that.
  • Not affiliated with Anthropic.

Format and license

Zip, 19 KB, v1.0, 12 files. Free to use, modify and share for any purpose, including commercial work, as long as this notice stays in copies. Not affiliated with Anthropic.

FAQ

Is it really free?
Yes. Download the zip, no account or API key needed.
Does it read my user and local settings too?
With --project . it lints ~/.claude/settings.json, .claude/settings.json, .claude/settings.local.json and managed-settings.json (if present) and flags conflicts between them.
Can I use it in CI?
Yes: it exits 1 on errors, --strict fails on warnings, --json gives machine output; a GitHub Actions workflow is included.
How do I get the files?
Click Download free. The zip downloads straight away: no checkout, no account.
Do I have to sign up for the newsletter?
No. The form is optional and the download works without it.

Get Claude Code Settings Checker (Free): Lint settings.json Permission Rules

Free Claude Code settings.json checker: find allow/deny rules that never match, over-broad Bash rules, bad defaultMode, typo'd keys and scope conflicts. Offline.

Pairs well with

Download$19

Claude Code Safety Hooks

Tested Claude Code hooks as a plugin: block rm -rf and force-push to main, protect .env and lockfiles, catch API keys in files, audit log. $19 once.

View Claude Code Safety Hooks

Related

1 email a week: new x402 + MCP tools and free kits.

Short weekly digest of new x402 + MCP tools and free kits, including the MCP OAuth Checker. The download above works without signing up. No spam, unsubscribe any time.