Push events into a running session with channels changedchannels
Nearest release: v2.1.304, published 6 hours before upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Upstream edited this page at 20 Oct 2026 02:25 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 20 Oct 2026 18:37 UTC.
Upstream edited
Recorded here
Lines+236added
Lines−240removed
From line
2
where the diff opens
First seen
14 Aug 2026
this site's first read of the page
Recorded edits17to this page, all time
The whole hunk
from line 2, old and new numbered
/
from line 2
22
33> Use channels to push messages, alerts, and webhooks into your Claude Code session from an MCP server. Forward CI results, chat messages, and monitoring events so Claude can react while you're away.
44
5<Note>
6 Channels are in [research preview](#research-preview). They require Anthropic authentication through claude.ai or a Console API key, and are not available on Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry. Team and Enterprise organizations must [explicitly enable them](#enterprise-controls).
7</Note>
5> [!NOTE]
6>
7> Channels are in [research preview](#research-preview). They require Anthropic authentication through claude.ai or a Console API key, and are not available on Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry. Team and Enterprise organizations must [explicitly enable them](#enterprise-controls).
88
99A channel is an MCP server that pushes events into your running Claude Code session, so Claude can react to things that happen while you're not at the terminal. Channels can be two-way: Claude reads the event and replies back through the same channel, like a chat bridge. Events only arrive while the session is open, so for an always-on setup you run Claude in a background process or persistent terminal.
1010
from line 20
2020
2121Each supported channel is a plugin that requires [Bun](https://bun.sh). For a hands-on demo of the plugin flow before connecting a real platform, try the [fakechat quickstart](#quickstart).
2222
23<Tabs>
24 <Tab title="Telegram">
25 View the full [Telegram plugin source](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram).
23**Telegram**
2624
27 <Steps>
28 <Step title="Create a Telegram bot">
29 Open [BotFather](https://t.me/BotFather) in Telegram and send `/newbot`. Give it a display name and a unique username ending in `bot`. Copy the token BotFather returns.
30 </Step>
25View the full [Telegram plugin source](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram).
3126
32 <Step title="Install the plugin">
33 Start Claude Code by running `claude` in your terminal, then enter this at its prompt:
27**1. Create a Telegram bot**
3428
35 ```
36 /plugin install telegram@claude-plugins-official
37 ```
29Open [BotFather](https://t.me/BotFather) in Telegram and send `/newbot`. Give it a display name and a unique username ending in `bot`. Copy the token BotFather returns.
3830
39 If the install fails, match the message Claude Code reports:
31**2. Install the plugin**
4032
41 * `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
42 * `Plugin "<name>" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting#plugin-not-found-in-marketplace).
33Start Claude Code by running `claude` in your terminal, then enter this at its prompt:
4334
44 When the install asks for an installation scope, choose the user scope option so the plugin is available across all your projects. Check the install summary: if it reports `Run /reload-plugins to apply.`, see [Apply plugin changes without restarting](/docs/en/plugins/cli-reference#reload-plugins) to make the plugin's configure command available.
45 </Step>
35```
36/plugin install telegram@claude-plugins-official
37```
4638
47 <Step title="Configure your token">
48 Run the configure command with the token from BotFather:
39If the install fails, match the message Claude Code reports:
4940
50 ```
51 /telegram:configure <token>
52 ```
41* `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
42* `Plugin "<name>" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting#plugin-not-found-in-marketplace).
5343
54 This saves it to `~/.claude/channels/telegram/.env`. You can also set `TELEGRAM_BOT_TOKEN` in your shell environment before launching Claude Code.
55 </Step>
44When the install asks for an installation scope, choose the user scope option so the plugin is available across all your projects. Check the install summary: if it reports `Run /reload-plugins to apply.`, see [Apply plugin changes without restarting](/docs/en/plugins/cli-reference#reload-plugins) to make the plugin's configure command available.
5645
57 <Step title="Restart with channels enabled">
58 Exit Claude Code and restart with the channel flag. This starts the Telegram plugin, which begins polling for messages from your bot:
46**3. Configure your token**
5947
60 ```bash theme={null}
61 claude --channels plugin:telegram@claude-plugins-official
62 ```
63 </Step>
48Run the configure command with the token from BotFather:
6449
65 <Step title="Pair your account">
66 Open Telegram and send any message to your bot. The bot replies with a pairing code.
50```
51/telegram:configure <token>
52```
6753
68 <Note>If your bot doesn't respond, make sure Claude Code is running with `--channels` from the previous step. The bot can only reply while the channel is active.</Note>
54This saves it to `~/.claude/channels/telegram/.env`. You can also set `TELEGRAM_BOT_TOKEN` in your shell environment before launching Claude Code.
6955
70 Back in Claude Code, run:
56**4. Restart with channels enabled**
7157
72 ```
73 /telegram:access pair <code>
74 ```
58Exit Claude Code and restart with the channel flag. This starts the Telegram plugin, which begins polling for messages from your bot:
7559
76 Then lock down access so only your account can send messages:
60```bash theme={null}
61claude --channels plugin:telegram@claude-plugins-official
62```
7763
78 ```
79 /telegram:access policy allowlist
80 ```
81 </Step>
82 </Steps>
83 </Tab>
64**5. Pair your account**
8465
85 <Tab title="Discord">
86 View the full [Discord plugin source](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord).
66Open Telegram and send any message to your bot. The bot replies with a pairing code.
8767
88 <Steps>
89 <Step title="Create a Discord bot">
90 Go to the [Discord Developer Portal](https://discord.com/developers/applications), click **New Application**, and name it. In the **Bot** section, create a username, then click **Reset Token** and copy the token.
91 </Step>
68> [!NOTE]
69>
70> If your bot doesn't respond, make sure Claude Code is running with `--channels` from the previous step. The bot can only reply while the channel is active.
9271
93 <Step title="Enable Message Content Intent">
94 In your bot's settings, scroll to **Privileged Gateway Intents** and enable **Message Content Intent**.
95 </Step>
72Back in Claude Code, run:
9673
97 <Step title="Invite the bot to your server">
98 Go to **OAuth2 > URL Generator**. Select the `bot` scope and enable these permissions:
74```
75/telegram:access pair <code>
76```
9977
100 * View Channels
101 * Send Messages
102 * Send Messages in Threads
103 * Read Message History
104 * Attach Files
105 * Add Reactions
78Then lock down access so only your account can send messages:
10679
107 Open the generated URL to add the bot to your server.
108 </Step>
80```
81/telegram:access policy allowlist
82```
10983
110 <Step title="Install the plugin">
111 Start Claude Code by running `claude` in your terminal, then enter this at its prompt:
84**Discord**
11285
113 ```
114 /plugin install discord@claude-plugins-official
115 ```
86View the full [Discord plugin source](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord).
11687
117 If the install fails, match the message Claude Code reports:
88**1. Create a Discord bot**
11889
119 * `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
120 * `Plugin "<name>" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting#plugin-not-found-in-marketplace).
90Go to the [Discord Developer Portal](https://discord.com/developers/applications), click **New Application**, and name it. In the **Bot** section, create a username, then click **Reset Token** and copy the token.
12191
122 When the install asks for an installation scope, choose the user scope option so the plugin is available across all your projects. Check the install summary: if it reports `Run /reload-plugins to apply.`, see [Apply plugin changes without restarting](/docs/en/plugins/cli-reference#reload-plugins) to make the plugin's configure command available.
123 </Step>
92**2. Enable Message Content Intent**
12493
125 <Step title="Configure your token">
126 Run the configure command with the bot token you copied:
94In your bot's settings, scroll to **Privileged Gateway Intents** and enable **Message Content Intent**.
12795
128 ```
129 /discord:configure <token>
130 ```
96**3. Invite the bot to your server**
13197
132 This saves it to `~/.claude/channels/discord/.env`. You can also set `DISCORD_BOT_TOKEN` in your shell environment before launching Claude Code.
133 </Step>
98Go to **OAuth2 > URL Generator**. Select the `bot` scope and enable these permissions:
13499
135 <Step title="Restart with channels enabled">
136 Exit Claude Code and restart with the channel flag. This connects the Discord plugin so your bot can receive and respond to messages:
100* View Channels
101* Send Messages
102* Send Messages in Threads
103* Read Message History
104* Attach Files
105* Add Reactions
137106
138 ```bash theme={null}
139 claude --channels plugin:discord@claude-plugins-official
140 ```
141 </Step>
107Open the generated URL to add the bot to your server.
142108
143 <Step title="Pair your account">
144 DM your bot on Discord. The bot replies with a pairing code.
109**4. Install the plugin**
145110
146 <Note>If your bot doesn't respond, make sure Claude Code is running with `--channels` from the previous step. The bot can only reply while the channel is active.</Note>
111Start Claude Code by running `claude` in your terminal, then enter this at its prompt:
147112
148 Back in Claude Code, run:
113```
114/plugin install discord@claude-plugins-official
115```
149116
150 ```
151 /discord:access pair <code>
152 ```
117If the install fails, match the message Claude Code reports:
153118
154 Then lock down access so only your account can send messages:
119* `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
120* `Plugin "<name>" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting#plugin-not-found-in-marketplace).
155121
156 ```
157 /discord:access policy allowlist
158 ```
159 </Step>
160 </Steps>
161 </Tab>
122When the install asks for an installation scope, choose the user scope option so the plugin is available across all your projects. Check the install summary: if it reports `Run /reload-plugins to apply.`, see [Apply plugin changes without restarting](/docs/en/plugins/cli-reference#reload-plugins) to make the plugin's configure command available.
162123
163 <Tab title="iMessage">
164 View the full [iMessage plugin source](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage).
124**5. Configure your token**
165125
166 The iMessage channel reads your Messages database directly and sends replies through AppleScript. It requires macOS and needs no bot token or external service.
126Run the configure command with the bot token you copied:
167127
168 <Steps>
169 <Step title="Grant Full Disk Access">
170 The Messages database at `~/Library/Messages/chat.db` is protected by macOS. The first time the server reads it, macOS prompts for access: click **Allow**. The prompt names whichever app launched Bun, such as Terminal, iTerm, or your IDE.
128```
129/discord:configure <token>
130```
171131
172 If the prompt doesn't appear or you clicked Don't Allow, grant access manually under **System Settings > Privacy & Security > Full Disk Access** and add your terminal. Without this, the server exits immediately with `authorization denied`.
173 </Step>
132This saves it to `~/.claude/channels/discord/.env`. You can also set `DISCORD_BOT_TOKEN` in your shell environment before launching Claude Code.
174133
175 <Step title="Install the plugin">
176 Start Claude Code by running `claude` in your terminal, then enter this at its prompt:
134**6. Restart with channels enabled**
177135
178 ```
179 /plugin install imessage@claude-plugins-official
180 ```
136Exit Claude Code and restart with the channel flag. This connects the Discord plugin so your bot can receive and respond to messages:
181137
182 If the install fails, match the message Claude Code reports:
138```bash theme={null}
139claude --channels plugin:discord@claude-plugins-official
140```
183141
184 * `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
185 * `Plugin "<name>" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting#plugin-not-found-in-marketplace).
142**7. Pair your account**
186143
187 When the install asks for an installation scope, choose the user scope option so the plugin is available across all your projects.
144DM your bot on Discord. The bot replies with a pairing code.
188145
189 If the install summary reports `Run /reload-plugins to apply.`, you don't need to act on it here, because restarting in the next step picks up the plugin.
190 </Step>
146> [!NOTE]
147>
148> If your bot doesn't respond, make sure Claude Code is running with `--channels` from the previous step. The bot can only reply while the channel is active.
191149
192 <Step title="Restart with channels enabled">
193 Exit Claude Code and restart with the channel flag:
150Back in Claude Code, run:
194151
195 ```bash theme={null}
196 claude --channels plugin:imessage@claude-plugins-official
197 ```
198 </Step>
152```
153/discord:access pair <code>
154```
199155
200 <Step title="Text yourself">
201 Open Messages on any device signed into your Apple ID and send a message to yourself. It reaches Claude immediately: self-chat bypasses access control with no setup.
156Then lock down access so only your account can send messages:
202157
203 <Note>The first reply Claude sends triggers a macOS Automation prompt asking if your terminal can control Messages. Click **OK**.</Note>
204 </Step>
158```
159/discord:access policy allowlist
160```
205161
206 <Step title="Allow other senders">
207 By default, only your own messages pass through. To let another contact reach Claude, add their handle:
162**iMessage**
208163
209 ```
210 /imessage:access allow +15551234567
211 ```
164View the full [iMessage plugin source](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage).
212165
213 Handles are phone numbers in `+country` format or Apple ID emails like `[email protected]`.
214 </Step>
215 </Steps>
216 </Tab>
217</Tabs>
166The iMessage channel reads your Messages database directly and sends replies through AppleScript. It requires macOS and needs no bot token or external service.
218167
168**1. Grant Full Disk Access**
169
170The Messages database at `~/Library/Messages/chat.db` is protected by macOS. The first time the server reads it, macOS prompts for access: click **Allow**. The prompt names whichever app launched Bun, such as Terminal, iTerm, or your IDE.
171
172If the prompt doesn't appear or you clicked Don't Allow, grant access manually under **System Settings > Privacy & Security > Full Disk Access** and add your terminal. Without this, the server exits immediately with `authorization denied`.
173
174**2. Install the plugin**
175
176Start Claude Code by running `claude` in your terminal, then enter this at its prompt:
177
178```
179/plugin install imessage@claude-plugins-official
180```
181
182If the install fails, match the message Claude Code reports:
183
184* `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
185* `Plugin "<name>" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting#plugin-not-found-in-marketplace).
186
187When the install asks for an installation scope, choose the user scope option so the plugin is available across all your projects.
188
189If the install summary reports `Run /reload-plugins to apply.`, you don't need to act on it here, because restarting in the next step picks up the plugin.
190
191**3. Restart with channels enabled**
192
193Exit Claude Code and restart with the channel flag:
194
195```bash theme={null}
196claude --channels plugin:imessage@claude-plugins-official
197```
198
199**4. Text yourself**
200
201Open Messages on any device signed into your Apple ID and send a message to yourself. It reaches Claude immediately: self-chat bypasses access control with no setup.
202
203> [!NOTE]
204>
205> The first reply Claude sends triggers a macOS Automation prompt asking if your terminal can control Messages. Click **OK**.
206
207**5. Allow other senders**
208
209By default, only your own messages pass through. To let another contact reach Claude, add their handle:
210
211```
212/imessage:access allow +15551234567
213```
214
215Handles are phone numbers in `+country` format or Apple ID emails like `[email protected]`.
216
219217## Quickstart
220218
221219Fakechat is an officially supported demo channel that runs a chat UI on localhost, with nothing to authenticate and no external service to configure.
from line 226
228226* [Bun](https://bun.sh) installed. The pre-built channel plugins are Bun scripts. Check with `bun --version`; if that fails, [install Bun](https://bun.sh/docs/installation).
229227* **Team, Enterprise, or managed Console org**: your admin must [enable channels](#enterprise-controls) in managed settings
230228
231<Steps>
232 <Step title="Install the fakechat channel plugin">
233 Start Claude Code by running `claude` in your terminal, then enter the install command at its prompt:
229**1. Install the fakechat channel plugin**
234230
235 ```text theme={null}
236 /plugin install fakechat@claude-plugins-official
237 ```
231Start Claude Code by running `claude` in your terminal, then enter the install command at its prompt:
238232
239 If the install fails, match the message Claude Code reports:
233```text theme={null}
234/plugin install fakechat@claude-plugins-official
235```
240236
241 * `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
242 * `Plugin "<name>" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting#plugin-not-found-in-marketplace).
237If the install fails, match the message Claude Code reports:
243238
244 When the install asks for an installation scope, choose the user scope option so the plugin is available across all your projects.
239* `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
240* `Plugin "<name>" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting#plugin-not-found-in-marketplace).
245241
246 If the install summary reports `Run /reload-plugins to apply.`, you don't need to act on it here, because restarting in the next step picks up the plugin.
247 </Step>
242When the install asks for an installation scope, choose the user scope option so the plugin is available across all your projects.
248243
249 <Step title="Restart with the channel enabled">
250 Exit Claude Code, then restart with `--channels` and pass the fakechat plugin you installed:
244If the install summary reports `Run /reload-plugins to apply.`, you don't need to act on it here, because restarting in the next step picks up the plugin.
251245
252 ```bash theme={null}
253 claude --channels plugin:fakechat@claude-plugins-official
254 ```
246**2. Restart with the channel enabled**
255247
256 The fakechat server starts automatically. The startup screen shows a channels notice stating that messages from `plugin:fakechat@claude-plugins-official` inject directly in this session. If the plugin isn't installed or isn't on the approved allowlist, a warning line naming the problem appears below that notice.
248Exit Claude Code, then restart with `--channels` and pass the fakechat plugin you installed:
257249
258 <Tip>
259 You can pass several plugins to `--channels`, space-separated.
260 </Tip>
261 </Step>
250```bash theme={null}
251claude --channels plugin:fakechat@claude-plugins-official
252```
262253
263 <Step title="Push a message in">
264 Open the fakechat UI at [http://localhost:8787](http://localhost:8787) and type a message:
254The fakechat server starts automatically. The startup screen shows a channels notice stating that messages from `plugin:fakechat@claude-plugins-official` inject directly in this session. If the plugin isn't installed or isn't on the approved allowlist, a warning line naming the problem appears below that notice.
265255
266 ```text theme={null}
267 what's in my working directory?
268 ```
256> [!TIP]
257>
258> You can pass several plugins to `--channels`, space-separated.
269259
270 The message arrives in your Claude Code session. The terminal shows it as an inbound channel line like `← fakechat · web: what's in my working directory?`, while the model receives it as a `<channel source="plugin:fakechat:fakechat">` event, using the plugin's scoped server name. Claude reads it, does the work, and calls fakechat's `reply` tool. If Claude Code asks for permission for the first reply, approve it. The answer shows up in the chat UI.
271 </Step>
272</Steps>
260**3. Push a message in**
261
262Open the fakechat UI at [http://localhost:8787](http://localhost:8787) and type a message:
263
264```text theme={null}
265what's in my working directory?
266```
267
268The message arrives in your Claude Code session. The terminal shows it as an inbound channel line like `← fakechat · web: what's in my working directory?`, while the model receives it as a `<channel source="plugin:fakechat:fakechat">` event, using the plugin's scoped server name. Claude reads it, does the work, and calls fakechat's `reply` tool. If Claude Code asks for permission for the first reply, approve it. The answer shows up in the chat UI.
273269
274270If Claude hits a permission prompt while you're away from the terminal, the session pauses until you respond. Channel servers that declare the [permission relay capability](/docs/en/channels-reference#relay-permission-prompts) can forward these prompts to you so you can approve or deny remotely. For unattended use, [`--dangerously-skip-permissions`](/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode) bypasses most prompts, but only use it in environments you trust. Even then, the [actions no mode auto-approves](/docs/en/permission-modes#actions-no-mode-auto-approves) still apply.
275271
No line in this hunk matches that.