[BUG] Desktop: rules symlinked from outside the project are still skipped silently on 2.1.284 — the external-imports prompt fixed in #88405 never appears
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code
What's Wrong?
2.1.284 fixed #88405 for the terminal: a rule symlinked into .claude/rules from outside the project now raises the "Allow external CLAUDE.md file imports?" prompt, and after "Yes" it loads.
The Claude Desktop app (Code tab, same Claude Code 2.1.284) never shows that prompt. On first opening such a project it shows only the workspace trust dialog, then starts the session without the external rule. No message, no warning, no entry in the Desktop memory-files panel. Afterwards the project entry in ~/.claude.json reads hasClaudeMdExternalIncludesApproved: false and hasClaudeMdExternalIncludesWarningShown: false, so the approval can never be given from Desktop.
Desktop does honor the approval itself: after answering "Yes" once in a terminal session in the same folder, Desktop sessions there load the external rule.
This is the same gap as #76940 (Desktop silently ignoring an external @-import in CLAUDE.md while honoring the flag). That issue was closed as stale without a response. Since 2.1.284 it also covers the rules directory, and the CLI/Desktop difference is now the only thing left.
Practical impact: teams that share rules through a symlink to a common checkout (we do this across ~50 repositories) silently lose those rules for every Desktop user, unless each person knows to approve each folder once from a terminal.
What Should Happen?
Desktop should show the same external-imports approval prompt as the terminal before starting the session, and record the answer. At the very least, it should tell the user that external rules were skipped and how to approve them.
Error Messages/Logs
None. The external file is simply absent from the session's instructions attachment in the transcript.
Steps to Reproduce
Fresh folder with no entry in ~/.claude.json (not under a trusted parent, not a git worktree of an approved checkout):
mkdir -p repro/proj/.claude/rules repro/shared
printf '# shared\nToken: ORCHID-7742\n' > repro/shared/conventions.md
printf '# project\nToken: QUARTZ-5518\n' > repro/proj/CLAUDE.md
ln -s ../../../shared repro/proj/.claude/rules/shared
(cd repro/proj && git init -q)
(On Windows, create a real symlink: Developer Mode on, and MSYS=winsymlinks:nativestrict in Git Bash.)
A. Desktop first:
- Open a new Code session in Claude Desktop on
repro/proj. Accept the trust dialog. - Observe: no external-imports prompt.
- Ask: "Without looking anything up, list every token of the form WORD-1234 in your context and say where each came from."
- Result: only QUARTZ-5518. The memory-files panel lists the project CLAUDE.md but not
conventions.md. The transcript'sinstructionsattachment does not contain it either.
B. Terminal, then Desktop (same folder, or a fresh copy):
cd repro/proj && claude→ the "Allow external CLAUDE.md file imports?" prompt listsconventions.md. Choose "Yes, allow external imports", ask the same question → ORCHID-7742 is listed. Exit.- Open a Desktop Code session on the same folder and ask again → ORCHID-7742 is listed now.
For completeness, claude -p in an unapproved folder also skips the rule. That is expected, since headless cannot prompt.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
Before 2.1.232, symlinked rules loaded without any approval (see #88405). Not verified in Desktop.
Claude Code Version
2.1.284 (Claude Code), both the CLI and the Desktop Code tab (read from the session transcripts' version field). Claude Desktop 2.16120.0 (801c07), built 2026-09-29.
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Git Bash (winpty claude) for the terminal runs
Additional Information
Related: #88405 (fixed for the terminal in 2.1.284), #76940 (same Desktop gap for @-imports, closed as stale), #89461 (symlinked @-import never prompts, core).