Auto-Updater Skill
一个面向 Other 场景的 Agent 技能。原始说明:Automatically update Clawdbot and all installed skills once daily. Runs via cron, checks for updates, applies them, and messages the user with a summary of what changed.
name: project-manager
description: "项目上下文隔离与状态管理系统 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.json | session 内检查新对话,发现新话题 |
| 智能恢复 | 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,绝不混用。workspace/projects/
├── index.md # 📇 项目索引(自动维护,必须含一句话概述)
├── {project-name}/
│ ├── STATUS.md # 🧠 核心记忆:进度、待办、关键决策(每次对话必读/必写)
│ ├── docs/ # 方案、报告、调研数据
│ ├── src/ # 代码、产出物
│ └── status/ # auto-coding v3 微观工程文件(可选)
└── _archive/ # 📦 已归档项目
└── {project-name}/
└── STATUS.md # 保留历史记录
projects/index.md# 项目索引
> 自动维护,按最后活跃时间倒序
| 项目 | 目录 | 最后更新 | 状态 | 备注 |
|------|------|---------|------|------|
| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |
维护规则:
_archive/,index.md 标记为"已归档"⚠️ 以下为简化示意,实际使用时应先从
skills/project-manager/templates/目录读取对应完整模板文件。
# 项目名称:[Name]
> 最后更新:[Date] | Git: [commit hash, 如果有] | PM: v2.5
## 🎯 核心目标
[一句话描述项目终极目标]
## 📍 当前状态
[当前处于什么阶段,刚完成了什么]
## 📋 待办事项 (Todo)
- [x] 已完成 1
- [ ] 待办 2 (优先级高)
- [ ] 待办 3
## 🔑 关键上下文/决策
- 决策 1 (为什么这么做)
- 约束 1 (用户明确要求的事项)
- 链接 (相关 URL/文件路径)
## 🛑 暂停原因/遗留问题
[如果项目暂停,记录卡点或下次需要确认的问题]
# 项目名称:[Name]
> 最后更新:[Date] | PM: v2.5
## 📍 当前状态
[一句话描述当前进度]
## 🔑 决策(可选)
[如果做了重要选择,记录原因]
## 📋 下一步
- [ ] 接下来要做什么
模板文件位置:skills/project-manager/templates/ 目录下的 STATUS-A.md / STATUS-B.md(不是内联伪代码)。
选择规则:
| 场景 | 模板 |
|------|------|
| 3天以上的多阶段项目 | A 完整模板 |
| 单任务(如"帮我把这个接口重构一下") | B 轻量模板 |
| 调研/分析类临时任务 | B 轻量模板 |
| 需要多人协作或长期维护 | A 完整模板 |
| 不确定 | 先用 B,后续发现需要再升级到 A |
穷举触发场景:
识别优先级:
触发条件:
门槛判断(避免过度工程):
动作:
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:{
"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:
# 📝 项目对话日志:{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 配置,提取每个项目的:
统计已完成里程碑数和总里程碑数,计算进度百分比 = 已完成 / 总数 × 100
第二步:渲染 ASCII 甘特图
输出格式如下:
📅 项目甘特图 | {当前年} 年 {当前月} 月
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{项目名称} [{进度条}] {进度百分比}%
├─ {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% | 🟡 中 | estimatedhours, actualhours |
| 范围蔓延风险 | 里程碑总数比最初增加 >50% 后又新增 | 🟡 中 | milestones |
| 依赖循环风险 | A 依赖 B 且 B 依赖 A(DAG 环路检测) | 🔴 高 | dependencies |
| 延期风险 | 当前距 estimatedend <3 天,且进度 <70% | 🟡 中 | estimatedend, milestones |
| 已延期 | 当前日期 > estimatedend 且进度 <100% | 🔴 高 | estimatedend, milestones |
第一步:全量扫描所有项目目录
遍历 projects/ 下每个项目,读取 STATUS.md,提取以下字段:timeline、dependencies、lastupdated、estimatedhours、actual_hours。
第二步:逐个项目检查风险
按上述8项规则逐一检查,判断每个项目的风险项。
第三步:按风险等级分组输出
输出格式如下:
⚠️ 项目风险扫描报告 | {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.md | STATUS.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