Slack channel plugin: notifications/claude/channel reliably fails to reach a live session, survives full app restart

Status Open
Reported on v2.1.222
Maintainer reply None cached
Activity 1 comment · opened Aug 22, 2026

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.history that every "missed" message actually reached the Slack channel.
  • The plugin's own event-handling code: an isolated, disposable instance of the same server.ts (separate SLACK_STATE_DIR, disconnected stdin), started fresh and pointed at the same DM, correctly received the event and emitted a well-formed notifications/claude/channel JSON-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).

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗