Claude Code 自动化与排错
Claude Code 自动化与排错
外部事件推送到 Claude
4 分钟阅读
用 Channel 将事件推送到正在运行的会话
用 Channel 从一个 MCP 服务器把消息、告警和 Webhook 推送进你的 Claude Code 会话。转发 CI 结果、聊天消息和监控事件,让 Claude 在你不在时也能响应。
一个 Channel 是一个 MCP 服务器,它会把事件推送进你正在运行的 Claude Code 会话,让 Claude 能对你不在终端前时发生的事情做出响应。Channel 可以是双向的:Claude 读取该事件,并通过同一个 Channel 回复,就像一个聊天桥接器。事件只会在会话保持打开期间到达,因此要实现一个始终在线的搭建,你需要在一个后台进程或持久化终端中运行 Claude。
与那些会生成一个全新云端会话、或需要等待轮询的集成不同,事件会到达你已经打开的会话中:请参阅Channel 的对比。
你会把一个 Channel 作为插件安装,并用你自己的凭据配置它。Telegram、Discord 和 iMessage 已包含在这次研究预览中。
当 Claude 通过某个 Channel 回复时,你会在终端中看到入站消息,但看不到回复文本。终端会显示工具调用和一条确认信息(例如“sent”),实际的回复内容会出现在另一个平台上。
如果你管理一个 Team、Enterprise 或 Console 组织,请参阅为你的组织启用 Channel。要构建你自己的 Channel,请参阅Channels 参考文档。
支持的 Channel
每个受支持的 Channel 都是一个需要 Bun 的插件。要在连接真实平台之前先动手体验一下插件流程,可以试试fakechat 快速开始。
- Telegram
- Discord
- iMessage
查看完整的Telegram 插件源码。
创建一个 Telegram bot
在 Telegram 中打开 BotFather,发送 /newbot。为它取一个显示名称,以及一个以 bot 结尾的唯一用户名。复制 BotFather 返回的令牌。
安装该插件
在 Claude Code 中,运行:
如果 Claude Code 报告在任何市场中都找不到该插件,说明你的市场缺失或已过期。运行 /plugin marketplace update claude-plugins-official 刷新它,如果你之前没有添加过,运行 /plugin marketplace add anthropics/claude-plugins-official。然后重试安装。
安装后,运行 /reload-plugins 激活该插件的 configure 命令。
配置你的令牌
用从 BotFather 获得的令牌运行配置命令:
这会将其保存到 ~/.claude/channels/telegram/.env。你也可以在启动 Claude Code 之前,在你的 shell 环境中设置 TELEGRAM_BOT_TOKEN。
重启并启用 Channel
退出 Claude Code,并带上 Channel 标志重启。这会启动 Telegram 插件,它会开始轮询你 bot 的消息:
关联你的账号
打开 Telegram,向你的 bot 发送任意一条消息。该 bot 会回复一个关联代码。
--channels 运行。该 bot 只能在该 Channel 处于活动状态时回复。回到 Claude Code 中,运行:
然后锁定访问权限,使只有你的账号能发送消息:
对于还没有插件的系统,你也可以构建你自己的 Channel。
快速开始
Fakechat 是一个官方支持的演示 Channel,它在本地主机上运行一个聊天界面,无需任何身份验证,也无需配置任何外部服务。
安装并启用 fakechat 后,你可以在浏览器中输入内容,该消息就会到达你的 Claude Code 会话。Claude 会回复,回复内容会显示回浏览器中。测试完 fakechat 界面后,可以试试Telegram、Discord 或 iMessage。
要试用 fakechat 演示,你需要:
- Claude Code 已用 claude.ai 账号或 Claude Console API 密钥安装并完成身份验证
- 已安装 Bun。预制的 Channel 插件都是 Bun 脚本。用
bun --version检查;如果失败,请安装 Bun。 - Team、Enterprise,或统一管理的 Console 组织:你的管理员必须在统一管理设置中启用 Channel
安装 fakechat Channel 插件
启动一个 Claude Code 会话,运行安装命令:
如果 Claude Code 报告在任何市场中都找不到该插件,说明你的市场缺失或已过期。运行 /plugin marketplace update claude-plugins-official 刷新它,如果你之前没有添加过,运行 /plugin marketplace add anthropics/claude-plugins-official。然后重试安装。
重启并启用该 Channel
退出 Claude Code,然后带上 --channels 重启,并传入你安装的 fakechat 插件:
fakechat 服务器会自动启动。
推送一条消息进来
在 http://localhost:8787 打开 fakechat 界面,输入一条消息:
该消息会以 <channel source="fakechat"> 事件的形式到达你的 Claude Code 会话。Claude 读取它,完成这项工作,并调用 fakechat 的 reply 工具。答案会显示在聊天界面中。
如果 Claude 在你不在终端前时遇到一个权限提示,该会话会暂停,直到你响应为止。声明了权限转发能力的 Channel 服务器可以把这些提示转发给你,让你能远程批准或拒绝。对于无人值守的使用场景,--dangerously-skip-permissions 可以绕过除显式 ask 规则之外的提示,但只应在你信任的环境中使用它。
当你以 -p 非交互模式运行 Channel 时,需要终端输入的工具(例如多选题和计划模式批准)会被禁用,因此会话永远不会因等待输入而卡住。
安全性
每个经过批准的 Channel 插件都维护一份发送者允许列表:只有你添加过的 ID 才能推送消息,其他人的消息会被静默丢弃。
Telegram 和 Discord 通过关联来搭建这份列表:
- 在 Telegram 或 Discord 中找到你的 bot,给它发送任意消息
- 该 bot 会回复一个关联代码
- 在你的 Claude Code 会话中,收到提示时批准该代码
- 你的发送者 ID 就会被加入允许列表
iMessage 的工作方式不同:给自己发短信会自动绕过这道关卡,你可以用 /imessage:access allow 按联系方式添加其他联系人。
除此之外,你用 --channels 控制每次会话启用哪些服务器,你的组织则在 claude.ai 的 Team 和 Enterprise 方案上,以及部署了统一管理设置的 Console 组织上,用 channelsEnabled 控制可用性。
仅仅出现在 .mcp.json 中还不足以推送消息:该服务器还必须在 --channels 中被指名。
如果某个 Channel 声明了权限转发,该允许列表也会限制这个能力:任何能通过该 Channel 回复的人,都可以批准或拒绝你会话中的工具使用,因此只应把这个权限交给你信任的允许列表发送者。
企业控制
管理员通过两项用户无法覆盖的统一管理设置来控制可用性。默认值取决于你的身份验证方式:
- claude.ai 的 Team 和 Enterprise:Channel 默认被阻止,直到一位 Owner 启用它们。
- 使用 API 密钥身份验证的 Anthropic Console:Channel 默认允许。只有当你的组织部署了统一管理设置时,才需要这个设置。
无论哪种情况,除非某个用户用 --channels 为该次会话主动选用了某个 Channel,否则该 Channel 都不会运行。
| 设置 | 用途 | 未配置时的行为 |
|---|---|---|
channelsEnabled | 总开关。必须为 true 才能让任何 Channel 送达消息。可通过 claude.ai 管理控制台中的开关设置,或直接在统一管理设置中设置。关闭时会阻止包括开发标志的所有 Channel。 | claude.ai 的 Team 和 Enterprise:Channel 被阻止。Console:Channel 默认允许,除非你的组织部署了统一管理设置,此时 Channel 会被阻止,直到设置了这个键 |
allowedChannelPlugins | 一旦 Channel 被启用,允许哪些插件注册。设置后会替换 Anthropic 维护的列表。只在 channelsEnabled 为 true 时生效。 | 应用 Anthropic 的默认列表 |
没有所属组织的 Pro 和 Max 用户会完全跳过这些检查:Channel 默认可用,用户通过 --channels 按会话主动选用。
为你的组织启用 Channel
从 claude.ai → Admin settings → Claude Code → Channels 为你的组织启用 Channel(需要 Owner 角色),或在统一管理设置中将 channelsEnabled 设为 true。
启用后,你组织中的用户就可以用 --channels 为个别会话主动选用 Channel 服务器。如果该设置被禁用或未设置,该 MCP 服务器仍会连接,其工具仍可正常使用,但 Channel 消息不会送达。启动时的警告会告诉用户请管理员启用该设置。
限制哪些 Channel 插件可以运行
默认情况下,Anthropic 维护的允许列表中的任何插件都可以注册为 Channel。Team 和 Enterprise 方案的管理员可以在统一管理设置中设置 allowedChannelPlugins,用自己的允许列表替换那份列表。可以用它来限制允许哪些官方插件、批准来自你自己内部市场的 Channel,或两者兼有。每个条目都指明了一个插件以及它来自哪个市场:
设置了 allowedChannelPlugins 后,它会完全替换 Anthropic 的允许列表:只有列出的插件才能注册。保持未设置状态,即可回退到 Anthropic 的默认允许列表。一个空数组会阻止允许列表中的所有 Channel 插件,但 --dangerously-load-development-channels 仍可为本地测试绕过它。要完全阻止 Channel(包括开发标志),请改为保持 channelsEnabled 未设置。
这个设置需要 channelsEnabled: true。如果某个用户给 --channels 传入了一个不在你列表中的插件,Claude Code 会正常启动,但该 Channel 不会注册,启动提示会说明该插件不在组织的批准列表中。
研究预览
Channel 是一项研究预览功能。可用性正在逐步推广中,--channels 标志的语法和协议约定可能会根据反馈发生变化。
在预览期间,--channels 只接受来自 Anthropic 维护的允许列表中的插件,或者如果管理员设置了allowedChannelPlugins,也接受来自你组织允许列表中的插件。claude-plugins-official 中的 Channel 插件是默认批准的集合。如果你传入了一个不在生效允许列表中的插件,Claude Code 会正常启动,但该 Channel 不会注册,启动提示会告诉你原因。
要测试你正在构建的某个 Channel,使用 --dangerously-load-development-channels。关于测试你自己构建的自定义 Channel 的信息,请参阅在研究预览期间测试。
请在 Claude Code GitHub 仓库报告问题或反馈。
Channel 的对比
Claude Code 有几项功能可以连接到终端之外的系统,各自适合不同类型的工作:
| 功能 | 作用 | 适合场景 |
|---|---|---|
| 网页版 Claude Code | 从 GitHub 克隆,在一个全新的云端沙箱中运行任务 | 委派可以稍后再查看的、自包含的异步工作 |
| Slack 中的 Claude | 从某个频道或线程中的 @Claude 提及生成一个网页会话 | 直接从团队对话上下文中启动任务 |
| 标准MCP 服务器 | Claude 在任务过程中查询它;不会有任何内容推送到会话中 | 让 Claude 按需访问、读取或查询某个系统 |
| 远程控制 | 你从 claude.ai 或 Claude 移动应用驱动你的本地会话 | 在离开桌面时引导一个进行中的会话 |
Channel 填补了这个列表中的一个空白:把来自非 Claude 来源的事件推送进你已经在运行的本地会话中。
- 聊天桥接:通过 Telegram、Discord 或 iMessage 从你的手机向 Claude 提问,答案会回到同一个聊天中,而实际工作是在你的机器上、针对你真实的文件运行的。
- Webhook 接收器:来自 CI、你的错误追踪工具、部署流水线或其他外部服务的 Webhook 会到达一个 Claude 已经打开了你的文件、并记得你正在调试什么的地方。
后续步骤
一旦你有了一个正在运行的 Channel,可以探索以下相关功能:
- 为还没有插件的系统构建你自己的 Channel
- 用远程控制从你的手机驱动本地会话,而不是把事件转发进去
- 用定时任务按计划轮询,而不是响应推送事件