「心跳」在 CoPAW 里指的是:按固定间隔,用你写好的一段「问题」去问 CoPAW,并可选择把 CoPAW 的回复发到你上次对话的频道。适合做「定期自检、每日摘要、定时提醒」——不用你主动发消息,CoPAW 到点就干活。
如果你还没看过 项目介绍,建议先看一眼那里对「心跳」和「频道」的说明。
- 你有一个文件 HEARTBEAT.md(默认在工作目录
~/.copaw/下),里面写的是每次心跳要问 CoPaw 的内容(一段或几段话都行,CoPaw 会当成一条用户消息)。 - 系统按你配置的间隔(例如每 30 分钟)执行一次:读取 HEARTBEAT.md → 用这段内容去问 CoPaw → CoPaw 回复。
- 发不发到频道 由配置里的 target 决定:
- main:只跑 CoPaw,不把回复发到任何频道(适合只做「自检」、结果自己看日志或别处)。
- last:把 CoPaw 的回复发到你上次和 CoPaw 对话的那个频道/会话(例如上次你在钉钉和它聊,这次心跳的回复就发到钉钉)。
还可以设置 active hours(活跃时段):只在每天的某段时间内跑心跳(例如 08:00–22:00),其余时间不跑。
文件路径默认是 ~/.copaw/HEARTBEAT.md。内容就是「每次要问 CoPaw 什么」,纯文本或 Markdown 都行,CoPaw 会整体当作一条用户消息。
示例(你可以按自己需求改):
# Heartbeat checklist
- 扫描收件箱紧急邮件
- 查看未来 2h 的日历
- 检查待办是否卡住
- 若安静超过 8h,轻量 check-in初始化时如果执行过 copaw init(没加 --defaults),会提示你是否编辑 HEARTBEAT.md;选是会用系统默认编辑器打开。你也可以之后随时用任何编辑器改这个文件,保存即可,下次心跳会用到新内容。
心跳的间隔、发到哪、活跃时段都在 config.json 里,路径一般是 ~/.copaw/config.json。
在 agents.defaults.heartbeat 下可以配置:
| 字段 | 含义 | 示例 |
|---|---|---|
| every | 间隔多久跑一次 | "30m"、"1h"、"2h30m"、"90s" |
| target | 回复发到哪 | "main" 不发送;"last" 发到上次对话的频道 |
| activeHours | 可选,只在每天这段时间内跑 | { "start": "08:00", "end": "22:00" } |
示例(只跑 CoPaw、不发到频道,每 30 分钟):
"agents": {
"defaults": {
"heartbeat": {
"every": "30m",
"target": "main"
}
}
}示例(发到上次对话的频道,每 1 小时,且只在 08:00–22:00 跑):
"agents": {
"defaults": {
"heartbeat": {
"every": "1h",
"target": "last",
"activeHours": { "start": "08:00", "end": "22:00" }
}
}
}改完保存 config.json;若服务在跑,会按新配置生效(部分实现可能需重启,以实际为准)。
| 心跳 | 定时任务 (cron) | |
|---|---|---|
| 数量 | 只有一份(HEARTBEAT.md) | 可以建很多个 |
| 间隔 | 一个全局间隔 | 每个独立设定时间 |
| 投递 | 可选发到「上次频道」或不发 | 每个独立指定频道和用户 |
| 适用 | 固定的一套自检/摘要 | 多条不同时间、不同内容的任务 |
需要「每天 9 点发早安」「每 2 小时问待办并发到钉钉」这类多条任务?用 CLI 的
copaw cron create做定时任务,不用心跳。