Everything in Claude Code that is configured correctly and does nothing
The expensive part of .claude/ configuration is that a mistake does not
appear on screen.
The JSON is valid. The keys are spelled right. Startup prints no warning and
--debug says nothing.
It just doesn't work.
Below is everything the official documentation states outright — as ignored, as skipped, or as having no effect — counted and collected. Nothing is inferred.
The counts
| Where | How many | What happens |
|---|---|---|
Hook matcher |
10 of 33 events | The matcher is silently ignored, so the hook runs every time |
Hook if |
Evaluated on 5 events | Written anywhere else, that handler never runs at all |
| Settings key scope | 71 of 223 keys | Depending on which file, the key does nothing |
| Deprecated settings keys | 4 | One of them inverts the boolean |
| Permission rules | 5 forms | They load, and then do nothing |
| Subagent files | 5 conditions | The file is skipped and the session says nothing |
.mcp.json |
2 places | A url with no type is read as stdio and skipped; timeout: 500 becomes about 28 hours |
What they share is that the failure never comes back to you. With nothing returned, no amount of local experimenting reaches the answer.
Hooks
Ten events silently discard a matcher. Not an error. You narrowed it, and
it runs every time anyway.
CwdChanged UserPromptSubmit PostToolBatch Stop TeammateIdle
TaskCreated TaskCompleted WorktreeCreate WorktreeRemove MessageDisplay
if fails the other way. It is evaluated on the five tool-related events
only.
PreToolUse PostToolUse PostToolUseFailure PermissionRequest PermissionDenied
On any other event, a handler with an if never runs. matcher errs
toward too wide, if toward not at all. Both quietly.
The table of all 33 events is here.
https://quintetkit.github.io/en/reference/claude-code-hooks.html
Settings keys
A settings key applies only from certain files.
| Scope | Count | Applies from |
|---|---|---|
Managed |
39 | Managed settings an organisation deploys |
User or managed |
23 | ~/.claude/settings.json, or managed |
User, local, or managed |
3 | Applies from settings.local.json, not from settings.json |
Global config |
6 | ~/.claude.json only |
| Total | 71 | |
Any file |
152 | Anywhere |
The third row is the awkward one. It works for whoever wrote it in
settings.local.json and stops working when it moves into the shared
settings.json. That is a good way to produce "works on my machine" with no
visible cause.
Nested keys are scoped by their full dotted name. What is restricted is
sandbox.network.strictAllowlist, not sandbox. Inspect only the top level and
you miss all 20 dotted keys, 12 of them sandbox.*.
The full list of 71 is here.
https://quintetkit.github.io/en/reference/claude-code-settings-scope.html
Four deprecated keys
| Written | Replacement |
|---|---|
ignorePatterns |
permissions.deny |
includeCoAuthoredBy |
attribution |
disableArtifact |
enableArtifact |
voiceEnabled |
voice.enabled |
disableArtifact inverts. disableArtifact: false and
enableArtifact: false mean opposite things, so swapping the name alone flips
the setting.
Permission rules
Five ways to write a permissions rule that is not an error and does nothing.
| What you write | What happens |
|---|---|
"*" / "B*" / "mcp__*" in allow |
Skipped; auto-approves nothing |
A path rule on Write / NotebookEdit / Glob / MultiEdit |
Accepted but never consulted |
A parameter rule on a tool's own content field, e.g. Bash(command:...) |
Ignored (nine tools have one) |
An mcp__ rule with parentheses |
Skipped when the file loads |
An allow rule with a * before the rest of the command |
Applies, but allows more than it looks like |
The last one is the dangerous one.
Bash(git log *) → commands starting with git log
Bash(git * main) → every git subcommand. git push origin main, and git -c
Bash(* --version) → every program
git -c makes git run a program you name. One line meant to allow a single
command opens that far.
Details here.
https://quintetkit.github.io/en/reference/claude-code-permission-rules.html
Subagent files
A file in .claude/agents/ with a frontmatter problem is skipped, and
nothing appears in the session. The reason goes to the debug log only.
- No
name - The opening
---is not the first line - A
namestarting with-, or containing: - A
namebut nodescription - YAML that does not parse
The 18 fields, and where cacheTtl belongs (inside experimental), are here.
https://quintetkit.github.io/en/reference/claude-code-subagent-frontmatter.html
.mcp.json
A url with no type does not default to http — it is read as a stdio
server. stdio requires command, so that server is skipped.
And timeout ignores any value below 1000. Once ignored it falls through to
MCP_TOOL_TIMEOUT, and if that is unset, to its default of about 28 hours.
"timeout": 500 // not 500ms. about 28 hours
An attempt to shorten it becomes effectively unlimited.
Required fields per transport, why sse is deprecated, and why approvals
committed to a repository are ignored in an untrusted folder:
https://quintetkit.github.io/en/reference/claude-code-mcp-json.html
Checking all of it
Everything above is mechanically detectable.
npx @quintetkit/ccheck
warn .claude/settings.json:63
`autoMode` applies from user or managed settings only. It has no effect from this file.
why: https://code.claude.com/docs/en/settings-reference
Every finding cites its source. A rule that cannot be cited is not written.
Some things are deliberately not checked.
- Unknown keys — the documentation says the published schema lags the CLI, so this would flag every new feature
- The valid values for
model,color, and similar — either no exhaustive list is documented, or a new value would produce a false finding - Whether a
deny/askrule names a real tool — deciding that needs the current tool list, and a checker holding a snapshot would warn on every tool released after it
One false finding is enough to make the whole output stop being read. What cannot be distinguished is passed in silence, and said to be.
Sources
- https://code.claude.com/docs/en/hooks
- https://code.claude.com/docs/en/settings-reference
- https://code.claude.com/docs/en/permissions
- https://code.claude.com/docs/en/sub-agents
- https://code.claude.com/docs/en/mcp
Every count comes from a snapshot taken 2026-09-04.
The workflow itself is available
Quartet, the four-persona version, is published free under MIT. Quintet adds a UI Designer persona, review criteria, a per-Issue parallel execution script, and a 10-chapter guide.
See the free version Product page