~/blog/tag/permissions
Permissions
What the agent is allowed to do, which of those rules actually hold, and the difference between a boundary and a suggestion.
What I write about here
Permissions are where the gap between what you configured and what is actually enforced shows up fastest.
The recurring finding across these posts is that the two halves behave differently. A rule that takes capability away tends to bind immediately and everywhere. A rule that hands capability over waits for something: a dialog someone has to accept, a workspace someone has to trust, a mode that is not active in the session you happen to be in. Write both into the same file and only one of them is doing what you think.
The second recurring finding is that a permission boundary is usually thinner than its name suggests. A denied path can still surface in the output of a shell command that lists it. An approval given inside a throwaway workspace can outlive the workspace. A file that keeps local overrides out of git turns out to be excluded by a global ignore rule that the repository never records, so a hand-created one has no protection at all.
None of this is an argument against configuring permissions. It is an argument for knowing which of your rules are load-bearing. The ones that restrict, plus a hook, are the two things that hold on their own.
The wider picture of what you hand over when you give an agent tools is in the MCP and security guide.
best entry points
- Claude Code permissions: the guide I wish the docs were
The guide the documentation never quite wrote. Every rule type, how they combine, and which scope wins when two disagree.
- Sandboxing Claude Code: put your agent in a box that holds
One layer down. What a sandbox contains, what it deliberately does not, and why the affordance that makes it useful is the hole.
- Sharing Claude Code config across a team: what a repo can and cannot enforce
Permissions with colleagues involved. A repo can restrict everyone from the first clone and can only propose anything that grants.
CI runner security when an agent writes your workflow
Self-hosting your forge and your runner is a defensible call in 2026. Nobody writes the CI runner security guide for the platform you moved to, and an agent permission model built around a dialog does not survive the trip into a pipeline.
read →Sharing Claude Code config across a team: what a repo can and cannot enforce
How to share Claude Code config with your team: what belongs in CLAUDE.md versus .claude/settings.json, what a colleague can quietly override on their own machine, and why committed allow rules do nothing until each developer accepts a dialog.
Claude Code cross-session messaging: how to make your sessions talk to each other
Cross-session messaging lets one Claude Code session send a message to another. How to use it, what a message can and cannot do once it arrives, and the settings that decide whether it gets delivered at all.
Claude Code plan mode: decide before the agent writes
How plan mode works in Claude Code: the plan file on disk, the five phases you never see, and the places where read-only turns out to be a suggestion.
Sandboxing Claude Code: put your agent in a box that holds
How to sandbox Claude Code: the built-in /sandbox, the sandbox runtime, dev containers and VMs compared, and why permission prompts are consent, not containment.
Claude Code permissions: the guide I wish the docs were
How Claude Code permissions actually work: modes, allow and deny rules, hooks and the sandbox as one mental model, plus the settings.json I run.