本文档定义 Heartbeat Framework 的项目管理规范,包括任务生命周期、文件结构和唯一入口原则。
PROJECTS.md 是项目状态的唯一真相源。
- 心跳不读其他文件来找任务,只读 PROJECTS.md
- 禁止在多个地方维护"当前任务追踪"
- 避免多套并行系统导致状态不一致
状态分散 = 状态丢失。单一入口 = 单一真相。
| 优先级 | 含义 | 行为 |
|---|---|---|
| P0 | 紧急 | 每次心跳优先推进 |
| P1 | 默默推进 | 有空就做,稳步推进 |
| P2 | 有空再说 | P0/P1 没事时才考虑 |
| P3 | 备选 | 几乎不主动推,等用户要求 |
- 用户下令 或 Agent 自主立项
- 创建任务文件:
heartbeat/tasks/{project-id}/current.md - 更新 PROJECTS.md: 添加项目条目,设置
status: "active" - 项目 id 命名:英文小写+连字符(如
web-app、data-pipeline)
- 心跳时通过 PROJECTS.md 找到 active 项目
- 读取对应的
current.md,按里面的阶段和铁律执行 - 每次心跳推进一点,记录日志
- 遇到需要用户决策的问题 → 暂停,发消息问
- 任务文件里的所有阶段全部完成
- 发消息给用户,提交验收
- 用户确认完成 → 更新 PROJECTS.md(
status: "done") - 归档到
heartbeat/tasks/archive/
- 更新 PROJECTS.md(
status: "paused") - 在项目的
notes里说明暂停原因
# 项目追踪
## Active Projects
### [P0] 项目名称
- **ID:** project-id
- **Status:** active
- **Task File:** heartbeat/tasks/project-id/current.md
- **Next Step:** 当前推进到哪了
- **Notes:** 备注
### [P1] 项目名称
...
## Paused Projects
- project-id: 暂停原因
## Done Projects
- project-id: 完成日期每个项目的 current.md 必须包含以下结构:
# {任务名} - 当前任务
## 项目概述
(一句话说明目标)
## 铁律
(这个项目的红线,违反就停止执行)
## 阶段X:{阶段名}
- [ ] 步骤1
- [ ] 步骤2
...
## 状态
当前在哪个阶段,上次推进到哪了
## 成本/预算
(如有)铁律是项目的绝对约束,违反就立即停止执行。
示例:
- "禁止在没有测试环境的情况下编写代码"
- "禁止使用特定模型执行此类任务"
- "任何对外发布的内容必须先经用户确认"
触发条件: 用户验收通过,项目 status 改为 "done"
清理步骤:
- 读取任务文件
heartbeat/tasks/{id}/current.md的全部内容 - 将关键成果整合到当天记录
- 删除任务文件夹
heartbeat/tasks/{id}/ - PROJECTS.md 中该项目已标记为 done,无需额外操作
暂不删除的情况:
status: "paused"的项目 → 保留任务文件夹- 用户明确要求保留
心跳触发
↓
读取 PROJECTS.md
↓
找 status: "active" 的项目
├─ 找到 → 按 priority 排序 → 选最高的 → 读 current.md → 执行
└─ 没找到 → 进入自由时光
↓
执行完毕 → 更新 PROJECTS.md 的 next_step → 记录日志
关键:心跳不需要读任务规则文件来获取"当前做什么"。项目怎么执行全写在各项目的 current.md 里。
A: 不行。PROJECTS.md 是唯一入口。多套系统并行 = 状态不一致 = 灾难。
A: 发消息给用户说明卡点,暂停该项目(status: "paused"),等用户决策后恢复。
A: current.md 的"状态"字段记录了上次推进到哪了,PROJECTS.md 的 next_step 也有记录。