Description
When making Read/Write/Edit tool calls with absolute paths (e.g., /Users/james/github/...), Claude Code appears to convert them to tilde paths (~/github/...) somewhere in the pipeline. This breaks permission matching when permissions are defined with absolute paths.
Steps to Reproduce
- Configure
~/.claude/settings.json with absolute path permissions:
{
"permissions": {
"allow": [
"Read(/Users/james/**)",
"Write(/Users/james/github/**)",
"Edit(/Users/james/github/**)"
]
}
}
- In a Claude Code session, Claude makes a tool call like:
Read(file_path="/Users/james/github/solutions-projects/CLAUDE.md")
- The UI displays the call as:
⏺ Read(~/github/solutions-projects/CLAUDE.md)
- Permission prompt appears even though the absolute path should match
Read(/Users/james/**)
Expected Behavior
- Absolute paths in tool calls should remain absolute for permission matching
Read(/Users/james/github/file.md) should match Read(/Users/james/**) permission
Actual Behavior
- Paths appear to be normalized to tilde form (
~/...)
~/github/file.md does not match Read(/Users/james/**) pattern
- Permission prompts appear despite having appropriate permissions configured
Environment
- Claude Code version: 2.1.1
- OS: macOS (Darwin 24.6.0)
- Shell: zsh
Related Issues
Workaround
Currently none known. Adding both tilde and absolute path versions to permissions doesn't help if the conversion happens after the tool call is made but before permission checking.
Additional Context
This issue manifests alongside the "allow reading from X from this project" prompts, which appear to be a separate project-scoped permission layer. The combination of tilde conversion and project-scoped permissions makes it very difficult to configure Claude Code for autonomous operation without permission prompts.
Description
When making Read/Write/Edit tool calls with absolute paths (e.g.,
/Users/james/github/...), Claude Code appears to convert them to tilde paths (~/github/...) somewhere in the pipeline. This breaks permission matching when permissions are defined with absolute paths.Steps to Reproduce
~/.claude/settings.jsonwith absolute path permissions:{ "permissions": { "allow": [ "Read(/Users/james/**)", "Write(/Users/james/github/**)", "Edit(/Users/james/github/**)" ] } }Read(/Users/james/**)Expected Behavior
Read(/Users/james/github/file.md)should matchRead(/Users/james/**)permissionActual Behavior
~/...)~/github/file.mddoes not matchRead(/Users/james/**)patternEnvironment
Related Issues
Workaround
Currently none known. Adding both tilde and absolute path versions to permissions doesn't help if the conversion happens after the tool call is made but before permission checking.
Additional Context
This issue manifests alongside the "allow reading from X from this project" prompts, which appear to be a separate project-scoped permission layer. The combination of tilde conversion and project-scoped permissions makes it very difficult to configure Claude Code for autonomous operation without permission prompts.