--plugin-dir breaks --channels — channel plugins (e.g. Telegram) silently fail to start
Environment
- Claude Code: v2.1.89
- OS: Windows 11 Pro (10.0.26200)
- Node: v22.16.0
- Bun: 1.3.11
Description
--plugin-dir and --channels are incompatible. Using both flags in the same session causes the channel plugin to fail silently — no error, no log, no diagnostic. The channel MCP server simply never starts.
This effectively makes --plugin-dir unusable for anyone who also uses --channels (Telegram, or any future channel plugin). Since both flags are documented and independently functional, users will naturally combine them. The silent failure makes it extremely hard to diagnose — we lost ~2 hours tracking this down.
Reproduction steps
- Create a minimal local plugin:
my-plugin/
.claude-plugin/plugin.json # { "name": "test", "version": "1.0.0" }
.mcp.json # { "mcpServers": { "test": { "command": "node", "args": ["-e", "..."] } } }
- Launch with both flags:
claude --channels plugin:telegram@claude-plugins-official --plugin-dir ./my-plugin
- Run
/mcp:
my-pluginMCP →✓ connectedplugin:telegram:telegram→✗ failed
- Relaunch without
--plugin-dir:
claude --channels plugin:telegram@claude-plugins-official
- Run
/mcp→ Telegram now shows✓ connected
Key observations
- Each flag works perfectly in isolation.
--plugin-diralone loads plugins fine.--channelsalone loads channel plugins fine. The breakage only occurs when combined. - The failure is completely silent. No stderr, no crash, no entry in
/doctor. The only clue is✗ failedin/mcp— easy to miss. - The local plugin is the survivor. The
--plugin-dirplugin connects successfully while the--channelsplugin is the one that dies. - The channel plugin binary works. Tested the Telegram MCP server standalone — full MCP handshake succeeds, valid token, deps installed. The server itself is fine; Claude Code just never starts it.
- Workaround: load local plugins via the project
.mcp.jsoninstead of--plugin-dir. Identical functionality, no conflict with--channels.
Impact
--plugin-dir cannot be used alongside --channels in any session. This blocks the local plugin development workflow for anyone who relies on channel plugins (Telegram being the primary one today). The silent failure means users will waste significant time debugging before discovering the root cause.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗