[BUG] Message send aborts when installed_plugins.json is missing (LocalPluginsReader throws inside sendMessage)
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?
Sending a message in the Claude desktop app intermittently fails instantly — a red error indicator appears, the UI stays responsive, and resending usually works after a try or two.
The app log shows an unhandled exception thrown inside the send path:
[error] [LocalPluginsReader] Failed to read installed_plugins.json: Cannot convert undefined or null to object
at Object.entries (<anonymous>)
at getAllLocalPluginsWithResolver (app.asar/.vite/build/index.js)
at async getEnabledLocalPluginsWithResolver
at async setupMcpAndPlugins
at async buildStartSdkOptions
at async startSession
at async sendMessage <-- thrown inside the user's send
installed_plugins.json does not exist at the expected path, and the reader calls Object.entries() on the null/undefined result, which throws and aborts the send. This appears ~467 times in a single day's log; a companion "Failed to fetch skills list: 404" appears ~1,209 times the same day.
What Should Happen?
A missing or empty installed_plugins.json should be treated as "no local plugins," not cause an exception. Failures in setupMcpAndPlugins during startSession should be caught and must not abort the user's message send. Sending a message should either succeed or fail with a clear, retryable error — never throw an unhandled TypeError inside sendMessage.
Error Messages/Logs
[error] [LocalPluginsReader] Failed to read installed_plugins.json: Cannot convert undefined or null to object
at Object.entries (<anonymous>)
at getAllLocalPluginsWithResolver (app.asar/.vite/build/index.js)
at async getEnabledLocalPluginsWithResolver
at async setupMcpAndPlugins
at async buildStartSdkOptions
at async startSession
at async sendMessage
Companion error, same period: Failed to fetch skills list: 404
Occurrence counts in one day's log: installed_plugins.json error ~467; skills 404 ~1,209.
Steps to Reproduce
This is intermittent (not deterministic), but occurs during normal use:
- Open the Claude desktop app (used for Claude Code / Cowork).
- Send a message in a session — this triggers startSession → setupMcpAndPlugins, which reads installed_plugins.json.
- Intermittently, the send fails instantly: red error indicator, no response, UI stays responsive.
- The app log shows the LocalPluginsReader "Cannot convert undefined or null to object" error thrown inside sendMessage (see Error Messages/Logs).
- Resending usually succeeds after one or more tries.
Trigger appears to be that installed_plugins.json does not exist at the expected path under ~/Library/Application Support/Claude/, so the reader calls Object.entries() on a null result.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
Desktop app 1.15962.0 (bundled Claude Code 2.1.187)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
This affects both Claude Code and Cowork in the desktop app. The failure is intermittent but frequent, and it often coincides with periods of elevated backend latency. Full app logs (main.log) available on request.