Cherry Studio 自主能力指南:cron 定时调度、notify 消息推送与 config 频道管理
Cherry Studio 自主能力指南cron 定时调度、notify 消息推送与 config 频道管理【免费下载链接】cherry-studioAI productivity studio with smart chat, autonomous agents, and 300 assistants. Unified access to frontier LLMs项目地址: https://gitcode.com/GitHub_Trending/ch/cherry-studio本篇技术指南聚焦 Cherry Studio 为 Agent 提供的三条自主能力工具链——mcp__cherry-tools__cron定时调度、mcp__cherry-tools__notify主动推送与mcp__cherry-tools__config频道与自身配置管理说明三者如何组合成一条完整的频道投递工作流config负责打通 IM 频道cron在 Cherry 内部调度可投递到频道的任务notify负责把消息与文件推送到频道。读完本文你将掌握这三个工具的执行顺序、触发条件、前置依赖、异常恢复策略与完整实战示例并理解其背后的源码实现边界。本文内容以 resources/skills/cherry-tool-guide/references/autonomy.md 为主体骨架并结合 src/main/ai/mcp/servers/cherryAutonomyTools.ts、src/shared/data/api/schemas/jobs.ts 等源码进行佐证。工具的具体参数形状以会话中实时暴露的 MCP 工具 schema 为准本文只负责路由、顺序、前置条件与安全边界的说明。三条工具构成一个频道投递工作流在 Cherry Studio 的进程内 MCP 服务cherry-tools见 src/main/ai/mcp/servers/cherryBuiltinTools.ts中自主能力工具由 CherryAutonomyTools 统一承载。与无状态的查询类工具不同这三个工具代表某个具体的 Agent行事——调度它的任务、通过它的频道推送、管理它自己的配置因此它们携带了每个会话的 Agent 上下文agentId、workspace、可信通知频道等。三个工具的分工如下工具职责核心动作mcp__cherry-tools__config检查与管理 Agent 自身配置、连接 IM 频道status/add_channel/update_channel/remove_channel/reconnect_channel/rename/complete_bootstrap/reset_bootstrapmcp__cherry-tools__cron在 Cherry 内部调度定时/周期/一次性任务add/list/removemcp__cherry-tools__notify通过已连接频道主动推送消息或工作区文件messagefile_path 可选channel_id它们在 src/shared/ai/builtinTools.ts 中被定义为cron、notify、config三个工具名并通过 SKILL 路由表见 resources/skills/cherry-tool-guide/SKILL.md把调度任务、主动推送、检查/连接/修复 IM 频道三类用户意图分别路由到这三个工具。Intent gate意图门槛这些工具可以在没有审批卡片的情况下执行——调度变更、通知、Agent/频道配置都属于自动批准的效果与需要审批的kb_manage、cli_install、session_create等形成对比见 SKILL.md 全局规则。正因为如此意图门槛Intent gate是使用它们的第一原则不要因为工具可用就调用。必须先确认用户明确请求了该效果或者该调用是完成一个已被批准任务的必要步骤。例如用户只是闲聊就不要随手cron add一个任务用户没有要求推送就不要notify。若审批被拒绝应停止并如实报告绝不换一条路由重试同一个效果。定时调度mcp__cherry-tools__croncron工具负责在Cherry 内部调度任务。禁止用操作系统crontab、at或后台 shell 循环来管理面向用户的调度——执行、投递与生命周期都由 Cherry 拥有。这一点在 SKILL.md 的全局规则中同样强调知识库、IM 频道、调度、受管 CLI 等只能通过这些工具变更shell 绕过会跳过工具内部的登记、作用域与同步记账逻辑。动作与参数cron支持三个动作来自 CRON_TOOL 的 schema 定义动作说明关键参数add创建周期或一次性任务name、message调度时执行的提示词/指令、cron或every或at三选一、channel_ids、timeout_minuteslist列出已存在的任务—remove删除任务id任务 ID三种触发形态cron / every / at互斥一个任务必须有且仅有一个触发形态这是addJob处理器中的硬性校验见 cherryAutonomyTools.ts#L697-L724croncron 表达式例如0 9 * * 1-5表示工作日早上 9 点。对应底层Trigger判别联合的cron分支含expr、可选timezone、可选limit运行次数上限见 jobs.ts#L49-L55。every人类可读的间隔时长如30m、2h、24h、1h30m。由parseDurationToMinutes解析为分钟后再换算成毫秒底层对应interval触发分支jobs.ts#L57-L61。atRFC3339 格式的单次时间戳如2024-01-15T14:30:0008:00底层对应once触发分支Unix 毫秒时间戳jobs.ts#L63-L67。源码中同时传入多个触发字段会直接报错Use only one of cron, every, or at一个都不传则报One of cron, every, or at is required。这三个分支共同构成TriggerSchema判别联合jobs.ts#L69是任务调度的类型安全基础。结果投递到频道cron 与 notify/config 的联动任务的结果可以直接投递到频道因此调度一个落在 Telegram 里的报告是一条cron任务而不是手工写 OS cron 条目再加一次单独发送。省略channel_ids使用当前轮次已配置的通知接收方trustedNotifyChannels传[]跳过频道投递传显式 ID必须是已配置的接收方源码中通过getNotifyChannelAccess校验归属与授权cherryAutonomyTools.ts#L738-L748。此外timeout_minutes控制任务超时默认 2 分钟长任务可调到 10超时后任务会被中止。主动推送mcp__cherry-tools__notifynotify通过已连接频道主动向用户发送消息和/或工作区文件——用于在用户没有追问的情况下主动推送结果、状态更新或产物文件。它把被问到才回答变成完成即送达。参数与语义来自 NOTIFY_TOOL 的 schema参数说明message发送给用户的通知消息提供file_path时可省略file_path要投递的工作区文件相对路径或工作区内绝对路径提供message时可省略channel_id可选显式指定目标频道省略则投递给本轮全部已配置接收方message与file_path至少提供一个两者可同时提供发送前会对消息做sanitizeChannelOutput清洗cherryAutonomyTools.ts#L816文件会先经resolveWorkspaceFile解析坏路径会在分发前即失败cherryAutonomyTools.ts#L815。前置依赖至少一个已连接频道notify的前置条件是存在至少一个已连接频道。关键源码事实tools()方法只在trustedNotifyChannels.length 0时才把notify暴露出来且会在描述中列出已配置接收方无接收方时notify从工具列表消失cherryAutonomyTools.ts#L385-L397。而调用时若配置为空处理器直接抛notify is unavailable because this turn has no configured notification recipientscherryAutonomyTools.ts#L420-L426。因此文档强调即便当前没有连接任何频道notify也会保持列出并如实报告没有频道已连接。此时路由用户去mcp__cherry-tools__config/ 设置页配置频道而不是盲目重试。文件支持因频道而异不同频道对文件的支持不同源码描述与运行结果会如实反映cherryAutonomyTools.ts#L141Telegram / Feishu / WeChat可转发任意文件WeChat 还能以原生视频媒体发送视频Discord / Slack / QQ当前尚不支持文件。工具会按频道逐一报告投递结果Message sent to N chat(s)/File xxx sent to N chat(s)/ 逐条Errors: ...必须如实转述。源码中还有一条重要的失败语义请求的消息或文件一个都没送达且存在错误时整个工具调用标记为isError: true避免 Agent 看到成功而用户其实什么都没收到cherryAutonomyTools.ts#L869-L880。与 report_artifacts 的区别notify是把消息/文件通过频道推送出去。如果只是把产物文件登记为 Cherry UI 中的可交付物不发送到频道应使用另一个工具report_artifacts详见 outputs.md。频道与自身配置mcp__cherry-tools__configconfig负责检查与管理 Agent 自身的配置。任何操作前先执行status——它会列出当前频道含连接状态、当前模型、以及可添加的适配器类型让你基于真实 ID 行动而不是猜测。动作全集来自 CONFIG_TOOL 的 schema动作说明status查看当前频道含连接状态、模型、支持的适配器类型add_channel连接新的 IM 频道Telegram / Feishu / Discord / Slack / WeChat / QQupdate_channel/remove_channel按channel_id修改或删除已有频道reconnect_channel重新建立断开的频道WeChat / Feishu 会重新生成二维码供重扫会话过期或初始设置失败时rename修改 Agent 显示名complete_bootstrap/reset_bootstrap标记/重置 onboarding 引导完成状态status 的输出结构configStatus返回的 JSON 包含agentId、name、model、supported_channel_types每个类型附带描述与必填/选填字段、channels每个频道的id/type/name/enabled/connected以及heartbeat_enabledcherryAutonomyTools.ts#L885-L921。其中connected来自ChannelManager的实时适配器状态映射不是静态配置字段。六种频道的凭据字段add_channel的凭据字段由 CHANNEL_CONFIG_SCHEMAS 定义status也会把这些字段描述反馈给 Agent类型必填字段选填字段备注telegrambot_tokenallowed_chat_idsBot Token 向 BotFather 获取feishuapp_id、app_secret、encrypt_key、verification_token、domainallowed_chat_idsdomain取feishu或lark可用auth_modeqr免配置交互注册qqapp_id、client_secretallowed_chat_ids通过 QQ 开放平台的官方机器人wechattoken_pathallowed_chat_ids本地微信桌面客户端桥接可用auth_modeqr交互登录discordbot_tokenallowed_channel_idsWebSocket gateway 机器人需在开发者后台开启 MESSAGE CONTENT INTENTslackbot_token、app_tokenallowed_channel_idsSocket ModeWebSocket需配置 Bot Token Scopes 与事件订阅add_channel的校验逻辑cherryAutonomyTools.ts#L923-L1004值得注意凭据模式下逐一检查必填字段是否缺失auth_mode仅credentials/qr两个取值且QR 模式只支持 WeChat 与 Feishu并要求频道处于启用状态。QR 扫码流程当频道需要扫码时WeChat 登录、Feishu 建号或reconnect_channel重扫工具的处理方式是后台启动syncChannel同时waitForQrUrl等待二维码 URL30 秒超时再用QRCode.toDataURL生成 PNG 图片随文本结果一起以image类型的 content 返回cherryAutonomyTools.ts#L1014-L1082。因此使用规则是把二维码图片展示给用户让用户扫码连接在带外完成用户扫码后后台同步结束用一次后续的status确认频道已连接。超时兜底也很严谨若 30 秒内没等到二维码 URL工具会调用removeOrphanChannel删除孤儿频道避免残留频道阻塞后续连接cherryAutonomyTools.ts#L1064-L1082。Feishu 的 QR 模式还有一个防重约束已存在多个未验证 Feishu 频道时会提示改用reconnect_channel而不是再创建一个cherryAutonomyTools.ts#L963-L996。恢复策略Recovery文档给出三类典型故障的标准处理方式这些与源码的错误语义一一对应场景正确处理配置缺失没有已连接频道告诉用户通过mcp__cherry-tools__config/ 设置页配置频道不要盲目重试notify不支持的频道/文件notify会按频道逐条报告根据报告调整 payload而不是原样重发同一份工具返回错误结果阅读错误消息并修正调用参数不要静默重试相同参数此外SKILL 的全局规则还区分了两种工具不在的情况SKILL.md#L72-L88工具从实时列表中消失本轮能力不可用如实说明缺什么、用户能做什么不要用 shell 工具绕过工具在但报告缺失依赖如notify无频道转达提示并指向配置不伪造成功。CherryAutonomyTools.call()的统一错误处理会把异常转成isError: true的文本结果并把日志带上 Agent 上下文cherryAutonomyTools.ts#L467-L481。实战示例示例一调度报告并在完成后推送用户说每个工作日早上把未读内容汇总发到 Telegram。mcp__cherry-tools__configstatus——确认已连接 Telegram 频道mcp__cherry-tools__cronadd——创建工作日周期任务cron: 0 9 * * 1-5message为构建汇总的提示词channel_ids指向 Telegram 频道定时运行负责执行与投递——不需要手工编写 OS cron 条目。示例二连接一个 IM 频道用户说把我接到 Slack 上这样你可以在那里给我发消息。mcp__cherry-tools__configstatus——查看支持的频道类型与已有频道mcp__cherry-tools__configadd_channeltype: slack——按 schema 提供所需凭据bot_token、app_token用后续status确认频道显示已连接之后用mcp__cherry-tools__notify向用户推送消息。小结cron、notify、config三个工具构成了 Cherry Studio Agent 的完整自主闭环config建立频道基础设施含 QR 交互与凭据管理cron让任务在 Cherry 内按 cron 表达式、间隔或单次时间点触发并把结果投递到频道notify则承载主动的消息与文件推送。三者共享同一套边界纪律——意图先行、先status再行动、基于真实 ID 操作、如实转述失败并按文档的恢复策略处理且所有面向用户的调度都必须走 Cherry 内部机制而不是绕过到 OS crontab 或 shell 循环。【免费下载链接】cherry-studioAI productivity studio with smart chat, autonomous agents, and 300 assistants. Unified access to frontier LLMs项目地址: https://gitcode.com/GitHub_Trending/ch/cherry-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考