Title: Enterprise-managed plugin (extraKnownMarketplaces/enabledPlugins) marked installed/enabled but never synced to disk · Issue #4039 · github/copilot-cli · GitHub
Open Graph Title: Enterprise-managed plugin (extraKnownMarketplaces/enabledPlugins) marked installed/enabled but never synced to disk · Issue #4039 · github/copilot-cli
X Title: Enterprise-managed plugin (extraKnownMarketplaces/enabledPlugins) marked installed/enabled but never synced to disk · Issue #4039 · github/copilot-cli
Description: Describe the bug A plugin registered via an enterprise managed-settings.json (extraKnownMarketplaces + enabledPlugins) is marked as installed and enabled in ~/.copilot/config.json (with a version and a cache_path), but the plugin's files...
Open Graph Description: Describe the bug A plugin registered via an enterprise managed-settings.json (extraKnownMarketplaces + enabledPlugins) is marked as installed and enabled in ~/.copilot/config.json (with a version a...
X Description: Describe the bug A plugin registered via an enterprise managed-settings.json (extraKnownMarketplaces + enabledPlugins) is marked as installed and enabled in ~/.copilot/config.json (with a version a...
Opengraph URL: https://github.com/github/copilot-cli/issues/4039
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Enterprise-managed plugin (extraKnownMarketplaces/enabledPlugins) marked installed/enabled but never synced to disk","articleBody":"### Describe the bug\n\nA plugin registered via an enterprise `managed-settings.json` (`extraKnownMarketplaces` + `enabledPlugins`) is marked as installed and enabled in `~/.copilot/config.json` (with a version and a `cache_path`), but the plugin's files are never actually downloaded/synced to disk. The referenced `cache_path` directory does not exist, and the mirrored `~/.copilot/plugin-data/\u003cmarketplace\u003e/\u003cplugin\u003e/` directory exists but is completely empty. As a result, none of the plugin's agents/skills ever become usable, with no error surfaced anywhere. Removing the plugin doesn't stick either — it gets re-added with a new `installed_at` timestamp shortly after (apparently re-enforced by the enterprise policy), but the cache directory is still never populated.\n\nAlso filed against the VS Code Copilot Chat extension (which bundles this same CLI), since the underlying `~/.copilot` state is shared: https://github.com/microsoft/vscode/issues/324611\n\n### Config structures (redacted)\n\n**Enterprise `managed-settings.json`** — registers a private marketplace and auto-enables one of its plugins:\n\n```json\n{\n \"extraKnownMarketplaces\": {\n \"\u003cmarketplace-name\u003e\": {\n \"source\": {\n \"source\": \"github\",\n \"repo\": \"\u003corg\u003e/\u003cprivate-marketplace-repo\u003e\"\n }\n }\n },\n \"enabledPlugins\": {\n \"\u003cplugin-name\u003e@\u003cmarketplace-name\u003e\": true\n },\n \"permissions\": {\n \"model\": \"auto\"\n }\n}\n```\n\nThe same enablement is also reflected in VS Code's `settings.json` (bundled Copilot CLI shares state):\n\n```json\n\"chat.plugins.enabledPlugins\": {\n \"\u003cplugin-name\u003e@\u003cmarketplace-name\u003e\": true\n}\n```\n\n**Resulting entry written to `~/.copilot/config.json` → `installedPlugins`** — marked installed with a `cache_path` that never gets populated:\n\n```json\n{\n \"name\": \"\u003cplugin-name\u003e\",\n \"marketplace\": \"\u003cmarketplace-name\u003e\",\n \"version\": \"2.2.0\",\n \"installed_at\": \"2026-07-06T19:31:21.215Z\",\n \"cache_path\": \"/Users/\u003cuser\u003e/.copilot/installed-plugins/\u003cmarketplace-name\u003e/\u003cplugin-name\u003e\",\n \"enabled\": true\n}\n```\n\n### Affected version\n\n```\nGitHub Copilot CLI 1.0.68.\n```\n\n### Steps to reproduce the behavior\n\n1. As an enterprise owner, add `copilot/managed-settings.json` with `extraKnownMarketplaces` pointing at a custom GitHub-hosted marketplace repo, and `enabledPlugins` set to auto-install one of its plugins (`\"\u003cplugin-name\u003e@\u003cmarketplace-name\u003e\": true`).\n2. Authenticate `copilot` (or VS Code's bundled Copilot CLI) with an account under that enterprise, and wait for the managed settings to sync (docs state ~hourly).\n3. The plugin auto-installs per policy. Inspect `~/.copilot/config.json` — the plugin appears under `installedPlugins` with `enabled: true`, a version, and a `cache_path` (see structure above).\n4. Check the filesystem — the `cache_path` directory referenced in config does not exist. The parallel `~/.copilot/plugin-data/\u003cmarketplace\u003e/\u003cplugin\u003e/` directory exists but is empty (0 files), with a stale mtime from an earlier registration attempt.\n5. Attempt to remove the plugin. Config re-adds it shortly after with a new `installed_at` timestamp, but the cache directory is still never populated.\n6. Compare against the default `github-awesome-copilot` marketplace, whose cache directory (`~/.copilot/marketplace-cache/github-awesome-copilot/`) is fully populated with hundreds of skill/instruction files — confirming the general marketplace-sync mechanism works, and the failure is specific to marketplaces added via `extraKnownMarketplaces`.\n\n### Expected behavior\n\nThe plugin's content should be fully downloaded/synced before being marked `installed: true`/`enabled: true`, or install status should reflect a failed/incomplete sync with a visible error and retry path. Removal should also either succeed, or clearly explain that it's being re-enforced by enterprise policy.\n\n### Additional context\n\nThe plugin declares a couple of MCP servers. The CLI still tries to launch them, using the (nonexistent) plugin dir as `cwd`. `npx` tolerates the missing `cwd`, so the MCP servers actually **start and connect successfully** — confirming the MCP spawn is a *symptom*, not the cause. Note also that the `[ERROR]` prefix here is just how the CLI logs all MCP lifecycle events (including successful `connected` / `Started` lines):\n\n```\n[ERROR] Starting MCP client for \u003cserver-a\u003e with command: npx and args: -y \u003credacted-mcp-package\u003e\n[ERROR] Starting MCP client for \u003cserver-b\u003e with command: npx and args: -y \u003credacted-mcp-package\u003e\n cwd: /Users/\u003cuser\u003e/.copilot/installed-plugins/\u003cmarketplace\u003e/\u003cplugin\u003e \u003c-- directory does not exist\n[ERROR] MCP client for \u003cserver-b\u003e connected, took 3134ms\n[ERROR] Started MCP client for \u003cserver-a\u003e\n```\n\nThe real problem remains that the plugin's own bundled content (agents/skills) is never downloaded to `cache_path`.\n\n- OS: macOS 26.5.2 (Darwin 25.5.0)\n- CPU architecture: arm64\n- Terminal: integrated VS Code terminal (bash)\n- Shell: bash\n","author":{"url":"https://github.com/mohammadrayan","@type":"Person","name":"mohammadrayan"},"datePublished":"2026-07-06T19:57:32.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/4039/copilot-cli/issues/4039"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:76623d93-bed2-067c-6669-b61b97df7e72 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 9E20:7D79E:17D5C2:1FEFB0:6A4D94F1 |
| html-safe-nonce | e6602db630b402c375bc5826009208a3ecc4e60a660002ad04c206302da20986 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5RTIwOjdENzlFOjE3RDVDMjoxRkVGQjA6NkE0RDk0RjEiLCJ2aXNpdG9yX2lkIjoiNDA1ODk4MjYyNjEwMjE4NzI0OSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 4093b894cbd6b889e3245fbdac6b2ee673c5e370fb3260b61057b5f18498b898 |
| hovercard-subject-tag | issue:4822632127 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/github/copilot-cli/4039/issue_layout |
| twitter:image | https://opengraph.githubassets.com/7db45a4d83cbe21d9180c0ab54f2d10177ec06e3265b5f5c0d6804478f2e7755/github/copilot-cli/issues/4039 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/7db45a4d83cbe21d9180c0ab54f2d10177ec06e3265b5f5c0d6804478f2e7755/github/copilot-cli/issues/4039 |
| og:image:alt | Describe the bug A plugin registered via an enterprise managed-settings.json (extraKnownMarketplaces + enabledPlugins) is marked as installed and enabled in ~/.copilot/config.json (with a version a... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | mohammadrayan |
| hostname | github.com |
| expected-hostname | github.com |
| None | 06b8a6144231bf3a234f1c2e9993861e07ce98a905912b114aa386c2d7e84b33 |
| turbo-cache-control | no-preview |
| go-import | github.com/github/copilot-cli git https://github.com/github/copilot-cli.git |
| octolytics-dimension-user_id | 9919 |
| octolytics-dimension-user_login | github |
| octolytics-dimension-repository_id | 585860664 |
| octolytics-dimension-repository_nwo | github/copilot-cli |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 585860664 |
| octolytics-dimension-repository_network_root_nwo | github/copilot-cli |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | a7b5592971a4eafa6614134ea168f0d03716b98d |
| ui-target | canary-2 |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width