[BUG] Startup workspace-trust dialog does not warn about hooks in .claude/settings.json, while the /cd dialog does
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The two trust dialogs disclose different things for the same directory.
Starting claude inside an untrusted directory whose .claude/settings.json defines aPreToolUse command hook shows (2.1.270, verbatim):
Accessing workspace:
/Users/flo/claude-poc-sandbox/parent/sub
Quick safety check: Is this a project you created or one you trust? (Like your
own code, a well-known open source project, or work from your team). If not,
take a moment to review what's in this folder first.
Claude Code'll be able to read, edit, and execute files here.
Security guide
❯ No, exit
Yes, I trust this folder
No mention of hooks. Using /cd into the very same directory from a trusted session shows:
Moving to a new directory:
/Users/flo/claude-poc-sandbox/parent/sub
This session hasn't worked here before. Is this a directory you created or one you trust?
Claude Code'll be able to read, edit, and execute files here.
⚠ This directory configures hooks that run commands, declared in .claude/settings.json
These will apply to this session as soon as you move. Only proceed if you trust this configuration.
❯ No, stay put
Yes, move here
The startup dialog already inspects the settings file for pre-approved permissions (see #87012,
"This folder pre-approves 35 tool permissions in .claude/settings.local.json"), so the hook check
that /cd performs should be cheap to add there. Hooks are the more consequential of the two:
they run commands on the first tool call regardless of what the user later approves.
What Should Happen?
The startup trust dialog should carry the same hook warning as the /cd dialog, naming the file
and ideally the event types and commands, e.g.:
⚠ This folder configures hooks that run commands, declared in .claude/settings.json
PreToolUse: /Users/flo/claude-poc-sandbox/fire.sh SUB_HOOK
These will run as soon as you start using tools. Only proceed if you trust this configuration.
Error Messages/Logs
n/a (dialog text above)
Steps to Reproduce
- Create an untrusted repo with a command hook:
``sh`
mkdir -p /tmp/hookrepo/.claude && cd /tmp/hookrepo && git init -q
cat > .claude/settings.json <<'JSON'
{"hooks":{"PreToolUse":[{"matcher":"","hooks":[{"type":"command","command":"touch /tmp/hookrepo/HOOK_FIRED"}]}]}}
JSON
~/.claude.json
Make sure has no projects["/tmp/hookrepo"]` entry.
cd /tmp/hookrepo && claude→ dialog shown without any hook warning. Choose "No, exit".cd /tmp && claude, trust/tmpif asked, then/cd /tmp/hookrepo→ dialog shown with
the hook warning.
- Accept in step 3, ask Claude to run
ls, observe/tmp/hookrepo/HOOK_FIREDexists.
(Same would happen after accepting in step 2, without having been told.)
Claude Model
Other
Is this a regression?
I don't know
Last Working Version
n/a
Claude Code Version
2.1.270
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
iTerm2
Additional Information
- Related: #87012 (same dialog, truncated permissions list), #92911 (trust prompt suppressed,
hooks silently disabled), #67319 (VS Code never shows the dialog).
- The
/cddialog's behavior is good and not documented; the docs for/cd(v2.1.246 notes)
say settings are re-read but not that trust is re-evaluated. Worth a line in the docs.