Telegram channel plugin: bun server self-kills / fails to spawn on Windows (v2.1.174)

Resolved 💬 2 comments Opened Jun 12, 2026 by Lyitick Closed Jun 15, 2026

Environment

  • OS: Windows 10 Pro 19045
  • Claude Code VS Code extension: 2.1.174 (win32-x64)
  • Plugin: telegram@claude-plugins-official (0.0.6)
  • Launch: claude.exe --channels plugin:telegram@claude-plugins-official --strict-mcp-config --mcp-config telegram-mcp.json (CMD window)

Summary

On Windows, a claude.exe --channels plugin:telegram window does not keep its plugin bun process (server.ts) alive. Two failure modes observed:

  1. Self-kill ~15-60s after spawn. The plugin spawns its bun child, polling starts (polling as @Obaidian_Bot), then the bun process exits. Root cause: the channel subsystem drops the plugin's stdin pipe shortly after spawn, so process.stdin.readableEnded === true. The plugin's own orphan-watchdog (it watches stdin to detect a severed parent) then self-terminates via shutdown(). Removing the instant stdin.on('end'/'close', shutdown) handlers does not help — the debounced watchdog still fires on readableEnded.
  2. bun child never spawns at all. Sometimes the claude.exe --channels window is alive but spawns zero bun children for 90s+; no server.ts process appears.

Net effect: the bot can SEND (Bot API sendMessage works) but in-session MCP tools die, so it cannot receive/answer messages live. It worked reliably on earlier extension versions. Forcing the window onto 2.1.173 instead, the --channels window does not start at all.

Repro

  1. Windows. Launch claude.exe --channels plugin:telegram@claude-plugins-official.
  2. Observe the spawned bun server.ts child process.
  3. It exits within ~1 minute (orphan-watchdog on dead stdin), or never spawns.

Expected

The channel subsystem keeps the plugin's stdin alive (or signals shutdown only on real parent death), so the plugin bun process stays alive and serves MCP tools for the session lifetime.

Notes

Running the same server.ts manually with bun (outside the channel) polls and stays alive fine — the issue is specific to how --channels spawns/manages the plugin process on Windows.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗