[BUG] Message send aborts when installed_plugins.json is missing (LocalPluginsReader throws inside sendMessage)

Open 💬 0 comments Opened Jul 10, 2026 by lauranewton-ux

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:

  1. Open the Claude desktop app (used for Claude Code / Cowork).
  2. Send a message in a session — this triggers startSession → setupMcpAndPlugins, which reads installed_plugins.json.
  3. Intermittently, the send fails instantly: red error indicator, no response, UI stays responsive.
  4. The app log shows the LocalPluginsReader "Cannot convert undefined or null to object" error thrown inside sendMessage (see Error Messages/Logs).
  5. 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.

View original on GitHub ↗