Large permissions allow list in settings.local.json causes startup hang in iTerm2
Resolved 💬 3 comments Opened Feb 25, 2026 by jp63670 Closed Mar 1, 2026
Description
Claude Code hangs indefinitely on startup when the project's .claude/settings.local.json contains a large permissions.allow list (~73 entries). The issue is specific to interactive mode - claude -p and claude doctor still work.
Environment
- Claude Code: Tested on both 2.1.44 (stable) and 2.1.56 (latest)
- Terminal: iTerm2 3.6.6 (hangs) vs Terminal.app (works fine)
- OS: macOS 26.4 (Darwin 25.4.0)
- Node: v25.2.1
- Shell: zsh
Steps to Reproduce
- Have a
.claude/settings.local.jsonwith a largepermissions.allowlist (73 entries in our case) - Some entries contained paths with spaces and various escaping patterns:
- Double-escaped:
Bash(/Volumes/RAID/Options\\\\ Trading\\\\ --\\\\ Zen/venv/bin/pip show:*) - Quoted with spaces:
Bash("/Volumes/RAID/Options Trading -- Zen/venv/bin/python3" scripts/...) - Backslash-escaped:
Bash(/Users/jimperkins/Options\\ Trading\\ --\\ Zen/venv/bin/python3:*)
- Launch
claudein interactive mode from the project directory in iTerm2 - Claude hangs indefinitely - no output, no UI rendered
What works
claude -p "say hello"works (after MCP startup delay)claude doctorworksclaudefrom a different project directory (without the large permissions list) works in iTerm2claudefrom the same directory works in Terminal.app- Removing
permissionsfromsettings.local.json(keeping onlyenv) fixes the hang immediately
Diagnostic Steps Taken
- Confirmed TTY detection correct in iTerm2 (
test -t 0andtest -t 1both pass) - Disabled iTerm2 shell integration - no effect
- Tested with
--strict-mcp-config --mcp-config '{}'- still hung - Removed MCP servers from
.claude.json- still hung - Removed
settings.local.jsonentirely - fixed - Reduced permissions list from 73 to 38 entries (removing stale/escaped paths) - still hung
- Removed permissions block, kept only
env- fixed
Workaround
Remove the permissions block from .claude/settings.local.json. If running with --dangerously-skip-permissions, the allow list is unused anyway.
Notes
- The permissions list accumulated organically over time from approving tool calls
- A cleaned-up 38-entry list (no problematic escaping) also caused hangs, suggesting it may be the list size or specific pattern matching interacting with terminal rendering
- Only affects interactive mode, not print mode or subcommands
- Only reproduces in iTerm2, not Terminal.app
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗