Description
A custom subagent with permissionMode: bypassPermissions in its frontmatter is denied Read and Bash access to files outside the project root (specifically ~/.claude/plans/). Both tools are listed in the subagent's tools field.
The subagent runs as a background agent (background: true). The permission denial is silent — the subagent sees both tool calls denied and asks for permission, but background agents auto-deny unresolved prompts, so the subagent fails.
Subagent config
---
name: code-modifier
tools: Read, Glob, Grep, Edit, Write, Bash
permissionMode: bypassPermissions
maxTurns: 250
background: true
skills:
- build
---
Location: ~/.claude/agents/code-modifier.md
Steps to reproduce
- Create a subagent with the config above
- In the parent conversation, dispatch the subagent with a prompt that references a file at
~/.claude/plans/some-plan.md
- The subagent attempts
Read on that path → denied
- The subagent attempts
Bash with cat on that path → denied
- The subagent asks for permission but as a background agent, the prompt auto-denies
Expected behavior
permissionMode: bypassPermissions should skip all permission checks per the docs: "Skip all permission checks."
Actual behavior
Both Read and Bash are denied for paths outside the project root (~/.claude/plans/ in this case), despite bypassPermissions.
Evidence
Subagent transcript (abbreviated):
ASSISTANT: Let me start by reading the plan file.
TOOL CALL: Read {"file_path": "/Users/.../plans/selectstart-selection-guard.md"}
TOOL CALL: Bash {"command": "cat ~/.claude/plans/selectstart-selection-guard.md"}
ASSISTANT: I need permission to read the plan file. Both the Read tool and Bash tool were denied.
Environment
- Claude Code version: latest (Feb 2026)
- macOS (Darwin 25.3.0)
- Subagent scope: user-level (
~/.claude/agents/)
🤖 Generated with Claude Code
Description
A custom subagent with
permissionMode: bypassPermissionsin its frontmatter is deniedReadandBashaccess to files outside the project root (specifically~/.claude/plans/). Both tools are listed in the subagent'stoolsfield.The subagent runs as a background agent (
background: true). The permission denial is silent — the subagent sees both tool calls denied and asks for permission, but background agents auto-deny unresolved prompts, so the subagent fails.Subagent config
Location:
~/.claude/agents/code-modifier.mdSteps to reproduce
~/.claude/plans/some-plan.mdReadon that path → deniedBashwithcaton that path → deniedExpected behavior
permissionMode: bypassPermissionsshould skip all permission checks per the docs: "Skip all permission checks."Actual behavior
Both
ReadandBashare denied for paths outside the project root (~/.claude/plans/in this case), despitebypassPermissions.Evidence
Subagent transcript (abbreviated):
Environment
~/.claude/agents/)🤖 Generated with Claude Code