[BUG] 3P managed-marketplace auto-install rejects plugins with source "./" (path escape) — manual Directory install of the same entry succeeds; CLI equivalent was fixed in 2.1.142 (#57570)

Status Open
Reported on v2.1.142
Maintainer reply None cached
Activity 0 comments · opened Jul 17, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet (closest: #57570 and #51888, which cover the same rejection in the Claude Code CLI and were closed as fixed in 2.1.142 — this report is the Claude Desktop 3P managed auto-install path, which still exhibits it)
  • [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?

On Claude Desktop (third-party / 3P deployment mode), a managed-config allowedPluginMarketplaces entry with installationPreference: "auto_install" pointing at a marketplace whose plugins declare "source": "./" (plugin root = marketplace root, with a skills array — e.g. Anthropic's own anthropics/skills repo) fails to auto-install every plugin at launch:

  • The marketplace itself clones and registers fine.
  • Each plugin's launch-time auto-install is rejected with path escape: "./".
  • The same plugins install successfully when the user manually installs them from the plugin Directory UI — and the installed skills work (verified: document-skills:docx produced a valid .docx in a Cowork session).

So the launch-time auto-installer and the interactive install path disagree about the validity of the same marketplace entry. The "skills": ["./"] / root-level plugin layout is documented as supported (plugins-reference → path behavior rules), and its rejection in the CLI was treated as a regression and fixed in v2.1.142 (#57570, #51888). The 3P managed auto-install path appears to retain the pre-fix strict check.

What Should Happen?

auto_install marketplaces should install root-level ("source": "./") plugins at launch, consistent with the documented path rules and with the interactive install path — anthropics/skills itself is the canonical repro. (Alternatively, if root-level plugins are intentionally disallowed for unattended installs, the Directory install should reject them too, the restriction should be documented, and anthropics/skills restructured — but consistency fixed in 2.1.142 suggests the auto-installer is the one that's wrong.)

Error Messages/Logs

# ~/Library/Logs/Claude-3p/main.log, at app launch:
[custom-3p:configured-marketplaces] syncing 1 configured source(s)
[custom-3p:configured-marketplaces] installed 'anthropic-agent-skills' from anthropics/skills
[custom-3p:configured-marketplaces] auto-install document-skills@anthropic-agent-skills rejected (path escape: "./")
[custom-3p:configured-marketplaces] auto-install example-skills@anthropic-agent-skills rejected (path escape: "./")
[custom-3p:configured-marketplaces] auto-install claude-api@anthropic-agent-skills rejected (path escape: "./")

# after manually installing the same three plugins from the Directory UI, they mount and work:
[LocalPluginsReader] Found 3 enabled local plugins (3 installed)
[workspaceMcpServer] bash: ... mounts=...,.local-plugins/cache/anthropic-agent-skills/document-skills/...,example-skills/...,claude-api/...

Steps to Reproduce

  1. Deploy Claude Desktop in third-party (3P) mode with a managed config whose allowedPluginMarketplaces contains (delivered via MDM .mobileconfig or a bootstrap-server overlay — both reproduce):

``json
[{
"source": "github",
"repo": "anthropics/skills",
"expectedName": "anthropic-agent-skills",
"ref": "9d2f1ae187231d8199c64b5b762e1bdf2244733d",
"installationPreference": "auto_install"
}]
``

  1. Fully quit and relaunch the app; watch ~/Library/Logs/Claude-3p/main.log.
  2. Observe: marketplace installs, then three auto-install ... rejected (path escape: "./") warnings; no plugins appear in Cowork.
  3. Open the plugin Directory in-app and install any of the same plugins manually → installs successfully, skills load and run in Cowork sessions.

Root-cause pointer from the shipped bundle (app.asar, minified): the safe-join used by the auto-installer resolves join(marketplaceRoot, "./") === marketplaceRoot, and its containment check is invoked with allowEqual: false, so "plugin dir == marketplace root" is classified as an escape; the interactive path resolves the same join with the lenient/default behavior. This mirrors the pre-2.1.142 CLI behavior fixed via #57570.

Claude Model

Not sure / Multiple models

Is this a regression?

I don't know

Last Working Version

n/a (CLI equivalent last broken before 2.1.142; unknown for the 3P auto-installer)

Claude Code Version

Claude Desktop 1.22209.0 (3P mode; bundled claude-code 0.3.209). Also observed on Desktop 1.20186.x.

Platform

AWS Bedrock

Operating System

macOS

Terminal/Shell

Other

Additional Information

Enterprise fleet context: with auto_install broken for this layout, the managed tier silently degrades to available (users must find and install plugins by hand), and the rejection warnings repeat at every launch. Related open reports on the marketplace side of this repo's own skills content: anthropics/skills#67, anthropics/skills#1087, anthropics/skills#919.

View original on GitHub ↗