[BUG] macOS desktop app ignores project-level `enabledPlugins` — every project shows an identical plugin list (CLI and Windows work)

Status Open
Maintainer reply None cached
Activity 3 comments · opened Jul 25, 2026

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 Claude desktop app on macOS resolves enabledPlugins only from the user-level ~/.claude/settings.json. It ignores enabledPlugins declared in a project's .claude/settings.json and .claude/settings.local.json, even though it correctly honours other keys from those same files.

The visible result is that the plugin menu (+ → Plugin) shows an identical list in every project, regardless of each project's own plugin configuration. There is no error and no warning — the project-scoped plugins are simply absent.

The CLI on the same machine, launched from the same directory with the same config files, merges all levels correctly and registers all the plugins. The Windows desktop app also behaves correctly.

Environment

  • Claude desktop app 1.24012.9 (Electron 42.7.0, Node 24.18.0), macOS arm64
  • Claude CLI on the same machine: works correctly (control case)
  • Claude desktop app on Windows: works correctly (control case)

Reproduction

Two projects with deliberately different plugin configurations.

Project A (crosscms) — <projectA>/.claude/settings.json:

{
  "enabledPlugins": { "marketing-skills@marketingskills": true }
}

<projectA>/.claude/settings.local.json:

{
  "enabledPlugins": { "laravel@laravel": true, "impeccable@impeccable": true }
}

Project B — no project-level enabledPlugins at all.

User level — ~/.claude/settings.json:

{ "enabledPlugins": { "mattpocock-skills@mattpocock": true } }

~/.claude/plugins/installed_plugins.json contains the matching install records with the correct values:

  • mattpocock-skills@mattpocock — "scope": "user", no projectPath
  • marketing-skills@marketingskills — "scope": "project", projectPath = project A
  • impeccable@impeccable — "scope": "local", projectPath = project A
  • laravel@laravel — "scope": "local", projectPath = project A

Steps:

  1. Open project A in the macOS desktop app.
  2. Click + in the composer, then Plugin.
  3. Open project B and repeat.

Actual behaviour

Both projects show an identical submenu containing only mattpocock-skills — the sole plugin enabled at user level. Every plugin enabled through a project-level settings file is silently missing from project A.

Ruled out during diagnosis

  • Not a path-resolution mismatch. pwd and pwd -P in the project directory return a string identical to the stored projectPath. No symlink or firmlink indirection (the project is not under an iCloud-synced folder), no case difference, and no drive letters on macOS. This distinguishes it from #74912.
  • Not a corrupted or unparseable config. installed_plugins.json parses as valid JSON, and the plugin payloads are present under ~/.claude/plugins/cache/.
  • Not a bad scope record. The install records carry the correct scope and projectPath, and the CLI reads the same file successfully.
  • Not a general failure to read project settings. The permissions entries from the very same two project files are applied correctly by the desktop app. Only enabledPlugins is dropped.
  • Affects both scopes. scope: "project" and scope: "local" entries fail identically.

Impact

Per-project plugin configuration is unusable from the macOS desktop app. Users who scope plugins per project — the documented purpose of the --scope project flag, and a workflow the CLI supports today — see none of them in the GUI, with no signal that the configuration was ignored. The only way to make a plugin visible in the app is to promote it to user scope, which forces it on for every project.

Related

  • #74612 — the same divergence reported for the VS Code extension on Windows. I added the macOS desktop-app evidence there as a comment; filing this separately because the affected surface and platform are different.
  • #74912 — proposes case-sensitive projectPath comparison (Windows drive letters) as the cause. That explanation cannot cover this case, since the paths here match exactly.
  • #62174 — closed as not planned, treating per-project enabledPlugins as a feature request. The CLI does honour project-level values today, so the desktop app is inconsistent with shipped behaviour rather than missing a feature.

What Should Happen?

The macOS desktop app should merge enabledPlugins across user, project and local settings files, exactly as the CLI does when launched from the same directory.

Concretely, for the setup above:

  • Project A's plugin menu should list marketing-skills, laravel, impeccable and mattpocock-skills.
  • Project B's plugin menu should list only mattpocock-skills.

Failing that, the app should at minimum surface a warning when it encounters enabledPlugins in a project settings file that it is not going to honour, rather than dropping it silently.

Error Messages/Logs

Steps to Reproduce

Prerequisite: two projects, A and B, with different plugin configurations.

  1. In project A's directory, create .claude/settings.json:

``json
{
"enabledPlugins": { "marketing-skills@marketingskills": true }
}
``

  1. In the same directory, create .claude/settings.local.json:

``json
{
"enabledPlugins": { "laravel@laravel": true, "impeccable@impeccable": true }
}
``

  1. Leave project B with no project-level enabledPlugins.
  1. Enable exactly one plugin at user level in ~/.claude/settings.json:

``json
{ "enabledPlugins": { "mattpocock-skills@mattpocock": true } }
``

  1. Confirm the install records exist and are correct in ~/.claude/plugins/installed_plugins.json (scope = project / local, projectPath = project A's absolute path).
  1. Verify the CLI behaves correctly: cd into project A and run claude plugin list. All four plugins are reported.
  1. Open project A in the macOS desktop app. Click + in the message composer, then Plugin.
  1. Observe: the submenu lists only mattpocock-skills. The three project-level plugins are missing, with no error or warning.
  1. Open project B and repeat step 7. The submenu is identical, despite the two projects having different configurations.

Control checks that isolate the failure:

  1. Confirm the app does read those same project files: the permissions entries from step 1 and 2 are applied in project A's sessions. Only enabledPlugins is dropped.
  1. Confirm there is no path mismatch: cd into project A and run pwd && pwd -P. Both print a string identical to the projectPath stored in installed_plugins.json.

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

Exact version unknown — worked correctly until roughly four releases before 1.22209.3 (build babe11)

Claude Code Version

Claude desktop app for macOS 1.24012.9 (Electron 42.7.0, Node 24.18.0). The bundled Claude Code runtime on the same machine handles the same config correctly when used from the CLI, which is the control case for this report.

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

Note on scope. This is the Claude desktop app for macOS, not the Claude Code CLI. I am filing it here because the repository tracks desktop-app issues (e.g. #72025, #72179), and because the defect is precisely a divergence from Claude Code's own documented behaviour: the CLI honours project-level enabledPlugins and the desktop app does not, on the same machine, in the same directory, reading the same files.

Previous report. I filed #79376 earlier describing the user-visible symptom. That report was auto-closed as invalid by the triage bot without human review. It was also based on an incorrect root-cause guess on my part — I described the app as showing plugins belonging to other projects, when in fact it shows only user-scoped plugins and drops project-scoped ones entirely. This report supersedes it with the corrected diagnosis and the control checks that establish it.

Relationship to #74612. That report describes the same divergence for the VS Code extension on Windows. I have added the macOS desktop-app evidence there as a comment. Filing separately here because the affected surface and platform differ, and because the leading hypothesis in that thread (#74912, case-sensitive drive-letter comparison in projectPath) cannot explain the macOS case, where the paths match exactly.

Screenshots of the plugin submenu in both projects, and the full contents of installed_plugins.json, are available on request. Project and plugin paths in this report have been anonymised; the plugin names are the real ones.

View original on GitHub ↗

3 Comments

condorman · 1 month ago

Confirming this is still fully reproducible on a newer release, with the exact same signature described above (project-level enabledPlugins ignored; the "+" → Plugin menu and "Gestisci plugin"/"Manage plugins" always reflect the last-opened project instead of the active chat's project).

Environment

  • App: Claude for Mac (desktop app)
  • App version: Claude 1.37937.3 (28dcf5)
  • OS: macOS 26.5.2 (25F84)

Repro (matches the steps already documented above)

  1. Two projects with different plugins installed locally to each project (e.g. ai4traderWFO and crosscms).
  2. Open/keep a conversation active in project ai4traderWFO.
  3. Switch to (or have previously opened) a conversation in the other project.
  4. Click the "+" composer button → "Plugin" while the active chat is ai4traderWFO.
  5. The submenu and the "Installed" plugin list (visible in the terminal panel) show the entries belonging to the other, previously opened project — not ai4traderWFO's own plugins (screenshot 1, arrows).
  6. Clicking "Gestisci plugin" ("Manage plugins") from that same menu opens the plugin/customization settings for the other project (crosscms), not for ai4traderWFO where the chat is happening (screenshot 2, arrows/annotation).

Already tried, no effect

  • Cache reset
  • Full app data reset/restore
  • Complete removal of Claude, including all configuration files, then reinstall
  • Reproduced independently on a second Mac (different macOS installation)

Attaching two annotated screenshots showing the mismatch described above.

<img width="1431" height="1014" alt="Image" src="https://github.com/user-attachments/assets/a4b2a862-931b-4e51-9fbc-90d206937076" />
<img width="1433" height="1014" alt="Image" src="https://github.com/user-attachments/assets/d76fdeea-e12f-443a-99fe-f82a04ef452b" />

condorman · 26 days ago

Still reproducible on the current release, after several updates.

Environment

  • App: Claude for Mac 2.2553.1 (c38127), build 2026-09-18T00:41:58.000Z
  • macOS, same setup as the previous reports

What happens

  1. Active session Test, inside the project trading (see sidebar, screenshot 1).
  2. Composer + → Plugin: the submenu lists only the user-level plugin (Mattpocock skills). None of the plugins installed at project level for trading appear (screenshot 2).
  3. Clicking "Gestisci plugin" / "Manage plugins" from that same menu opens the plugin settings scoped to a completely different project (condorman/cobbly), which has nothing to do with trading, where the chat is actually running (screenshot 3).

Point 3 looks like the key: the + menu does not seem to resolve the active chat's project at all — it resolves some other project context (last opened / default), which would explain why the plugin list shown under + is the wrong one.

Tried again on this version, no effect

  • Cache reset
  • Full application-data reset/restore
  • Complete removal of Claude from the Mac, including all orphaned configuration files, then clean reinstall

Net effect: it is impossible to work across several projects that have different project-level plugins installed — the GUI always shows the wrong set.

<img width="1" height="1" alt="Image" src="https://github.com/user-attachments/assets/2b90a750-7343-4eb5-89cd-bd7c0cf24ca4" />

condorman · 26 days ago

Still reproducible on the current release, after several updates.

Environment

  • App: Claude for Mac 2.2553.1 (c38127), build 2026-09-18T00:41:58.000Z
  • macOS, same setup as the previous reports

What happens

  1. Active session Test, inside the project trading (see sidebar, screenshot 1).
  2. Composer + → Plugin: the submenu lists only the user-level plugin (Mattpocock skills). None of the plugins installed at project level for trading appear (screenshot 2).
  3. Clicking "Gestisci plugin" / "Manage plugins" from that same menu opens the plugin settings scoped to a completely different project (condorman/cobbly), which has nothing to do with trading, where the chat is actually running (screenshot 3).

Point 3 looks like the key: the + menu does not seem to resolve the active chat's project at all — it resolves some other project context (last opened / default), which would explain why the plugin list shown under + is the wrong one.

Tried again on this version, no effect

  • Cache reset
  • Full application-data reset/restore
  • Complete removal of Claude from the Mac, including all orphaned configuration files, then clean reinstall

Net effect: it is impossible to work across several projects that have different project-level plugins installed — the GUI always shows the wrong set.

Screenshot 1 — active session Test under the project trading

<img width="269" height="457" alt="Image" src="https://github.com/user-attachments/assets/c226e93d-4c94-472a-907c-d4e6b0e41003" />

Screenshot 2 — + → Plugin from that session: only the user-level plugin is listed

<img width="414" height="173" alt="Image" src="https://github.com/user-attachments/assets/e7d2c406-e975-4bcb-8a2d-44341b50e95b" />

Screenshot 3 — "Gestisci plugin" opened from that same menu: settings scoped to a different project

<img width="1042" height="813" alt="Image" src="https://github.com/user-attachments/assets/fd072ef8-a11c-478f-929b-3d2d12c2e71c" />