Claude Code CLI ignores settings.json permissions when running inside VSCode terminal
Bug Description
Claude Code CLI ignores settings.json permissions configuration when running inside VSCode integrated terminal, but respects them correctly when running in native macOS Terminal.
The Write tool (and other tools in allow list) prompt for permission despite being explicitly allowed in ~/.claude/settings.json.
Environment
- OS: macOS 15.6 (24G84)
- Claude Code CLI: v2.0.19
- Architecture: arm64
- Terminal: Visual Studio Code 1.105.0 integrated terminal
Root Cause
Claude Code CLI detects VSCode environment via TERM_PROGRAM=vscode environment variable and changes permission behavior:
$ env | grep -E '(TERM_PROGRAM|VSCODE)'
TERM_PROGRAM=vscode
TERM_PROGRAM_VERSION=1.105.0
VSCODE_INJECTION=1
VSCODE_GIT_ASKPASS_MAIN=/Applications/Visual Studio Code.app/...
VSCODE_GIT_IPC_HANDLE=/var/folders/.../vscode-git-....sock
# ... other VSCODE_* variables
Steps to Reproduce
- Configure
~/.claude/settings.json:
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [
"Edit",
"Write",
"Read",
"Grep",
"Glob"
],
"deny": [],
"defaultMode": "default"
}
}
- Test in native macOS Terminal:
``bash``
claude
# Request Write operation
# ✅ Works without prompt
- Test in VSCode integrated terminal:
``bash``
claude
# Request Write operation
# ❌ Prompts for permission despite being in allow list
Expected Behavior
Claude Code CLI should respect settings.json permissions consistently across all terminal environments.
Actual Behavior
- ✅ Native Terminal: Permissions from
settings.jsonwork correctly - ❌ VSCode Terminal: Permissions ignored, prompts for everything
Verification
- ✅ Schema validation passes (no diagnostics errors)
- ✅ JSON structure is valid
- ✅ Same
settings.jsonfile used in both environments - ✅ Same Claude Code CLI version (2.0.19)
- ✅ Only difference:
TERM_PROGRAM=vscodeenvironment variable
Impact
Users running Claude Code CLI in VSCode integrated terminal cannot use settings.json to configure permissions, forcing manual approval for every operation despite proper configuration.
Workaround
Run Claude Code CLI in native terminal (Terminal.app, iTerm2, etc.) instead of VSCode integrated terminal.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗