Claude Code Channels与计划任务完整指南:把外部事件推入会话
Claude Code Channels与计划任务完整指南:把外部事件推入会话
Claude Code Channels与计划任务完整指南:把外部事件推入会话 Claude Code Channels与计划任务完整指南:把外部事件推入会话 Modified June 10 9.4 一次性提醒 ⠀ 你甚至不一定非得手打 /schedule。 ⠀ 自然语言也可以: ⠀ Code block Plain Text remind me at 3pm to push the release branch ⠀ Code block Plain Text in 45 minutes, check whether the integration tests passed 10. 当前本地计划任务的关键限制 ⠀ 官方当前明确写了几个限制,必须知道: ⠀ 10.1 任务是 session scoped ⠀ 只要当前 Claude Code 会话结束,任务就没了。 ⠀ 10.2 不跨重启持久化(v2.1.110 部分改善) ⠀ 重启 Claude Code 后,本地 cron 任务默认不会继续。 ⠀ 但从 v2.1.110 起,如果用 resume 或 continue 恢复之前的会话,未过期的计划任务会一起恢复。也就是说: ⠀ • 正常重启 → 任务丢失 • claude resume / claude continue → 未过期任务自动恢复 ⠀ 10.3 Claude 忙的时候不会插队 ⠀ 定时任务会在 turn 之间触发,不会在 Claude 正在回答时硬插进去。 ⠀ 10.4 recurring task 7 天自动过期 ⠀ 官方当前默认策略是: ⠀ • 循环任务 7 天后自动过期 • 最后再触发一次,然后删除 ⠀ 这是为了防止遗忘的轮询长期跑下去。 ⠀ 10.5 退出确认会提示剩余任务(v2.1.113+) ⠀ 从 v2.1.113 起,当你退出会话时,如果还有未完成的计划任务,Claude Code 会显示确认提示并展示倒计时: ⠀ • 一次性任务:显示距离触发还有多久 • 循环任务:显示下一次触发时间 ⠀ 这样你就不会不小心退出然后丢掉还没跑的任务。 ⠀ 10.6 每个会话最多 50 个计划任务 ⠀ 官方当前限制:单个会话最多 50 个计划任务。超过后需要先删除旧的才能创建新的。 ⠀ 10.7 resume 不会恢复所有任务 ⠀ v2.1.110 的 resume 恢复策略有细节: ⠀ • 循环任务:创建后 7 天内的会恢复 • 一次性任务:计划时间未过的会恢复 • 后台 Bash 和监控任务:永远不恢复 ⠀ 10.8 Jitter 策略 ⠀ 为了避免大规模部署时所有 Claude 实例在同一时刻触发: ⠀ • 循环任务:最多延迟周期的 10%(上限 15 分钟) • 一次性任务:整点/半点前后最多提前 90 秒 ⠀ 这是确定性偏移,不是随机的。 ⠀ 10.9 Bedrock / Vertex / Foundry 限制 ⠀ 在 Bedrock、Vertex 或 Foundry 环境下,/loop <prompt 固定为 10 分钟间隔,不支持动态调整。 ⠀ 10.10 禁用调度器 ⠀ 如果你完全不需要计划任务功能: ⠀ Code block Plain Text CLAUDE CODE DISABLE CRON=1 claude 11. 什么时候该用 Cloud / Desktop scheduled tasks ⠀ 如果你需要: ⠀ • 关掉终端后也继续 • 重启后依然在 • 不依赖当前 session 持续存活 ⠀ 那就别靠 /loop。 ⠀ 官方建议: ⠀ • 要可靠、无需你机器在线:用 Cloud scheduled tasks • 要跑在你本机且跨重启:用 Desktop scheduled tasks • 只是在当前 session 临时盯一件事:用 /loop 12. 常见误区 ⠀ 误区 1:Channels = Remote Control ⠀ 不是。 ⠀ • Remote Control 是你自己远程接管 • Channels 是外部系统把消息推过来 ⠀ 误区 2:有 /loop 就不用 Channels ⠀ 不对。 ⠀ 如果外部系统本来就能发事件,轮询只是更慢、更贵、更脆。 ⠀ 误区 3:计划任务会一直留着 ⠀ 不会。当前本地计划任务是 session scoped,循环任务还有 7 天自动过期。 13. 实用速查 ⠀ Code block Plain Text /plugin install fakechat@claude plugins official /reload plugins ⠀ Code block Plain Text claude channels plugin:fakechat@claude plugins official ⠀ Code block Plain Text 同时启动多个 channel claude channels plugin:telegram@claude plugins official plugin:discord@claude plugins official ⠀ Code block Plain Text /loop 5m check if the deployment finished ⠀ Code block Plain Text 按 Esc 取消正在等待的 /loop ⠀ Code block Plain Text what scheduled tasks do I have? cancel the deploy check job ⠀ Code block Plain Text 自定义 /loop 默认提示词 创建 .claude/loop.md 或 /.claude/loop.md 9.4 一次性提醒 ⠀ 你甚至不一定非得手打 /schedule。 ⠀ 自然语言也可以: ⠀ ⠀ 10. 当前本地计划任务的关键限制 ⠀ 官方当前明确写了几个限制,必须知道: ⠀ 10.1 任务是 session scoped ⠀ 只要当前 Claude Code 会话结束,任务就没了。 ⠀ 10.2 不跨重启持久化(v2.1.110 部分改善) ⠀ 重启 Claude Code 后,本地 cron 任务默认不会继续。 ⠀ 但从 v2.1.110 起,如果用 resume 或 continue 恢复之前的会话,未过期的计划任务会一起恢复。也就是说: ⠀ • 正常重启 → 任务丢失 • claude resume / claude continue → 未过期任务自动恢复 ⠀ 10.3 Claude 忙的时候不会插队 ⠀ 定时任务会在 turn 之间触发,不会在 Claude 正在回答时硬插进去。 ⠀ 10.4 recurring task 7 天自动过期 ⠀ 官方当前默认策略是: ⠀ • 循环任务 7 天后自动过期 • 最后再触发一次,然后删除 ⠀ 这是为了防止遗忘的轮询长期跑下去。 ⠀ 10.5 退出确认会提示剩余任务(v2.1.113+) ⠀ 从 v2.1.113 起,当你退出会话时,如果还有未完成的计划任务,Claude Code 会显示确认提示并展示倒计时: ⠀ • 一次性任务:显示距离触发还有多久 • 循环任务:显示下一次触发时间 ⠀ 这样你就不会不小心退出然后丢掉还没跑的任务。 ⠀ 10.6 每个会话最多 50 个计划任务 ⠀ 官方当前限制:单个会话最多 50 个计划任务。超过后需要先删除旧的才能创建新的。 ⠀ 10.7 resume 不会恢复所有任务 ⠀ v2.1.110 的 resume 恢复策略有细节: ⠀ • 循环任务:创建后 7 天内的会恢复 • 一次性任务:计划时间未过的会恢复 • 后台 Bash 和监控任务:永远不恢复 ⠀ 10.8 Jitter 策略 ⠀ 为了避免大规模部署时所有 Claude 实例在同一时刻触发: ⠀ • 循环任务:最多延迟周期的 10%(上限 15 分钟) • 一次性任务:整点/半点前后最多提前 90 秒 ⠀ 这是确定性偏移,不是随机的。 ⠀ 10.9 Bedrock / Vertex / Foundry 限制 ⠀ 在 Bedrock、Vertex 或 Foundry 环境下,/loop <prompt 固定为 10 分钟间隔,不支持动态调整。 ⠀ 10.10 禁用调度器 ⠀ 如果你完全不需要计划任务功能: ⠀ 11. 什么时候该用 Cloud / Desktop scheduled tasks ⠀ 如果你需要: ⠀ • 关掉终端后也继续 • 重启后依然在 • 不依赖当前 session 持续存活 ⠀ 那就别靠 /loop。 ⠀ 官方建议: ⠀ • 要可靠、无需你机器在线:用 Cloud scheduled tasks • 要跑在你本机且跨重启:用 Desktop scheduled tasks • 只是在当前 session 临时盯一件事:用 /loop 12. 常见误区 ⠀ 误区 1:Channels = Remote Control ⠀ 不是。 ⠀ • Remote Control 是你自己远程接管 • Channels 是外部系统把消息推过来 ⠀ 误区 2:有 /loop 就不用 Channels ⠀ 不对。 ⠀ 如果外部系统本来就能发事件,轮询只是更慢、更贵、更脆。 ⠀ 误区 3:计划任务会一直留着 ⠀ 不会。当前本地计划任务是 session scoped,循环任务还有 7 天自动过期。 13. 实用速查 ⠀ ⠀ ⠀ ⠀ ⠀ ⠀ ⠀ ⠀ 14. 下一步建议 ⠀ • 想跨设备继续本地会话:继续看 Remote Control完整指南 • 想控制模型、1M 上下文和 opusplan:继续看 安装指南中的模型配置章节 最后更新:2026年5月30日 | 适用版本:Claude Code v2.1.158 最后更新:2026年5月30日 | 适用版本:Claude Code v2.1.158 课程信息 ⠀ • 作者:老金 • GitHub:https://github.com/KimYx0207 • 公众号:老金带你玩AI • X(Twitter):老金带你玩AI • 个人博客:https://aiking.dev • 预计学时:2 3小时 • 难度等级:⭐⭐⭐ 进阶 • 更新日期:2026年5月30日 • 适用版本:Claude Code v2.1.158(验证于 2026 05 30) • 信息来源: ◦ Claude Code 官方文档 Channels ◦ Claude Code 官方文档 Scheduled tasks ◦ GitHub Releases v2.1.128+ Claude Code 官方文档 Channels Claude Code 官方文档 Scheduled tasks GitHub Releases v2.1.128+ ◦ Claude Code 官方文档 Channels Claude Code 官方文档 Channels ◦ Claude Code 官方文档 Scheduled tasks Claude Code 官方文档 Scheduled tasks ◦ GitHub Releases v2.1.128+ GitHub Releases v2.1.128+ 本课学习目标 ⠀ 完成本课后,你将能: ⠀ 1. 理解 Channels、Remote Control、MCP、Cloud Tasks 之间的区别 2. 正确安装并启用官方 channel plugin 3. 用 channels 把 Telegram / Discord / iMessage / fakechat 推入当前会话 4. 正确使用 /schedule、/loop、CronCreate / CronList / CronDelete 5. 避开“用 polling 解决 push 问题”这种常见设计误区 1. 先说结论 ⠀ Channels 和计划任务,解决的是两类不同问题: ⠀ • Channels:外部事件主动推给 Claude • 计划任务:Claude 按时间轮询或提醒 ⠀ 如果你只记一句话: ⠀ 有事件就用 Channels,没有事件源才考虑 /loop 或 /schedule。 有事件就用 Channels,没有事件源才考虑 /loop 或 /schedule。 2. Channels 是什么 ⠀ 官方当前定义里,Channels 是: ⠀ 通过 MCP server 把消息、提醒、Webhook 直接推入你已经打开的 Claude Code 会话。 通过 MCP server 把消息、提醒、Webhook 直接推入你已经打开的 Claude Code 会话。 ⠀ 它不是新开云端会话,也不是轮询。 ⠀ 它的核心价值是: ⠀ • CI 失败了,直接把结果推进当前会话 • Telegram / Discord / iMessage 上给 Claude 发消息 • 你不在终端前时,也能让外部事件进到当前 session ⠀ 2.1 当前官方状态 ⠀ • research preview • 需要 Claude Code v2.1.80+ • 需要 claude.ai 登录 • Team / Enterprise 默认可能关闭,需要管理员启用 ⠀ v2.1.128 变更: channels 现在也支持 Console auth(API key)登录,不再仅限 claude.ai 登录。如果你之前因为 API key 模式无法使用 Channels,可以重新尝试。 3. Channels、Remote Control、普通 MCP 的区别 ⠀ 功能 解决什么问题 最适合场景 Channels 外部事件主动推进来 CI、聊天桥、Webhook Remote Control 你自己从别的设备继续控制会话 手机继续本地会话 普通 MCP Claude 在任务中主动调用外部工具 按需查数据 / 操作系统 /loop / Cron 按时间轮询或提醒 没有事件推送源时 功能 功能 解决什么问题 解决什么问题 最适合场景 最适合场景 Channels Channels 外部事件主动推进来 外部事件主动推进来 CI、聊天桥、Webhook CI、聊天桥、Webhook Remote Control Remote Control 你自己从别的设备继续控制会话 你自己从别的设备继续控制会话 手机继续本地会话 手机继续本地会话 普通 MCP 普通 MCP Claude 在任务中主动调用外部工具 Claude 在任务中主动调用外部工具 按需查数据 / 操作系统 按需查数据 / 操作系统 /loop / Cron /loop / Cron 按时间轮询或提醒 按时间轮询或提醒 没有事件推送源时 没有事件推送源时 ⠀ 一个特别重要的判断标准: ⠀ • 外部系统会主动发事件:优先 Channels • 只能自己定时检查:才用 /loop 4. 开始前准备 ⠀ v2.1.139+ 注意:当环境中设置 ANTHROPIC API KEY、apiKeyHelper 或 ANTHROPIC AUTH TOKEN 时,/schedule、Remote Control、claude.ai MCP connectors 和通知偏好会被禁用。Channels / 计划任务教程默认按 Claude.ai 登录路径讲解;企业 API key 环境请先核对当前 /status。 v2.1.139+ 注意:当环境中设置 ANTHROPIC API KEY、apiKeyHelper 或 ANTHROPIC AUTH TOKEN 时,/schedule、Remote Control、claude.ai MCP connectors 和通知偏好会被禁用。Channels / 计划任务教程默认按 Claude.ai 登录路径讲解;企业 API key 环境请先核对当前 /status。 ⠀ 4.1 基础条件 ⠀ • Claude Code 已安装并登录 claude.ai • 能看到 /plugin • 若要跑官方 channel plugin,必须安装 Bun(所有官方 channel plugin 都依赖 Bun 运行时) ⠀ 4.2 当前官方支持的典型 channel plugin ⠀ • Telegram • Discord • iMessage • fakechat(官方 demo) 5. 最推荐的入门方式:fakechat ⠀ 如果你第一次接触 Channels,别一上来就配 Telegram。 ⠀ 先用官方 demo fakechat 最稳。 ⠀ 5.1 安装插件 ⠀ 在 Claude Code 里: ⠀ ⠀ 如果提示 marketplace 不存在或未更新,先执行: ⠀ ⠀ 或: ⠀ ⠀ 5.2 启动 channels ⠀ 退出当前会话后重新启动: ⠀ ⠀ 如果要同时启动多个 channel,用空格分隔: ⠀ ⠀ 5.3 打开本地界面 ⠀ 浏览器打开: ⠀ ⠀ 在页面输入消息,它会作为 <channel source="fakechat" 事件进入你当前 Claude Code 会话。 ⠀ 这就是理解 Channels 最快的方法。 6. Telegram / Discord / iMessage 的核心模式 ⠀ 它们虽然接法不同,但逻辑一致: ⠀ 1. 装 plugin 2. 配 token 或权限 3. 用 channels 启动 4. 做 pairing / allowlist 5. 之后该平台的消息会直接推入当前 session ⠀ 6.1 Telegram ⠀ 官方主路径大致是: ⠀ ⠀ 然后重启: ⠀ ⠀ 再做配对: ⠀ ⠀ 6.2 Discord ⠀ 同理: ⠀ ⠀ 然后: ⠀ ⠀ 最后: ⠀ ⠀ Discord Bot 必须开启的权限: ⠀ • Message Content Intent(在 Developer Portal 的 Bot 设置中开启) • View Channels • Send Messages • Send Messages in Threads • Read Message History • Attach Files • Add Reactions ⠀ 6.3 iMessage ⠀ iMessage 逻辑不同: ⠀ • 只支持 macOS • 直接读本机 Messages 数据库 • 需要 Full Disk Access • 回复靠 AppleScript ⠀ 启动方式: ⠀ ⠀ ⠀ 默认给自己发消息即可打通;允许其他联系人则用: ⠀ ⠀ 6.4 Token 存储位置 ⠀ 各 channel 的 token 默认存储在: ⠀ • Telegram: /.claude/channels/telegram/.env(包含 TELEGRAM BOT TOKEN) • Discord: /.claude/channels/discord/.env(包含 DISCORD BOT TOKEN) ⠀ 如果你需要迁移配置或排查连接问题,直接检查这些文件。 7. Channels 的安全边界 ⠀ 官方当前强调的几个点很关键: ⠀ 7.1 allowlist 是核心 ⠀ 所有 approved channel plugin 都有 sender allowlist。 ⠀ 也就是说: ⠀ • 不是“谁知道 bot 就能发” • 而是“只有被允许的 sender 才能推消息进来” ⠀ 7.2 channels 只是本会话启用 ⠀ 即便 .mcp.json 里有 server,也不代表它能推送消息。 ⠀ 必须当前会话显式用: ⠀ ⠀ 7.3 Team / Enterprise 还能再控一层 ⠀ 管理员可以通过: ⠀ • channelsEnabled • allowedChannelPlugins ⠀ 控制: ⠀ • 组织是否允许 Channels • 哪些 plugin 可以注册成 channel ⠀ 另外,如果你在开发自定义 channel plugin,需要加: ⠀ ⠀ 该参数绕过 marketplace 验证,仅用于本地开发调试。 ⠀ 7.4 Permission Relay:远端审批权限请求 ⠀ 从 v2.1.81 起(v2.1.100 完全实现),Channels 支持权限中继(Permission Relay): ⠀ 当 Claude 需要执行需要审批的操作时(如写文件、执行命令),权限确认请求会被转发到你的 Channel(如 Telegram / Discord),你可以直接在手机上批准或拒绝。 ⠀ 这意味着你不需要守在终端前也能让 Claude 继续有权限地工作。 ⠀ 7.5 事件只在会话打开时到达 ⠀ Channel 消息只会在 Claude Code 会话运行时被接收。如果你关掉了终端,消息就丢了。 ⠀ 如果你需要 always on 的 Channel 接收: ⠀ • 在后台进程中运行 Claude Code • 或使用持久终端(如 tmux / screen) 8. 什么时候该用 /loop ⠀ /loop 不是 Channels 的替代品,它是: ⠀ 当前会话仍然开着时,用最低成本做“定时轮询”。 当前会话仍然开着时,用最低成本做“定时轮询”。 ⠀ 官方当前把 /loop 归为 bundled skill,不是固定逻辑 built in command。 ⠀ 8.1 最基础用法 ⠀ ⠀ 8.2 /loop 不带 prompt 时的默认行为 ⠀ 如果你只打 /loop 不带任何参数,Claude 会使用内置的维护提示词,按以下优先级自动工作: ⠀ 1. 继续未完成的工作 2. 维护当前 PR(查看 review comments、CI 失败、merge conflicts) 3. 运行清理(bug 排查、代码简化) ⠀ 你也可以自定义默认提示词:在项目目录创建 .claude/loop.md,或在用户目录创建 /.claude/loop.md。项目级优先于用户级。修改后下一次迭代自动生效。 ⠀ 8.3 它支持几种写法 ⠀ ⠀ 如果你不写间隔且带了自定义 prompt,Claude 会动态选择间隔(1 分钟到 1 小时之间),根据观察到的情况自行调整。不带 prompt 的纯 /loop 也是动态间隔。 ⠀ 8.4 支持单位 ⠀ • s • m • h • d ⠀ 但底层 cron 只有分钟粒度,所以秒会向上取整到分钟。 ⠀ 8.5 还能循环执行另一个命令 ⠀ ⠀ 8.6 取消正在等待的 /loop ⠀ 在 /loop 等待下一次迭代时,按 Esc 即可取消(v2.1.111+)。 ⠀ 8.7 /proactive 别名 ⠀ 从 v2.1.105 起,/proactive 是 /loop 的别名,功能完全相同。如果你觉得 "loop" 不够语义化,可以用 /proactive。 9. /schedule、CronCreate、CronList、CronDelete ⠀ 除了 /loop,Claude Code 现在还有更底层的 cron 调度能力。 ⠀ 9.1 当前官方工具 ⠀ 工具 作用 CronCreate 创建任务 CronList 列出任务 CronDelete 删除任务 工具 工具 作用 作用 CronCreate CronCreate 创建任务 创建任务 CronList CronList 列出任务 列出任务 CronDelete CronDelete 删除任务 删除任务 ⠀ 计划任务功能(/loop、CronCreate 等)从 v2.1.72+ 开始可用,比 Channels(v2.1.80+)更早。 ⠀ 9.2 Cron 表达式参考 ⠀ 如果 Claude 直接使用 CronCreate,底层走的是标准 cron 表达式: ⠀ 表达式 含义 /5 每 5 分钟 0 每小时整点 0 9 每天早上 9 点 0 9 1 5 工作日早上 9 点 30 14 15 3 3 月 15 日下午 2:30 表达式 表达式 含义 含义 /5 /5 每 5 分钟 每 5 分钟 0 0 每小时整点 每小时整点 0 9 0 9 每天早上 9 点 每天早上 9 点 0 9 1 5 0 9 1 5 工作日早上 9 点 工作日早上 9 点 30 14 15 3 30 14 15 3 3 月 15 日下午 2:30 3 月 15 日下午 2:30 ⠀ 所有时间均为本地时区,不是 UTC。 ⠀ 9.3 /schedule 是什么 ⠀ /schedule 是当前用户入口,用来创建、更新、列出和运行 Cloud scheduled tasks。 ⠀ 但在本地 session 里,Claude 也会借助 CronCreate / CronList / CronDelete 做 session scoped 的计划任务和提醒。 ⠀