/events long-poll itself and wakes Claude Code when the task needs an approval, finishes or fails. Without channels, the model calls sai_task_wait in a loop.
This is an advanced option. Polling is the baseline and works everywhere.
Constraints
- Claude Code only. Codex and Cursor have no equivalent.
- Channels are a research preview and require Anthropic authentication (a Claude account), not a third-party API key.
- Third-party channel plugins must be loaded explicitly with
--dangerously-load-development-channels.
Enable
SAI_PUSH=1 together with that flag. Without it, the model is told not to poll and the pushed results are dropped. To go back to polling, remove the server and add it again without SAI_PUSH.
What changes
sai_task_startreturnspush: true.- The model does not call
sai_task_wait. The tool description tells it so. - When the session reaches
needs_approval,idleorerror, the server emits anotifications/claude/channelmessage. Itscontentis the text so far and itsmetais:
approval_id and approval_url are present only when event is needs_approval.
Gotchas
- If the flag is missing, the server still connects and works in polling mode. Nothing breaks; you only lose the push.
- The server always declares
capabilities.experimental["claude/channel"]. That is expected and harmless in clients that do not use it. - Reference: the Claude Code channels documentation at code.claude.com.

