[BUG] Cowork: "getPlugins" in interface "LocalPlugins" fails schema validation continuously, breaking all local plugin uploads
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 LocalPlugins interface in Claude Cowork continuously throws schema validation errors, making it impossible to use any custom/uploaded plugins. The error occurs on a polling loop (every ~7-10 seconds) even when no custom plugins are installed, suggesting the getPlugins method itself is broken — not a specific plugin's format.
Custom plugins upload successfully and are correctly registered in installed_plugins.json, but Cowork crashes when attempting to activate/load them (brief loading animation → returns to main Cowork page, no error shown in UI).
The same plugin passes validation via Claude Code CLI:
$ claude plugin validate .
Validating plugin manifest: .../eb1a-case-builder/.claude-plugin/plugin.json
✔ Validation passed
And installs + works correctly in Claude Code CLI:
$ claude plugin install eb1a-case-builder@visagenius-plugins
✔ Successfully installed plugin: eb1a-case-builder@visagenius-plugins (scope: user)
Environment Info
Claude Desktop version: 1.1.2321 (495628) — released 2026-02-06
Claude Code CLI version: 2.1.37
Platform: macOS (Apple Silicon)
Node.js: v24.11.0
What Should Happen?
What's Expected?
Custom plugins that pass claude plugin validate should load in Cowork
The getPlugins method should not throw schema validation errors
If a plugin fails to load, Cowork should show a meaningful error message instead of silently crashing
Error Messages/Logs
Error Logs
Three distinct errors appear continuously in ~/Library/Logs/Claude/claude.ai-web.log:
Error 1: getPlugins validation failure (repeats every ~7-10 seconds)
2026-02-08 20:30:05 [error] [REACT_QUERY_CLIENT] QueryClient error: Error: Error invoking remote method
'$eipc_message$_03ff402f-f622-4aea-b2a4-b95efb475088_$_claude.web.$_LocalPlugins.$.getPlugins':
Error: Result from method "getPlugins" in interface "LocalPlugins" failed to pass validation
Error 2: AJV schema compilation error (appears periodically, paired with getPlugins failure)
2026-02-08 20:20:53 [error] Error compiling schema, function code: var refVal1 = refVal[1];
var validate = function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict';
var vErrors = null; var errors = 0;
if ((typeof data !== "number" || (data % 1) || data !== data))
{ validate.errors = [{ keyword: 'type', dataPath: (dataPath || '') + "",
schemaPath: '#/definitions/nonNegativeInteger/type', params: { type: 'integer' },
message: 'should be integer' }]; return false; }
Error 3: UUID validation error (related — documented in #18644, #20016)
2026-02-08 19:25:44 [error] [REACT_QUERY_CLIENT] QueryClient error: Error:
path.conversation_uuid: Input should be a valid UUID, invalid character:
expected an optional prefix of `urn:uuid:` followed by [0-9a-fA-F-], found `l` at 1
Error 4: MaxListenersExceededWarning (memory leak, likely caused by retry loop)
2026-02-08 20:20:52 [warn] MaxListenersExceededWarning: Possible EventEmitter memory leak detected.
11 $eipc_message$_03ff402f-f622-4aea-b2a4-b95efb475088_$_claude.web.$_AutoUpdater.$_update
rState_$store$_update listeners added. Use emitter.setMaxListeners() to increase limit
Steps to Reproduce
Open Claude Desktop → Cowork tab
Click the plugin upload button (+ icon)
Upload any .zip file containing a valid plugin (even a minimal one with just plugin.json and one SKILL.md)
Plugin appears to upload successfully
installed_plugins.json correctly registers the plugin with installPath, version, timestamps
Cowork shows brief loading animation → crashes back to main page
Check claude.ai-web.log → continuous getPlugins validation errors
Critical finding: The getPlugins errors persist even AFTER:
Removing all custom plugin files from local-desktop-app-uploads/
Cleaning installed_plugins.json to remove all local upload entries
Quitting and reopening Claude Desktop
This suggests the error is in the LocalPlugins interface itself, not in any specific plugin data.
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.37 (Claude Code)
Platform
Other
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Additional Context
Plugin structure tested (matches official plugins exactly)
eb1a-case-builder/
├── .claude-plugin/
│ └── plugin.json # author as {name: "..."} object, not string
├── .mcp.json # Notion MCP connector
├── commands/ # 14 slash commands
│ ├── assess-case.md
│ └── ... (frontmatter: description only, no name field, no quotes)
└── skills/ # 5 domain skills
├── eb1a-criteria/
│ └── SKILL.md # frontmatter: name + description, no quotes
└── ...
Verified format matches working official plugins
The plugin format was compared field-by-field against the working legal@knowledge-work-plugins plugin:
plugin.json: Identical structure (name, version, description, author as object)
Command frontmatter: Identical (description only, no quotes, no name: field)
Skill frontmatter: Identical (name + description, no quotes)
Ultra-minimal test plugin also fails
A bare-bones plugin with only plugin.json + one SKILL.md also crashes Cowork identically, confirming this is not a content/format issue.
Official marketplace plugins work fine
All official plugins (Legal, Sales, Productivity, etc.) installed via the marketplace UI continue to work correctly. Only the local-desktop-app-uploads path is broken.
Related issues
#18644 — local_ prefixed session IDs rejected by API UUID validation (same UUID error appears in our logs)
#20016 — Cowork tab stuck on "Sending request" with UUID validation error
#20409 — Silent skill loading failure in plugins (similar silent failure pattern)
#22715 — Cowork VM heartbeat failures with multiple plugins
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗