You set up Claude Code, you're in flow, and then: "Allow Bash(git diff)?" You click allow. Thirty seconds later: "Allow Bash(git log)?" Allow. Then the same slash command you already approved yesterday asks again. At some point you're tempted to reach for --dangerously-skip-permissions and be done with it.

Don't. Permission fatigue isn't fixed by surrendering — it's fixed by understanding the three specific reasons Claude Code prompts you, and configuring each one away. That takes about ten minutes, and this article is the complete walkthrough: the permission model, a documented trap inside slash commands that keeps prompting even when you've allowed everything, a copy-paste settings.json, and the case where a hook is safer than a broader allow.

In a previous article I showed the slash commands, subagent, and hooks I install in every repo. This is the deep-dive on the part of that setup that generates the most questions.

Unofficial, community-made. Not affiliated with or endorsed by Anthropic. "Claude" and "Claude Code" are trademarks of Anthropic. This is independent config for Claude Code, not a product of Anthropic.

Everything below was verified by actually running it on Claude Code v2.1.x (July 2026). The tool ships fast — if you're reading this much later, double-check the details against the current docs.