项目上下文隔离与状态管理 v2.7.0。解决遗忘、跨天丢失、漏记新话题。新增自动生成甘特图、风险识别、依赖管理。触发词:/project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图
Agent 会遗忘。 每天醒来是全新的,如果对话中没有及时记录,第二天就完全不记得做过什么。
Agents forget. Every day they wake up fresh. If conversations aren't recorded in time, everything is lost by tomorrow.
本系统的目标:
Goals:
层级文件职责即时记录projects/{name}/STATUS.md对话中即时写入重要决策/需求/完成节点按需状态同步memory/pm-checkpoint.jsonsession 内检查新对话,发现新话题智能恢复HEARTBEAT.md 第 5 项全局检查,作为最后一道防线全局记忆MEMORY.md / memory/*.md用户偏好、跨项目经验(不含项目进度)
当使用 auto-coding-v3 进行代码开发时,该系统会在 workspace/projects/{project_name}/status/ 下生成详细的工程状态文件。
STATUS.md 负责 宏观进度(Todo, Next Step, Decision)。status/ 目录负责 微观工程细节(Scratchpad, Logs)。STATUS.md,绝不混用。text
workspace/projects/
├── index.md # 📇 项目索引(自动维护,必须含一句话概述)
├── {project-name}/
│ ├── STATUS.md # 🧠 核心记忆:进度、待办、关键决策(每次对话必读/必写)
│ ├── docs/ # 方案、报告、调研数据
│ ├── src/ # 代码、产出物
│ └── status/ # auto-coding v3 微观工程文件(可选)
└── _archive/ # 📦 已归档项目
└── {project-name}/
└── STATUS.md # 保留历史记录
projects/index.md#markdown
# 项目索引
> 自动维护,按最后活跃时间倒序
| 项目 | 目录 | 最后更新 | 状态 | 备注 |
|------|------|---------|------|------|
| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |
维护规则:
_archive/,index.md 标记为"已归档"⚠️ 以下为简化示意,实际使用时应先从
skills/project-manager/templates/目录读取对应完整模板文件。
markdown
# 项目名称:[Name]
> 最后更新:[Date] | Git: [commit hash, 如果有] | PM: v2.5
## 🎯 核心目标
[一句话描述项目终极目标]
## 📍 当前状态
[当前处于什么阶段,刚完成了什么]
## 📋 待办事项 (Todo)
- [x] 已完成 1
- [ ] 待办 2 (优先级高)
- [ ] 待办 3
## 🔑 关键上下文/决策
- 决策 1 (为什么这么做)
- 约束 1 (用户明确要求的事项)
- 链接 (相关 URL/文件路径)
## 🛑 暂停原因/遗留问题
[如果项目暂停,记录卡点或下次需要确认的问题]
markdown
# 项目名称:[Name]
> 最后更新:[Date] | PM: v2.5
## 📍 当前状态
[一句话描述当前进度]
## 🔑 决策(可选)
[如果做了重要选择,记录原因]
## 📋 下一步
- [ ] 接下来要做什么
模板文件位置: skills/project-manager/templates/ 目录下的 STATUS-A.md / STATUS-B.md(不是内联伪代码)。
选择规则:
场景模板3天以上的多阶段项目A 完整模板单任务(如"帮我把这个接口重构一下")B 轻量模板调研/分析类临时任务B 轻量模板需要多人协作或长期维护A 完整模板不确定先用 B,后续发现需要再升级到 A
穷举触发场景:
识别优先级:
触发条件:
显式触发:用户明确说"新建项目"/"帮我建一个"/"一个话题"/"记录一下"
自动检测触发(P1 新增):
门槛判断(避免过度工程):
动作:
index.md — 检查是否有相关项目可以合并或关联cmra-geoworkspace/projects/{name}/skills/project-manager/templates/ 目录读取对应模板,根据复杂度选择 A/B 模板,创建 STATUS.mdindex.md 存在:如不存在,询问用户"是否创建项目索引文件?",用户同意后创建并写入表头projects/index.md(添加到顶部)动作:
read(workspace/projects/{name}/STATUS.md){name} 上下文。当前:[简述进度]。待办:[列出]。继续哪一步?"memory/ 目录下是否有相关日期的记忆文件,尝试恢复上下文;无法恢复时如实告知用户这是核心机制。 不是等到用户说"保存状态"才记录,而是在对话中 即时提议写入。
触发时机(满足任一即提议写入):
写入策略(轻量,不拖慢对话):
不写入的情况:
输入: 先停一下 / 我去忙别的 / 切换到 XX
动作:
STATUS.mdindex.md:状态改为"已暂停",记录暂停原因当检测到以下信号时(用户说"我先走了"、"明天继续"、长时间无新消息、或状态恢复检测到上次对话已超过 2 小时):
memory/YYYY-MM-DD.md(一句话摘要 + 引用 STATUS.md)状态恢复期间定期检查:
归档操作:
projects/_archive/{name}/当用户显式请求(如"开启状态同步"、"自动检查新对话")时,在当前 session 里注册状态同步任务。 不会自动激活。
用户不会每次都主动说"记一下"。状态同步解决了"你不说就不记"的问题——但必须由用户显式开启。
用户显式请求时,执行以下操作:
memory/pm-checkpoint.json:json
{
"active": true,
"sessionKey": "当前session的key或label",
"lastCheckedMsgId": "当前最后一条消息的ID",
"lastCheckTime": "2026-04-25T11:09:00+08:00",
"intervalMinutes": 60,
"activeProject": "当前关联的项目名(可选)",
"expiresAt": "2026-04-26T00:00:00+08:00"
}
pm-checkpoint.json 获取上次检查位置lastCheckedMsgId 和 lastCheckTime每次只读取 checkpoint 之后的新增对话,分析以下信号:
信号类型示例动作新需求"我们需要增加XX功能"更新 STATUS.md 待办新决策"用 Redis 不用 Memcached"更新 STATUS.md 决策完成节点"这个模块搞定了"更新 STATUS.md 进度新话题突然讨论完全不同的话题(如从技术跳到市场调研)扫描 index.md 判断是否建项目暂停信号"先停一下"、"明天继续"触发 Session 结束收尾(第 6 节)
项目相关的讨论分散在历史会话中,想回顾时找不到。对话日志把项目相关的关键讨论打包成独立文件,随时可以回顾。
两层存储:摘要索引存本地文件,完整对话推荐存 MemPalace。
写入 memory/project_log_{project_name}.md:
markdown
# 📝 项目对话日志:{project_name}
> 归档时间:{YYYY-MM-DD HH:MM}
> 关联项目:projects/{project_name}/STATUS.md
## 项目概况
[核心目标一句话摘要]
## 关键决策时间线
| 时间 | 决策 | 上下文 |
|------|------|--------|
| YYYY-MM-DD | 决定采用方案A而不是B | 性能优先级高于成本 |
## 踩过的坑
[记录所有尝试过但失败的方案、原因、教训]
## 历史会话快照
> session_key: abc123 | 时间: YYYY-MM-DD
[本次会话的关键讨论摘要,不超过200字]
---
> session_key: def456 | 时间: YYYY-MM-DD
[本次会话的关键讨论摘要]
推荐:将完整对话原文保存到 MemPalace(wing={project_name}, room=conversations),本地只保留摘要索引。MemPalace 支持语义搜索,可跨项目检索历史讨论。
memory/project_log_{name}.md唯一数据源 = STATUS.md 中的 ## 📅 Timeline YAML 块
输出文件 = projects/{name}/GANTT.md
更新里程碑时:先改 STATUS.md Timeline → 再重新渲染 GANTT.md。不要直接编辑 GANTT.md,否则下次渲染会被覆盖。
第一步:读取项目时间配置 遍历所有项目目录,逐个读取 STATUS.md 中的 timeline 配置,提取每个项目的:
第二步:渲染 ASCII 甘特图 输出格式如下:
text
📅 项目甘特图 | {当前年} 年 {当前月} 月
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{项目名称} [{进度条}] {进度百分比}%
├─ {YYYY-MM-DD} ✅ {已完成的里程碑名称}
├─ {YYYY-MM-DD} 🔄 {进行中的里程碑名称}
└─ {YYYY-MM-DD} ⏳ {待完成的里程碑名称}
进度条渲染规则:
第三步:资源冲突检测
第四步:延期预警计算
第五步:输出到项目目录
projects/{name}/GANTT.mdprojects/index.md 顶部生成全局汇总甘特图风险项触发条件等级所需字段静默风险最后更新日期距今 >14 天🔴 高last_updated无里程碑风险项目启动 >7 天,但无任何里程碑记录🔴 高start_date, milestones单点依赖风险有 >3 个项目声明依赖同一个 skill 或外部项目🟡 中dependencies估时不准风险连续 2 个已完成项目的估时偏差 >50%🟡 中estimated_hours, actual_hours范围蔓延风险里程碑总数比最初增加 >50% 后又新增🟡 中milestones依赖循环风险A 依赖 B 且 B 依赖 A(DAG 环路检测)🔴 高dependencies延期风险当前距 estimated_end <3 天,且进度 <70%🟡 中estimated_end, milestones已延期当前日期 > estimated_end 且进度 <100%🔴 高estimated_end, milestones
第一步:全量扫描所有项目目录
遍历 projects/ 下每个项目,读取 STATUS.md,提取以下字段:timeline、dependencies、last_updated、estimated_hours、actual_hours。
第二步:逐个项目检查风险 按上述8项规则逐一检查,判断每个项目的风险项。
第三步:按风险等级分组输出 输出格式如下:
text
⚠️ 项目风险扫描报告 | {YYYY-MM-DD}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔴 高风险 ({总数} 项)
──────────────────────────────────────────────────
• [{项目名}] 静默风险 - 最后更新 {天数} 天前
建议: ping 一下确认项目状态,或归档
...
🟡 中风险 ({总数} 项)
──────────────────────────────────────────────────
• [{项目名}] 单点依赖 - 依赖 {skill} 的项目共 {n} 个
建议: 评估是否需要技术储备方案
🟢 健康 ({总数} 项)
──────────────────────────────────────────────────
• 按时更新 + 有里程碑 + 无单点依赖 + 无延期
第四步:自动写入风险日志
⚠️ Risk Log 章节index.md 标记 🔴 前缀信息类型存放位置示例 / 说明用户偏好MEMORY.md"不喜欢废话,只要结论"跨项目经验MEMORY.md"上次用 X 方案踩了 Y 坑"每日工作流水memory/YYYY-MM-DD.md"今天推进了 CMRA 认证模块,详情见 STATUS.md"项目进度projects/{name}/STATUS.md"CMRA:认证模块完成,开始做权限"甘特图数据projects/{name}/GANTT.mdSTATUS.md Timeline YAML 的渲染输出项目对话日志memory/project_log_{name}.md关键决策和踩坑记录工时追踪projects/{name}/STATUS.md风险引擎「估时不准」规则依赖此数据技术细节projects/{name}/status/测试日志、设计草稿检查点memory/pm-checkpoint.json状态同步的位置标记
原则:
memory/YYYY-MM-DD.md 中的项目记录 只写一句话摘要 + 引用 STATUS.md,不重复细节。如果 git rev-parse --is-inside-work-tree 在项目目录下执行成功(返回 0):
Git: [最近 commit hash]git log --oneline -1 获取最新 commitmemory 工具或 MEMORY.md 记录项目进度。项目进度只存在于 STATUS.md。STATUS.md。不要依赖上一轮对话的记忆。/project | 新建项目 | 项目列表 | 记录一下 | 回到项目 | 继续项目 | 上次那个 | 甘特图 | 时间线 | 进度图
📋 版本历史:详见 CHANGELOG.md
🔒 安全说明:详见 SECURITY.md