Slack channel plugin: notifications/claude/channel reliably fails to reach a live session, survives full app restart
Using the community/private Slack channel plugin (plugin:slack@private-ai, Socket Mode, MCP experimental.claude/channel capability) to relay Slack DMs into a persistent Claude Code session.
Symptom: Inbound Slack DMs stop surfacing as <channel> turns in the live session. The plugin's own MCP server process stays healthy the whole time — correct PID, valid bot token, single Socket Mode connection, no errors — and outbound tool calls (reply, via chat.postMessage) keep working normally. Only inbound delivery into the conversation silently stops.
What's ruled out:
- Slack-side delivery: confirmed via
conversations.historythat every "missed" message actually reached the Slack channel. - The plugin's own event-handling code: an isolated, disposable instance of the same
server.ts(separateSLACK_STATE_DIR, disconnected stdin), started fresh and pointed at the same DM, correctly received the event and emitted a well-formednotifications/claude/channelJSON-RPC message to stdout within seconds. - Token/scope/allowlist issues: same token, same access list, working in the isolated instance.
What doesn't fix it (this time): a genuine full quit-and-relaunch of the Claude Code app (confirmed via a new OS PID for the claude process, and the app auto-updating from 2.1.222 → 2.1.237 across the restart). In an earlier occurrence of what looks like the same underlying bug (documented internally weeks earlier), a full restart reliably cleared it; this time five consecutive messages after a clean restart still failed to surface.
Suspected area: the notification-to-conversation delivery path for plugins declaring experimental["claude/channel"] — something stateful in that pipeline appears to get into a bad state that (a) isn't visible at the process/connection level, (b) isn't cleared by disabling/reloading the plugin, and (c) isn't reliably cleared by a full app restart.
Repro difficulty: intermittent, no reliable trigger found yet; occurred after a period of the plugin process running for an extended time (and separately, once right after a fresh restart).
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗