让AI在你睡觉时工作:Cabinet定时任务Cron调度与Heartbeat实战指南
【免费下载链接】cabinetAI-first knowledge base and startup OS项目地址: https://gitcode.com/gh_mirrors/cabinet3/cabinet
🗄️Cabinet是一款开源的 AI-first 知识库与创业 OS(Startup OS),内置**定时任务(Cron 调度)与智能体心跳(Heartbeat)**两大自动化机制。用自然语言或简单的日历拖拽,就能让 AI 智能体在你睡觉时自动巡检、写报告、整理知识——"你的团队会在你睡觉时成长"。
两大自动化机制:Jobs 与 Heartbeat 有什么区别?
在 Cabinet 中,让 AI"自己动"的方式有两种,理解它们的区别是玩转定时调度的第一步:
| 机制 | 定位 | 配置位置 | 典型场景 |
|---|---|---|---|
| 定时任务(Job) | 精确的 Cron 计划任务 | {cabinetPath}/.jobs/{id}.yaml | 每 6 小时 Reddit 情报侦察、周一晨报 |
| 心跳(Heartbeat) | 智能体自主的"生物节律" | 智能体persona.md的 frontmatter | 客服智能体每天 9 点自醒检查待办 |
- Jobs:由 server/cabinet-daemon.ts 中的常驻守护进程通过
node-cron注册,到点即触发一次新的智能体会话。 - Heartbeats:写在智能体人设文件里(src/lib/agents/heartbeat.ts 负责执行),相当于给每个 AI 员工一个"生物钟",按自己的节奏周期性醒来自检、推进目标。
💡 两者的运行状态都会汇入同一张日历视图,统一管理、统一观察。
快速上手:3 步创建第一个定时任务
第 1 步:选择智能体。在 Agents 页面打开任意智能体(如 Researcher、Content Marketer),进入其 Schedule 标签页。
第 2 步:选择调度模式。调度选择器(src/components/mission-control/schedule-picker.tsx)支持 6 种模式,新手建议直接用自然语言:
- Once(单次)/ Daily(每天)
- Weekday(工作日)/ Weekly(每周)/ Monthly(每月)
- Custom(自定义):直接输入 cron 表达式,或写"每 6 小时""工作日 9 点"等自然语言,由
/api/schedule/parse端点自动解析为 cron
第 3 步:保存。改动会通过PUT /api/agents/[id]/jobs落盘为 YAML 文件,守护进程在约 200ms 内自动热加载新计划——无需重启任何服务。
日历即调度台:拖拽、标记、右键菜单
Cabinet 的调度管理没有表单地狱,一切发生在日历上(src/components/cabinets/schedule-view.tsx 统一渲染于 Tasks、Agents、智能体详情三个入口):
- 🖱️框选创建:在空白时间段按住拖拽,松手即创建一次性任务;
- 📦重复任务:创建时即可选择 Repeat(Once / Daily / Weekly / Custom);
- ✋拖拽改期:拖动事件到新时间;改重复任务时会提示"仅此次 / 全部事件",机制与 Google Calendar 一致(服务端通过
exceptions[]即 EXDATE 实现); - 🖱️右键菜单:立即运行 / 编辑 / 复制 / 跳过此次 / 启用·禁用 / 删除;
- ⏰当前时间红线+ 今天高亮,随时看清"现在到哪了"。
它是怎么工作的?调度架构一图看懂
不用关心代码也能跑,但知道架构会更有掌控感。核心链路:
- 落盘:任务 YAML(
JobConfig类型见 src/types/jobs.ts)与心跳配置(heartbeat、heartbeatEnabled字段)全部是磁盘上的纯文本,可 Git 追踪; - 注册:守护进程 server/cabinet-daemon.ts 读取所有 cabinet 的
.jobs/*.yaml与 persona 心跳,用node-cron按主机本地时间注册; - 触发:到点后守护进程发起
PUT(带action: "run"、source: "scheduler"和精确到分钟的scheduledAt时间戳),为这次运行创建一个可回看的智能体会话; - 可观测:每次运行都能在日历上点击"过去的药丸",直接打开对应的任务会话面板(机制详见 docs/CALENDAR_RUN_LINKAGE.md)。
Heartbeat 实战:给 AI 员工设一个"生物钟"
打开智能体后点击Heartbeat行(或日历中任意心跳事件),弹出共享的心跳编辑器(src/components/agents/heartbeat-dialog.tsx),你可以:
- ⚡启用/禁用开关:一句话控制"它是否按自己的节奏醒来";
- 🕐设置节奏:复用同一个调度选择器,如"每 4 小时"或"每天 8 点";
- ▶️立即运行一次:不占用计划槽位,适合验证效果;
- 📄查看定义:链接直达 persona 文件中"心跳到底做什么"的正文部分。
典型玩法:给客服智能体设每日 9 点心跳,醒来检查邮件与消息队列;给 Researcher 设每 6 小时心跳,持续追踪行业动态并写入知识库。
避坑指南:定时任务没跑起来怎么办?
🚨琥珀色"未运行"标记:日历中过去的时间点如果显示为灰底 + 琥珀色警告图标,说明那次调度没有执行(src/components/cabinets/schedule-calendar.tsx)。点击它会弹出琥珀色横幅,提示可能原因:
- Cabinet 守护进程当时没有运行(最常见——机器休眠或进程退出);
- 该调度当时处于禁用状态;
- 运行启动失败(如 AI CLI 未登录)。
✅三个保命建议:
- 确保机器不深度休眠时守护进程(
npm run dev:all或 Electron 桌面端)在运行; - 记住调度按主机本地时间触发,浏览器与守护进程需同一时区;
- 用
* * * * *的测试任务做一次冒烟验证,确认链路通畅后再上正式计划。
写在最后
Cabinet 把"AI 自动化"做成了日历上看得见、摸得着的日常:Jobs 负责精确计划,Heartbeat 负责自主节律,守护进程负责可靠触发,日历负责全程可观测。当你睡前设好节奏,醒来看到的不再是空白的收件箱,而是一份份已经完成的产出。
📚 延伸阅读:
- 调度日历完整设计文档:docs/SCHEDULE_CALENDAR_PRD.md
- 日历运行关联机制:docs/CALENDAR_RUN_LINKAGE.md
- 智能体页面规格(含 Heartbeat 行):docs/AGENT_PAGE_PRD.md
- 任务体系总览:docs/TASKS.md
【免费下载链接】cabinetAI-first knowledge base and startup OS项目地址: https://gitcode.com/gh_mirrors/cabinet3/cabinet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考