{"id":"5e833be0-d1de-490d-85dd-f3db10ccc279","entityType":"agent","slug":"clawhub-krislu1221-agent-project-manager","name":"Project Manager","canonicalUrl":"https://www.xpersona.co/agent/clawhub-krislu1221-agent-project-manager","canonicalPath":"/agent/clawhub-krislu1221-agent-project-manager","generatedAt":"2026-10-11T03:55:05.426Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T01:41:54.477Z","emptyReason":null},"description":"项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图 Skill: Project Manager Owner: krislu1221 Summary: 项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图 Tags: latest:2.7.2 Version history: v2.7.2 | 2026-05-26T08:45:35.991Z | auto Project Manager v2.7.2 is a documentation update: - Condensed and clarified the SKILL.md, focusing on core problem/solution and goal sections. - Removed duplicate biling","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1722js5hsngdpp170necz8fgn83r9q4:agent-project-manager","sourceUrl":"https://clawhub.ai/krislu1221/agent-project-manager","homepage":"https://clawhub.ai/krislu1221/skills/agent-project-manager","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/krislu1221/agent-project-manager","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/krislu1221/skills/agent-project-manager","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图 Skill: Project Manager Owner: krislu"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:41:54.477Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:41:54.477Z","emptyReason":null},"stars":null,"forks":null,"downloads":1202,"packageName":null,"latestVersion":"2.7.2","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:41:54.413Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T01:41:54.477Z","lastCrawledAt":"2026-10-11T01:41:54.413Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T01:41:54.413Z","lastVerifiedAt":null,"highlights":[{"version":"2.7.2","createdAt":"2026-05-26T08:45:35.991Z","changelog":"Project Manager v2.7.2 is a documentation update: - Condensed and clarified the SKILL.md, focusing on core problem/solution and goal sections. - Removed duplicate bilingual descriptions for better readability. - No logic or feature changes; only documentation content has changed.","fileCount":8,"zipByteSize":19195},{"version":"2.7.1","createdAt":"2026-05-26T08:44:03.063Z","changelog":"Version 2.7.1 of agent-project-manager - Documentation improved: README.md and SKILL.md updated for clarity and completeness. - SKILL.md now includes bilingual (Chinese & English) explanations in the problems solved section. - No functional or code changes; updates are for better user guidance and onboarding experience.","fileCount":8,"zipByteSize":19422},{"version":"2.7.0","createdAt":"2026-05-26T07:54:50.800Z","changelog":"v2.7.0: sync SKILL.md version with clawhub.json, 7 bug fixes","fileCount":8,"zipByteSize":17986},{"version":"2.6.0","createdAt":"2026-05-26T03:30:26.890Z","changelog":"**Project Manager v2.6.0 Changelog** - Privacy/operation logic changed: All automatic and background project scanning removed; actions are now only performed when users explicitly request them. - Session state sync, if desired, must be activated by the user via clear command; never runs automatically or by default. - Clarified trigger phrases and workflows throughout documentation to make strict on-demand/manual behavior explicit. - Minor description and instructional changes in skill files to emphasize strict privacy and non-intervention outside user intent. - Added publishing notes and documentation files for deployment standardization.","fileCount":18,"zipByteSize":46247},{"version":"2.5.4","createdAt":"2026-05-24T16:12:52.822Z","changelog":"v2.5.4: fix display name","fileCount":13,"zipByteSize":33808},{"version":"2.5.3","createdAt":"2026-05-24T09:38:02.121Z","changelog":"v2.5.3: Remove email PII from author field","fileCount":13,"zipByteSize":33809},{"version":"2.5.2","createdAt":"2026-05-24T08:48:58.740Z","changelog":"v2.5.2: Fix triggers — add core PM actions (记录一下/回到项目/继续项目/上次那个), remove vague (风险扫描/检查风险)","fileCount":13,"zipByteSize":33830},{"version":"2.5.1","createdAt":"2026-05-24T08:25:20.191Z","changelog":"v2.5.1: Fix ClawHub security audit — add SECURITY.md, tighten triggers from 20 to 8, add security/data_privacy, remove _meta.json","fileCount":13,"zipByteSize":33787}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1722js5hsngdpp170necz8fgn83r9q4:agent-project-manager","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T03:55:05.422Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-krislu1221-agent-project-manager/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T01:41:54.477Z","emptyReason":null},"readme":"Skill: Project Manager\n\nOwner: krislu1221\n\nSummary: 项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图\n\nTags: latest:2.7.2\n\nVersion history:\n\nv2.7.2 | 2026-05-26T08:45:35.991Z | auto\n\nProject Manager v2.7.2 is a documentation update:\n\n- Condensed and clarified the SKILL.md, focusing on core problem/solution and goal sections.\n- Removed duplicate bilingual descriptions for better readability.\n- No logic or feature changes; only documentation content has changed.\n\nv2.7.1 | 2026-05-26T08:44:03.063Z | auto\n\nVersion 2.7.1 of agent-project-manager\n\n- Documentation improved: README.md and SKILL.md updated for clarity and completeness.\n- SKILL.md now includes bilingual (Chinese & English) explanations in the problems solved section.\n- No functional or code changes; updates are for better user guidance and onboarding experience.\n\nv2.7.0 | 2026-05-26T07:54:50.800Z | user\n\nv2.7.0: sync SKILL.md version with clawhub.json, 7 bug fixes\n\nv2.6.0 | 2026-05-26T03:30:26.890Z | auto\n\n**Project Manager v2.6.0 Changelog**\n\n- Privacy/operation logic changed: All automatic and background project scanning removed; actions are now only performed when users explicitly request them.\n- Session state sync, if desired, must be activated by the user via clear command; never runs automatically or by default.\n- Clarified trigger phrases and workflows throughout documentation to make strict on-demand/manual behavior explicit.\n- Minor description and instructional changes in skill files to emphasize strict privacy and non-intervention outside user intent.\n- Added publishing notes and documentation files for deployment standardization.\n\nv2.5.4 | 2026-05-24T16:12:52.822Z | user\n\nv2.5.4: fix display name\n\nv2.5.3 | 2026-05-24T09:38:02.121Z | user\n\nv2.5.3: Remove email PII from author field\n\nv2.5.2 | 2026-05-24T08:48:58.740Z | user\n\nv2.5.2: Fix triggers — add core PM actions (记录一下/回到项目/继续项目/上次那个), remove vague (风险扫描/检查风险)\n\nv2.5.1 | 2026-05-24T08:25:20.191Z | user\n\nv2.5.1: Fix ClawHub security audit — add SECURITY.md, tighten triggers from 20 to 8, add security/data_privacy, remove _meta.json\n\nv2.5.0 | 2026-05-23T14:50:43.083Z | user\n\nv2.5: 甘特图自动生成 + 8规则风险检测引擎 + 依赖关系管理 + 对话日志归档\n\nv2.4.1 | 2026-04-25T14:38:03.856Z | auto\n\n## agent-project-manager v2.4.1\n\n- 增加 PUBLISH_NOTES.md 文件，完善技能发布与变更说明的规范。\n- 更新 SKILL.md，优化 description 描述，使其更简明并突出“session 内按需状态同步、断点续传、分级模板、智能恢复”等核心卖点。\n- 对描述、架构原则和严格约束章节进行了细节润色，内容整体表达更明确。\n- 仅有文档说明强化与轻微措辞调整，无代码逻辑变动。\n\nv2.4.0 | 2026-04-25T14:12:33.702Z | auto\n\n**Project Manager v2.4.0 Changelog**\n\n- 新增 Session 内周期自动检查功能，自动扫描新对话，智能发现新话题、需求或决策并记录，极大减少遗漏。\n- 状态管理优化：对话中即时写入进展与决策，跨天和中断后可无缝恢复项目上下文。\n- 严格区分项目进度与全局记忆，所有进度仅存于 STATUS.md，杜绝遗忘和信息混淆。\n- index.md 维护自愈能力提升，自动补录缺失项目，一句话概述自动生成。\n- 增强多维度意图识别，支持显式、隐含、切换、话题切换等各类对话场景。\n- 优化模板选择与降级策略，小任务用轻量模板，复杂项目用完整模板，避免过度工程化。\n\nArchive index:\n\nArchive v2.7.2: 8 files, 19195 bytes\n\nFiles: clawhub.json (1622b), LICENSE (1061b), README.md (5045b), skill-card.md (2794b), SKILL.md (26459b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nFile v2.7.2:SKILL.md\n\n---\nname: project-manager\ndescription: \"项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图\"\n---\n\n# Project Manager v2.7.0 - 项目上下文管理系统\n\n## 要解决的核心问题 / Problems Solved\n\n**Agent 会遗忘。** 每天醒来是全新的，如果对话中没有及时记录，第二天就完全不记得做过什么。\n\n**Agents forget.** Every day they wake up fresh. If conversations aren't recorded in time, everything is lost by tomorrow.\n\n**本系统的目标：**\n\n- 最小化信息遗漏，最大化可恢复性，不增加对话负担\n- 以项目经理角度管理对话，而非日记——每个项目独立记录，独立保存所有信息和细节\n- 随时回到任意项目，不携带其他项目的污染信息和噪音\n- 结构化锚点：任何信息按项目精确召回，无需翻遍历史\n- 大幅降低 Memory 负载，节省 Token 消耗（STATUS.md 远小于完整对话历史）\n- 推荐完整对话保存在 MemPalace 中\n\n**Goals:**\n\n- Minimize information loss, maximize recoverability, without adding conversation burden\n- Manage conversations like a project manager — each project independently recorded with all details preserved\n- Switch between projects freely without carrying noise or pollution from other projects\n- Structured anchors: retrieve any information by project, no need to search through entire history\n- Significantly reduce Memory footprint — STATUS.md is far smaller than full conversation history\n- Full conversations recommended in MemPalace\n\n## 架构原则\n\n| 层级 | 文件 | 职责 |\n|------|------|------|\n| **即时记录** | `projects/{name}/STATUS.md` | 对话中即时写入重要决策/需求/完成节点 |\n| **按需状态同步** | `memory/pm-checkpoint.json` | session 内检查新对话，发现新话题 |\n| **智能恢复** | `HEARTBEAT.md` 第 5 项 | 全局检查，作为最后一道防线 |\n| **全局记忆** | `MEMORY.md` / `memory/*.md` | 用户偏好、跨项目经验（不含项目进度） |\n\n## 与 Auto-Coding v3 集成\n当使用 `auto-coding-v3` 进行代码开发时，该系统会在 `workspace/projects/{project_name}/status/` 下生成详细的工程状态文件。\n*   `STATUS.md` 负责 **宏观进度**（Todo, Next Step, Decision）。\n*   `status/` 目录负责 **微观工程细节**（Scratchpad, Logs）。\n\n## 核心原则\n\n1. **物理隔离**：每个项目拥有独立的 `STATUS.md`，绝不混用。\n2. **状态显式化**：没有记录在文件里的事，就是没发生。\n3. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后。⚠️ 需用户确认后写入。\n4. **Session 状态同步（opt-in）**：用户显式触发后才注册定期状态同步，不自动激活。\n5. **分级管理**：轻重有别，杀鸡不用牛刀。\n6. **意图优先（显式触发）**：根据对话上下文推断意图，但所有操作需用户确认后执行。\n7. **写入安全**：写入前必须先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n\n## 目录结构规范\n\n```text\nworkspace/projects/\n├── index.md              # 📇 项目索引（自动维护，必须含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 🧠 核心记忆：进度、待办、关键决策（每次对话必读/必写）\n│   ├── docs/             # 方案、报告、调研数据\n│   ├── src/              # 代码、产出物\n│   └── status/           # auto-coding v3 微观工程文件（可选）\n└── _archive/             # 📦 已归档项目\n    └── {project-name}/\n        └── STATUS.md     # 保留历史记录\n```\n\n## 📇 项目索引：`projects/index.md`\n\n```markdown\n# 项目索引\n> 自动维护，按最后活跃时间倒序\n\n| 项目 | 目录 | 最后更新 | 状态 | 备注 |\n|------|------|---------|------|------|\n| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |\n```\n\n**维护规则：**\n- **首次使用**：如不存在，自动创建并写入表头\n- 新建项目时：添加到顶部\n- 恢复项目时：更新\"最后更新\"时间，移到顶部\n- 暂停项目时：更新\"状态\"为\"已暂停\"并记录暂停原因\n- 归档项目时：移到 `_archive/`，index.md 标记为\"已归档\"\n- **索引自愈**：发现项目目录存在但 index 中没有时，自动补录\n- **必须包含一句话概述**，格式为「动词 + 对象 + 目的」\n\n---\n\n## 分级 STATUS.md 模板\n\n> ⚠️ 以下为简化示意，实际使用时应先从 `skills/project-manager/templates/` 目录读取对应完整模板文件。\n\n### A) 完整模板（>3天项目 / 多阶段任务 / 跨团队协作）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项 (Todo)\n- [x] 已完成 1\n- [ ] 待办 2 (优先级高)\n- [ ] 待办 3\n\n## 🔑 关键上下文/决策\n- 决策 1 (为什么这么做)\n- 约束 1 (用户明确要求的事项)\n- 链接 (相关 URL/文件路径)\n\n## 🛑 暂停原因/遗留问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n```\n\n### B) 轻量模板（<3天的单任务 / 调研/分析类临时任务）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | PM: v2.5\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n```\n\n### 模板来源与选择规则\n\n**模板文件位置**：`skills/project-manager/templates/` 目录下的 STATUS-A.md / STATUS-B.md（不是内联伪代码）。\n\n**选择规则**：\n| 场景 | 模板 |\n|------|------|\n| 3天以上的多阶段项目 | A 完整模板 |\n| 单任务（如\"帮我把这个接口重构一下\"） | B 轻量模板 |\n| 调研/分析类临时任务 | B 轻量模板 |\n| 需要多人协作或长期维护 | A 完整模板 |\n| 不确定 | 先用 B，后续发现需要再升级到 A |\n\n---\n\n## 操作工作流 (Workflow)\n\n### 1. 意图识别（自动激活）\n\n**穷举触发场景：**\n\n#### 显式命令类（直接触发）\n- **新建**：新建项目、建个项目、帮我建一个、创建一个项目、开个新项目、搞个项目、我们来做XX、开始做XX\n- **恢复**：回到XX、继续XX、接着来、恢复到、回到项目、继续做\n- **保存**：保存状态、先停一下、暂停、我先走了、去做别的、歇会\n- **查看**：有哪些项目、项目列表、看看进度、看看XX进度、项目状态、目前在做啥\n- **切换**：切换到、不管这个了先搞YY、换个项目、先放一下\n\n#### 隐含指代类（根据上下文推断）\n- **上次类**：上次那个、上次说的、之前那个、之前聊的、上次说的方案、上次的方案、我们之前讨论的\n- **继续类**：接着来、继续吧、接着上次说、然后呢、下一步呢、继续做、那个做完了吗、那个项目怎么样了\n- **关联类**：跟之前说的一样、按我们之前讨论的、还是之前的方案、跟上次一样\n\n#### 重要性标记类（应即时记录到 STATUS.md）\n- 这个很重要、记住这个、别忘了、记一下、这个值得记录、这个方案要记下来、把刚才说的记到项目里、刚才聊的东西挺重要的\n\n#### 话题切换类（应保存当前状态）\n- 换个话题、先聊点别的、先不说这个了、我们今天先这样、明天继续、下周再说、改天再聊\n\n#### 完成信号类（应更新状态）\n- 搞定了、做完了、这个问题解决了、这个方案定了、就按这个来、确认了\n\n**识别优先级**：\n1. 明确提到项目名 → 直接匹配 index.md\n2. 模糊指代 → 根据 index.md 中最近活跃的项目推断\n3. 无法确定 → 展示最近 2-3 个活跃项目让用户选择，不要盲目猜测\n\n### 2. 初始化新项目 (Start New)\n\n**触发条件**：\n1. **显式触发**：用户明确说\"新建项目\"/\"帮我建一个\"/\"一个话题\"/\"记录一下\"\n2. **自动检测触发（P1 新增）**：\n   - 连续 3 轮对话收敛到同一主题\n   - 内容涉及具体问题/需求/决策讨论（非闲聊）\n   - 检查 index.md 无相关项目\n   - 主动询问用户：\"这个话题我们聊了 3 轮了，要不要建个项目记录一下？\"\n\n**门槛判断（避免过度工程）**：\n- **建项目**：超过几句实质讨论、有具体问题/需求/决策、可能后续会继续推进（如\"调研某系统\"、\"帮我想个方案\"、\"评估某技术\"）\n- **不建项目**：随口一问、一句话话题、单纯信息查询 → 写入当日记忆即可\n\n**动作**：\n1. **先扫描 `index.md`** — 检查是否有相关项目可以合并或关联\n2. 有关联 → 合并到已有项目，告知用户\"这个话题我已归入 XX 项目\"\n3. 无关联 → 继续以下步骤：\n   1. **先向用户确认**：\"这是个新话题，我建个项目记录一下？概述是「{一句话概述}」\"\n   2. 用户同意后再创建\n   3. 目录名用 kebab-case：`cmra-geo`\n   4. 创建目录 `workspace/projects/{name}/`\n   5. **先从 `skills/project-manager/templates/` 目录读取对应模板**，根据复杂度选择 A/B 模板，创建 `STATUS.md`\n   6. **确保 `index.md` 存在**：如不存在，询问用户\"是否创建项目索引文件？\"，用户同意后创建并写入表头\n   7. 一句话概述生成规则：从对话核心意图提炼，格式为「动词 + 对象 + 目的」\n   8. 更新 `projects/index.md`（添加到顶部）\n4. **注册 session 状态同步**（见第 8 节）\n\n### 3. 恢复旧项目 (Resume)\n\n**动作**：\n1. **模糊匹配**：用户说的项目名可能不精确，先在 index.md 中查找\n2. **强制读取**：`read(workspace/projects/{name}/STATUS.md)`\n3. **摘要同步**：\"📖 已恢复 `{name}` 上下文。当前：[简述进度]。待办：[列出]。继续哪一步？\"\n4. **更新 index.md**：将该项目移到最后活跃时间顶部\n5. **如果 STATUS.md 不存在或为空** → 检查 `memory/` 目录下是否有相关日期的记忆文件，尝试恢复上下文；无法恢复时如实告知用户\n6. **注册 session 状态同步**（见第 8 节）\n\n### 4. 🔄 对话中即时记录（需用户确认）\n\n**这是核心机制。** 不是等到用户说\"保存状态\"才记录，而是在对话中**即时提议写入**。\n\n**触发时机（满足任一即提议写入）**：\n- 用户提出了新的需求或约束\n- 做出了技术/方案决策\n- 完成了一个子任务\n- 用户明确要求记住某事\n- 话题发生实质性切换（从项目 A 切换到项目 B）\n\n**写入策略（轻量，不拖慢对话）**：\n- 提议更新 STATUS.md 的\"当前状态\"和\"待办\"模块\n- 用 1-2 句话记录结论，不写过程流水账\n- **必须获得用户确认后才写入**（如\"记录到项目状态？\"）\n- 如果当前对话没有关联的项目 → 触发\"新项目创建\"流程（第 2 节）\n\n**不写入的情况**：\n- 只是闲聊/寒暄\n- 正在讨论中还没确定方案\n- 同一个任务的中间尝试（最终用的是最初方案）\n\n### 5. 暂停/切换 (Pause/Switch)\n\n**输入**：`先停一下` / `我去忙别的` / `切换到 XX`\n\n**动作**：\n1. 总结当前对话的结论\n2. 更新当前项目的 `STATUS.md`\n3. 更新 `index.md`：状态改为\"已暂停\"，记录暂停原因\n4. 如果是切换，恢复目标项目\n5. **回复用户**：\"✅ 状态已保存。下次说'回到 [Name]'即可无缝接续。\"\n\n### 6. Session 结束收尾\n\n**当检测到以下信号时**（用户说\"我先走了\"、\"明天继续\"、长时间无新消息、或状态恢复检测到上次对话已超过 2 小时）：\n\n1. 回顾最近一轮对话的内容\n2. 提取未完成的任务和关键决策\n3. 更新当前项目的 STATUS.md\n4. 写入当日记忆 `memory/YYYY-MM-DD.md`（一句话摘要 + 引用 STATUS.md）\n5. 如果涉及新话题但未建项目 → 记录到 HEARTBEAT 待处理队列\n\n### 7. 项目清理与归档 (Cleanup & Archive)\n\n**状态恢复期间定期检查**：\n- 超过 30 天未活跃 → 标记为\"可能归档\"，询问用户\n- 已完成 → 状态改为\"已完成\"\n- 已废弃 → 状态改为\"已废弃\"\n\n**归档操作**：\n1. 移动到 `projects/_archive/{name}/`\n2. 保留 STATUS.md 作为历史记录\n3. index.md 标记为\"已归档\"并移到底部\n\n---\n\n### 8. 🔄 Session 内状态同步（opt-in，需显式激活）\n\n### 这是什么？\n\n当用户显式请求（如\"开启状态同步\"、\"自动检查新对话\"）时，在当前 session 里注册状态同步任务。**不会自动激活。**\n\n### 为什么需要？\n\n用户不会每次都主动说\"记一下\"。状态同步解决了\"你不说就不记\"的问题——但必须由用户显式开启。\n\n### 如何工作？\n\n#### 注册流程\n用户显式请求时，执行以下操作：\n\n1. 创建/更新 checkpoint 文件 `memory/pm-checkpoint.json`：\n```json\n{\n  \"active\": true,\n  \"sessionKey\": \"当前session的key或label\",\n  \"lastCheckedMsgId\": \"当前最后一条消息的ID\",\n  \"lastCheckTime\": \"2026-04-25T11:09:00+08:00\",\n  \"intervalMinutes\": 60,\n  \"activeProject\": \"当前关联的项目名（可选）\",\n  \"expiresAt\": \"2026-04-26T00:00:00+08:00\"\n}\n```\n\n2. 创建一个 cron 任务，每 60 分钟执行一次：\n   - 读取 `pm-checkpoint.json` 获取上次检查位置\n   - 读取 checkpoint 之后新增的对话内容\n   - 分析新内容：是否有新话题、新决策、新需求？\n   - 对比 index.md：有关联 → 更新 STATUS.md；无关联 → 标记待确认\n   - 更新 checkpoint 的 `lastCheckedMsgId` 和 `lastCheckTime`\n\n#### 检查内容分析规则\n每次只读取 checkpoint 之后的新增对话，分析以下信号：\n\n| 信号类型 | 示例 | 动作 |\n|---------|------|------|\n| 新需求 | \"我们需要增加XX功能\" | 更新 STATUS.md 待办 |\n| 新决策 | \"用 Redis 不用 Memcached\" | 更新 STATUS.md 决策 |\n| 完成节点 | \"这个模块搞定了\" | 更新 STATUS.md 进度 |\n| 新话题 | 突然讨论完全不同的话题（如从技术跳到市场调研） | 扫描 index.md 判断是否建项目 |\n| 暂停信号 | \"先停一下\"、\"明天继续\" | 触发 Session 结束收尾（第 6 节） |\n\n#### 门槛判断\n- **实质内容**（有具体问题/需求/决策）→ 记录到 STATUS.md 或创建新项目\n- **闲聊/寒暄** → 跳过\n- **一句话话题** → 跳过\n\n#### 过期与清理\n- checkpoint 文件设置过期时间（默认 24 小时）\n- 过期后自动停止状态同步\n- 用户说\"不用检查了\"时立即停止\n- session 断开后下次激活时自动重新注册\n\n#### Token 消耗控制\n- 每次只读新增对话，不回顾全部历史\n- checkpoint 用 message ID 定位，精确到单条消息\n- 预计每次检查消耗 500-2000 token（60 分钟约 10-30 条新消息）\n\n---\n\n### 9. 📝 项目对话日志（v2.5 新增，opt-in）\n\n### 为什么需要\n项目相关的讨论分散在历史会话中，想回顾时找不到。对话日志把项目相关的关键讨论打包成独立文件，随时可以回顾。\n\n### 触发时机（需用户显式开启）\n- **项目新建时**：询问用户\"是否开启对话日志？\"，用户同意后初始化日志条目\n- **每次更新 STATUS.md 时**：如对话日志已开启，自动追加本次会话的关键内容\n- **项目归档时**：如对话日志已开启，打包整个项目的完整对话历史\n\n### 存储结构\n\n**两层存储**：摘要索引存本地文件，完整对话推荐存 MemPalace。\n\n#### 本地摘要索引\n写入 `memory/project_log_{project_name}.md`：\n\n```markdown\n# 📝 项目对话日志：{project_name}\n> 归档时间：{YYYY-MM-DD HH:MM}\n> 关联项目：projects/{project_name}/STATUS.md\n\n## 项目概况\n[核心目标一句话摘要]\n\n## 关键决策时间线\n| 时间 | 决策 | 上下文 |\n|------|------|--------|\n| YYYY-MM-DD | 决定采用方案A而不是B | 性能优先级高于成本 |\n\n## 踩过的坑\n[记录所有尝试过但失败的方案、原因、教训]\n\n## 历史会话快照\n> session_key: abc123 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要，不超过200字]\n\n---\n> session_key: def456 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要]\n```\n\n#### 完整对话归档（推荐）\n\n> **推荐**：将完整对话原文保存到 MemPalace（wing={project_name}, room=conversations），本地只保留摘要索引。MemPalace 支持语义搜索，可跨项目检索历史讨论。\n\n### 归档策略\n- **只记结论，不记流水**：超过200字的讨论压缩成摘要\n- **决策必记**：所有「就这么定了」「就用方案A」的时刻必须记录\n- **踩坑必记**：试过但失败的方案，防止重蹈覆辙\n- **自动关联**：session_key 链接到完整会话，方便回溯\n\n### 检索方式\n- 按文件名：`memory/project_log_{name}.md`\n- 按关键词搜索：记忆文件的内容可被全局搜索命中\n\n---\n\n### 10. 📅 甘特图自动生成（v2.5 新增）\n\n### 数据流关系\n**唯一数据源** = STATUS.md 中的 `## 📅 Timeline` YAML 块  \n**输出文件** = `projects/{name}/GANTT.md`  \n\n更新里程碑时：先改 STATUS.md Timeline → 再重新渲染 GANTT.md。不要直接编辑 GANTT.md，否则下次渲染会被覆盖。\n\n### 触发方式\n- **显式命令**：\"生成甘特图\"、\"看看时间线\"、\"项目进度图\"\n- **建议触发**：每次更新 STATUS.md 的 milestones 后，应该重新渲染 Gantt\n\n### 渲染算法（自然语言描述，按此逻辑执行）\n\n**第一步：读取项目时间配置**\n遍历所有项目目录，逐个读取 STATUS.md 中的 timeline 配置，提取每个项目的：\n- 开始日期 start_date\n- 预计完成日期 estimated_end\n- 所有里程碑列表（含名称、日期、状态）\n统计已完成里程碑数和总里程碑数，计算进度百分比 = 已完成 / 总数 × 100\n\n**第二步：渲染 ASCII 甘特图**\n输出格式如下：\n```\n📅 项目甘特图 | {当前年} 年 {当前月} 月\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n{项目名称}  [{进度条}] {进度百分比}%\n  ├─ {YYYY-MM-DD} ✅ {已完成的里程碑名称}\n  ├─ {YYYY-MM-DD} 🔄 {进行中的里程碑名称}\n  └─ {YYYY-MM-DD} ⏳ {待完成的里程碑名称}\n```\n\n**进度条渲染规则**：\n- 总长度固定 20 个字符\n- █ 表示已完成部分，░ 表示未完成部分\n- 0% 进度：20 个 ░，100% 进度：20 个 █\n- 50% 进度：10 个 █ + 10 个 ░\n\n**第三步：资源冲突检测**\n- 扫描所有里程碑的日期，如果同一天有 ≥3 个项目有里程碑，显示 ⚠️ 资源冲突预警\n- 统计方式：把所有里程碑的日期去重计数，超过阈值即触发\n- ⚙️ 阈值说明：默认值 3，对个人 agent 可能敏感，后续支持通过配置调整\n\n**第四步：延期预警计算**\n- 🔴 已延期：当前日期 > estimated_end，且进度 < 100%\n- 🟡 延期风险：当前日期距 estimated_end < 3 天，且进度 < 70%\n\n**第五步：输出到项目目录**\n- 自动创建或更新每个项目的 `projects/{name}/GANTT.md`\n- 同时在 `projects/index.md` 顶部生成全局汇总甘特图\n\n---\n\n### 11. ⚠️ 项目风险自动识别（v2.5 新增，opt-in）\n\n### 触发方式\n- **显式命令**：\"风险扫描\"、\"看看有什么风险\"、\"检查项目状态\"\n- **定时检查**：用户显式请求后才启用（如\"每天检查一次\"）\n\n### 风险规则引擎（严格按此逻辑执行）\n\n| 风险项 | 触发条件 | 等级 | 所需字段 |\n| --- | --- | --- | --- |\n| **静默风险** | 最后更新日期距今 >14 天 | 🔴 高 | last_updated |\n| **无里程碑风险** | 项目启动 >7 天，但无任何里程碑记录 | 🔴 高 | start_date, milestones |\n| **单点依赖风险** | 有 >3 个项目声明依赖同一个 skill 或外部项目 | 🟡 中 | dependencies |\n| **估时不准风险** | 连续 2 个已完成项目的估时偏差 >50% | 🟡 中 | estimated_hours, actual_hours |\n| **范围蔓延风险** | 里程碑总数比最初增加 >50% 后又新增 | 🟡 中 | milestones |\n| **依赖循环风险** | A 依赖 B 且 B 依赖 A（DAG 环路检测） | 🔴 高 | dependencies |\n| **延期风险** | 当前距 estimated_end <3 天，且进度 <70% | 🟡 中 | estimated_end, milestones |\n| **已延期** | 当前日期 > estimated_end 且进度 <100% | 🔴 高 | estimated_end, milestones |\n\n### 特殊规则说明\n- **估时不准风险**：需要从 projects/ 目录下所有已完成项目（actual_end 非 null）中读取 estimated_hours 和 actual_hours 字段计算偏差。项目完成时**必须**回填 actual_hours，否则此规则无法触发。\n\n### 扫描算法（自然语言描述，按此逻辑执行）\n\n**第一步：全量扫描所有项目目录**\n遍历 `projects/` 下每个项目，读取 STATUS.md，提取以下字段：timeline、dependencies、last_updated、estimated_hours、actual_hours。\n\n**第二步：逐个项目检查风险**\n按上述8项规则逐一检查，判断每个项目的风险项。\n\n**第三步：按风险等级分组输出**\n输出格式如下：\n```\n⚠️  项目风险扫描报告 | {YYYY-MM-DD}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n🔴 高风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  静默风险 - 最后更新 {天数} 天前\n  建议: ping 一下确认项目状态，或归档\n\n...\n\n🟡 中风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  单点依赖 - 依赖 {skill} 的项目共 {n} 个\n  建议: 评估是否需要技术储备方案\n\n🟢 健康 ({总数} 项)\n──────────────────────────────────────────────────\n• 按时更新 + 有里程碑 + 无单点依赖 + 无延期\n```\n\n**第四步：自动写入风险日志**\n- 所有识别出的风险自动写入对应项目 STATUS.md 的 `⚠️ Risk Log` 章节\n- 高风险项目同时在 `index.md` 标记 🔴 前缀\n\n### 风险 Mitigation 建议\n- **静默风险**：归档，或设一个唤醒日期\n- **无里程碑风险**：花 5 分钟拆 2-3 个阶段性节点\n- **单点依赖风险**：准备替代方案，或做技术储备\n- **估时不准风险**：下一个项目乘 1.5 倍安全系数\n\n---\n\n## 与日常记忆的关系\n\n| 信息类型 | 存放位置 | 示例 / 说明 |\n|---------|---------|------------|\n| 用户偏好 | `MEMORY.md` | \"不喜欢废话，只要结论\" |\n| 跨项目经验 | `MEMORY.md` | \"上次用 X 方案踩了 Y 坑\" |\n| 每日工作流水 | `memory/YYYY-MM-DD.md` | \"今天推进了 CMRA 认证模块，详情见 STATUS.md\" |\n| 项目进度 | `projects/{name}/STATUS.md` | \"CMRA：认证模块完成，开始做权限\" |\n| 甘特图数据 | `projects/{name}/GANTT.md` | STATUS.md Timeline YAML 的渲染输出 |\n| 项目对话日志 | `memory/project_log_{name}.md` | 关键决策和踩坑记录 |\n| 工时追踪 | `projects/{name}/STATUS.md` | 风险引擎「估时不准」规则依赖此数据 |\n| 技术细节 | `projects/{name}/status/` | 测试日志、设计草稿 |\n| 检查点 | `memory/pm-checkpoint.json` | 状态同步的位置标记 |\n\n**原则**：\n- 项目进度从 STATUS.md 读，经验教训沉淀到 MEMORY.md，两者不交叉。\n- `memory/YYYY-MM-DD.md` 中的项目记录**只写一句话摘要 + 引用 STATUS.md**，不重复细节。\n\n---\n\n## Git 关联（可选）\n\n如果 `git rev-parse --is-inside-work-tree` 在项目目录下执行成功（返回 0）：\n- STATUS.md 头部记录 `Git: [最近 commit hash]`\n- 更新状态时自动执行 `git log --oneline -1` 获取最新 commit\n\n---\n\n## 严格约束\n\n1. **Memory 禁令**：绝不要用 `memory` 工具或 `MEMORY.md` 记录项目进度。项目进度只存在于 `STATUS.md`。\n2. **读取优先**：回复项目相关问题前，**必须先读取** `STATUS.md`。不要依赖上一轮对话的记忆。\n3. **极简原则**：STATUS.md 只记\"结论\"和\"下一步\"，不记过程流水账。\n4. **模板降级**：小任务用轻量模板，别搞过度工程化。\n5. **模糊匹配（显式确认）**：用户说\"上次那个\"、\"接着来\"时，推断对应项目并展示给用户确认；无法确定时展示最近项目让用户选。\n6. **写入安全**：写 STATUS.md 前先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n7. **index.md 按需创建**：首次使用时如不存在，询问用户是否创建；发现项目目录存在但 index 中没有时，询问用户是否补录。\n8. **对话中即时记录（需确认）**：重要决策/需求/完成节点提议写入，但必须获得用户确认后才执行（第 4 节）。\n9. **Session 结束收尾**：检测到对话结束时，提议做状态落盘，用户确认后执行（第 6 节）。\n10. **新项目必须确认**：创建新项目前必须向用户确认（第 2 节）。\n11. **状态同步 opt-in**：Session 状态同步需用户显式开启（第 8 节）。\n12. **风险扫描 opt-in**：风险引擎需用户显式请求（第 11 节）。\n13. **对话日志 opt-in**：对话日志需用户显式开启（第 9 节）。\n\n---\n\n### 触发词\n`/project` | `新建项目` | `项目列表` | `记录一下` | `回到项目` | `继续项目` | `上次那个` | `甘特图` | `时间线` | `进度图`\n\n---\n\n📋 **版本历史**：详见 `CHANGELOG.md`  \n🔒 **安全说明**：详见 [SECURITY.md](./SECURITY.md)\n\nFile v2.7.2:README.md\n\n# 📂 Agent Project Manager Skill\n\n**Cross-Platform Project Context Isolation & State Management for AI Agents**\n\n> 🌐 [English](README.md) | [中文](README_CN.md)\n\n> Battle-tested across **nanobot**, **OpenClaw**, and **Hermes Agent** — solving the fundamental tension between AI agents' stateless nature and projects' need for continuity.\n\n## 简介 (Introduction)\n\nAI Agent 是无状态的，但项目需要连续性。本 Skill 通过为每个项目创建独立的 `STATUS.md` 文件，实现跨会话的无缝上下文恢复，同时不污染全局记忆。\n\n- **物理隔离**：每个项目独立文件，不共享状态\n- **意图识别**：无固定关键词，从上下文推断操作\n- **分级模板**：完整模板 (A) 用于复杂项目，轻量模板 (B) 用于单任务\n- **写入安全**：读-合并-写模式，减少意外覆盖\n- **Session 内状态同步**：一次激活，持续智能扫描新对话，防止\"聊了就忘\"\n- **增量 checkpoint**：只读新增对话，控制 token 消耗\n\n👉 详细中文设计文档：[DESIGN_CN.md](DESIGN_CN.md)\n\n## Problem\n\nAI agents forget — every day they wake up fresh. If conversations aren't recorded in time, everything is lost by tomorrow.\n\n- **Cross-day confusion**: Cannot accurately restore discussion details and context\n- **Multi-project contamination**: Decisions from Project A leak into Project B, causing contradictory advice\n- **Scattered conclusions**: Key decisions buried in dozens of messages, unrecoverable even with full history search\n\n**System goals**:\n\n- **Minimize information loss, maximize recoverability** without adding conversation burden\n- **Manage conversations like a project manager** — each project independently recorded with all details preserved\n- **Switch between projects freely** without carrying noise or pollution from other projects\n- **Structured anchors**: Retrieve any information by project, no need to search through entire history\n- **Significantly reduce Memory footprint** — STATUS.md is far smaller than full conversation history\n- **Full conversations recommended in MemPalace**\n\n## Solution\n\nA per-project `STATUS.md` system — the agent's \"external hard drive\":\n\n```\nworkspace/projects/\n├── index.md              # Auto-maintained project registry (with one-line summaries)\n├── {project-name}/\n│   ├── STATUS.md         # Progress, todos, key decisions\n│   ├── docs/             # Proposals, reports\n│   └── src/              # Code, deliverables\n└── _archive/             # Completed/abandoned projects\n```\n\n## Key Features\n\n| Feature | Description |\n|---------|-------------|\n| **Physical Isolation** | Each project has its own `STATUS.md` — no shared state |\n| **Intent Recognition** | No rigid keywords — infers new/resume/pause/switch from context |\n| **Tiered Templates** | Full (A) for multi-phase projects, Lightweight (B) for single tasks |\n| **Write-Safe** | Read-merge-write pattern reduces accidental overwrites within a session |\n| **Index Self-Healing** | Auto-creates `index.md`, auto-adds missing projects |\n| **Memory Boundary** | Project progress in `STATUS.md`, user preferences in global memory — never mixed |\n| **Session Periodic Check** 🆕 | Once activated, auto-scans new conversations for new topics (every 60 min) |\n| **Incremental Checkpoint** 🆕 | Only reads new messages since last check — minimal token overhead |\n| **Smart Recovery** 🆕 | Global scan as last line of defense when session checks aren't active |\n\n## Quantified Impact\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Global memory size | 1153 lines | 167 lines (85% reduction) |\n| Project recovery time | User re-describes context (~2 min) | Read STATUS.md (<1 sec) |\n| Context pollution risk | High (all projects mixed) | Low (physical isolation) |\n| Small task overhead | Full 5-module template | Lightweight 2-3 modules |\n| Forgotten topics | Always lost | Auto-captured by periodic check |\n\n## Installation\n\n### nanobot\nCopy `SKILL.md` to `~/.nanobot/workspace/skills/project-manager/SKILL.md`\n\n### OpenClaw\nCopy `SKILL.md` to `<workspace>/skills/project-manager/SKILL.md`\n\n### Hermes Agent\nCopy `SKILL.md` to your agent's skills directory\n\n## Workflow\n\n1. **New Project** → Scan index for related projects → Create if truly new → Confirm with user\n2. **Resume** → Fuzzy match → Force read STATUS.md → Sync summary\n3. **Save State** → Persist conclusions → Update index status\n4. **Switch** → Save current → Resume target\n5. **Archive** → Move to `_archive/` → Preserve history\n6. **Periodic Check** 🆕 → Auto-scan new conversations → Capture new topics\n\n## Architecture\n\nSee [DESIGN.md](DESIGN.md) for full architecture rationale, memory boundary rules, and comparison with automatic memory consolidation systems.\n\n## License\n\nMIT\n\n---\n\n*Designed by Kris. v2.5 — Gantt chart auto-generation, 8-rule risk detection engine, dependency management, conversation log archiving. See CHANGELOG.md for full history.*\n\nFile v2.7.2:_meta.json\n\n{\n  \"ownerId\": \"kn71pbmkb9h8sppk4yg6dn7zad808rvt\",\n  \"slug\": \"agent-project-manager\",\n  \"version\": \"2.7.2\",\n  \"publishedAt\": 1779785135991\n}\n\nFile v2.7.2:skill-card.md\n\n## Description:\n\nProject Manager helps agents preserve per-project context by creating and maintaining local status files, project indexes, optional checkpoints, Gantt summaries, risk reports, and conversation-summary logs.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[krislu1221](https://clawhub.ai/user/krislu1221)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and agent users use this skill to keep AI-assisted project work recoverable across sessions by storing progress, decisions, todos, timelines, and risks in local project files. It is intended for project context management rather than application runtime execution.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Optional status synchronization and daily checks can create ongoing background monitoring and retention of conversation-derived summaries.\n\nMitigation: Enable synchronization only when explicitly needed, verify its expiration settings, and remove any scheduled tasks when the workflow is no longer desired.\n\nRisk: Project status, memory, and conversation-log files may contain sensitive user or project details.\n\nMitigation: Avoid sharing secrets in conversations that may be summarized, and review local project and memory files before publishing or committing them.\n\nRisk: Read-merge-write updates reduce accidental overwrite risk but do not prevent concurrent edits between read and write.\n\nMitigation: Review proposed file changes before accepting them and use version control or backups for important project records.\n\nRisk: Optional full conversation archival can preserve more history than users expect.\n\nMitigation: Use MemPalace or conversation-log archival only when the workspace retention policy permits that level of history.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/krislu1221/skills/agent-project-manager)\n- [README](artifact/README.md)\n- [Full Status Template](artifact/templates/STATUS-A.md)\n- [Lightweight Status Template](artifact/templates/STATUS-B.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown files, JSON checkpoint configuration, and concise text status summaries.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May update local project and memory files after user confirmation; optional synchronization and logging can retain conversation-derived summaries.]\n\n## Skill Version(s):\n\n2.7.2 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v2.7.2:templates/STATUS-A.md\n\n# 项目：[名称]\n> 最后更新：[日期] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## ⏱️ 工时追踪\n```yaml\nestimated_hours: [预计工时，如 8]\nactual_hours: null  # 🔴 项目完成时必须回填，供风险引擎「估时不准」规则使用\n```\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nactual_end: null  # 项目完成时自动填写\nmilestones:\n  - name: [里程碑 1 名称]\n    date: [YYYY-MM-DD]\n    status: pending  # pending / in-progress / completed\n  - name: [里程碑 2 名称]\n    date: [YYYY-MM-DD]\n    status: pending\n```\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项\n- [x] 已完成 1\n- [ ] 待办 2（优先级高）\n- [ ] 待办 3\n\n## 🔗 关系管理\n```yaml\n# 【强依赖类型】有强制前后置关系\n# - type: requires   # A必须依赖B才能开始\n# - type: blocks     # A阻塞了B的进度\n# - type: optional   # 可选增强，没有也能用\n\n# 【弱关联类型】仅表示关联关系，无强制约束\n# - type: related    # 两者相关联，共同推进\n# - type: uses       # A使用了B的输出/能力\n# - type: references # A参考了B的设计/文档\n\n# - project: [关联项目名称]\n#   type: requires\n#   description: \"描述关系\"\n#   status: satisfied  # satisfied / blocked / in-progress\n```\n\n## 🔑 关键上下文 / 决策\n- 决策 1（为什么这么做）\n- 约束 1（用户明确要求的事项）\n- 链接（相关 URL / 文件路径）\n\n## 🛑 暂停原因 / 待确认问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n\n## ⚠️ 风险日志\n```yaml\n# Auto-scanned by Project Manager v2.5\n# - name: [风险名称]\n#   level: high  # high / medium / low\n#   trigger: 14 days no update  # 检测触发条件\n#   status: active  # active / mitigated / resolved\n#   description: \"详细描述\"\n#   suggestion: \"建议动作\"\n```\n\nFile v2.7.2:templates/STATUS-B.md\n\n# 项目：[名称]\n> 最后更新：[日期] | PM: v2.5\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nestimated_hours: [预计工时，如 4]\nactual_hours: null  # 完成后填写\n# 自动计算进度\n# progress: 0%\n```\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因。没有就删掉。]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n\n## ⚠️ 风险（自动扫描）\n<!-- Project Manager v2.5 自动填充 -->\n\nFile v2.7.2:clawhub.json\n\n{\n  \"name\": \"agent-project-manager\",\n  \"version\": \"2.7.1\",\n  \"description\": \"项目上下文隔离与状态管理系统 v2.5。按需记录项目进度、决策和待办，支持甘特图、风险扫描和依赖管理。仅在用户明确指示时执行操作，不会主动扫描或修改文件。\",\n  \"author\": \"Kris Lu\",\n  \"license\": \"MIT\",\n  \"triggers\": [\n    \"/project\",\n    \"新建项目\",\n    \"回到项目\",\n    \"记录项目\",\n    \"继续项目\",\n    \"项目列表\",\n    \"甘特图\"\n  ],\n  \"keywords\": [\n    \"project-management\",\n    \"context-isolation\",\n    \"state-management\",\n    \"gantt-chart\",\n    \"risk-detection\",\n    \"dependency-management\",\n    \"checkpoint\"\n  ],\n  \"main\": \"SKILL.md\",\n  \"files\": [\n    \"SKILL.md\",\n    \"SECURITY.md\",\n    \"README.md\",\n    \"README_CN.md\",\n    \"CHANGELOG.md\",\n    \"DESIGN.md\",\n    \"DESIGN_CN.md\",\n    \"templates/\",\n    \"references/\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Krislu1221/project-manager-skill\"\n  },\n  \"homepage\": \"https://clawhub.ai/krislu1221/agent-project-manager\",\n  \"security\": {\n    \"type\": \"pure_markdown_skill_no_code\",\n    \"file_access\": \"workspace/projects/{name}/STATUS.md, projects/index.md, memory/pm-checkpoint.json\",\n    \"shell_access\": \"git rev-parse / git log (read-only, project dir scoped)\",\n    \"network_access\": \"none\",\n    \"third_party_services\": \"none\",\n    \"write_safety\": \"read-merge-write pattern with TOCTOU limitation documented\"\n  },\n  \"data_privacy\": {\n    \"data_leaves_device\": false,\n    \"project_data\": \"local filesystem only\",\n    \"note\": \"No executable code. Pure instruction skill file.\"\n  }\n}\n\nFile v2.7.2:LICENSE\n\nMIT License\n\nCopyright (c) 2026 Kris\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v2.7.1: 8 files, 19422 bytes\n\nFiles: clawhub.json (1906b), LICENSE (1061b), README.md (5045b), skill-card.md (2704b), SKILL.md (27083b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nFile v2.7.1:SKILL.md\n\n---\nname: project-manager\ndescription: \"项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图\"\n---\n\n# Project Manager v2.7.0 - 项目上下文管理系统\n\n## 要解决的核心问题 / Problems Solved\n\n**Agent 会遗忘。** 每天醒来是全新的，如果对话中没有及时记录，第二天就完全不记得做过什么。\n\n**Agents forget.** Every day they wake up fresh. If conversations aren't recorded in time, everything is lost by tomorrow.\n\n- **跨天对话容易混淆**：无法精准还原讨论的信息和细节\n- **Cross-day confusion**: Cannot accurately restore discussion details and context\n- **多个项目混在同一对话历史中**：A 项目的决策会污染 B 项目的上下文，导致 Agent 给出矛盾建议\n- **Multi-project contamination**: Decisions from Project A leak into Project B, causing contradictory advice\n- **关键结论散落在几十条消息里**：翻遍历史也找不回来\n- **Scattered conclusions**: Key decisions buried in dozens of messages, unrecoverable even with full history search\n\n本系统的目标：\n\n- **最小化信息遗漏，最大化可恢复性**，不增加对话负担\n- **Minimize information loss, maximize recoverability** without adding conversation burden\n- **以项目经理角度管理对话**，而非日记——每个项目独立记录，独立保存所有信息和细节\n- **Manage conversations like a project manager** — each project independently recorded with all details preserved\n- **随时回到任意项目**，不携带其他项目的污染信息和噪音\n- **Switch between projects freely** without carrying noise or pollution from other projects\n- **结构化锚点**：任何信息按项目精确召回，无需翻遍历史\n- **Structured anchors**: Retrieve any information by project, no need to search through entire history\n- **大幅降低 Memory 负载**，节省 Token 消耗（STATUS.md 远小于完整对话历史）\n- **Significantly reduce Memory footprint** — STATUS.md is far smaller than full conversation history\n- **推荐完整对话保存在 MemPalace 中**\n- **Full conversations recommended in MemPalace**\n\n## 架构原则\n\n| 层级 | 文件 | 职责 |\n|------|------|------|\n| **即时记录** | `projects/{name}/STATUS.md` | 对话中即时写入重要决策/需求/完成节点 |\n| **按需状态同步** | `memory/pm-checkpoint.json` | session 内检查新对话，发现新话题 |\n| **智能恢复** | `HEARTBEAT.md` 第 5 项 | 全局检查，作为最后一道防线 |\n| **全局记忆** | `MEMORY.md` / `memory/*.md` | 用户偏好、跨项目经验（不含项目进度） |\n\n## 与 Auto-Coding v3 集成\n当使用 `auto-coding-v3` 进行代码开发时，该系统会在 `workspace/projects/{project_name}/status/` 下生成详细的工程状态文件。\n*   `STATUS.md` 负责 **宏观进度**（Todo, Next Step, Decision）。\n*   `status/` 目录负责 **微观工程细节**（Scratchpad, Logs）。\n\n## 核心原则\n\n1. **物理隔离**：每个项目拥有独立的 `STATUS.md`，绝不混用。\n2. **状态显式化**：没有记录在文件里的事，就是没发生。\n3. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后。⚠️ 需用户确认后写入。\n4. **Session 状态同步（opt-in）**：用户显式触发后才注册定期状态同步，不自动激活。\n5. **分级管理**：轻重有别，杀鸡不用牛刀。\n6. **意图优先（显式触发）**：根据对话上下文推断意图，但所有操作需用户确认后执行。\n7. **写入安全**：写入前必须先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n\n## 目录结构规范\n\n```text\nworkspace/projects/\n├── index.md              # 📇 项目索引（自动维护，必须含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 🧠 核心记忆：进度、待办、关键决策（每次对话必读/必写）\n│   ├── docs/             # 方案、报告、调研数据\n│   ├── src/              # 代码、产出物\n│   └── status/           # auto-coding v3 微观工程文件（可选）\n└── _archive/             # 📦 已归档项目\n    └── {project-name}/\n        └── STATUS.md     # 保留历史记录\n```\n\n## 📇 项目索引：`projects/index.md`\n\n```markdown\n# 项目索引\n> 自动维护，按最后活跃时间倒序\n\n| 项目 | 目录 | 最后更新 | 状态 | 备注 |\n|------|------|---------|------|------|\n| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |\n```\n\n**维护规则：**\n- **首次使用**：如不存在，自动创建并写入表头\n- 新建项目时：添加到顶部\n- 恢复项目时：更新\"最后更新\"时间，移到顶部\n- 暂停项目时：更新\"状态\"为\"已暂停\"并记录暂停原因\n- 归档项目时：移到 `_archive/`，index.md 标记为\"已归档\"\n- **索引自愈**：发现项目目录存在但 index 中没有时，自动补录\n- **必须包含一句话概述**，格式为「动词 + 对象 + 目的」\n\n---\n\n## 分级 STATUS.md 模板\n\n> ⚠️ 以下为简化示意，实际使用时应先从 `skills/project-manager/templates/` 目录读取对应完整模板文件。\n\n### A) 完整模板（>3天项目 / 多阶段任务 / 跨团队协作）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项 (Todo)\n- [x] 已完成 1\n- [ ] 待办 2 (优先级高)\n- [ ] 待办 3\n\n## 🔑 关键上下文/决策\n- 决策 1 (为什么这么做)\n- 约束 1 (用户明确要求的事项)\n- 链接 (相关 URL/文件路径)\n\n## 🛑 暂停原因/遗留问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n```\n\n### B) 轻量模板（<3天的单任务 / 调研/分析类临时任务）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | PM: v2.5\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n```\n\n### 模板来源与选择规则\n\n**模板文件位置**：`skills/project-manager/templates/` 目录下的 STATUS-A.md / STATUS-B.md（不是内联伪代码）。\n\n**选择规则**：\n| 场景 | 模板 |\n|------|------|\n| 3天以上的多阶段项目 | A 完整模板 |\n| 单任务（如\"帮我把这个接口重构一下\"） | B 轻量模板 |\n| 调研/分析类临时任务 | B 轻量模板 |\n| 需要多人协作或长期维护 | A 完整模板 |\n| 不确定 | 先用 B，后续发现需要再升级到 A |\n\n---\n\n## 操作工作流 (Workflow)\n\n### 1. 意图识别（自动激活）\n\n**穷举触发场景：**\n\n#### 显式命令类（直接触发）\n- **新建**：新建项目、建个项目、帮我建一个、创建一个项目、开个新项目、搞个项目、我们来做XX、开始做XX\n- **恢复**：回到XX、继续XX、接着来、恢复到、回到项目、继续做\n- **保存**：保存状态、先停一下、暂停、我先走了、去做别的、歇会\n- **查看**：有哪些项目、项目列表、看看进度、看看XX进度、项目状态、目前在做啥\n- **切换**：切换到、不管这个了先搞YY、换个项目、先放一下\n\n#### 隐含指代类（根据上下文推断）\n- **上次类**：上次那个、上次说的、之前那个、之前聊的、上次说的方案、上次的方案、我们之前讨论的\n- **继续类**：接着来、继续吧、接着上次说、然后呢、下一步呢、继续做、那个做完了吗、那个项目怎么样了\n- **关联类**：跟之前说的一样、按我们之前讨论的、还是之前的方案、跟上次一样\n\n#### 重要性标记类（应即时记录到 STATUS.md）\n- 这个很重要、记住这个、别忘了、记一下、这个值得记录、这个方案要记下来、把刚才说的记到项目里、刚才聊的东西挺重要的\n\n#### 话题切换类（应保存当前状态）\n- 换个话题、先聊点别的、先不说这个了、我们今天先这样、明天继续、下周再说、改天再聊\n\n#### 完成信号类（应更新状态）\n- 搞定了、做完了、这个问题解决了、这个方案定了、就按这个来、确认了\n\n**识别优先级**：\n1. 明确提到项目名 → 直接匹配 index.md\n2. 模糊指代 → 根据 index.md 中最近活跃的项目推断\n3. 无法确定 → 展示最近 2-3 个活跃项目让用户选择，不要盲目猜测\n\n### 2. 初始化新项目 (Start New)\n\n**触发条件**：\n1. **显式触发**：用户明确说\"新建项目\"/\"帮我建一个\"/\"一个话题\"/\"记录一下\"\n2. **自动检测触发（P1 新增）**：\n   - 连续 3 轮对话收敛到同一主题\n   - 内容涉及具体问题/需求/决策讨论（非闲聊）\n   - 检查 index.md 无相关项目\n   - 主动询问用户：\"这个话题我们聊了 3 轮了，要不要建个项目记录一下？\"\n\n**门槛判断（避免过度工程）**：\n- **建项目**：超过几句实质讨论、有具体问题/需求/决策、可能后续会继续推进（如\"调研某系统\"、\"帮我想个方案\"、\"评估某技术\"）\n- **不建项目**：随口一问、一句话话题、单纯信息查询 → 写入当日记忆即可\n\n**动作**：\n1. **先扫描 `index.md`** — 检查是否有相关项目可以合并或关联\n2. 有关联 → 合并到已有项目，告知用户\"这个话题我已归入 XX 项目\"\n3. 无关联 → 继续以下步骤：\n   1. **先向用户确认**：\"这是个新话题，我建个项目记录一下？概述是「{一句话概述}」\"\n   2. 用户同意后再创建\n   3. 目录名用 kebab-case：`cmra-geo`\n   4. 创建目录 `workspace/projects/{name}/`\n   5. **先从 `skills/project-manager/templates/` 目录读取对应模板**，根据复杂度选择 A/B 模板，创建 `STATUS.md`\n   6. **确保 `index.md` 存在**：如不存在，询问用户\"是否创建项目索引文件？\"，用户同意后创建并写入表头\n   7. 一句话概述生成规则：从对话核心意图提炼，格式为「动词 + 对象 + 目的」\n   8. 更新 `projects/index.md`（添加到顶部）\n4. **注册 session 状态同步**（见第 8 节）\n\n### 3. 恢复旧项目 (Resume)\n\n**动作**：\n1. **模糊匹配**：用户说的项目名可能不精确，先在 index.md 中查找\n2. **强制读取**：`read(workspace/projects/{name}/STATUS.md)`\n3. **摘要同步**：\"📖 已恢复 `{name}` 上下文。当前：[简述进度]。待办：[列出]。继续哪一步？\"\n4. **更新 index.md**：将该项目移到最后活跃时间顶部\n5. **如果 STATUS.md 不存在或为空** → 检查 `memory/` 目录下是否有相关日期的记忆文件，尝试恢复上下文；无法恢复时如实告知用户\n6. **注册 session 状态同步**（见第 8 节）\n\n### 4. 🔄 对话中即时记录（需用户确认）\n\n**这是核心机制。** 不是等到用户说\"保存状态\"才记录，而是在对话中**即时提议写入**。\n\n**触发时机（满足任一即提议写入）**：\n- 用户提出了新的需求或约束\n- 做出了技术/方案决策\n- 完成了一个子任务\n- 用户明确要求记住某事\n- 话题发生实质性切换（从项目 A 切换到项目 B）\n\n**写入策略（轻量，不拖慢对话）**：\n- 提议更新 STATUS.md 的\"当前状态\"和\"待办\"模块\n- 用 1-2 句话记录结论，不写过程流水账\n- **必须获得用户确认后才写入**（如\"记录到项目状态？\"）\n- 如果当前对话没有关联的项目 → 触发\"新项目创建\"流程（第 2 节）\n\n**不写入的情况**：\n- 只是闲聊/寒暄\n- 正在讨论中还没确定方案\n- 同一个任务的中间尝试（最终用的是最初方案）\n\n### 5. 暂停/切换 (Pause/Switch)\n\n**输入**：`先停一下` / `我去忙别的` / `切换到 XX`\n\n**动作**：\n1. 总结当前对话的结论\n2. 更新当前项目的 `STATUS.md`\n3. 更新 `index.md`：状态改为\"已暂停\"，记录暂停原因\n4. 如果是切换，恢复目标项目\n5. **回复用户**：\"✅ 状态已保存。下次说'回到 [Name]'即可无缝接续。\"\n\n### 6. Session 结束收尾\n\n**当检测到以下信号时**（用户说\"我先走了\"、\"明天继续\"、长时间无新消息、或状态恢复检测到上次对话已超过 2 小时）：\n\n1. 回顾最近一轮对话的内容\n2. 提取未完成的任务和关键决策\n3. 更新当前项目的 STATUS.md\n4. 写入当日记忆 `memory/YYYY-MM-DD.md`（一句话摘要 + 引用 STATUS.md）\n5. 如果涉及新话题但未建项目 → 记录到 HEARTBEAT 待处理队列\n\n### 7. 项目清理与归档 (Cleanup & Archive)\n\n**状态恢复期间定期检查**：\n- 超过 30 天未活跃 → 标记为\"可能归档\"，询问用户\n- 已完成 → 状态改为\"已完成\"\n- 已废弃 → 状态改为\"已废弃\"\n\n**归档操作**：\n1. 移动到 `projects/_archive/{name}/`\n2. 保留 STATUS.md 作为历史记录\n3. index.md 标记为\"已归档\"并移到底部\n\n---\n\n### 8. 🔄 Session 内状态同步（opt-in，需显式激活）\n\n### 这是什么？\n\n当用户显式请求（如\"开启状态同步\"、\"自动检查新对话\"）时，在当前 session 里注册状态同步任务。**不会自动激活。**\n\n### 为什么需要？\n\n用户不会每次都主动说\"记一下\"。状态同步解决了\"你不说就不记\"的问题——但必须由用户显式开启。\n\n### 如何工作？\n\n#### 注册流程\n用户显式请求时，执行以下操作：\n\n1. 创建/更新 checkpoint 文件 `memory/pm-checkpoint.json`：\n```json\n{\n  \"active\": true,\n  \"sessionKey\": \"当前session的key或label\",\n  \"lastCheckedMsgId\": \"当前最后一条消息的ID\",\n  \"lastCheckTime\": \"2026-04-25T11:09:00+08:00\",\n  \"intervalMinutes\": 60,\n  \"activeProject\": \"当前关联的项目名（可选）\",\n  \"expiresAt\": \"2026-04-26T00:00:00+08:00\"\n}\n```\n\n2. 创建一个 cron 任务，每 60 分钟执行一次：\n   - 读取 `pm-checkpoint.json` 获取上次检查位置\n   - 读取 checkpoint 之后新增的对话内容\n   - 分析新内容：是否有新话题、新决策、新需求？\n   - 对比 index.md：有关联 → 更新 STATUS.md；无关联 → 标记待确认\n   - 更新 checkpoint 的 `lastCheckedMsgId` 和 `lastCheckTime`\n\n#### 检查内容分析规则\n每次只读取 checkpoint 之后的新增对话，分析以下信号：\n\n| 信号类型 | 示例 | 动作 |\n|---------|------|------|\n| 新需求 | \"我们需要增加XX功能\" | 更新 STATUS.md 待办 |\n| 新决策 | \"用 Redis 不用 Memcached\" | 更新 STATUS.md 决策 |\n| 完成节点 | \"这个模块搞定了\" | 更新 STATUS.md 进度 |\n| 新话题 | 突然讨论完全不同的话题（如从技术跳到市场调研） | 扫描 index.md 判断是否建项目 |\n| 暂停信号 | \"先停一下\"、\"明天继续\" | 触发 Session 结束收尾（第 6 节） |\n\n#### 门槛判断\n- **实质内容**（有具体问题/需求/决策）→ 记录到 STATUS.md 或创建新项目\n- **闲聊/寒暄** → 跳过\n- **一句话话题** → 跳过\n\n#### 过期与清理\n- checkpoint 文件设置过期时间（默认 24 小时）\n- 过期后自动停止状态同步\n- 用户说\"不用检查了\"时立即停止\n- session 断开后下次激活时自动重新注册\n\n#### Token 消耗控制\n- 每次只读新增对话，不回顾全部历史\n- checkpoint 用 message ID 定位，精确到单条消息\n- 预计每次检查消耗 500-2000 token（60 分钟约 10-30 条新消息）\n\n---\n\n### 9. 📝 项目对话日志（v2.5 新增，opt-in）\n\n### 为什么需要\n项目相关的讨论分散在历史会话中，想回顾时找不到。对话日志把项目相关的关键讨论打包成独立文件，随时可以回顾。\n\n### 触发时机（需用户显式开启）\n- **项目新建时**：询问用户\"是否开启对话日志？\"，用户同意后初始化日志条目\n- **每次更新 STATUS.md 时**：如对话日志已开启，自动追加本次会话的关键内容\n- **项目归档时**：如对话日志已开启，打包整个项目的完整对话历史\n\n### 存储结构\n\n**两层存储**：摘要索引存本地文件，完整对话推荐存 MemPalace。\n\n#### 本地摘要索引\n写入 `memory/project_log_{project_name}.md`：\n\n```markdown\n# 📝 项目对话日志：{project_name}\n> 归档时间：{YYYY-MM-DD HH:MM}\n> 关联项目：projects/{project_name}/STATUS.md\n\n## 项目概况\n[核心目标一句话摘要]\n\n## 关键决策时间线\n| 时间 | 决策 | 上下文 |\n|------|------|--------|\n| YYYY-MM-DD | 决定采用方案A而不是B | 性能优先级高于成本 |\n\n## 踩过的坑\n[记录所有尝试过但失败的方案、原因、教训]\n\n## 历史会话快照\n> session_key: abc123 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要，不超过200字]\n\n---\n> session_key: def456 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要]\n```\n\n#### 完整对话归档（推荐）\n\n> **推荐**：将完整对话原文保存到 MemPalace（wing={project_name}, room=conversations），本地只保留摘要索引。MemPalace 支持语义搜索，可跨项目检索历史讨论。\n\n### 归档策略\n- **只记结论，不记流水**：超过200字的讨论压缩成摘要\n- **决策必记**：所有「就这么定了」「就用方案A」的时刻必须记录\n- **踩坑必记**：试过但失败的方案，防止重蹈覆辙\n- **自动关联**：session_key 链接到完整会话，方便回溯\n\n### 检索方式\n- 按文件名：`memory/project_log_{name}.md`\n- 按关键词搜索：记忆文件的内容可被全局搜索命中\n\n---\n\n### 10. 📅 甘特图自动生成（v2.5 新增）\n\n### 数据流关系\n**唯一数据源** = STATUS.md 中的 `## 📅 Timeline` YAML 块  \n**输出文件** = `projects/{name}/GANTT.md`  \n\n更新里程碑时：先改 STATUS.md Timeline → 再重新渲染 GANTT.md。不要直接编辑 GANTT.md，否则下次渲染会被覆盖。\n\n### 触发方式\n- **显式命令**：\"生成甘特图\"、\"看看时间线\"、\"项目进度图\"\n- **建议触发**：每次更新 STATUS.md 的 milestones 后，应该重新渲染 Gantt\n\n### 渲染算法（自然语言描述，按此逻辑执行）\n\n**第一步：读取项目时间配置**\n遍历所有项目目录，逐个读取 STATUS.md 中的 timeline 配置，提取每个项目的：\n- 开始日期 start_date\n- 预计完成日期 estimated_end\n- 所有里程碑列表（含名称、日期、状态）\n统计已完成里程碑数和总里程碑数，计算进度百分比 = 已完成 / 总数 × 100\n\n**第二步：渲染 ASCII 甘特图**\n输出格式如下：\n```\n📅 项目甘特图 | {当前年} 年 {当前月} 月\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n{项目名称}  [{进度条}] {进度百分比}%\n  ├─ {YYYY-MM-DD} ✅ {已完成的里程碑名称}\n  ├─ {YYYY-MM-DD} 🔄 {进行中的里程碑名称}\n  └─ {YYYY-MM-DD} ⏳ {待完成的里程碑名称}\n```\n\n**进度条渲染规则**：\n- 总长度固定 20 个字符\n- █ 表示已完成部分，░ 表示未完成部分\n- 0% 进度：20 个 ░，100% 进度：20 个 █\n- 50% 进度：10 个 █ + 10 个 ░\n\n**第三步：资源冲突检测**\n- 扫描所有里程碑的日期，如果同一天有 ≥3 个项目有里程碑，显示 ⚠️ 资源冲突预警\n- 统计方式：把所有里程碑的日期去重计数，超过阈值即触发\n- ⚙️ 阈值说明：默认值 3，对个人 agent 可能敏感，后续支持通过配置调整\n\n**第四步：延期预警计算**\n- 🔴 已延期：当前日期 > estimated_end，且进度 < 100%\n- 🟡 延期风险：当前日期距 estimated_end < 3 天，且进度 < 70%\n\n**第五步：输出到项目目录**\n- 自动创建或更新每个项目的 `projects/{name}/GANTT.md`\n- 同时在 `projects/index.md` 顶部生成全局汇总甘特图\n\n---\n\n### 11. ⚠️ 项目风险自动识别（v2.5 新增，opt-in）\n\n### 触发方式\n- **显式命令**：\"风险扫描\"、\"看看有什么风险\"、\"检查项目状态\"\n- **定时检查**：用户显式请求后才启用（如\"每天检查一次\"）\n\n### 风险规则引擎（严格按此逻辑执行）\n\n| 风险项 | 触发条件 | 等级 | 所需字段 |\n| --- | --- | --- | --- |\n| **静默风险** | 最后更新日期距今 >14 天 | 🔴 高 | last_updated |\n| **无里程碑风险** | 项目启动 >7 天，但无任何里程碑记录 | 🔴 高 | start_date, milestones |\n| **单点依赖风险** | 有 >3 个项目声明依赖同一个 skill 或外部项目 | 🟡 中 | dependencies |\n| **估时不准风险** | 连续 2 个已完成项目的估时偏差 >50% | 🟡 中 | estimated_hours, actual_hours |\n| **范围蔓延风险** | 里程碑总数比最初增加 >50% 后又新增 | 🟡 中 | milestones |\n| **依赖循环风险** | A 依赖 B 且 B 依赖 A（DAG 环路检测） | 🔴 高 | dependencies |\n| **延期风险** | 当前距 estimated_end <3 天，且进度 <70% | 🟡 中 | estimated_end, milestones |\n| **已延期** | 当前日期 > estimated_end 且进度 <100% | 🔴 高 | estimated_end, milestones |\n\n### 特殊规则说明\n- **估时不准风险**：需要从 projects/ 目录下所有已完成项目（actual_end 非 null）中读取 estimated_hours 和 actual_hours 字段计算偏差。项目完成时**必须**回填 actual_hours，否则此规则无法触发。\n\n### 扫描算法（自然语言描述，按此逻辑执行）\n\n**第一步：全量扫描所有项目目录**\n遍历 `projects/` 下每个项目，读取 STATUS.md，提取以下字段：timeline、dependencies、last_updated、estimated_hours、actual_hours。\n\n**第二步：逐个项目检查风险**\n按上述8项规则逐一检查，判断每个项目的风险项。\n\n**第三步：按风险等级分组输出**\n输出格式如下：\n```\n⚠️  项目风险扫描报告 | {YYYY-MM-DD}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n🔴 高风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  静默风险 - 最后更新 {天数} 天前\n  建议: ping 一下确认项目状态，或归档\n\n...\n\n🟡 中风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  单点依赖 - 依赖 {skill} 的项目共 {n} 个\n  建议: 评估是否需要技术储备方案\n\n🟢 健康 ({总数} 项)\n──────────────────────────────────────────────────\n• 按时更新 + 有里程碑 + 无单点依赖 + 无延期\n```\n\n**第四步：自动写入风险日志**\n- 所有识别出的风险自动写入对应项目 STATUS.md 的 `⚠️ Risk Log` 章节\n- 高风险项目同时在 `index.md` 标记 🔴 前缀\n\n### 风险 Mitigation 建议\n- **静默风险**：归档，或设一个唤醒日期\n- **无里程碑风险**：花 5 分钟拆 2-3 个阶段性节点\n- **单点依赖风险**：准备替代方案，或做技术储备\n- **估时不准风险**：下一个项目乘 1.5 倍安全系数\n\n---\n\n## 与日常记忆的关系\n\n| 信息类型 | 存放位置 | 示例 / 说明 |\n|---------|---------|------------|\n| 用户偏好 | `MEMORY.md` | \"不喜欢废话，只要结论\" |\n| 跨项目经验 | `MEMORY.md` | \"上次用 X 方案踩了 Y 坑\" |\n| 每日工作流水 | `memory/YYYY-MM-DD.md` | \"今天推进了 CMRA 认证模块，详情见 STATUS.md\" |\n| 项目进度 | `projects/{name}/STATUS.md` | \"CMRA：认证模块完成，开始做权限\" |\n| 甘特图数据 | `projects/{name}/GANTT.md` | STATUS.md Timeline YAML 的渲染输出 |\n| 项目对话日志 | `memory/project_log_{name}.md` | 关键决策和踩坑记录 |\n| 工时追踪 | `projects/{name}/STATUS.md` | 风险引擎「估时不准」规则依赖此数据 |\n| 技术细节 | `projects/{name}/status/` | 测试日志、设计草稿 |\n| 检查点 | `memory/pm-checkpoint.json` | 状态同步的位置标记 |\n\n**原则**：\n- 项目进度从 STATUS.md 读，经验教训沉淀到 MEMORY.md，两者不交叉。\n- `memory/YYYY-MM-DD.md` 中的项目记录**只写一句话摘要 + 引用 STATUS.md**，不重复细节。\n\n---\n\n## Git 关联（可选）\n\n如果 `git rev-parse --is-inside-work-tree` 在项目目录下执行成功（返回 0）：\n- STATUS.md 头部记录 `Git: [最近 commit hash]`\n- 更新状态时自动执行 `git log --oneline -1` 获取最新 commit\n\n---\n\n## 严格约束\n\n1. **Memory 禁令**：绝不要用 `memory` 工具或 `MEMORY.md` 记录项目进度。项目进度只存在于 `STATUS.md`。\n2. **读取优先**：回复项目相关问题前，**必须先读取** `STATUS.md`。不要依赖上一轮对话的记忆。\n3. **极简原则**：STATUS.md 只记\"结论\"和\"下一步\"，不记过程流水账。\n4. **模板降级**：小任务用轻量模板，别搞过度工程化。\n5. **模糊匹配（显式确认）**：用户说\"上次那个\"、\"接着来\"时，推断对应项目并展示给用户确认；无法确定时展示最近项目让用户选。\n6. **写入安全**：写 STATUS.md 前先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n7. **index.md 按需创建**：首次使用时如不存在，询问用户是否创建；发现项目目录存在但 index 中没有时，询问用户是否补录。\n8. **对话中即时记录（需确认）**：重要决策/需求/完成节点提议写入，但必须获得用户确认后才执行（第 4 节）。\n9. **Session 结束收尾**：检测到对话结束时，提议做状态落盘，用户确认后执行（第 6 节）。\n10. **新项目必须确认**：创建新项目前必须向用户确认（第 2 节）。\n11. **状态同步 opt-in**：Session 状态同步需用户显式开启（第 8 节）。\n12. **风险扫描 opt-in**：风险引擎需用户显式请求（第 11 节）。\n13. **对话日志 opt-in**：对话日志需用户显式开启（第 9 节）。\n\n---\n\n### 触发词\n`/project` | `新建项目` | `项目列表` | `记录一下` | `回到项目` | `继续项目` | `上次那个` | `甘特图` | `时间线` | `进度图`\n\n---\n\n📋 **版本历史**：详见 `CHANGELOG.md`  \n🔒 **安全说明**：详见 [SECURITY.md](./SECURITY.md)\n\nFile v2.7.1:README.md\n\n# 📂 Agent Project Manager Skill\n\n**Cross-Platform Project Context Isolation & State Management for AI Agents**\n\n> 🌐 [English](README.md) | [中文](README_CN.md)\n\n> Battle-tested across **nanobot**, **OpenClaw**, and **Hermes Agent** — solving the fundamental tension between AI agents' stateless nature and projects' need for continuity.\n\n## 简介 (Introduction)\n\nAI Agent 是无状态的，但项目需要连续性。本 Skill 通过为每个项目创建独立的 `STATUS.md` 文件，实现跨会话的无缝上下文恢复，同时不污染全局记忆。\n\n- **物理隔离**：每个项目独立文件，不共享状态\n- **意图识别**：无固定关键词，从上下文推断操作\n- **分级模板**：完整模板 (A) 用于复杂项目，轻量模板 (B) 用于单任务\n- **写入安全**：读-合并-写模式，减少意外覆盖\n- **Session 内状态同步**：一次激活，持续智能扫描新对话，防止\"聊了就忘\"\n- **增量 checkpoint**：只读新增对话，控制 token 消耗\n\n👉 详细中文设计文档：[DESIGN_CN.md](DESIGN_CN.md)\n\n## Problem\n\nAI agents forget — every day they wake up fresh. If conversations aren't recorded in time, everything is lost by tomorrow.\n\n- **Cross-day confusion**: Cannot accurately restore discussion details and context\n- **Multi-project contamination**: Decisions from Project A leak into Project B, causing contradictory advice\n- **Scattered conclusions**: Key decisions buried in dozens of messages, unrecoverable even with full history search\n\n**System goals**:\n\n- **Minimize information loss, maximize recoverability** without adding conversation burden\n- **Manage conversations like a project manager** — each project independently recorded with all details preserved\n- **Switch between projects freely** without carrying noise or pollution from other projects\n- **Structured anchors**: Retrieve any information by project, no need to search through entire history\n- **Significantly reduce Memory footprint** — STATUS.md is far smaller than full conversation history\n- **Full conversations recommended in MemPalace**\n\n## Solution\n\nA per-project `STATUS.md` system — the agent's \"external hard drive\":\n\n```\nworkspace/projects/\n├── index.md              # Auto-maintained project registry (with one-line summaries)\n├── {project-name}/\n│   ├── STATUS.md         # Progress, todos, key decisions\n│   ├── docs/             # Proposals, reports\n│   └── src/              # Code, deliverables\n└── _archive/             # Completed/abandoned projects\n```\n\n## Key Features\n\n| Feature | Description |\n|---------|-------------|\n| **Physical Isolation** | Each project has its own `STATUS.md` — no shared state |\n| **Intent Recognition** | No rigid keywords — infers new/resume/pause/switch from context |\n| **Tiered Templates** | Full (A) for multi-phase projects, Lightweight (B) for single tasks |\n| **Write-Safe** | Read-merge-write pattern reduces accidental overwrites within a session |\n| **Index Self-Healing** | Auto-creates `index.md`, auto-adds missing projects |\n| **Memory Boundary** | Project progress in `STATUS.md`, user preferences in global memory — never mixed |\n| **Session Periodic Check** 🆕 | Once activated, auto-scans new conversations for new topics (every 60 min) |\n| **Incremental Checkpoint** 🆕 | Only reads new messages since last check — minimal token overhead |\n| **Smart Recovery** 🆕 | Global scan as last line of defense when session checks aren't active |\n\n## Quantified Impact\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Global memory size | 1153 lines | 167 lines (85% reduction) |\n| Project recovery time | User re-describes context (~2 min) | Read STATUS.md (<1 sec) |\n| Context pollution risk | High (all projects mixed) | Low (physical isolation) |\n| Small task overhead | Full 5-module template | Lightweight 2-3 modules |\n| Forgotten topics | Always lost | Auto-captured by periodic check |\n\n## Installation\n\n### nanobot\nCopy `SKILL.md` to `~/.nanobot/workspace/skills/project-manager/SKILL.md`\n\n### OpenClaw\nCopy `SKILL.md` to `<workspace>/skills/project-manager/SKILL.md`\n\n### Hermes Agent\nCopy `SKILL.md` to your agent's skills directory\n\n## Workflow\n\n1. **New Project** → Scan index for related projects → Create if truly new → Confirm with user\n2. **Resume** → Fuzzy match → Force read STATUS.md → Sync summary\n3. **Save State** → Persist conclusions → Update index status\n4. **Switch** → Save current → Resume target\n5. **Archive** → Move to `_archive/` → Preserve history\n6. **Periodic Check** 🆕 → Auto-scan new conversations → Capture new topics\n\n## Architecture\n\nSee [DESIGN.md](DESIGN.md) for full architecture rationale, memory boundary rules, and comparison with automatic memory consolidation systems.\n\n## License\n\nMIT\n\n---\n\n*Designed by Kris. v2.5 — Gantt chart auto-generation, 8-rule risk detection engine, dependency management, conversation log archiving. See CHANGELOG.md for full history.*\n\nFile v2.7.1:_meta.json\n\n{\n  \"ownerId\": \"kn71pbmkb9h8sppk4yg6dn7zad808rvt\",\n  \"slug\": \"agent-project-manager\",\n  \"version\": \"2.7.1\",\n  \"publishedAt\": 1779785043063\n}\n\nFile v2.7.1:skill-card.md\n\n## Description: <br>\nProject Manager is a project context isolation and state management skill that records project decisions, todos, status, timelines, risks, dependencies, and recovery context in local project files. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[krislu1221](https://clawhub.ai/user/krislu1221) <br>\n\n### License/Terms of Use: <br>\nMIT <br>\n\n\n## Use Case: <br>\nDevelopers, operators, and agent users use this skill to maintain continuity across project conversations by creating and updating per-project status files, indexes, timelines, risk logs, and handoff summaries. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may read and write persistent local project state, including STATUS.md, project indexes, checkpoint files, and optional project logs. <br>\nMitigation: Require explicit user confirmation before every write and periodically remove stale STATUS.md, memory, checkpoint, and project_log files. <br>\nRisk: Session sync and conversation logging can monitor or retain new conversation content after they are enabled. <br>\nMitigation: Keep session sync and conversation logs disabled unless needed, and avoid storing secrets or sensitive project details in project discussions. <br>\nRisk: The documented read-merge-write pattern reduces overwrite risk but does not eliminate race conditions between reading and writing local files. <br>\nMitigation: Read the latest file state immediately before writing, present the proposed update for review, and re-check files when multiple sessions may be active. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/krislu1221/agent-project-manager) <br>\n- [README](README.md) <br>\n- [STATUS-A Template](templates/STATUS-A.md) <br>\n- [STATUS-B Template](templates/STATUS-B.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, configuration, shell commands, guidance] <br>\n**Output Format:** [Markdown status files, Markdown reports, YAML-style timeline blocks, ASCII Gantt charts, and concise conversational guidance.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes are intended for local project state such as STATUS.md, projects/index.md, GANTT.md, checkpoint files, and optional project logs.] <br>\n\n## Skill Version(s): <br>\n2.7.1 (source: server-resolved release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v2.7.1:templates/STATUS-A.md\n\n# 项目：[名称]\n> 最后更新：[日期] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## ⏱️ 工时追踪\n```yaml\nestimated_hours: [预计工时，如 8]\nactual_hours: null  # 🔴 项目完成时必须回填，供风险引擎「估时不准」规则使用\n```\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nactual_end: null  # 项目完成时自动填写\nmilestones:\n  - name: [里程碑 1 名称]\n    date: [YYYY-MM-DD]\n    status: pending  # pending / in-progress / completed\n  - name: [里程碑 2 名称]\n    date: [YYYY-MM-DD]\n    status: pending\n```\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项\n- [x] 已完成 1\n- [ ] 待办 2（优先级高）\n- [ ] 待办 3\n\n## 🔗 关系管理\n```yaml\n# 【强依赖类型】有强制前后置关系\n# - type: requires   # A必须依赖B才能开始\n# - type: blocks     # A阻塞了B的进度\n# - type: optional   # 可选增强，没有也能用\n\n# 【弱关联类型】仅表示关联关系，无强制约束\n# - type: related    # 两者相关联，共同推进\n# - type: uses       # A使用了B的输出/能力\n# - type: references # A参考了B的设计/文档\n\n# - project: [关联项目名称]\n#   type: requires\n#   description: \"描述关系\"\n#   status: satisfied  # satisfied / blocked / in-progress\n```\n\n## 🔑 关键上下文 / 决策\n- 决策 1（为什么这么做）\n- 约束 1（用户明确要求的事项）\n- 链接（相关 URL / 文件路径）\n\n## 🛑 暂停原因 / 待确认问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n\n## ⚠️ 风险日志\n```yaml\n# Auto-scanned by Project Manager v2.5\n# - name: [风险名称]\n#   level: high  # high / medium / low\n#   trigger: 14 days no update  # 检测触发条件\n#   status: active  # active / mitigated / resolved\n#   description: \"详细描述\"\n#   suggestion: \"建议动作\"\n```\n\nFile v2.7.1:templates/STATUS-B.md\n\n# 项目：[名称]\n> 最后更新：[日期] | PM: v2.5\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nestimated_hours: [预计工时，如 4]\nactual_hours: null  # 完成后填写\n# 自动计算进度\n# progress: 0%\n```\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因。没有就删掉。]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n\n## ⚠️ 风险（自动扫描）\n<!-- Project Manager v2.5 自动填充 -->\n\nFile v2.7.1:clawhub.json\n\n{\n  \"name\": \"agent-project-manager\",\n  \"version\": \"2.7.0\",\n  \"description\": \"\\u9879\\u76ee\\u4e0a\\u4e0b\\u6587\\u9694\\u79bb\\u4e0e\\u72b6\\u6001\\u7ba1\\u7406\\u7cfb\\u7edf v2.5\\u3002\\u6309\\u9700\\u8bb0\\u5f55\\u9879\\u76ee\\u8fdb\\u5ea6\\u3001\\u51b3\\u7b56\\u548c\\u5f85\\u529e\\uff0c\\u652f\\u6301\\u7518\\u7279\\u56fe\\u3001\\u98ce\\u9669\\u626b\\u63cf\\u548c\\u4f9d\\u8d56\\u7ba1\\u7406\\u3002\\u4ec5\\u5728\\u7528\\u6237\\u660e\\u786e\\u6307\\u793a\\u65f6\\u6267\\u884c\\u64cd\\u4f5c\\uff0c\\u4e0d\\u4f1a\\u4e3b\\u52a8\\u626b\\u63cf\\u6216\\u4fee\\u6539\\u6587\\u4ef6\\u3002\",\n  \"author\": \"Kris Lu\",\n  \"license\": \"MIT\",\n  \"triggers\": [\n    \"/project\",\n    \"\\u65b0\\u5efa\\u9879\\u76ee\",\n    \"\\u56de\\u5230\\u9879\\u76ee\",\n    \"\\u8bb0\\u5f55\\u9879\\u76ee\",\n    \"\\u7ee7\\u7eed\\u9879\\u76ee\",\n    \"\\u9879\\u76ee\\u5217\\u8868\",\n    \"\\u7518\\u7279\\u56fe\"\n  ],\n  \"keywords\": [\n    \"project-management\",\n    \"context-isolation\",\n    \"state-management\",\n    \"gantt-chart\",\n    \"risk-detection\",\n    \"dependency-management\",\n    \"checkpoint\"\n  ],\n  \"main\": \"SKILL.md\",\n  \"files\": [\n    \"SKILL.md\",\n    \"SECURITY.md\",\n    \"README.md\",\n    \"README_CN.md\",\n    \"CHANGELOG.md\",\n    \"DESIGN.md\",\n    \"DESIGN_CN.md\",\n    \"templates/\",\n    \"references/\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Krislu1221/project-manager-skill\"\n  },\n  \"homepage\": \"https://clawhub.ai/krislu1221/agent-project-manager\",\n  \"security\": {\n    \"type\": \"pure_markdown_skill_no_code\",\n    \"file_access\": \"workspace/projects/{name}/STATUS.md, projects/index.md, memory/pm-checkpoint.json\",\n    \"shell_access\": \"git rev-parse / git log (read-only, project dir scoped)\",\n    \"network_access\": \"none\",\n    \"third_party_services\": \"none\",\n    \"write_safety\": \"read-merge-write pattern with TOCTOU limitation documented\"\n  },\n  \"data_privacy\": {\n    \"data_leaves_device\": false,\n    \"project_data\": \"local filesystem only\",\n    \"note\": \"No executable code. Pure instruction skill file.\"\n  }\n}\n\nFile v2.7.1:LICENSE\n\nMIT License\n\nCopyright (c) 2026 Kris\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v2.7.0: 8 files, 17986 bytes\n\nFiles: clawhub.json (1906b), LICENSE (1061b), README.md (4572b), skill-card.md (2320b), SKILL.md (25015b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nFile v2.7.0:SKILL.md\n\n---\nname: project-manager\ndescription: \"项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图\"\n---\n\n# Project Manager v2.7.0 - 项目上下文管理系统\n\n## 要解决的核心问题\n\n**Agent 会遗忘。** 每天醒来是全新的，如果对话中没有及时记录，第二天就完全不记得做过什么。\n\n本系统的目标：**最小化信息遗漏，最大化可恢复性，不增加对话负担。**\n\n## 架构原则\n\n| 层级 | 文件 | 职责 |\n|------|------|------|\n| **即时记录** | `projects/{name}/STATUS.md` | 对话中即时写入重要决策/需求/完成节点 |\n| **按需状态同步** | `memory/pm-checkpoint.json` | session 内检查新对话，发现新话题 |\n| **智能恢复** | `HEARTBEAT.md` 第 5 项 | 全局检查，作为最后一道防线 |\n| **全局记忆** | `MEMORY.md` / `memory/*.md` | 用户偏好、跨项目经验（不含项目进度） |\n\n## 与 Auto-Coding v3 集成\n当使用 `auto-coding-v3` 进行代码开发时，该系统会在 `workspace/projects/{project_name}/status/` 下生成详细的工程状态文件。\n*   `STATUS.md` 负责 **宏观进度**（Todo, Next Step, Decision）。\n*   `status/` 目录负责 **微观工程细节**（Scratchpad, Logs）。\n\n## 核心原则\n\n1. **物理隔离**：每个项目拥有独立的 `STATUS.md`，绝不混用。\n2. **状态显式化**：没有记录在文件里的事，就是没发生。\n3. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后。⚠️ 需用户确认后写入。\n4. **Session 状态同步（opt-in）**：用户显式触发后才注册定期状态同步，不自动激活。\n5. **分级管理**：轻重有别，杀鸡不用牛刀。\n6. **意图优先（显式触发）**：根据对话上下文推断意图，但所有操作需用户确认后执行。\n7. **写入安全**：写入前必须先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n\n## 目录结构规范\n\n```text\nworkspace/projects/\n├── index.md              # 📇 项目索引（自动维护，必须含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 🧠 核心记忆：进度、待办、关键决策（每次对话必读/必写）\n│   ├── docs/             # 方案、报告、调研数据\n│   ├── src/              # 代码、产出物\n│   └── status/           # auto-coding v3 微观工程文件（可选）\n└── _archive/             # 📦 已归档项目\n    └── {project-name}/\n        └── STATUS.md     # 保留历史记录\n```\n\n## 📇 项目索引：`projects/index.md`\n\n```markdown\n# 项目索引\n> 自动维护，按最后活跃时间倒序\n\n| 项目 | 目录 | 最后更新 | 状态 | 备注 |\n|------|------|---------|------|------|\n| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |\n```\n\n**维护规则：**\n- **首次使用**：如不存在，自动创建并写入表头\n- 新建项目时：添加到顶部\n- 恢复项目时：更新\"最后更新\"时间，移到顶部\n- 暂停项目时：更新\"状态\"为\"已暂停\"并记录暂停原因\n- 归档项目时：移到 `_archive/`，index.md 标记为\"已归档\"\n- **索引自愈**：发现项目目录存在但 index 中没有时，自动补录\n- **必须包含一句话概述**，格式为「动词 + 对象 + 目的」\n\n---\n\n## 分级 STATUS.md 模板\n\n> ⚠️ 以下为简化示意，实际使用时应先从 `skills/project-manager/templates/` 目录读取对应完整模板文件。\n\n### A) 完整模板（>3天项目 / 多阶段任务 / 跨团队协作）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项 (Todo)\n- [x] 已完成 1\n- [ ] 待办 2 (优先级高)\n- [ ] 待办 3\n\n## 🔑 关键上下文/决策\n- 决策 1 (为什么这么做)\n- 约束 1 (用户明确要求的事项)\n- 链接 (相关 URL/文件路径)\n\n## 🛑 暂停原因/遗留问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n```\n\n### B) 轻量模板（<3天的单任务 / 调研/分析类临时任务）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | PM: v2.5\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n```\n\n### 模板来源与选择规则\n\n**模板文件位置**：`skills/project-manager/templates/` 目录下的 STATUS-A.md / STATUS-B.md（不是内联伪代码）。\n\n**选择规则**：\n| 场景 | 模板 |\n|------|------|\n| 3天以上的多阶段项目 | A 完整模板 |\n| 单任务（如\"帮我把这个接口重构一下\"） | B 轻量模板 |\n| 调研/分析类临时任务 | B 轻量模板 |\n| 需要多人协作或长期维护 | A 完整模板 |\n| 不确定 | 先用 B，后续发现需要再升级到 A |\n\n---\n\n## 操作工作流 (Workflow)\n\n### 1. 意图识别（自动激活）\n\n**穷举触发场景：**\n\n#### 显式命令类（直接触发）\n- **新建**：新建项目、建个项目、帮我建一个、创建一个项目、开个新项目、搞个项目、我们来做XX、开始做XX\n- **恢复**：回到XX、继续XX、接着来、恢复到、回到项目、继续做\n- **保存**：保存状态、先停一下、暂停、我先走了、去做别的、歇会\n- **查看**：有哪些项目、项目列表、看看进度、看看XX进度、项目状态、目前在做啥\n- **切换**：切换到、不管这个了先搞YY、换个项目、先放一下\n\n#### 隐含指代类（根据上下文推断）\n- **上次类**：上次那个、上次说的、之前那个、之前聊的、上次说的方案、上次的方案、我们之前讨论的\n- **继续类**：接着来、继续吧、接着上次说、然后呢、下一步呢、继续做、那个做完了吗、那个项目怎么样了\n- **关联类**：跟之前说的一样、按我们之前讨论的、还是之前的方案、跟上次一样\n\n#### 重要性标记类（应即时记录到 STATUS.md）\n- 这个很重要、记住这个、别忘了、记一下、这个值得记录、这个方案要记下来、把刚才说的记到项目里、刚才聊的东西挺重要的\n\n#### 话题切换类（应保存当前状态）\n- 换个话题、先聊点别的、先不说这个了、我们今天先这样、明天继续、下周再说、改天再聊\n\n#### 完成信号类（应更新状态）\n- 搞定了、做完了、这个问题解决了、这个方案定了、就按这个来、确认了\n\n**识别优先级**：\n1. 明确提到项目名 → 直接匹配 index.md\n2. 模糊指代 → 根据 index.md 中最近活跃的项目推断\n3. 无法确定 → 展示最近 2-3 个活跃项目让用户选择，不要盲目猜测\n\n### 2. 初始化新项目 (Start New)\n\n**触发条件**：\n1. **显式触发**：用户明确说\"新建项目\"/\"帮我建一个\"/\"一个话题\"/\"记录一下\"\n2. **自动检测触发（P1 新增）**：\n   - 连续 3 轮对话收敛到同一主题\n   - 内容涉及具体问题/需求/决策讨论（非闲聊）\n   - 检查 index.md 无相关项目\n   - 主动询问用户：\"这个话题我们聊了 3 轮了，要不要建个项目记录一下？\"\n\n**门槛判断（避免过度工程）**：\n- **建项目**：超过几句实质讨论、有具体问题/需求/决策、可能后续会继续推进（如\"调研某系统\"、\"帮我想个方案\"、\"评估某技术\"）\n- **不建项目**：随口一问、一句话话题、单纯信息查询 → 写入当日记忆即可\n\n**动作**：\n1. **先扫描 `index.md`** — 检查是否有相关项目可以合并或关联\n2. 有关联 → 合并到已有项目，告知用户\"这个话题我已归入 XX 项目\"\n3. 无关联 → 继续以下步骤：\n   1. **先向用户确认**：\"这是个新话题，我建个项目记录一下？概述是「{一句话概述}」\"\n   2. 用户同意后再创建\n   3. 目录名用 kebab-case：`cmra-geo`\n   4. 创建目录 `workspace/projects/{name}/`\n   5. **先从 `skills/project-manager/templates/` 目录读取对应模板**，根据复杂度选择 A/B 模板，创建 `STATUS.md`\n   6. **确保 `index.md` 存在**：如不存在，询问用户\"是否创建项目索引文件？\"，用户同意后创建并写入表头\n   7. 一句话概述生成规则：从对话核心意图提炼，格式为「动词 + 对象 + 目的」\n   8. 更新 `projects/index.md`（添加到顶部）\n4. **注册 session 状态同步**（见第 8 节）\n\n### 3. 恢复旧项目 (Resume)\n\n**动作**：\n1. **模糊匹配**：用户说的项目名可能不精确，先在 index.md 中查找\n2. **强制读取**：`read(workspace/projects/{name}/STATUS.md)`\n3. **摘要同步**：\"📖 已恢复 `{name}` 上下文。当前：[简述进度]。待办：[列出]。继续哪一步？\"\n4. **更新 index.md**：将该项目移到最后活跃时间顶部\n5. **如果 STATUS.md 不存在或为空** → 检查 `memory/` 目录下是否有相关日期的记忆文件，尝试恢复上下文；无法恢复时如实告知用户\n6. **注册 session 状态同步**（见第 8 节）\n\n### 4. 🔄 对话中即时记录（需用户确认）\n\n**这是核心机制。** 不是等到用户说\"保存状态\"才记录，而是在对话中**即时提议写入**。\n\n**触发时机（满足任一即提议写入）**：\n- 用户提出了新的需求或约束\n- 做出了技术/方案决策\n- 完成了一个子任务\n- 用户明确要求记住某事\n- 话题发生实质性切换（从项目 A 切换到项目 B）\n\n**写入策略（轻量，不拖慢对话）**：\n- 提议更新 STATUS.md 的\"当前状态\"和\"待办\"模块\n- 用 1-2 句话记录结论，不写过程流水账\n- **必须获得用户确认后才写入**（如\"记录到项目状态？\"）\n- 如果当前对话没有关联的项目 → 触发\"新项目创建\"流程（第 2 节）\n\n**不写入的情况**：\n- 只是闲聊/寒暄\n- 正在讨论中还没确定方案\n- 同一个任务的中间尝试（最终用的是最初方案）\n\n### 5. 暂停/切换 (Pause/Switch)\n\n**输入**：`先停一下` / `我去忙别的` / `切换到 XX`\n\n**动作**：\n1. 总结当前对话的结论\n2. 更新当前项目的 `STATUS.md`\n3. 更新 `index.md`：状态改为\"已暂停\"，记录暂停原因\n4. 如果是切换，恢复目标项目\n5. **回复用户**：\"✅ 状态已保存。下次说'回到 [Name]'即可无缝接续。\"\n\n### 6. Session 结束收尾\n\n**当检测到以下信号时**（用户说\"我先走了\"、\"明天继续\"、长时间无新消息、或状态恢复检测到上次对话已超过 2 小时）：\n\n1. 回顾最近一轮对话的内容\n2. 提取未完成的任务和关键决策\n3. 更新当前项目的 STATUS.md\n4. 写入当日记忆 `memory/YYYY-MM-DD.md`（一句话摘要 + 引用 STATUS.md）\n5. 如果涉及新话题但未建项目 → 记录到 HEARTBEAT 待处理队列\n\n### 7. 项目清理与归档 (Cleanup & Archive)\n\n**状态恢复期间定期检查**：\n- 超过 30 天未活跃 → 标记为\"可能归档\"，询问用户\n- 已完成 → 状态改为\"已完成\"\n- 已废弃 → 状态改为\"已废弃\"\n\n**归档操作**：\n1. 移动到 `projects/_archive/{name}/`\n2. 保留 STATUS.md 作为历史记录\n3. index.md 标记为\"已归档\"并移到底部\n\n---\n\n### 8. 🔄 Session 内状态同步（opt-in，需显式激活）\n\n### 这是什么？\n\n当用户显式请求（如\"开启状态同步\"、\"自动检查新对话\"）时，在当前 session 里注册状态同步任务。**不会自动激活。**\n\n### 为什么需要？\n\n用户不会每次都主动说\"记一下\"。状态同步解决了\"你不说就不记\"的问题——但必须由用户显式开启。\n\n### 如何工作？\n\n#### 注册流程\n用户显式请求时，执行以下操作：\n\n1. 创建/更新 checkpoint 文件 `memory/pm-checkpoint.json`：\n```json\n{\n  \"active\": true,\n  \"sessionKey\": \"当前session的key或label\",\n  \"lastCheckedMsgId\": \"当前最后一条消息的ID\",\n  \"lastCheckTime\": \"2026-04-25T11:09:00+08:00\",\n  \"intervalMinutes\": 60,\n  \"activeProject\": \"当前关联的项目名（可选）\",\n  \"expiresAt\": \"2026-04-26T00:00:00+08:00\"\n}\n```\n\n2. 创建一个 cron 任务，每 60 分钟执行一次：\n   - 读取 `pm-checkpoint.json` 获取上次检查位置\n   - 读取 checkpoint 之后新增的对话内容\n   - 分析新内容：是否有新话题、新决策、新需求？\n   - 对比 index.md：有关联 → 更新 STATUS.md；无关联 → 标记待确认\n   - 更新 checkpoint 的 `lastCheckedMsgId` 和 `lastCheckTime`\n\n#### 检查内容分析规则\n每次只读取 checkpoint 之后的新增对话，分析以下信号：\n\n| 信号类型 | 示例 | 动作 |\n|---------|------|------|\n| 新需求 | \"我们需要增加XX功能\" | 更新 STATUS.md 待办 |\n| 新决策 | \"用 Redis 不用 Memcached\" | 更新 STATUS.md 决策 |\n| 完成节点 | \"这个模块搞定了\" | 更新 STATUS.md 进度 |\n| 新话题 | 突然讨论完全不同的话题（如从技术跳到市场调研） | 扫描 index.md 判断是否建项目 |\n| 暂停信号 | \"先停一下\"、\"明天继续\" | 触发 Session 结束收尾（第 6 节） |\n\n#### 门槛判断\n- **实质内容**（有具体问题/需求/决策）→ 记录到 STATUS.md 或创建新项目\n- **闲聊/寒暄** → 跳过\n- **一句话话题** → 跳过\n\n#### 过期与清理\n- checkpoint 文件设置过期时间（默认 24 小时）\n- 过期后自动停止状态同步\n- 用户说\"不用检查了\"时立即停止\n- session 断开后下次激活时自动重新注册\n\n#### Token 消耗控制\n- 每次只读新增对话，不回顾全部历史\n- checkpoint 用 message ID 定位，精确到单条消息\n- 预计每次检查消耗 500-2000 token（60 分钟约 10-30 条新消息）\n\n---\n\n### 9. 📝 项目对话日志（v2.5 新增，opt-in）\n\n### 为什么需要\n项目相关的讨论分散在历史会话中，想回顾时找不到。对话日志把项目相关的关键讨论打包成独立文件，随时可以回顾。\n\n### 触发时机（需用户显式开启）\n- **项目新建时**：询问用户\"是否开启对话日志？\"，用户同意后初始化日志条目\n- **每次更新 STATUS.md 时**：如对话日志已开启，自动追加本次会话的关键内容\n- **项目归档时**：如对话日志已开启，打包整个项目的完整对话历史\n\n### 存储结构\n写入 `memory/project_log_{project_name}.md`：\n\n```markdown\n# 📝 项目对话日志：{project_name}\n> 归档时间：{YYYY-MM-DD HH:MM}\n> 关联项目：projects/{project_name}/STATUS.md\n\n## 项目概况\n[核心目标一句话摘要]\n\n## 关键决策时间线\n| 时间 | 决策 | 上下文 |\n|------|------|--------|\n| YYYY-MM-DD | 决定采用方案A而不是B | 性能优先级高于成本 |\n\n## 踩过的坑\n[记录所有尝试过但失败的方案、原因、教训]\n\n## 历史会话快照\n> session_key: abc123 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要，不超过200字]\n\n---\n> session_key: def456 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要]\n```\n\n### 归档策略\n- **只记结论，不记流水**：超过200字的讨论压缩成摘要\n- **决策必记**：所有「就这么定了」「就用方案A」的时刻必须记录\n- **踩坑必记**：试过但失败的方案，防止重蹈覆辙\n- **自动关联**：session_key 链接到完整会话，方便回溯\n\n### 检索方式\n- 按文件名：`memory/project_log_{name}.md`\n- 按关键词搜索：记忆文件的内容可被全局搜索命中\n\n---\n\n### 10. 📅 甘特图自动生成（v2.5 新增）\n\n### 数据流关系\n**唯一数据源** = STATUS.md 中的 `## 📅 Timeline` YAML 块  \n**输出文件** = `projects/{name}/GANTT.md`  \n\n更新里程碑时：先改 STATUS.md Timeline → 再重新渲染 GANTT.md。不要直接编辑 GANTT.md，否则下次渲染会被覆盖。\n\n### 触发方式\n- **显式命令**：\"生成甘特图\"、\"看看时间线\"、\"项目进度图\"\n- **建议触发**：每次更新 STATUS.md 的 milestones 后，应该重新渲染 Gantt\n\n### 渲染算法（自然语言描述，按此逻辑执行）\n\n**第一步：读取项目时间配置**\n遍历所有项目目录，逐个读取 STATUS.md 中的 timeline 配置，提取每个项目的：\n- 开始日期 start_date\n- 预计完成日期 estimated_end\n- 所有里程碑列表（含名称、日期、状态）\n统计已完成里程碑数和总里程碑数，计算进度百分比 = 已完成 / 总数 × 100\n\n**第二步：渲染 ASCII 甘特图**\n输出格式如下：\n```\n📅 项目甘特图 | {当前年} 年 {当前月} 月\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n{项目名称}  [{进度条}] {进度百分比}%\n  ├─ {YYYY-MM-DD} ✅ {已完成的里程碑名称}\n  ├─ {YYYY-MM-DD} 🔄 {进行中的里程碑名称}\n  └─ {YYYY-MM-DD} ⏳ {待完成的里程碑名称}\n```\n\n**进度条渲染规则**：\n- 总长度固定 20 个字符\n- █ 表示已完成部分，░ 表示未完成部分\n- 0% 进度：20 个 ░，100% 进度：20 个 █\n- 50% 进度：10 个 █ + 10 个 ░\n\n**第三步：资源冲突检测**\n- 扫描所有里程碑的日期，如果同一天有 ≥3 个项目有里程碑，显示 ⚠️ 资源冲突预警\n- 统计方式：把所有里程碑的日期去重计数，超过阈值即触发\n- ⚙️ 阈值说明：默认值 3，对个人 agent 可能敏感，后续支持通过配置调整\n\n**第四步：延期预警计算**\n- 🔴 已延期：当前日期 > estimated_end，且进度 < 100%\n- 🟡 延期风险：当前日期距 estimated_end < 3 天，且进度 < 70%\n\n**第五步：输出到项目目录**\n- 自动创建或更新每个项目的 `projects/{name}/GANTT.md`\n- 同时在 `projects/index.md` 顶部生成全局汇总甘特图\n\n---\n\n### 11. ⚠️ 项目风险自动识别（v2.5 新增，opt-in）\n\n### 触发方式\n- **显式命令**：\"风险扫描\"、\"看看有什么风险\"、\"检查项目状态\"\n- **定时检查**：用户显式请求后才启用（如\"每天检查一次\"）\n\n### 风险规则引擎（严格按此逻辑执行）\n\n| 风险项 | 触发条件 | 等级 | 所需字段 |\n| --- | --- | --- | --- |\n| **静默风险** | 最后更新日期距今 >14 天 | 🔴 高 | last_updated |\n| **无里程碑风险** | 项目启动 >7 天，但无任何里程碑记录 | 🔴 高 | start_date, milestones |\n| **单点依赖风险** | 有 >3 个项目声明依赖同一个 skill 或外部项目 | 🟡 中 | dependencies |\n| **估时不准风险** | 连续 2 个已完成项目的估时偏差 >50% | 🟡 中 | estimated_hours, actual_hours |\n| **范围蔓延风险** | 里程碑总数比最初增加 >50% 后又新增 | 🟡 中 | milestones |\n| **依赖循环风险** | A 依赖 B 且 B 依赖 A（DAG 环路检测） | 🔴 高 | dependencies |\n| **延期风险** | 当前距 estimated_end <3 天，且进度 <70% | 🟡 中 | estimated_end, milestones |\n| **已延期** | 当前日期 > estimated_end 且进度 <100% | 🔴 高 | estimated_end, milestones |\n\n### 特殊规则说明\n- **估时不准风险**：需要从 projects/ 目录下所有已完成项目（actual_end 非 null）中读取 estimated_hours 和 actual_hours 字段计算偏差。项目完成时**必须**回填 actual_hours，否则此规则无法触发。\n\n### 扫描算法（自然语言描述，按此逻辑执行）\n\n**第一步：全量扫描所有项目目录**\n遍历 `projects/` 下每个项目，读取 STATUS.md，提取以下字段：timeline、dependencies、last_updated、estimated_hours、actual_hours。\n\n**第二步：逐个项目检查风险**\n按上述8项规则逐一检查，判断每个项目的风险项。\n\n**第三步：按风险等级分组输出**\n输出格式如下：\n```\n⚠️  项目风险扫描报告 | {YYYY-MM-DD}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n🔴 高风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  静默风险 - 最后更新 {天数} 天前\n  建议: ping 一下确认项目状态，或归档\n\n...\n\n🟡 中风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  单点依赖 - 依赖 {skill} 的项目共 {n} 个\n  建议: 评估是否需要技术储备方案\n\n🟢 健康 ({总数} 项)\n──────────────────────────────────────────────────\n• 按时更新 + 有里程碑 + 无单点依赖 + 无延期\n```\n\n**第四步：自动写入风险日志**\n- 所有识别出的风险自动写入对应项目 STATUS.md 的 `⚠️ Risk Log` 章节\n- 高风险项目同时在 `index.md` 标记 🔴 前缀\n\n### 风险 Mitigation 建议\n- **静默风险**：归档，或设一个唤醒日期\n- **无里程碑风险**：花 5 分钟拆 2-3 个阶段性节点\n- **单点依赖风险**：准备替代方案，或做技术储备\n- **估时不准风险**：下一个项目乘 1.5 倍安全系数\n\n---\n\n## 与日常记忆的关系\n\n| 信息类型 | 存放位置 | 示例 / 说明 |\n|---------|---------|------------|\n| 用户偏好 | `MEMORY.md` | \"不喜欢废话，只要结论\" |\n| 跨项目经验 | `MEMORY.md` | \"上次用 X 方案踩了 Y 坑\" |\n| 每日工作流水 | `memory/YYYY-MM-DD.md` | \"今天推进了 CMRA 认证模块，详情见 STATUS.md\" |\n| 项目进度 | `projects/{name}/STATUS.md` | \"CMRA：认证模块完成，开始做权限\" |\n| 甘特图数据 | `projects/{name}/GANTT.md` | STATUS.md Timeline YAML 的渲染输出 |\n| 项目对话日志 | `memory/project_log_{name}.md` | 关键决策和踩坑记录 |\n| 工时追踪 | `projects/{name}/STATUS.md` | 风险引擎「估时不准」规则依赖此数据 |\n| 技术细节 | `projects/{name}/status/` | 测试日志、设计草稿 |\n| 检查点 | `memory/pm-checkpoint.json` | 状态同步的位置标记 |\n\n**原则**：\n- 项目进度从 STATUS.md 读，经验教训沉淀到 MEMORY.md，两者不交叉。\n- `memory/YYYY-MM-DD.md` 中的项目记录**只写一句话摘要 + 引用 STATUS.md**，不重复细节。\n\n---\n\n## Git 关联（可选）\n\n如果 `git rev-parse --is-inside-work-tree` 在项目目录下执行成功（返回 0）：\n- STATUS.md 头部记录 `Git: [最近 commit hash]`\n- 更新状态时自动执行 `git log --oneline -1` 获取最新 commit\n\n---\n\n## 严格约束\n\n1. **Memory 禁令**：绝不要用 `memory` 工具或 `MEMORY.md` 记录项目进度。项目进度只存在于 `STATUS.md`。\n2. **读取优先**：回复项目相关问题前，**必须先读取** `STATUS.md`。不要依赖上一轮对话的记忆。\n3. **极简原则**：STATUS.md 只记\"结论\"和\"下一步\"，不记过程流水账。\n4. **模板降级**：小任务用轻量模板，别搞过度工程化。\n5. **模糊匹配（显式确认）**：用户说\"上次那个\"、\"接着来\"时，推断对应项目并展示给用户确认；无法确定时展示最近项目让用户选。\n6. **写入安全**：写 STATUS.md 前先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n7. **index.md 按需创建**：首次使用时如不存在，询问用户是否创建；发现项目目录存在但 index 中没有时，询问用户是否补录。\n8. **对话中即时记录（需确认）**：重要决策/需求/完成节点提议写入，但必须获得用户确认后才执行（第 4 节）。\n9. **Session 结束收尾**：检测到对话结束时，提议做状态落盘，用户确认后执行（第 6 节）。\n10. **新项目必须确认**：创建新项目前必须向用户确认（第 2 节）。\n11. **状态同步 opt-in**：Session 状态同步需用户显式开启（第 8 节）。\n12. **风险扫描 opt-in**：风险引擎需用户显式请求（第 11 节）。\n13. **对话日志 opt-in**：对话日志需用户显式开启（第 9 节）。\n\n---\n\n### 触发词\n`/project` | `新建项目` | `项目列表` | `记录一下` | `回到项目` | `继续项目` | `上次那个` | `甘特图` | `时间线` | `进度图`\n\n---\n\n📋 **版本历史**：详见 `CHANGELOG.md`  \n🔒 **安全说明**：详见 [SECURITY.md](./SECURITY.md)\n\nFile v2.7.0:README.md\n\n# 📂 Agent Project Manager Skill\n\n**Cross-Platform Project Context Isolation & State Management for AI Agents**\n\n> 🌐 [English](README.md) | [中文](README_CN.md)\n\n> Battle-tested across **nanobot**, **OpenClaw**, and **Hermes Agent** — solving the fundamental tension between AI agents' stateless nature and projects' need for continuity.\n\n## 简介 (Introduction)\n\nAI Agent 是无状态的，但项目需要连续性。本 Skill 通过为每个项目创建独立的 `STATUS.md` 文件，实现跨会话的无缝上下文恢复，同时不污染全局记忆。\n\n- **物理隔离**：每个项目独立文件，不共享状态\n- **意图识别**：无固定关键词，从上下文推断操作\n- **分级模板**：完整模板 (A) 用于复杂项目，轻量模板 (B) 用于单任务\n- **写入安全**：读-合并-写模式，减少意外覆盖\n- **Session 内状态同步**：一次激活，持续智能扫描新对话，防止\"聊了就忘\"\n- **增量 checkpoint**：只读新增对话，控制 token 消耗\n\n👉 详细中文设计文档：[DESIGN_CN.md](DESIGN_CN.md)\n\n## Problem\n\nAI agents are stateless — each conversation is a fresh start. But real work spans multiple sessions:\n\n1. **Memory explosion**: All project progress crammed into one file → 1000+ lines, slow retrieval\n2. **Context pollution**: Project A's progress leaks into Project B's context\n3. **Lost breakpoints**: \"Continue last project\" → agent doesn't know which one or where it left off\n4. **Forgotten topics**: Agent discusses a new topic but never creates a project for it\n5. **Over-engineering**: Tiny tasks forced into full project templates\n\n## Solution\n\nA per-project `STATUS.md` system — the agent's \"external hard drive\":\n\n```\nworkspace/projects/\n├── index.md              # Auto-maintained project registry (with one-line summaries)\n├── {project-name}/\n│   ├── STATUS.md         # Progress, todos, key decisions\n│   ├── docs/             # Proposals, reports\n│   └── src/              # Code, deliverables\n└── _archive/             # Completed/abandoned projects\n```\n\n## Key Features\n\n| Feature | Description |\n|---------|-------------|\n| **Physical Isolation** | Each project has its own `STATUS.md` — no shared state |\n| **Intent Recognition** | No rigid keywords — infers new/resume/pause/switch from context |\n| **Tiered Templates** | Full (A) for multi-phase projects, Lightweight (B) for single tasks |\n| **Write-Safe** | Read-merge-write pattern reduces accidental overwrites within a session |\n| **Index Self-Healing** | Auto-creates `index.md`, auto-adds missing projects |\n| **Memory Boundary** | Project progress in `STATUS.md`, user preferences in global memory — never mixed |\n| **Session Periodic Check** 🆕 | Once activated, auto-scans new conversations for new topics (every 60 min) |\n| **Incremental Checkpoint** 🆕 | Only reads new messages since last check — minimal token overhead |\n| **Smart Recovery** 🆕 | Global scan as last line of defense when session checks aren't active |\n\n## Quantified Impact\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Global memory size | 1153 lines | 167 lines (85% reduction) |\n| Project recovery time | User re-describes context (~2 min) | Read STATUS.md (<1 sec) |\n| Context pollution risk | High (all projects mixed) | Low (physical isolation) |\n| Small task overhead | Full 5-module template | Lightweight 2-3 modules |\n| Forgotten topics | Always lost | Auto-captured by periodic check |\n\n## Installation\n\n### nanobot\nCopy `SKILL.md` to `~/.nanobot/workspace/skills/project-manager/SKILL.md`\n\n### OpenClaw\nCopy `SKILL.md` to `<workspace>/skills/project-manager/SKILL.md`\n\n### Hermes Agent\nCopy `SKILL.md` to your agent's skills directory\n\n## Workflow\n\n1. **New Project** → Scan index for related projects → Create if truly new → Confirm with user\n2. **Resume** → Fuzzy match → Force read STATUS.md → Sync summary\n3. **Save State** → Persist conclusions → Update index status\n4. **Switch** → Save current → Resume target\n5. **Archive** → Move to `_archive/` → Preserve history\n6. **Periodic Check** 🆕 → Auto-scan new conversations → Capture new topics\n\n## Architecture\n\nSee [DESIGN.md](DESIGN.md) for full architecture rationale, memory boundary rules, and comparison with automatic memory consolidation systems.\n\n## License\n\nMIT\n\n---\n\n*Designed by Kris. v2.5 — Gantt chart auto-generation, 8-rule risk detection engine, dependency management, conversation log archiving. See CHANGELOG.md for full history.*\n\nFile v2.7.0:_meta.json\n\n{\n  \"ownerId\": \"kn71pbmkb9h8sppk4yg6dn7zad808rvt\",\n  \"slug\": \"agent-project-manager\",\n  \"version\": \"2.7.0\",\n  \"publishedAt\": 1779782090800\n}\n\nFile v2.7.0:skill-card.md\n\n## Description: <br>\nProject Manager helps agents maintain project continuity by creating per-project status files, indexes, checkpoints, Gantt views, risk checks, and dependency notes across sessions. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[krislu1221](https://clawhub.ai/user/krislu1221) <br>\n\n### License/Terms of Use: <br>\nMIT <br>\n\n\n## Use Case: <br>\nDevelopers, operators, and agent users use this skill to preserve project state across conversations, resume work from a clear status file, and track decisions, todos, milestones, risks, and dependencies without mixing projects together. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Project summaries and conversation-derived context may persist locally and could include sensitive business, client, credential, or personal information. <br>\nMitigation: Use the skill only in workspaces where local retention is acceptable, redact sensitive content before saving, and avoid sensitive workspaces until retention expectations are clear. <br>\nRisk: Broad trigger detection, session sync, and dialogue logging may capture or update project state beyond the user's immediate intent. <br>\nMitigation: Keep session sync and dialogue logging disabled unless deliberately needed, and require explicit user confirmation before every write. <br>\n\n\n## Reference(s): <br>\n- [ClawHub release page](https://clawhub.ai/krislu1221/agent-project-manager) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown status files, Markdown reports, project indexes, local checkpoint JSON, and concise conversational guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May write local project memory files after user confirmation and may run read-only git commands for project status context.] <br>\n\n## Skill Version(s): <br>\n2.7.0 (source: server release metadata and clawhub.json) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v2.7.0:templates/STATUS-A.md\n\n# 项目：[名称]\n> 最后更新：[日期] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## ⏱️ 工时追踪\n```yaml\nestimated_hours: [预计工时，如 8]\nactual_hours: null  # 🔴 项目完成时必须回填，供风险引擎「估时不准」规则使用\n```\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nactual_end: null  # 项目完成时自动填写\nmilestones:\n  - name: [里程碑 1 名称]\n    date: [YYYY-MM-DD]\n    status: pending  # pending / in-progress / completed\n  - name: [里程碑 2 名称]\n    date: [YYYY-MM-DD]\n    status: pending\n```\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项\n- [x] 已完成 1\n- [ ] 待办 2（优先级高）\n- [ ] 待办 3\n\n## 🔗 关系管理\n```yaml\n# 【强依赖类型】有强制前后置关系\n# - type: requires   # A必须依赖B才能开始\n# - type: blocks     # A阻塞了B的进度\n# - type: optional   # 可选增强，没有也能用\n\n# 【弱关联类型】仅表示关联关系，无强制约束\n# - type: related    # 两者相关联，共同推进\n# - type: uses       # A使用了B的输出/能力\n# - type: references # A参考了B的设计/文档\n\n# - project: [关联项目名称]\n#   type: requires\n#   description: \"描述关系\"\n#   status: satisfied  # satisfied / blocked / in-progress\n```\n\n## 🔑 关键上下文 / 决策\n- 决策 1（为什么这么做）\n- 约束 1（用户明确要求的事项）\n- 链接（相关 URL / 文件路径）\n\n## 🛑 暂停原因 / 待确认问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n\n## ⚠️ 风险日志\n```yaml\n# Auto-scanned by Project Manager v2.5\n# - name: [风险名称]\n#   level: high  # high / medium / low\n#   trigger: 14 days no update  # 检测触发条件\n#   status: active  # active / mitigated / resolved\n#   description: \"详细描述\"\n#   suggestion: \"建议动作\"\n```\n\nFile v2.7.0:templates/STATUS-B.md\n\n# 项目：[名称]\n> 最后更新：[日期] | PM: v2.5\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nestimated_hours: [预计工时，如 4]\nactual_hours: null  # 完成后填写\n# 自动计算进度\n# progress: 0%\n```\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因。没有就删掉。]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n\n## ⚠️ 风险（自动扫描）\n<!-- Project Manager v2.5 自动填充 -->\n\nFile v2.7.0:clawhub.json\n\n{\n  \"name\": \"agent-project-manager\",\n  \"version\": \"2.7.0\",\n  \"description\": \"\\u9879\\u76ee\\u4e0a\\u4e0b\\u6587\\u9694\\u79bb\\u4e0e\\u72b6\\u6001\\u7ba1\\u7406\\u7cfb\\u7edf v2.5\\u3002\\u6309\\u9700\\u8bb0\\u5f55\\u9879\\u76ee\\u8fdb\\u5ea6\\u3001\\u51b3\\u7b56\\u548c\\u5f85\\u529e\\uff0c\\u652f\\u6301\\u7518\\u7279\\u56fe\\u3001\\u98ce\\u9669\\u626b\\u63cf\\u548c\\u4f9d\\u8d56\\u7ba1\\u7406\\u3002\\u4ec5\\u5728\\u7528\\u6237\\u660e\\u786e\\u6307\\u793a\\u65f6\\u6267\\u884c\\u64cd\\u4f5c\\uff0c\\u4e0d\\u4f1a\\u4e3b\\u52a8\\u626b\\u63cf\\u6216\\u4fee\\u6539\\u6587\\u4ef6\\u3002\",\n  \"author\": \"Kris Lu\",\n  \"license\": \"MIT\",\n  \"triggers\": [\n    \"/project\",\n    \"\\u65b0\\u5efa\\u9879\\u76ee\",\n    \"\\u56de\\u5230\\u9879\\u76ee\",\n    \"\\u8bb0\\u5f55\\u9879\\u76ee\",\n    \"\\u7ee7\\u7eed\\u9879\\u76ee\",\n    \"\\u9879\\u76ee\\u5217\\u8868\",\n    \"\\u7518\\u7279\\u56fe\"\n  ],\n  \"keywords\": [\n    \"project-management\",\n    \"context-isolation\",\n    \"state-management\",\n    \"gantt-chart\",\n    \"risk-detection\",\n    \"dependency-management\",\n    \"checkpoint\"\n  ],\n  \"main\": \"SKILL.md\",\n  \"files\": [\n    \"SKILL.md\",\n    \"SECURITY.md\",\n    \"README.md\",\n    \"README_CN.md\",\n    \"CHANGELOG.md\",\n    \"DESIGN.md\",\n    \"DESIGN_CN.md\",\n    \"templates/\",\n    \"references/\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Krislu1221/project-manager-skill\"\n  },\n  \"homepage\": \"https://clawhub.ai/krislu1221/agent-project-manager\",\n  \"security\": {\n    \"type\": \"pure_markdown_skill_no_code\",\n    \"file_access\": \"workspace/projects/{name}/STATUS.md, projects/index.md, memory/pm-checkpoint.json\",\n    \"shell_access\": \"git rev-parse / git log (read-only, project dir scoped)\",\n    \"network_access\": \"none\",\n    \"third_party_services\": \"none\",\n    \"write_safety\": \"read-merge-write pattern with TOCTOU limitation documented\"\n  },\n  \"data_privacy\": {\n    \"data_leaves_device\": false,\n    \"project_data\": \"local filesystem only\",\n    \"note\": \"No executable code. Pure instruction skill file.\"\n  }\n}\n\nFile v2.7.0:LICENSE\n\nMIT License\n\nCopyright (c) 2026 Kris\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v2.6.0: 18 files, 46247 bytes\n\nFiles: CHANGELOG.md (3425b), clawhub.json (1676b), DESIGN_CN.md (10090b), DESIGN.md (9423b), LICENSE (1061b), PUBLISH_NOTES.md (2068b), publish-clawhub.sh (562b), README_CN.md (4524b), README.md (4572b), references/templates.md (3005b), restore-local.sh (205b), SECURITY.md (2375b), skill-card.md (2763b), SKILL.clawhub.md (22844b), SKILL.md (22844b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nFile v2.6.0:SKILL.md\n\n---\nname: project-manager\ndescription: \"项目上下文隔离与状态管理系统 v2.5。按需记录项目进度、决策和待办，支持甘特图、风险扫描和依赖管理。仅在用户明确指示时执行操作，不会主动扫描或修改文件。\"\n---\n\n# Project Manager v2.5 - 项目上下文管理系统\n\n> **隐私说明**：本技能仅在用户明确请求时操作文件（创建/更新 STATUS.md）。不会在后台持续监听对话，不会读取与项目无关的个人数据，不会自动发送数据到外部服务。所有数据本地存储于 workspace/projects/ 目录。\n\n## 要解决的核心问题\n\n**Agent 会遗忘。** 每天醒来是全新的，如果对话中没有及时记录，第二天就完全不记得做过什么。\n\n本系统的目标：**最小化信息遗漏，最大化可恢复性，不增加对话负担。**\n\n## 架构原则\n\n| 层级 | 文件 | 职责 |\n|------|------|------|\n| **即时记录** | `projects/{name}/STATUS.md` | 对话中即时写入重要决策/需求/完成节点 |\n| **按需状态同步** | `memory/pm-checkpoint.json` | 用户启用后，检查新内容 |\n| **智能恢复** | `HEARTBEAT.md` 第 5 项 | 全局检查，作为最后一道防线 |\n| **全局记忆** | `MEMORY.md` / `memory/*.md` | 用户偏好、跨项目经验（不含项目进度） |\n\n## 与 Auto-Coding v3 集成\n当使用 `auto-coding-v3` 进行代码开发时，该系统会在 `workspace/projects/{project_name}/status/` 下生成详细的工程状态文件。\n*   `STATUS.md` 负责 **宏观进度**（Todo, Next Step, Decision）。\n*   `status/` 目录负责 **微观工程细节**（Scratchpad, Logs）。\n\n## 核心原则\n\n1. **物理隔离**：每个项目拥有独立的 `STATUS.md`，绝不混用。\n2. **状态显式化**：没有记录在文件里的事，就是没发生。\n3. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后。\n4. **session 内状态同步**（按需启用）：用户主动启用后，定期检查新内容。\n5. **分级管理**：轻重有别，杀鸡不用牛刀。\n6. **意图优先**：仅在上下文明确指向项目管理意图时响应，不推断日常对话。\n7. **写入安全**：写入前必须先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n\n## 目录结构规范\n\n```text\nworkspace/projects/\n├── index.md              # 📇 项目索引（自动维护，必须含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 🧠 核心记忆：进度、待办、关键决策（每次对话必读/必写）\n│   ├── docs/             # 方案、报告、调研数据\n│   ├── src/              # 代码、产出物\n│   └── status/           # auto-coding v3 微观工程文件（可选）\n└── _archive/             # 📦 已归档项目\n    └── {project-name}/\n        └── STATUS.md     # 保留历史记录\n```\n\n## 📇 项目索引：`projects/index.md`\n\n```markdown\n# 项目索引\n> 自动维护，按最后活跃时间倒序\n\n| 项目 | 目录 | 最后更新 | 状态 | 备注 |\n|------|------|---------|------|------|\n| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |\n```\n\n**维护规则：**\n- **首次使用**：如不存在，自动创建并写入表头\n- 新建项目时：添加到顶部\n- 恢复项目时：更新\"最后更新\"时间，移到顶部\n- 暂停项目时：更新\"状态\"为\"已暂停\"并记录暂停原因\n- 归档项目时：移到 `_archive/`，index.md 标记为\"已归档\"\n- **索引自愈**：发现项目目录存在但 index 中没有时，自动补录\n- **必须包含一句话概述**，格式为「动词 + 对象 + 目的」\n\n---\n\n## 分级 STATUS.md 模板\n\n> ⚠️ 以下为简化示意，实际使用时应先从 `skills/project-manager/templates/` 目录读取对应完整模板文件。\n\n### A) 完整模板（>3天项目 / 多阶段任务 / 跨团队协作）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项 (Todo)\n- [x] 已完成 1\n- [ ] 待办 2 (优先级高)\n- [ ] 待办 3\n\n## 🔑 关键上下文/决策\n- 决策 1 (为什么这么做)\n- 约束 1 (用户明确要求的事项)\n- 链接 (相关 URL/文件路径)\n\n## 🛑 暂停原因/遗留问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n```\n\n### B) 轻量模板（<3天的单任务 / 调研/分析类临时任务）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | PM: v2.5\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n```\n\n### 模板来源与选择规则\n\n**模板文件位置**：`skills/project-manager/templates/` 目录下的 STATUS-A.md / STATUS-B.md（不是内联伪代码）。\n\n**选择规则**：\n| 场景 | 模板 |\n|------|------|\n| 3天以上的多阶段项目 | A 完整模板 |\n| 单任务（如\"帮我把这个接口重构一下\"） | B 轻量模板 |\n| 调研/分析类临时任务 | B 轻量模板 |\n| 需要多人协作或长期维护 | A 完整模板 |\n| 不确定 | 先用 B，后续发现需要再升级到 A |\n\n---\n\n## 操作工作流 (Workflow)\n\n### 1. 意图识别\n\n**仅在用户明确提及项目管理操作时响应。** 本技能不会对日常对话中的普通用语（如\"继续\"、\"搞定了\"、\"记一下\"）做出反应——只有当上下文明确指向项目操作时才介入。\n\n#### 用户主动触发（按需响应）\n- **新建**：新建项目、帮我建一个项目、创建项目\n- **恢复**：回到XX项目、继续XX项目\n- **保存**：保存项目状态、暂停项目\n- **查看**：项目列表、查看进度\n- **切换**：切换到另一个项目\n\n#### 上下文明确关联时\n- 用户提到具体的项目名或明确指代之前的项目工作时，匹配 index.md\n- 无法确定时展示最近项目列表让用户选择，不做自动推断\n\n**不触发的场景**：\n- 日常对话中说\"继续\"、\"搞定了\"、\"记一下\"等通用表达\n- 不涉及项目管理意图的任何讨论\n\n### 2. 初始化新项目 (Start New)\n\n**触发条件**：\n- 用户明确说\"新建项目\"/\"帮我建一个\"\n\n**门槛判断（避免过度工程）**：\n- **建项目**：超过几句实质讨论、有具体问题/需求/决策、可能后续会继续推进（如\"调研某系统\"、\"帮我想个方案\"、\"评估某技术\"）\n- **不建项目**：随口一问、一句话话题、单纯信息查询 → 写入当日记忆即可\n\n**动作**：\n1. **先扫描 `index.md`** — 检查是否有相关项目可以合并或关联\n2. 有关联 → 合并到已有项目，告知用户\"这个话题我已归入 XX 项目\"\n3. 无关联 → 继续以下步骤：\n   1. **先向用户确认**：\"这是个新话题，我建个项目记录一下？概述是「{一句话概述}」\"\n   2. 用户同意后再创建\n   3. 目录名用 kebab-case：`cmra-geo`\n   4. 创建目录 `workspace/projects/{name}/`\n   5. **先从 `skills/project-manager/templates/` 目录读取对应模板**，根据复杂度选择 A/B 模板，创建 `STATUS.md`\n   6. **确保 `index.md` 存在**：如不存在自动创建并写入表头\n   7. 一句话概述生成规则：从对话核心意图提炼，格式为「动词 + 对象 + 目的」\n   8. 更新 `projects/index.md`（添加到顶部）\n4. **注册 session 状态同步**（见第 8 节，需用户主动启用）\n\n### 3. 恢复旧项目 (Resume)\n\n**动作**：\n1. **模糊匹配**：用户说的项目名可能不精确，先在 index.md 中查找\n2. **强制读取**：`read(workspace/projects/{name}/STATUS.md)`\n3. **摘要同步**：\"📖 已恢复 `{name}` 上下文。当前：[简述进度]。待办：[列出]。继续哪一步？\"\n4. **更新 index.md**：将该项目移到最后活跃时间顶部\n5. **如果 STATUS.md 不存在或为空** → 检查 `memory/` 目录下是否有相关日期的记忆文件，尝试恢复上下文；无法恢复时如实告知用户\n6. **注册 session 状态同步**（见第 8 节，需用户主动启用）\n\n### 4. 🔄 对话中即时记录\n\n**这是核心机制。** 不是等到用户说\"保存状态\"才记录，而是在对话中**即时写入**。\n\n**触发时机（满足任一即写入）**：\n- 用户提出了新的需求或约束\n- 做出了技术/方案决策\n- 完成了一个子任务\n- 用户明确要求记住某事\n- 话题发生实质性切换（从项目 A 切换到项目 B）\n\n**写入策略（轻量，不拖慢对话）**：\n- 只更新 STATUS.md 的\"当前状态\"和\"待办\"模块\n- 用 1-2 句话记录结论，不写过程流水账\n- 如果当前对话没有关联的项目 → 触发\"新项目创建\"流程（第 2 节）\n\n**不写入的情况**：\n- 只是闲聊/寒暄\n- 正在讨论中还没确定方案\n- 同一个任务的中间尝试（最终用的是最初方案）\n\n### 5. 暂停/切换 (Pause/Switch)\n\n**输入**：`先停一下` / `我去忙别的` / `切换到 XX`\n\n**动作**：\n1. 总结当前对话的结论\n2. 更新当前项目的 `STATUS.md`\n3. 更新 `index.md`：状态改为\"已暂停\"，记录暂停原因\n4. 如果是切换，恢复目标项目\n5. **回复用户**：\"✅ 状态已保存。下次说'回到 [Name]'即可无缝接续。\"\n\n### 6. Session 结束收尾\n\n**当用户主动表达离开意图时**（用户说\"我先走了\"、\"明天继续\"、主动结束对话）：\n\n1. 回顾最近一轮对话的内容\n2. 提取未完成的任务和关键决策\n3. 更新当前项目的 STATUS.md\n4. 写入当日记忆 `memory/YYYY-MM-DD.md`（一句话摘要 + 引用 STATUS.md）\n5. 如果涉及新话题但未建项目 → 记录到 HEARTBEAT 待处理队列\n\n### 7. 项目清理与归档 (Cleanup & Archive)\n\n**状态恢复期间检查**：\n- 超过 30 天未活跃 → 标记为\"可能归档\"，询问用户\n- 已完成 → 状态改为\"已完成\"\n- 已废弃 → 状态改为\"已废弃\"\n\n**归档操作**：\n1. 移动到 `projects/_archive/{name}/`\n2. 保留 STATUS.md 作为历史记录\n3. index.md 标记为\"已归档\"并移到底部\n\n---\n\n### 8. 🔄 Session 内状态同步（用户按需启用）\n\n### 这是什么？\n\n用户可以在项目操作时**主动启用**此功能。启用后，skill 在当前 session 中按用户指定的间隔检查是否有新内容需要记录到项目状态中。\n\n### 启用方式\n\n此功能**不会自动启用**。用户需明确表达意图，例如\"帮我留意一下项目变化\"或\"开启状态同步\"，才会注册。\n\n#### 注册流程\n用户明确要求后，执行以下操作：\n\n1. 创建/更新 checkpoint 文件 `memory/pm-checkpoint.json`：\n```json\n{\n  \"active\": true,\n  \"sessionKey\": \"当前session的key或label\",\n  \"lastCheckedMsgId\": \"当前最后一条消息的ID\",\n  \"lastCheckTime\": \"2026-04-25T11:09:00+08:00\",\n  \"intervalMinutes\": 60,\n  \"activeProject\": \"当前关联的项目名（可选）\",\n  \"expiresAt\": \"2026-04-26T00:00:00+08:00\"\n}\n```\n\n2. 创建一个 cron 任务，每 60 分钟执行一次：\n   - 读取 `pm-checkpoint.json` 获取上次检查位置\n   - 读取 checkpoint 之后新增的对话内容\n   - 分析新内容：是否有新话题、新决策、新需求？\n   - 对比 index.md：有关联 → 更新 STATUS.md；无关联 → 标记待确认\n   - 更新 checkpoint 的 `lastCheckedMsgId` 和 `lastCheckTime`\n\n#### 检查内容分析规则\n每次只读取用户指定范围内的新增内容，分析以下信号：\n\n| 信号类型 | 示例 | 动作 |\n|---------|------|------|\n| 新需求 | \"我们需要增加XX功能\" | 更新 STATUS.md 待办 |\n| 新决策 | \"用 Redis 不用 Memcached\" | 更新 STATUS.md 决策 |\n| 完成节点 | \"这个模块搞定了\" | 更新 STATUS.md 进度 |\n| 新话题 | 突然讨论完全不同的话题 | 扫描 index.md 判断是否建项目 |\n| 暂停信号 | \"先停一下\"、\"明天继续\" | 触发 Session 结束收尾（第 6 节） |\n\n#### 门槛判断\n- **实质内容**（有具体问题/需求/决策）→ 记录到 STATUS.md 或创建新项目\n- **闲聊/寒暄** → 跳过\n- **一句话话题** → 跳过\n\n#### 过期与清理\n- checkpoint 文件设置过期时间（默认 24 小时）\n- 过期后自动停止状态同步\n- 用户说\"不用检查了\"时立即停止\n- session 断开后下次激活时需用户重新启用\n\n#### Token 消耗控制\n- 每次只读新增对话，不回顾全部历史\n- checkpoint 用 message ID 定位，精确到单条消息\n- 预计每次检查消耗 500-2000 token（60 分钟约 10-30 条新消息）\n\n---\n\n### 9. 📝 项目对话日志（v2.5 新增）\n\n### 为什么需要\n项目相关的讨论分散在历史会话中，想回顾时找不到。对话日志把项目相关的关键讨论打包成独立文件，随时可以回顾。\n\n### 触发时机\n- **项目新建时**：自动初始化日志条目\n- **每次更新 STATUS.md 时**：自动追加本次会话的关键内容\n- **项目归档时**：打包整个项目的完整对话历史\n\n### 存储结构\n写入 `memory/project_log_{project_name}.md`：\n\n```markdown\n# 📝 项目对话日志：{project_name}\n> 归档时间：{YYYY-MM-DD HH:MM}\n> 关联项目：projects/{project_name}/STATUS.md\n\n## 项目概况\n[核心目标一句话摘要]\n\n## 关键决策时间线\n| 时间 | 决策 | 上下文 |\n|------|------|--------|\n| YYYY-MM-DD | 决定采用方案A而不是B | 性能优先级高于成本 |\n\n## 踩过的坑\n[记录所有尝试过但失败的方案、原因、教训]\n\n## 历史会话快照\n> session_key: abc123 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要，不超过200字]\n\n---\n> session_key: def456 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要]\n```\n\n### 归档策略\n- **只记结论，不记流水**：超过200字的讨论压缩成摘要\n- **决策必记**：所有「就这么定了」「就用方案A」的时刻必须记录\n- **踩坑必记**：试过但失败的方案，防止重蹈覆辙\n- **自动关联**：session_key 链接到完整会话，方便回溯\n\n### 检索方式\n- 按文件名：`memory/project_log_{name}.md`\n- 按关键词搜索：记忆文件的内容可被全局搜索命中\n\n---\n\n### 10. 📅 甘特图自动生成（v2.5 新增）\n\n### 数据流关系\n**唯一数据源** = STATUS.md 中的 `## 📅 Timeline` YAML 块  \n**输出文件** = `projects/{name}/GANTT.md`  \n\n更新里程碑时：先改 STATUS.md Timeline → 再重新渲染 GANTT.md。不要直接编辑 GANTT.md，否则下次渲染会被覆盖。\n\n### 触发方式\n- **显式命令**：\"生成甘特图\"、\"看看时间线\"、\"项目进度图\"\n- **建议触发**：每次更新 STATUS.md 的 milestones 后，应该重新渲染 Gantt\n\n### 渲染算法（自然语言描述，按此逻辑执行）\n\n**第一步：读取项目时间配置**\n遍历所有项目目录，逐个读取 STATUS.md 中的 timeline 配置，提取每个项目的：\n- 开始日期 start_date\n- 预计完成日期 estimated_end\n- 所有里程碑列表（含名称、日期、状态）\n统计已完成里程碑数和总里程碑数，计算进度百分比 = 已完成 / 总数 × 100\n\n**第二步：渲染 ASCII 甘特图**\n输出格式如下：\n```\n📅 项目甘特图 | {当前年} 年 {当前月} 月\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n{项目名称}  [{进度条}] {进度百分比}%\n  ├─ {YYYY-MM-DD} ✅ {已完成的里程碑名称}\n  ├─ {YYYY-MM-DD} 🔄 {进行中的里程碑名称}\n  └─ {YYYY-MM-DD} ⏳ {待完成的里程碑名称}\n```\n\n**进度条渲染规则**：\n- 总长度固定 20 个字符\n- █ 表示已完成部分，░ 表示未完成部分\n- 0% 进度：20 个 ░，100% 进度：20 个 █\n- 50% 进度：10 个 █ + 10 个 ░\n\n**第三步：资源冲突检测**\n- 扫描所有里程碑的日期，如果同一天有 ≥3 个项目有里程碑，显示 ⚠️ 资源冲突预警\n- 统计方式：把所有里程碑的日期去重计数，超过阈值即触发\n- ⚙️ 阈值说明：默认值 3，对个人 agent 可能敏感，后续支持通过配置调整\n\n**第四步：延期预警计算**\n- 🔴 已延期：当前日期 > estimated_end，且进度 < 100%\n- 🟡 延期风险：当前日期距 estimated_end < 3 天，且进度 < 70%\n\n**第五步：输出到项目目录**\n- 自动创建或更新每个项目的 `projects/{name}/GANTT.md`\n- 同时在 `projects/index.md` 顶部生成全局汇总甘特图\n\n---\n\n### 11. ⚠️ 项目风险自动识别（v2.5 新增）\n\n### 触发方式\n- **显式命令**：\"风险扫描\"、\"看看有什么风险\"、\"检查项目状态\"\n\n### 风险规则引擎（严格按此逻辑执行）\n\n| 风险项 | 触发条件 | 等级 | 所需字段 |\n| --- | --- | --- | --- |\n| **静默风险** | 最后更新日期距今 >14 天 | 🔴 高 | last_updated |\n| **无里程碑风险** | 项目启动 >7 天，但无任何里程碑记录 | 🔴 高 | start_date, milestones |\n| **单点依赖风险** | 有 >3 个项目声明依赖同一个 skill 或外部项目 | 🟡 中 | dependencies |\n| **估时不准风险** | 连续 2 个已完成项目的估时偏差 >50% | 🟡 中 | estimated_hours, actual_hours |\n| **范围蔓延风险** | 里程碑总数比最初增加 >50% 后又新增 | 🟡 中 | milestones |\n| **依赖循环风险** | A 依赖 B 且 B 依赖 A（DAG 环路检测） | 🔴 高 | dependencies |\n| **延期风险** | 当前距 estimated_end <3 天，且进度 <70% | 🟡 中 | estimated_end, milestones |\n| **已延期** | 当前日期 > estimated_end 且进度 <100% | 🔴 高 | estimated_end, milestones |\n\n### 特殊规则说明\n- **估时不准风险**：需要从 projects/ 目录下所有已完成项目（actual_end 非 null）中读取 estimated_hours 和 actual_hours 字段计算偏差。项目完成时**必须**回填 actual_hours，否则此规则无法触发。\n\n### 扫描算法（自然语言描述，按此逻辑执行）\n\n**第一步：读取所有项目目录**\n遍历 `projects/` 下每个项目，读取 STATUS.md，提取以下字段：timeline、dependencies、last_updated、estimated_hours、actual_hours。\n\n**第二步：逐个项目检查风险**\n按上述8项规则逐一检查，判断每个项目的风险项。\n\n**第三步：按风险等级分组输出**\n输出格式如下：\n```\n⚠️  项目风险扫描报告 | {YYYY-MM-DD}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n🔴 高风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  静默风险 - 最后更新 {天数} 天前\n  建议: ping 一下确认项目状态，或归档\n\n...\n\n🟡 中风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  单点依赖 - 依赖 {skill} 的项目共 {n} 个\n  建议: 评估是否需要技术储备方案\n\n🟢 健康 ({总数} 项)\n──────────────────────────────────────────────────\n• 按时更新 + 有里程碑 + 无单点依赖 + 无延期\n```\n\n**第四步：写入风险日志**\n- 所有识别出的风险写入对应项目 STATUS.md 的 `⚠️ Risk Log` 章节\n- 高风险项目同时在 `index.md` 标记 🔴 前缀\n\n### 风险 Mitigation 建议\n- **静默风险**：归档，或设一个唤醒日期\n- **无里程碑风险**：花 5 分钟拆 2-3 个阶段性节点\n- **单点依赖风险**：准备替代方案，或做技术储备\n- **估时不准风险**：下一个项目乘 1.5 倍安全系数\n\n---\n\n## 与日常记忆的关系\n\n| 信息类型 | 存放位置 | 示例 / 说明 |\n|---------|---------|------------|\n| 用户偏好 | `MEMORY.md` | \"不喜欢废话，只要结论\" |\n| 跨项目经验 | `MEMORY.md` | \"上次用 X 方案踩了 Y 坑\" |\n| 每日工作流水 | `memory/YYYY-MM-DD.md` | \"今天推进了 CMRA 认证模块，详情见 STATUS.md\" |\n| 项目进度 | `projects/{name}/STATUS.md` | \"CMRA：认证模块完成，开始做权限\" |\n| 甘特图数据 | `projects/{name}/GANTT.md` | STATUS.md Timeline YAML 的渲染输出 |\n| 项目对话日志 | `memory/project_log_{name}.md` | 关键决策和踩坑记录 |\n| 工时追踪 | `projects/{name}/STATUS.md` | 风险引擎「估时不准」规则依赖此数据 |\n| 技术细节 | `projects/{name}/status/` | 测试日志、设计草稿 |\n| 检查点 | `memory/pm-checkpoint.json` | 状态同步的位置标记 |\n\n**原则**：\n- 项目进度从 STATUS.md 读，经验教训沉淀到 MEMORY.md，两者不交叉。\n- `memory/YYYY-MM-DD.md` 中的项目记录**只写一句话摘要 + 引用 STATUS.md**，不重复细节。\n\n---\n\n## Git 关联（可选）\n\n如果 `git rev-parse --is-inside-work-tree` 在项目目录下执行成功（返回 0）：\n- STATUS.md 头部记录 `Git: [最近 commit hash]`\n- 更新状态时自动执行 `git log --oneline -1` 获取最新 commit\n\n---\n\n## 严格约束\n\n1. **Memory 禁令**：绝不要用 `memory` 工具或 `MEMORY.md` 记录项目进度。项目进度只存在于 `STATUS.md`。\n2. **读取优先**：回复项目相关问题前，**必须先读取** `STATUS.md`。不要依赖上一轮对话的记忆。\n3. **极简原则**：STATUS.md 只记\"结论\"和\"下一步\"，不记过程流水账。\n4. **模板降级**：小任务用轻量模板，别搞过度工程化。\n5. **模糊匹配**：用户说\"上次那个\"、\"接着来\"时，主动推断对应项目；无法确定时展示最近项目让用户选。\n6. **写入安全**：写 STATUS.md 前先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n7. **index.md 自愈**：首次使用时如不存在自动创建；发现项目目录存在但 index 中没有时，自动补录。\n8. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后（第 4 节）。\n9. **Session 结束收尾**：检测到用户离开意图时，做状态落盘（第 6 节）。\n10. **新项目必须确认**：创建新项目前必须向用户确认（第 2 节）。\n11. **按需启用**：session 状态同步仅在用户明确要求时启用（第 8 节）。\n\n---\n\n📋 **版本历史**：详见 `CHANGELOG.md`\n\nFile v2.6.0:README.md\n\n# 📂 Agent Project Manager Skill\n\n**Cross-Platform Project Context Isolation & State Management for AI Agents**\n\n> 🌐 [English](README.md) | [中文](README_CN.md)\n\n> Battle-tested across **nanobot**, **OpenClaw**, and **Hermes Agent** — solving the fundamental tension between AI agents' stateless nature and projects' need for continuity.\n\n## 简介 (Introduction)\n\nAI Agent 是无状态的，但项目需要连续性。本 Skill 通过为每个项目创建独立的 `STATUS.md` 文件，实现跨会话的无缝上下文恢复，同时不污染全局记忆。\n\n- **物理隔离**：每个项目独立文件，不共享状态\n- **意图识别**：无固定关键词，从上下文推断操作\n- **分级模板**：完整模板 (A) 用于复杂项目，轻量模板 (B) 用于单任务\n- **写入安全**：读-合并-写模式，减少意外覆盖\n- **Session 内状态同步**：一次激活，持续智能扫描新对话，防止\"聊了就忘\"\n- **增量 checkpoint**：只读新增对话，控制 token 消耗\n\n👉 详细中文设计文档：[DESIGN_CN.md](DESIGN_CN.md)\n\n## Problem\n\nAI agents are stateless — each conversation is a fresh start. But real work spans multiple sessions:\n\n1. **Memory explosion**: All project progress crammed into one file → 1000+ lines, slow retrieval\n2. **Context pollution**: Project A's progress leaks into Project B's context\n3. **Lost breakpoints**: \"Continue last project\" → agent doesn't know which one or where it left off\n4. **Forgotten topics**: Agent discusses a new topic but never creates a project for it\n5. **Over-engineering**: Tiny tasks forced into full project templates\n\n## Solution\n\nA per-project `STATUS.md` system — the agent's \"external hard drive\":\n\n```\nworkspace/projects/\n├── index.md              # Auto-maintained project registry (with one-line summaries)\n├── {project-name}/\n│   ├── STATUS.md         # Progress, todos, key decisions\n│   ├── docs/             # Proposals, reports\n│   └── src/              # Code, deliverables\n└── _archive/             # Completed/abandoned projects\n```\n\n## Key Features\n\n| Feature | Description |\n|---------|-------------|\n| **Physical Isolation** | Each project has its own `STATUS.md` — no shared state |\n| **Intent Recognition** | No rigid keywords — infers new/resume/pause/switch from context |\n| **Tiered Templates** | Full (A) for multi-phase projects, Lightweight (B) for single tasks |\n| **Write-Safe** | Read-merge-write pattern reduces accidental overwrites within a session |\n| **Index Self-Healing** | Auto-creates `index.md`, auto-adds missing projects |\n| **Memory Boundary** | Project progress in `STATUS.md`, user preferences in global memory — never mixed |\n| **Session Periodic Check** 🆕 | Once activated, auto-scans new conversations for new topics (every 60 min) |\n| **Incremental Checkpoint** 🆕 | Only reads new messages since last check — minimal token overhead |\n| **Smart Recovery** 🆕 | Global scan as last line of defense when session checks aren't active |\n\n## Quantified Impact\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Global memory size | 1153 lines | 167 lines (85% reduction) |\n| Project recovery time | User re-describes context (~2 min) | Read STATUS.md (<1 sec) |\n| Context pollution risk | High (all projects mixed) | Low (physical isolation) |\n| Small task overhead | Full 5-module template | Lightweight 2-3 modules |\n| Forgotten topics | Always lost | Auto-captured by periodic check |\n\n## Installation\n\n### nanobot\nCopy `SKILL.md` to `~/.nanobot/workspace/skills/project-manager/SKILL.md`\n\n### OpenClaw\nCopy `SKILL.md` to `<workspace>/skills/project-manager/SKILL.md`\n\n### Hermes Agent\nCopy `SKILL.md` to your agent's skills directory\n\n## Workflow\n\n1. **New Project** → Scan index for related projects → Create if truly new → Confirm with user\n2. **Resume** → Fuzzy match → Force read STATUS.md → Sync summary\n3. **Save State** → Persist conclusions → Update index status\n4. **Switch** → Save current → Resume target\n5. **Archive** → Move to `_archive/` → Preserve history\n6. **Periodic Check** 🆕 → Auto-scan new conversations → Capture new topics\n\n## Architecture\n\nSee [DESIGN.md](DESIGN.md) for full architecture rationale, memory boundary rules, and comparison with automatic memory consolidation systems.\n\n## License\n\nMIT\n\n---\n\n*Designed by Kris. v2.5 — Gantt chart auto-generation, 8-rule risk detection engine, dependency management, conversation log archiving. See CHANGELOG.md for full history.*\n\nFile v2.6.0:_meta.json\n\n{\n  \"ownerId\": \"kn71pbmkb9h8sppk4yg6dn7zad808rvt\",\n  \"slug\": \"agent-project-manager\",\n  \"version\": \"2.6.0\",\n  \"publishedAt\": 1779766226890\n}\n\nFile v2.6.0:references/templates.md\n\n# STATUS.md 模板说明\n\n> ⚠️ 以下为简化示意，实际使用时应先从 `skills/project-manager/templates/` 目录读取对应完整模板文件。\n\n---\n\n## A) 完整模板（>3天项目 / 多阶段 / 多人协作）\n\n```markdown\n# 项目：[名称]\n> 最后更新：[日期] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## ⏱️ 工时追踪\n```yaml\nestimated_hours: [预计工时，如 8]\nactual_hours: null  # 🔴 项目完成时必须回填，供风险引擎「估时不准」规则使用\n```\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nactual_end: null  # 项目完成时自动填写\nmilestones:\n  - name: [里程碑 1 名称]\n    date: [YYYY-MM-DD]\n    status: pending  # pending / in-progress / completed\n  - name: [里程碑 2 名称]\n    date: [YYYY-MM-DD]\n    status: pending\n```\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项\n- [x] 已完成 1\n- [ ] 待办 2（优先级高）\n- [ ] 待办 3\n\n## 🔗 依赖关系\n```yaml\n# - project: [依赖项目名称]\n#   type: requires  # requires / blocks / optional\n#   description: \"需要该项目提供 XX 能力\"\n#   status: satisfied  # satisfied / blocked / in-progress\n```\n\n## 🔑 关键上下文 / 决策\n- 决策 1（为什么这么做）\n- 约束 1（用户明确要求的事项）\n- 链接（相关 URL / 文件路径）\n\n## 🛑 暂停原因 / 待确认问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n\n## ⚠️ 风险日志\n```yaml\n# 由 Project Manager v2.5 自动检测\n# - name: [风险名称]\n#   level: high  # high / medium / low\n#   trigger: 14 days no update  # 检测触发条件\n#   status: active  # active / mitigated / resolved\n#   description: \"详细描述\"\n#   suggestion: \"建议动作\"\n```\n```\n\n## B) 轻量模板（<3天单任务 / 个人小项目 / 调研/分析类临时任务）\n\n```markdown\n# 项目：[名称]\n> 最后更新：[日期] | PM: v2.5\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nestimated_hours: [预计工时，如 4]\nactual_hours: null  # 完成后填写\n# 自动计算进度\n# progress: 0%\n```\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因。没有就删掉。]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n\n## ⚠️ 风险（自动检测）\n<!-- Project Manager v2.5 自动填充 -->\n```\n\n## 模板选择规则\n\n| 场景 | 模板 |\n|----------|----------|\n| 多阶段项目 >3 天 | A 完整 |\n| 单任务（如\"重构这个接口\"） | B 轻量 |\n| 调研/分析类临时任务 | B 轻量 |\n| 多人协作或长期维护 | A 完整 |\n| 不确定 | 先用 B，复杂度上升时升级到 A |\n\n---\n\n## 模板来源\n\n实际使用的完整模板文件位于 `skills/project-manager/templates/` 目录：\n- `STATUS-A.md` - 完整模板（包含所有 v2.5 字段）\n- `STATUS-B.md` - 轻量模板（简化版）\n\nFile v2.6.0:CHANGELOG.md\n\n# CHANGELOG\n\nAll notable changes to Project Manager will be documented in this file.\n\n---\n\n## v2.5 (2026-05-17)\n\n### ✨ 新增特性\n\n#### 甘特图自动生成\n- ASCII 进度条渲染（█ 已完成 / ░ 未完成）\n- 里程碑状态追踪（pending / in-progress / completed）\n- 延期预警机制（🔴 已延期 / 🟡 延期风险）\n- 资源冲突检测（同一天 ≥3 个里程碑触发预警）\n- 输出文件：`projects/{name}/GANTT.md` + 全局汇总\n\n#### 项目风险自动识别（8 项规则引擎）\n| 风险项 | 触发条件 | 等级 |\n| --- | --- | --- |\n| 静默风险 | >14 天无更新 | 🔴 高 |\n| 无里程碑风险 | 启动 >7 天无任何里程碑 | 🔴 高 |\n| 已延期 | 当前日期 > estimated_end 且未完成 | 🔴 高 |\n| 依赖循环 | A 依赖 B 且 B 依赖 A | 🔴 高 |\n| 延期风险 | 距截止日 <3 天且进度 <70% | 🟡 中 |\n| 单点依赖 | ≥3 个项目依赖同一个 skill | 🟡 中 |\n| 估时不准 | 连续 2 个已完成项目偏差 >50% | 🟡 中 |\n| 范围蔓延 | 里程碑总数增加 >50% 后又新增 | 🟡 中 |\n\n#### 依赖关系管理\n- 3 种类型：requires / blocks / optional\n- 3 种状态：satisfied / blocked / in-progress\n- YAML 格式嵌入 STATUS.md，机器可解析\n\n#### 项目对话日志归档\n- 独立文件：`memory/project_log_{name}.md`\n- 三类内容：关键决策时间线 + 踩过的坑 + 历史会话快照\n- 支持按项目/关键词检索\n\n#### 工时追踪字段\n- `estimated_hours`：项目启动时预估\n- `actual_hours`：项目完成时**必须回填**\n- 供风险引擎\"估时不准\"规则使用\n\n### 🔧 改进\n- 模板语言统一为中文（与国内用户环境一致）\n- \"并发安全\" → \"写入安全\"，补充 TOCTOU 限制说明\n- 敏感词替换：心跳兜底 → 智能恢复，周期自动检查 → 按需状态同步\n- 模板来源明确：从 `templates/` 目录读取，不是内联伪代码\n\n---\n\n## v2.4 (2026-04-25)\n\n### ✨ 核心特性\n\n#### Session 内周期检查\n- checkpoint 文件：`memory/pm-checkpoint.json`\n- 检查频率：每 60 分钟执行一次\n- 增量读取：只读取上次检查后的新增消息\n- 6 大类触发场景穷举：显式命令 / 隐含指代 / 重要性标记 / 话题切换 / 完成信号 / 暂停信号\n- token 消耗控制：每次只扫描增量内容，预计 500-2000 token（60 分钟约 10-30 条新消息）\n\n#### 索引自愈机制\n- index.md 不存在时自动创建表头\n- 项目目录存在但不在索引中时自动补录\n- 每个项目必须包含一句话概述\n\n#### 模板降级机制\n- A 模板（完整）：>3 天项目 / 多阶段任务 / 跨团队协作\n- B 模板（轻量）：<3 天单任务 / 调研类临时任务\n- 根据复杂度自动选择，避免过度工程化\n\n### 🔧 改进\n- Git 关联：STATUS.md 头部记录 commit hash\n- 严格约束：11 条必须遵守的执行规则\n\n---\n\n## v2.2 (2026-04-xx)\n\n### ✨ 特性\n- 模板外置到 `references/` 目录\n- 并发安全声明降级为写入安全，明确标注 TOCTOU 限制\n- Git 命令限定项目目录作用域\n- 使用 git 原生工作区检测\n\n---\n\n## v2.0 (2026-04-xx)\n\n### ✨ 初始版本\n- 项目物理隔离：每个项目独立 STATUS.md 文件\n- 意图识别驱动：无固定关键词，从上下文推断操作\n- 读-合并-写模式：降低意外覆盖概率\n- 严格记忆边界：项目进度 / 用户偏好 / 跨项目经验三者分离\n\nFile v2.6.0:DESIGN_CN.md\n\n# 项目管理 Skill —— 设计文档\n\n## 为什么需要这个 Skill\n\n### 核心问题\n\nAI Agent 本质上是无状态的。每次对话都是一次全新的推理，没有对之前工作的持久记忆。这对任何跨越多个会话的项目来说都是一个关键缺陷：\n\n1. **上下文窗口限制**：即使有 128K+ token 的窗口，对话历史也会被截断。50 轮之前做的项目决策会消失。\n2. **记忆污染**：当所有项目进度都存储在一个全局记忆文件中时，它会增长到 1000+ 行。检索变得缓慢且嘈杂 —— 要找到\"项目 A 的状态\"需要扫描无关的项目历史。\n3. **断点丢失**：用户说\"继续上次的项目\"，但 Agent 无法可靠地知道是哪个项目、什么阶段、下一步该做什么。\n4. **过度工程**：像\"改个变量名\"这样的简单任务被强制套用完整的项目模板，浪费 token 和认知开销。\n\n### 为什么不能只用自动记忆压缩？\n\n许多 Agent 框架（nanobot 的 Dream、OpenClaw 的自动记忆等）专注于**自动记忆压缩** —— 定期将对话历史总结到全局记忆文件中。这对长期用户偏好和跨项目经验教训很有用，但在项目管理方面有根本性限制：\n\n| 维度 | 自动记忆压缩 | 项目管理 Skill |\n|------|-------------|---------------|\n| **粒度** | 全局、单体 | 按项目、隔离 |\n| **触发方式** | 自动、定期 | 显式、意图驱动 |\n| **内容** | 用户偏好、经验教训 | 项目进度、待办、决策 |\n| **恢复方式** | 跨所有记忆的语义搜索 | 按项目名直接文件读取 |\n| **写入安全** | 单写入者，潜在覆盖风险 | 按项目读-合并-写，减少意外覆盖 |\n\n**它们是互补的，不是竞争的。** 项目进度放在 `STATUS.md`；用户偏好放在全局记忆。两者永不重叠。\n\n## 架构决策\n\n### 1. 物理隔离而非逻辑标签\n\n**决策**：每个项目获得自己的目录和专用的 `STATUS.md`，而不是在共享文件中标记条目。\n\n**理由**：\n- 文件系统提供天然隔离 —— 没有项目 A 的进度覆盖项目 B 的风险\n- 直接文件读取是 O(1) —— 不需要扫描 1000 行的文件\n- Git diff 更清晰 —— 变更限定在一个项目的文件中\n- 多会话可以在不同项目上操作而无需锁竞争\n\n### 2. 意图识别而非固定关键词\n\n**决策**：从对话上下文中推断项目操作，而不是要求精确的触发短语。\n\n**理由**：\n- 用户自然会说\"回到那个项目的事\"而不是\"resume project {project-name}\"\n- 模糊匹配 + index.md 查找处理不精确的引用\n- 当不明确时，显示最近的项目供选择，而不是盲目猜测\n\n### 3. 分级模板而非一刀切\n\n**决策**：两个模板 —— 完整模板 (A) 用于复杂项目，轻量模板 (B) 用于简单任务。\n\n**理由**：\n- 不是每个任务都值得一个 5 模块的 STATUS.md\n- 轻量模板减少单会话任务的开销\n- 当复杂度增长时自动从 B 升级到 A\n\n### 4. 读-合并-写而非盲目覆盖\n\n**决策**：写入前始终读取最新的 `STATUS.md`，然后合并变更。\n\n**理由**：\n- 多个 Agent 实例（飞书、微信、CLI）可能操作同一个项目\n- 从过时缓存盲目覆盖会导致数据丢失\n- 读-合并-写减少同会话内的意外覆盖\n- **局限性**：这不是真正原子的 —— 如果两个会话同时读取相同的基础，后来的写入仍然可能覆盖先前的。对于真正的多会话原子安全，需要锁文件、CAS（比较-交换）或追加日志。实际上，Agent 会话很少在同一秒写入同一个项目，所以读-合并-写为常见情况提供了足够的保护。\n\n### 5. 索引自愈\n\n**决策**：首次使用时自动创建 `index.md`，自动添加缺失的项目。\n\n**理由**：\n- 用户不应该需要手动维护索引\n- 如果项目目录存在但不在索引中，这是一个 bug —— 静默修复它\n- 按最后活跃时间排序的索引会优先展示相关项目\n\n## 记忆边界规则\n\n最关键的设计约束是**严格分离**项目进度和全局记忆：\n\n```\nworkspace/\n├── MEMORY.md                    ← 仅用户偏好、跨项目经验教训\n├── memory/\n│   └── YYYY-MM-DD.md            ← 一行每日摘要 + STATUS.md 引用\n└── projects/\n    ├── index.md                 ← 项目注册表\n    ├── {project}/\n    │   └── STATUS.md            ← 项目进度、待办、决策\n    └── _archive/                ← 已完成/已放弃的项目\n```\n\n**规则**：\n1. 永远不要在全局记忆中存储项目进度\n2. 每日日志只包含摘要 + 对 `STATUS.md` 的引用\n3. 跨项目经验教训（如\"X 方法上次导致了 Y 坑\"）放在全局记忆\n4. 项目特定决策放在该项目的 `STATUS.md` 中\n\n## 量化效果\n\n| 指标 | 使用前（单体） | 使用后（项目管理） |\n|------|---------------|-------------------|\n| 全局记忆大小 | 1153 行 | 167 行（减少 85%） |\n| 项目恢复时间 | 用户重新描述上下文（~2 分钟） | 读取 `STATUS.md`（<1 秒） |\n| 上下文污染风险 | 高（所有项目混在一起） | 低（物理隔离） |\n| 小任务开销 | 完整 5 模块模板 | 轻量 2-3 模块 |\n| 写入安全 | 从过时缓存盲目覆盖 | 读-合并-写减少意外覆盖 |\n\n## 跨平台验证\n\n此架构已在三个不同的 Agent 框架中得到验证：\n\n| 平台 | 实例数 | 渠道 | 状态 |\n|------|--------|------|------|\n| **nanobot** | 1 | 飞书、微信、CLI | ✅ 生产环境 |\n| **OpenClaw** | 2（`{实例 A}` + `{实例 B}`） | 飞书 | ✅ 生产环境 |\n| **Hermes Agent** | 1 | 自定义 | ✅ 生产环境 |\n\n三个平台共享相同的核心原则：\n- 每个项目独立的 `STATUS.md` 隔离\n- 意图驱动的工作流程（无固定关键词）\n- 写入安全的读-合并-写模式（减少意外覆盖）\n- 严格的记忆边界规则\n\n## 未来扩展\n\n1. **Git 集成**：在 `STATUS.md` 头部自动记录 commit hash，用于代码状态关联\n2. **自动归档**：状态恢复任务检测不活跃项目（>30 天）并提示归档\n3. **跨项目依赖**：跟踪项目 A 阻塞项目 B 的情况\n4. **模板市场**：社区贡献的 STATUS.md 模板，针对特定领域（研究、运维、设计）\n\n---\n\n## v2.4/v2.5 架构变更\n\n### v2.4 架构新增（2026-04-25）\n\n#### Session 内定期状态同步\n- Checkpoint 文件：`memory/pm-checkpoint.json`\n- 增量读取：只读取上次检查之后的消息\n- 6 类穷举触发场景：显式命令 / 隐含指代 / 重要性标记 / 话题切换 / 完成信号 / 暂停信号\n- Token 消耗控制：仅增量扫描\n\n#### 索引自愈\n- 如缺失自动创建 `index.md` 表头\n- 自动补全目录存在但索引中没有的项目\n- 每个项目必须有一句话概述\n\n#### 模板降级机制\n- 模板 A（完整）：>3 天 / 多阶段 / 团队协作\n- 模板 B（轻量）：<3 天单任务 / 研究调研\n- 根据复杂度自动选择，防止过度工程化\n\n---\n\n### v2.5 设计说明：甘特图 + 风险识别（2026-05-16）\n\n### 设计原则：零依赖、纯 Markdown\n\n**为什么不引入 Python/JS？**\n- 项目管理是 Agent 对话的一部分，不需要额外代码\n- LLM 可以直接执行「甘特图渲染算法」（自然语言描述的伪代码）\n- 纯 Markdown 输出，跨平台兼容\n- 降低维护复杂度，不需要依赖管理\n\n### 📅 甘特图自动生成设计\n\n**输入数据结构**（YAML embedded in Markdown）：\n```yaml\nstart_date: 2026-05-01\nestimated_end: 2026-05-20\nmilestones:\n  - name: 需求调研\n    date: 2026-05-05\n    status: completed\n  - name: 方案设计\n    date: 2026-05-10\n    status: in-progress\n```\n\n**渲染逻辑（LLM 直接执行此算法）**：\n1. **进度计算**：已完成里程碑数 / 总数 = 进度百分比\n2. **进度条渲染**：20 字符固定长度，█ = 已完成，░ = 未完成\n3. **里程碑标注**：按日期排序，用不同 emoji 区分状态\n4. **冲突检测**：同一日期 ≥3 个里程碑 → 显示 ⚠️ 冲突预警\n5. **延期预警**：当前日期距 estimated_end <3 天且进度<70% → 🟡 风险；已过 estimated_end 且未完成 → 🔴 延期\n\n**输出文件**：\n- 每个项目：`projects/{name}/GANTT.md`\n- 全局汇总：`index.md` 顶部显示所有活跃项目的时间线\n\n---\n\n### ⚠️ 风险自动识别设计\n\n**8 项规则引擎（全部在 LLM 推理中执行）**：\n\n| 风险项 | 算法伪代码 | 等级 |\n| --- | --- | --- |\n| 静默风险 | `if today - last_updated > 14 days` | 🔴 高 |\n| 无里程碑风险 | `if today - start_date > 7 days AND len(milestones) == 0` | 🔴 高 |\n| 已延期 | `if today > estimated_end AND progress < 100%` | 🔴 高 |\n| 依赖循环 | `if A in dependencies of B AND B in dependencies of A` | 🔴 高 |\n| 延期风险 | `if estimated_end - today < 3 days AND progress < 70%` | 🟡 中 |\n| 单点依赖 | `if count(projects depending on X) >= 3` | 🟡 中 |\n| 估时不准 | `if last 2 completed projects have estimation error > 50%` | 🟡 中 |\n| 范围蔓延 | `if milestones added > original count * 1.5` | 🟡 中 |\n\n**输出机制**：\n- 自动写入 `STATUS.md` 的 `⚠️ Risk Log` 章节\n- 高风险项目在 `index.md` 标记 🔴 前缀\n- 状态恢复期间检查一次，每天不超过一次\n\n---\n\n### 为什么这样设计？\n\n**对比方案**：\n\n| 方案 | 优点 | 缺点 |\n|---|---|---|\n| **Python 脚本** | 精确、可测试 | 需维护代码、环境依赖、跨平台问题 |\n| **外置 Skill** | 解耦 | 增加复杂度、需要调用其他 Skill |\n| **✅ 算法描述 + LLM 执行** | 零依赖、纯 Markdown、可跨平台、代码量=0 | 极端情况下精度差一点点 |\n\n**决策依据**：\n1. 项目管理对精度要求不高（差 1-2 天不影响决策）\n2. 甘特图和风险识别都是「提示性」而非「精确计算」\n3. 零依赖、零维护成本的收益远大于微小的精度损失\n4. 纯 Markdown 输出可以直接渲染在任何平台\n\n---\n\n*完整版本历史：见 CHANGELOG.md*\n\nFile v2.6.0:DESIGN.md\n\n# Project Manager Skill — Design Document\n\n## Why This Skill Exists\n\n### The Core Problem\n\nAI agents are fundamentally stateless. Each conversation turn is a fresh inference with no persistent memory of prior work. This creates a critical gap for any project that spans multiple sessions:\n\n1. **Context Window Limits**: Even with 128K+ token windows, conversation history gets truncated. Project decisions made 50 turns ago disappear.\n2. **Memory Pollution**: When all project progress is stored in a single global memory file, it grows to 1000+ lines. Retrieval becomes slow and noisy.\n3. **Lost Breakpoints**: Users say \"continue last project\" but the agent has no reliable way to know which project, what phase, or what the next step should be.\n4. **Over-Engineering**: A simple task like \"rename a variable\" gets forced into a full project template, wasting tokens and cognitive overhead.\n\n### Why Not Just Use Automatic Memory Consolidation?\n\nMany agent frameworks (nanobot's Dream, OpenClaw's auto-memory, etc.) focus on **automatic memory consolidation** — periodically summarizing conversation history into a global memory file. This is great for long-term user preferences and cross-project lessons, but it has fundamental limitations for project management:\n\n| Dimension | Automatic Memory Consolidation | Project Manager |\n|-----------|-------------------------------|-----------------|\n| **Granularity** | Global, monolithic | Per-project, isolated |\n| **Trigger** | Automatic, periodic | Explicit, intent-driven |\n| **Content** | User preferences, lessons learned | Project progress, todos, decisions |\n| **Recovery** | Semantic search across all memory | Direct file read by project name |\n| **Concurrency** | Single writer, potential conflicts | Per-project isolation (reduces cross-project conflicts; same-project writes use read-merge-write to reduce accidental overwrites) |\n\n**They are complementary, not competing.** Project progress goes in `STATUS.md`; user preferences go in global memory. The two never overlap.\n\n## Architecture Decisions\n\n### 1. Physical Isolation Over Logical Tags\n\n**Decision**: Each project gets its own directory with a dedicated `STATUS.md`, rather than tagging entries in a shared file.\n\n**Rationale**:\n- File system provides natural isolation — no risk of Project A's progress overwriting Project B's\n- Direct file read is O(1) — no scanning a 1000-line file\n- Git diff is cleaner — changes are scoped to one project's file\n- Concurrent sessions can operate on different projects without lock contention\n\n### 2. Intent Recognition Over Rigid Keywords\n\n**Decision**: Infer project operations from conversation context rather than requiring exact trigger phrases.\n\n**Rationale**:\n- Users naturally say \"back to that project\" not \"resume project {project-name}\"\n- Fuzzy matching + index lookup handles imprecise references\n- When ambiguous, show recent projects for selection instead of guessing\n\n### 3. Tiered Templates Over One-Size-Fits-All\n\n**Decision**: Two templates — Full (A) for complex projects, Lightweight (B) for simple tasks.\n\n**Rationale**:\n- Not every task deserves a 5-module STATUS.md\n- Lightweight template reduces overhead for single-session tasks\n- Auto-upgrade from B to A when complexity grows\n\n### 4. Read-Merge-Write Over Blind Overwrite\n\n**Decision**: Always read the latest `STATUS.md` before writing, then merge changes.\n\n**Rationale**:\n- Multiple agent instances may operate on the same project\n- Blind overwrite from stale cache causes data loss\n- Read-merge-write reduces accidental overwrites within a single session\n- **Limitation**: This is not truly atomic — if two sessions read the same base simultaneously, the later write can still clobber the earlier one. For true multi-session atomic safety, a lock file, CAS (compare-and-swap), or append-only log would be needed. In practice, agent sessions rarely write to the same project at the exact same second, so read-merge-write provides sufficient protection for the common case.\n\n### 5. Index Self-Healing\n\n**Decision**: Auto-create `index.md` on first use, auto-add missing projects.\n\n**Rationale**:\n- Users shouldn't need to manually maintain an index\n- If a project directory exists but isn't in the index, it's a bug — fix it silently\n- Index sorted by last active time surfaces relevant projects first\n\n## Memory Boundary Rules\n\nThe most critical design constraint is **strict separation** between project progress and global memory:\n\n```\nworkspace/\n├── MEMORY.md                    ← User preferences, cross-project lessons ONLY\n├── memory/\n│   └── YYYY-MM-DD.md            ← One-line daily summary + STATUS.md reference\n└── projects/\n    ├── index.md                 ← Project registry\n    ├── {project}/\n    │   └── STATUS.md            ← Project progress, todos, decisions\n    └── _archive/                ← Completed/abandoned projects\n```\n\n**Rules**:\n1. Never store project progress in global memory\n2. Daily logs contain only a summary + reference to `STATUS.md`\n3. Cross-project lessons (e.g., \"X approach caused Y pitfall\") go in global memory\n4. Project-specific decisions go in that project's `STATUS.md`\n\n## Quantified Impact\n\n| Metric | Before (Monolithic) | After (Project Manager) |\n|--------|---------------------|------------------------|\n| Global memory size | 1153 lines | 167 lines (85% reduction) |\n| Project recovery time | User re-describes context (~2 min) | Read `STATUS.md` (<1 sec) |\n| Context pollution risk | High (all projects mixed) | Low (physical isolation) |\n| Small task overhead | Full 5-module template | Lightweight 2-3 modules |\n| Write safety | Blind overwrite from stale cache | Read-merge-write reduces accidental overwrites |\n\n## Cross-Platform Validation\n\nThis architecture has been validated across three different agent frameworks:\n\n| Platform | Instances | Channels | Status |\n|----------|-----------|----------|--------|\n| **nanobot** | 1 | Feishu, WeChat, CLI | ✅ Production |\n| **OpenClaw** | 2 (`{instance-A}` + `{instance-B}`) | Feishu | ✅ Production |\n| **Hermes Agent** | 1 | Custom | ✅ Production |\n\nAll three platforms share the same core principles:\n- Per-project `STATUS.md` isolation\n- Intent-driven workflow (no rigid keywords)\n- Write-safe read-merge-write pattern (reduces accidental overwrites)\n- Strict memory boundary rules\n\n## Version History\n\n### v2.5 Architecture Additions (2026-05-17)\n\n#### Gantt Chart Auto-Generation\n- ASCII progress bar rendering (█ = done, ░ = pending), fixed 20-character width\n- Milestone tracking with 3 states: pending / in-progress / completed\n- Delay warning system (🔴 delayed / 🟡 at-risk)\n- Resource conflict detection (≥3 milestones on same day triggers warning)\n- Output: `projects/{name}/GANTT.md` + global summary in `index.md`\n\n#### 8-Rule Risk Detection Engine\n- Silent risk: >14 days without updates\n- No milestones risk: project started >7 days without any milestones\n- Already delayed: past estimated_end & not 100% complete\n- Dependency cycle: A depends on B & B depends on A (DAG loop detection)\n- Delay risk: <3 days to deadline & progress <70%\n- Single point dependency: ≥3 projects depend on same skill\n- Estimation bias: last 2 completed projects had >50% estimation error\n- Scope creep: milestones increased >50% from original count, then more added\n\n#### Dependency Management System\n- 3 types: requires / blocks / optional\n- 3 statuses: satisfied / blocked / in-progress\n- Machine-parsable YAML format embedded in STATUS.md\n\n#### Conversation Log Archiving\n- Output: `memory/project_log_{name}.md`\n- Contents: decision timeline + lessons learned + session snapshots\n- Searchable by project name and keywords\n\n#### Effort Tracking Fields\n- `estimated_hours`: set at project start\n- `actual_hours`: **MUST fill at project completion**\n- Used by risk engine \"estimation bias\" rule\n\n---\n\n### v2.4 Architecture Additions (2026-04-25)\n\n#### In-Session Periodic State Synchronization\n- Checkpoint file: `memory/pm-checkpoint.json`\n- Incremental read: only messages since last check\n- 6 exhaustive trigger categories: explicit commands / implicit references / importance markers / topic switches / completion signals / pause signals\n- Token consumption control: incremental scans only\n\n#### Index Self-Healing\n- Auto-creates `index.md` header if missing\n- Auto-populates projects present in directory but not in index\n- Every project requires a one-line summary\n\n#### Template Downgrade Mechanism\n- Template A (full): >3 days / multi-phase / team collaboration\n- Template B (lightweight): <3 days single tasks / research\n- Auto-selected based on complexity to prevent over-engineering\n\n---\n\n### v2.2 (Historical)\n- Templates moved to `templates/` directory\n- \"Concurrent safety\" → \"Write safety\", TOCTOU limitation explicitly noted\n- Git commands scoped to project directory\n- Worktree detection via git-native probe\n\n---\n\n## Future Extensions\n\n1. **Git Integration**: Auto-record commit hashes in `STATUS.md` header for code-state correlation\n2. **Auto-Archive**: Periodic check task to detect inactive projects (>30 days) and prompt archival\n3. **Cross-Project Dependencies**: Track when Project A blocks Project B\n4. **Template Marketplace**: Community-contributed STATUS.md templates for specific domains (research, devops, design)\n\n---\n\n*Full changelog: see CHANGELOG.md*\n\nFile v2.6.0:PUBLISH_NOTES.md\n\n# ClawHub 发布脱敏检查清单\n\n## 工作流\n\n1. 运行 `./publish-clawhub.sh` 切换到合规版本\n2. 执行 `clawhub publish`\n3. 运行 `./restore-local.sh` 恢复本地版本\n\n## SKILL.clawhub.md 与 SKILL.md 的差异\n\n| 修改项 | 本地版 (SKILL.md) | ClawHub 版 (SKILL.clawhub.md) | 原因 |\n|---|---|---|---|\n| description | 含触发词穷举列表 | 仅描述功能，明确“按需”、“不主动” | 扫描器标记过度触发能力 |\n| 顶部隐私说明 | 无 | 添加隐私声明段落 | 数据处理透明度 |\n| 架构原则 §4 | “skill 激活后自动注册” | “用户主动启用后” | 避免自动监控描述 |\n| §1 意图识别 | 穷举触发场景 + 隐含指代 | 仅显式触发 + “不触发的场景” | 窄化触发范围 |\n| §2 Agent 主动发现 | 含“主动发现”逻辑 | 移除，仅保留用户触发 | 避免主动行为描述 |\n| §8 Session 同步 | 自动启用，一次激活持续生效 | “用户按需启用”，不自动注册 | 消除后台监控语义 |\n| §6 Session 结束 | “检测到以下信号”含无消息超时 | “当用户主动表达离开意图时” | 被动替代主动 |\n| §11 约束 | “激活即注册” | “按需启用” | 与 §8 保持一致 |\n| 风险扫描 §11 | “定时检查：每天一次” | 移除定时检查描述 | 避免定期自动执行 |\n\n## 必须替换的敏感词\n\n| 原文 (敏感) | 替换为 (安全) | 位置 |\n|---|---|---|\n| `周期自动检查` | `按需状态同步` | `description` 字段 |\n| `心跳兜底` | `智能恢复` | `description` 字段 |\n| `自动扫描` | `按需检查` | 正文 |\n| `持续扫描` | `定期同步` | 正文 |\n| `持续监听` | 仅用户请求时操作 | 正文 |\n| `自动启用` | `按需启用` | §8 |\n\n## 历史修改记录\n- **2026-05-26 (v2.6-clawhub)**: 创建 SKILL.clawhub.md 合规版本；触发词窄化、隐私声明、session 同步改 opt-in。\n- **2026-04-25 (v2.4.1)**: 首次发布 v2.4 时触发 Suspicious 警告。修改 `description` 字段去除敏感词，消除警告。\n\nFile v2.6.0:README_CN.md\n\n# 📂 Agent 项目管理 Skill\n\n**跨平台项目上下文隔离与状态管理系统**\n\n> 🌐 [English](README.md) | [中文](README_CN.md)\n\n> 已在 **nanobot**、**OpenClaw**、**Hermes Agent** 等多个平台实战验证，解决 AI Agent 无状态性与项目连续性之间的根本矛盾。\n\n## 简介\n\nAI Agent 是无状态的，但项目需要连续性。本 Skill 通过为每个项目创建独立的 `STATUS.md` 文件，实现跨会话的无缝上下文恢复，同时不污染全局记忆。\n\n- **物理隔离**：每个项目独立文件，不共享状态\n- **意图识别**：无固定关键词，从上下文推断操作\n- **分级模板**：完整模板 (A) 用于复杂项目，轻量模板 (B) 用于单任务\n- **写入安全**：读-合并-写模式，减少意外覆盖\n- **Session 内状态同步**：一次激活，持续检查新对话，防止\"聊了就忘\"\n- **增量 checkpoint**：只读新增对话，控制 token 消耗\n\n👉 详细设计文档：[DESIGN_CN.md](DESIGN_CN.md)\n\n## 解决什么问题\n\n1. **记忆爆炸**：所有项目进度挤在一个文件 → 1000+ 行，检索慢\n2. **上下文污染**：项目 A 的进度泄漏到项目 B 的上下文\n3. **断点丢失**：\"继续上次的项目\" → Agent 不知道是哪个、做到哪了\n4. **话题遗忘**：讨论了新话题但没建项目记录 → 第二天全忘\n5. **过度工程**：小任务被迫使用完整模板\n\n## 解决方案\n\n为每个项目创建独立的 `STATUS.md`——Agent 的\"外部硬盘\"：\n\n```\nworkspace/projects/\n├── index.md              # 自动维护的项目索引（含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 进度、待办、关键决策\n│   ├── docs/             # 方案、报告\n│   └── src/              # 代码、产出物\n└── _archive/             # 已完成/已废弃项目\n```\n\n## 核心特性\n\n| 特性 | 说明 |\n|------|------|\n| **物理隔离** | 每个项目独立 STATUS.md，不共享状态 |\n| **意图识别** | 无死板关键词，从上下文推断新建/恢复/暂停/切换 |\n| **分级模板** | 完整模板 (A) 用于多阶段项目，轻量模板 (B) 用于单任务 |\n| **写入安全** | 读-合并-写模式，减少意外覆盖 |\n| **索引自愈** | 自动创建 index.md，自动补录缺失项目 |\n| **记忆边界** | 项目进度在 STATUS.md，用户偏好在全局记忆，不交叉 |\n| **Session 状态同步** 🆕 | 激活后每 60 分钟检查新对话，捕获新话题 |\n| **增量 Checkpoint** 🆕 | 只读上次检查后的新消息，最小化 token 消耗 |\n| **状态恢复** 🆕 | 当 session 检查未激活时，状态恢复轮询作为最后防线 |\n| **📅 甘特图自动生成** 🆕 | 一键生成 ASCII 甘特图，含进度条 + 里程碑 + 延期预警 + 资源冲突检测 |\n| **⚠️ 风险自动识别** 🆕 | 8 项规则引擎，检查静默风险、无里程碑、依赖循环、估时不准等 |\n| **🔗 依赖关系管理** 🆕 | requires/blocks/optional 三类依赖，支持依赖环检测 |\n\n## 量化效果\n\n| 指标 | 使用前 | 使用后 |\n|------|--------|--------|\n| 全局记忆大小 | 1153 行 | 167 行（减少 85%） |\n| 项目恢复时间 | 用户重新描述 (~2 分钟) | 读取 STATUS.md (<1 秒) |\n| 上下文污染风险 | 高（所有项目混合） | 低（物理隔离） |\n| 小任务开销 | 完整 5 模块模板 | 轻量 2-3 模块 |\n| 话题遗漏 | 总是丢失 | 状态同步自动捕获 |\n\n## 安装\n\n### nanobot\n将 `SKILL.md` 复制到 `~/.nanobot/workspace/skills/project-manager/SKILL.md`\n\n### OpenClaw\n将 `SKILL.md` 复制到 `<workspace>/skills/project-manager/SKILL.md`\n\n### Hermes Agent\n将 `SKILL.md` 复制到 Agent 的 skills 目录\n\n## 工作流程\n\n1. **新建项目** → 扫描索引检查关联 → 确实新则创建 → 与用户确认\n2. **恢复项目** → 模糊匹配 → 强制读取 STATUS.md → 摘要同步\n3. **保存状态** → 持久化结论 → 更新索引状态\n4. **切换项目** → 保存当前 → 恢复目标\n5. **归档项目** → 移动到 `_archive/` → 保留历史\n6. **状态同步** 🆕 → 检查新对话 → 捕获新话题\n\n## 架构设计\n\n详见 [DESIGN_CN.md](DESIGN_CN.md)，包含完整架构设计思路、记忆边界规则、与自动记忆整合系统的对比。\n\n## License\n\nMIT\n\n---\n\n*Designed by Kris. v2.5 — 甘特图自动生成、项目风险自动识别、依赖关系管理、对话日志归档。完整版本历史见 CHANGELOG.md。*\n\nFile v2.6.0:SECURITY.md\n\n# Project Manager 项目管理系统 — 安全说明\n\n**v2.5.3 安全架构说明**\n*最后更新: 2026-05-24*\n\n---\n\n## 🔒 安全设计原则\n\nProject Manager 是一个**纯 Markdown 技能文件**（SKILL.md），不包含任何可执行代码。它作为 OpenClaw Agent 的指令系统运行，所有操作在 Agent 的受控环境中执行。\n\n---\n\n## 🛡️ 安全防护清单\n\n### 文件系统访问\n- **范围**: 仅限 `workspace/projects/{name}/STATUS.md`、`workspace/projects/index.md`、`memory/pm-checkpoint.json`\n- **操作**: 读/写 Markdown 和 JSON 文件，由 Agent 的文件工具执行\n- **写入安全**: 采用\"读-合并-写\"模式降低冲突概率（标注 TOCTOU 限制）\n\n### Shell 命令\n- **Git 关联（可选）**: 仅在用户启用时调用 `git rev-parse --is-inside-work-tree` 和 `git log --oneline -1`\n- **约束**: Git 命令限定在项目目录作用域内，不调用 `git push` / `git commit` 等破坏性操作\n- **OpenClaw CLI（可选）**: 仅在第 8 节激活注册流程中引用 `openclaw sessions_spawn` 命令示例\n- **这些命令均由 Agent 在隔离环境中以工具调用方式执行，不是本 skill 自身代码**\n\n### 数据流向\n- **项目进度**: 本地文件系统 `STATUS.md` → Agent 读取 → 回复用户\n- **经验沉淀**: 项目经验 → `MEMORY.md`（仅跨项目通用经验，不含项目进度细节）\n- **无网络传输**: 本 skill 不向任何外部服务发送数据\n\n### memory/pm-checkpoint.json\n- **内容**: 记录项目名称、最后访问时间、状态摘要\n- **权限**: 与 session memory 同级，不包含敏感信息\n\n---\n\n## 📂 依赖审查\n\n本 skill 无代码文件，无依赖项。所有功能通过 OpenClaw Agent 的以下内置工具实现：\n\n| 工具 | 用途 | 风险 |\n|------|------|------|\n| `read` | 读取 STATUS.md / index.md | 低 — 只读 |\n| `write` / `edit` | 写入/更新 STATUS.md | 低 — 项目目录限定 |\n| `exec` (可选) | git rev-parse / git log | 低 — 只读命令，目录限定 |\n| `memory_get` | 读取 MEMORY.md | 低 — 只读 |\n\n---\n\n## 🚨 应急响应\n\n本 skill 为纯指令系统，不涉及运行时服务。如遇问题：\n\n1. **清除 checkpoint**: `rm memory/pm-checkpoint.json`\n2. **更新到最新版本**: `clawhub update agent-project-manager`\n\n---\n\n*版本: v2.5.3 — 安全说明与实现一一对应*\n\nFile v2.6.0:skill-card.md\n\n## Description: <br>\nProject Manager helps an agent maintain per-project progress, decisions, todos, timelines, risks, and dependencies in local status files when the user asks for project-management work. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[krislu1221](https://clawhub.ai/user/krislu1221) <br>\n\n### License/Terms of Use: <br>\nMIT <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use this skill to preserve project context across sessions, resume prior work, track decisions and todos, generate project timelines, and review project risks without mixing project state into global memory. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The security scan reports that the skill's documentation is not fully consistent about explicit-request-only behavior versus session sync, scans, and persistent logging. <br>\nMitigation: Use session sync, risk scans, Gantt generation, and project logging only after an explicit user command, and review generated project and memory files for sensitive content. <br>\nRisk: The skill can persist conversation-derived project summaries and checkpoints in local files. <br>\nMitigation: Keep project state in the documented workspace and memory paths, clear checkpoints when no longer needed, and avoid recording secrets or unrelated personal data. <br>\nRisk: Read-merge-write updates reduce overwrite risk but do not eliminate race conditions when multiple sessions edit the same project state. <br>\nMitigation: Review the latest status file before writing, avoid concurrent edits to the same project, and inspect changes before relying on saved project state. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/krislu1221/agent-project-manager) <br>\n- [README.md](README.md) <br>\n- [DESIGN.md](DESIGN.md) <br>\n- [SECURITY.md](SECURITY.md) <br>\n- [Template reference](references/templates.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Configuration, Guidance, Shell commands] <br>\n**Output Format:** [Markdown files, concise text summaries, and optional local shell commands] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces local project status, index, timeline, risk, checkpoint, and project-log artifacts under workspace project and memory paths when requested or explicitly enabled.] <br>\n\n## Skill Version(s): <br>\n2.6.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v2.6.0:SKILL.clawhub.md\n\n---\nname: project-manager\ndescription: \"项目上下文隔离与状态管理系统 v2.5。按需记录项目进度、决策和待办，支持甘特图、风险扫描和依赖管理。仅在用户明确指示时执行操作，不会主动扫描或修改文件。\"\n---\n\n# Project Manager v2.5 - 项目上下文管理系统\n\n> **隐私说明**：本技能仅在用户明确请求时操作文件（创建/更新 STATUS.md）。不会在后台持续监听对话，不会读取与项目无关的个人数据，不会自动发送数据到外部服务。所有数据本地存储于 workspace/projects/ 目录。\n\n## 要解决的核心问题\n\n**Agent 会遗忘。** 每天醒来是全新的，如果对话中没有及时记录，第二天就完全不记得做过什么。\n\n本系统的目标：**最小化信息遗漏，最大化可恢复性，不增加对话负担。**\n\n## 架构原则\n\n| 层级 | 文件 | 职责 |\n|------|------|------|\n| **即时记录** | `projects/{name}/STATUS.md` | 对话中即时写入重要决策/需求/完成节点 |\n| **按需状态同步** | `memory/pm-checkpoint.json` | 用户启用后，检查新内容 |\n| **智能恢复** | `HEARTBEAT.md` 第 5 项 | 全局检查，作为最后一道防线 |\n| **全局记忆** | `MEMORY.md` / `memory/*.md` | 用户偏好、跨项目经验（不含项目进度） |\n\n## 与 Auto-Coding v3 集成\n当使用 `auto-coding-v3` 进行代码开发时，该系统会在 `workspace/projects/{project_name}/status/` 下生成详细的工程状态文件。\n*   `STATUS.md` 负责 **宏观进度**（Todo, Next Step, Decision）。\n*   `status/` 目录负责 **微观工程细节**（Scratchpad, Logs）。\n\n## 核心原则\n\n1. **物理隔离**：每个项目拥有独立的 `STATUS.md`，绝不混用。\n2. **状态显式化**：没有记录在文件里的事，就是没发生。\n3. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后。\n4. **session 内状态同步**（按需启用）：用户主动启用后，定期检查新内容。\n5. **分级管理**：轻重有别，杀鸡不用牛刀。\n6. **意图优先**：仅在上下文明确指向项目管理意图时响应，不推断日常对话。\n7. **写入安全**：写入前必须先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n\n## 目录结构规范\n\n```text\nworkspace/projects/\n├── index.md              # 📇 项目索引（自动维护，必须含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 🧠 核心记忆：进度、待办、关键决策（每次对话必读/必写）\n│   ├── docs/             # 方案、报告、调研数据\n│   ├── src/              # 代码、产出物\n│   └── status/           # auto-coding v3 微观工程文件（可选）\n└── _archive/             # 📦 已归档项目\n    └── {project-name}/\n        └── STATUS.md     # 保留历史记录\n```\n\n## 📇 项目索引：`projects/index.md`\n\n```markdown\n# 项目索引\n> 自动维护，按最后活跃时间倒序\n\n| 项目 | 目录 | 最后更新 | 状态 | 备注 |\n|------|------|---------|------|------|\n| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |\n```\n\n**维护规则：**\n- **首次使用**：如不存在，自动创建并写入表头\n- 新建项目时：添加到顶部\n- 恢复项目时：更新\"最后更新\"时间，移到顶部\n- 暂停项目时：更新\"状态\"为\"已暂停\"并记录暂停原因\n- 归档项目时：移到 `_archive/`，index.md 标记为\"已归档\"\n- **索引自愈**：发现项目目录存在但 index 中没有时，自动补录\n- **必须包含一句话概述**，格式为「动词 + 对象 + 目的」\n\n---\n\n## 分级 STATUS.md 模板\n\n> ⚠️ 以下为简化示意，实际使用时应先从 `skills/project-manager/templates/` 目录读取对应完整模板文件。\n\n### A) 完整模板（>3天项目 / 多阶段任务 / 跨团队协作）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项 (Todo)\n- [x] 已完成 1\n- [ ] 待办 2 (优先级高)\n- [ ] 待办 3\n\n## 🔑 关键上下文/决策\n- 决策 1 (为什么这么做)\n- 约束 1 (用户明确要求的事项)\n- 链接 (相关 URL/文件路径)\n\n## 🛑 暂停原因/遗留问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n```\n\n### B) 轻量模板（<3天的单任务 / 调研/分析类临时任务）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | PM: v2.5\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n```\n\n### 模板来源与选择规则\n\n**模板文件位置**：`skills/project-manager/templates/` 目录下的 STATUS-A.md / STATUS-B.md（不是内联伪代码）。\n\n**选择规则**：\n| 场景 | 模板 |\n|------|------|\n| 3天以上的多阶段项目 | A 完整模板 |\n| 单任务（如\"帮我把这个接口重构一下\"） | B 轻量模板 |\n| 调研/分析类临时任务 | B 轻量模板 |\n| 需要多人协作或长期维护 | A 完整模板 |\n| 不确定 | 先用 B，后续发现需要再升级到 A |\n\n---\n\n## 操作工作流 (Workflow)\n\n### 1. 意图识别\n\n**仅在用户明确提及项目管理操作时响应。** 本技能不会对日常对话中的普通用语（如\"继续\"、\"搞定了\"、\"记一下\"）做出反应——只有当上下文明确指向项目操作时才介入。\n\n#### 用户主动触发（按需响应）\n- **新建**：新建项目、帮我建一个项目、创建项目\n- **恢复**：回到XX项目、继续XX项目\n- **保存**：保存项目状态、暂停项目\n- **查看**：项目列表、查看进度\n- **切换**：切换到另一个项目\n\n#### 上下文明确关联时\n- 用户提到具体的项目名或明确指代之前的项目工作时，匹配 index.md\n- 无法确定时展示最近项目列表让用户选择，不做自动推断\n\n**不触发的场景**：\n- 日常对话中说\"继续\"、\"搞定了\"、\"记一下\"等通用表达\n- 不涉及项目管理意图的任何讨论\n\n### 2. 初始化新项目 (Start New)\n\n**触发条件**：\n- 用户明确说\"新建项目\"/\"帮我建一个\"\n\n**门槛判断（避免过度工程）**：\n- **建项目**：超过几句实质讨论、有具体问题/需求/决策、可能后续会继续推进（如\"调研某系统\"、\"帮我想个方案\"、\"评估某技术\"）\n- **不建项目**：随口一问、一句话话题、单纯信息查询 → 写入当日记忆即可\n\n**动作**：\n1. **先扫描 `index.md`** — 检查是否有相关项目可以合并或关联\n2. 有关联 → 合并到已有项目，告知用户\"这个话题我已归入 XX 项目\"\n3. 无关联 → 继续以下步骤：\n   1. **先向用户确认**：\"这是个新话题，我建个项目记录一下？概述是「{一句话概述}」\"\n   2. 用户同意后再创建\n   3. 目录名用 kebab-case：`cmra-geo`\n   4. 创建目录 `workspace/projects/{name}/`\n   5. **先从 `skills/project-manager/templates/` 目录读取对应模板**，根据复杂度选择 A/B 模板，创建 `STATUS.md`\n   6. **确保 `index.md` 存在**：如不存在自动创建并写入表头\n   7. 一句话概述生成规则：从对话核心意图提炼，格式为「动词 + 对象 + 目的」\n   8. 更新 `projects/index.md`（添加到顶部）\n4. **注册 session 状态同步**（见第 8 节，需用户主动启用）\n\n### 3. 恢复旧项目 (Resume)\n\n**动作**：\n1. **模糊匹配**：用户说的项目名可能不精确，先在 index.md 中查找\n2. **强制读取**：`read(workspace/projects/{name}/STATUS.md)`\n3. **摘要同步**：\"📖 已恢复 `{name}` 上下文。当前：[简述进度]。待办：[列出]。继续哪一步？\"\n4. **更新 index.md**：将该项目移到最后活跃时间顶部\n5. **如果 STATUS.md 不存在或为空** → 检查 `memory/` 目录下是否有相关日期的记忆文件，尝试恢复上下文；无法恢复时如实告知用户\n6. **注册 session 状态同步**（见第 8 节，需用户主动启用）\n\n### 4. 🔄 对话中即时记录\n\n**这是核心机制。** 不是等到用户说\"保存状态\"才记录，而是在对话中**即时写入**。\n\n**触发时机（满足任一即写入）**：\n- 用户提出了新的需求或约束\n- 做出了技术/方案决策\n- 完成了一个子任务\n- 用户明确要求记住某事\n- 话题发生实质性切换（从项目 A 切换到项目 B）\n\n**写入策略（轻量，不拖慢对话）**：\n- 只更新 STATUS.md 的\"当前状态\"和\"待办\"模块\n- 用 1-2 句话记录结论，不写过程流水账\n- 如果当前对话没有关联的项目 → 触发\"新项目创建\"流程（第 2 节）\n\n**不写入的情况**：\n- 只是闲聊/寒暄\n- 正在讨论中还没确定方案\n- 同一个任务的中间尝试（最终用的是最初方案）\n\n### 5. 暂停/切换 (Pause/Switch)\n\n**输入**：`先停一下` / `我去忙别的` / `切换到 XX`\n\n**动作**：\n1. 总结当前对话的结论\n2. 更新当前项目的 `STATUS.md`\n3. 更新 `index.md`：状态改为\"已暂停\"，记录暂停原因\n4. 如果是切换，恢复目标项目\n5. **回复用户**：\"✅ 状态已保存。下次说'回到 [Name]'即可无缝接续。\"\n\n### 6. Session 结束收尾\n\n**当用户主动表达离开意图时**（用户说\"我先走了\"、\"明天继续\"、主动结束对话）：\n\n1. 回顾最近一轮对话的内容\n2. 提取未完成的任务和关键决策\n3. 更新当前项目的 STATUS.md\n4. 写入当日记忆 `memory/YYYY-MM-DD.md`（一句话摘要 + 引用 STATUS.md）\n5. 如果涉及新话题但未建项目 → 记录到 HEARTBEAT 待处理队列\n\n### 7. 项目清理与归档 (Cleanup & Archive)\n\n**状态恢复期间检查**：\n- 超过 30 天未活跃 → 标记为\"可能归档\"，询问用户\n- 已完成 → 状态改为\"已完成\"\n- 已废弃 → 状态改为\"已废弃\"\n\n**归档操作**：\n1. 移动到 `projects/_archive/{name}/`\n2. 保留 STATUS.md 作为历史记录\n3. index.md 标记为\"已归档\"并移到底部\n\n---\n\n### 8. 🔄 Session 内状态同步（用户按需启用）\n\n### 这是什么？\n\n用户可以在项目操作时**主动启用**此功能。启用后，skill 在当前 session 中按用户指定的间隔检查是否有新内容需要记录到项目状态中。\n\n### 启用方式\n\n此功能**不会自动启用**。用户需明确表达意图，例如\"帮我留意一下项目变化\"或\"开启状态同步\"，才会注册。\n\n#### 注册流程\n用户明确要求后，执行以下操作：\n\n1. 创建/更新 checkpoint 文件 `memory/pm-checkpoint.json`：\n```json\n{\n  \"active\": true,\n  \"sessionKey\": \"当前session的key或label\",\n  \"lastCheckedMsgId\": \"当前最后一条消息的ID\",\n  \"lastCheckTime\": \"2026-04-25T11:09:00+08:00\",\n  \"intervalMinutes\": 60,\n  \"activeProject\": \"当前关联的项目名（可选）\",\n  \"expiresAt\": \"2026-04-26T00:00:00+08:00\"\n}\n```\n\n2. 创建一个 cron 任务，每 60 分钟执行一次：\n   - 读取 `pm-checkpoint.json` 获取上次检查位置\n   - 读取 checkpoint 之后新增的对话内容\n   - 分析新内容：是否有新话题、新决策、新需求？\n   - 对比 index.md：有关联 → 更新 STATUS.md；无关联 → 标记待确认\n   - 更新 checkpoint 的 `lastCheckedMsgId` 和 `lastCheckTime`\n\n#### 检查内容分析规则\n每次只读取用户指定范围内的新增内容，分析以下信号：\n\n| 信号类型 | 示例 | 动作 |\n|---------|------|------|\n| 新需求 | \"我们需要增加XX功能\" | 更新 STATUS.md 待办 |\n| 新决策 | \"用 Redis 不用 Memcached\" | 更新 STATUS.md 决策 |\n| 完成节点 | \"这个模块搞定了\" | 更新 STATUS.md 进度 |\n| 新话题 | 突然讨论完全不同的话题 | 扫描 index.md 判断是否建项目 |\n| 暂停信号 | \"先停一下\"、\"明天继续\" | 触发 Session 结束收尾（第 6 节） |\n\n#### 门槛判断\n- **实质内容**（有具体问题/需求/决策）→ 记录到 STATUS.md 或创建新项目\n- **闲聊/寒暄** → 跳过\n- **一句话话题** → 跳过\n\n#### 过期与清理\n- checkpoint 文件设置过期时间（默认 24 小时）\n- 过期后自动停止状态同步\n- 用户说\"不用检查了\"时立即停止\n- session 断开后下次激活时需用户重新启用\n\n#### Token 消耗控制\n- 每次只读新增对话，不回顾全部历史\n- checkpoint 用 message ID 定位，精确到单条消息\n- 预计每次检查消耗 500-2000 token（60 分钟约 10-30 条新消息）\n\n---\n\n### 9. 📝 项目对话日志（v2.5 新增）\n\n### 为什么需要\n项目相关的讨论分散在历史会话中，想回顾时找不到。对话日志把项目相关的关键讨论打包成独立文件，随时可以回顾。\n\n### 触发时机\n- **项目新建时**：自动初始化日志条目\n- **每次更新 STATUS.md 时**：自动追加本次会话的关键内容\n- **项目归档时**：打包整个项目的完整对话历史\n\n### 存储结构\n写入 `memory/project_log_{project_name}.md`：\n\n```markdown\n# 📝 项目对话日志：{project_name}\n> 归档时间：{YYYY-MM-DD HH:MM}\n> 关联项目：projects/{project_name}/STATUS.md\n\n## 项目概况\n[核心目标一句话摘要]\n\n## 关键决策时间线\n| 时间 | 决策 | 上下文 |\n|------|------|--------|\n| YYYY-MM-DD | 决定采用方案A而不是B | 性能优先级高于成本 |\n\n## 踩过的坑\n[记录所有尝试过但失败的方案、原因、教训]\n\n## 历史会话快照\n> session_key: abc123 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要，不超过200字]\n\n---\n> session_key: def456 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要]\n```\n\n### 归档策略\n- **只记结论，不记流水**：超过200字的讨论压缩成摘要\n- **决策必记**：所有「就这么定了」「就用方案A」的时刻必须记录\n- **踩坑必记**：试过但失败的方案，防止重蹈覆辙\n- **自动关联**：session_key 链接到完整会话，方便回溯\n\n### 检索方式\n- 按文件名：`memory/project_log_{name}.md`\n- 按关键词搜索：记忆文件的内容可被全局搜索命中\n\n---\n\n### 10. 📅 甘特图自动生成（v2.5 新增）\n\n### 数据流关系\n**唯一数据源** = STATUS.md 中的 `## 📅 Timeline` YAML 块  \n**输出文件** = `projects/{name}/GANTT.md`  \n\n更新里程碑时：先改 STATUS.md Timeline → 再重新渲染 GANTT.md。不要直接编辑 GANTT.md，否则下次渲染会被覆盖。\n\n### 触发方式\n- **显式命令**：\"生成甘特图\"、\"看看时间线\"、\"项目进度图\"\n- **建议触发**：每次更新 STATUS.md 的 milestones 后，应该重新渲染 Gantt\n\n### 渲染算法（自然语言描述，按此逻辑执行）\n\n**第一步：读取项目时间配置**\n遍历所有项目目录，逐个读取 STATUS.md 中的 timeline 配置，提取每个项目的：\n- 开始日期 start_date\n- 预计完成日期 estimated_end\n- 所有里程碑列表（含名称、日期、状态）\n统计已完成里程碑数和总里程碑数，计算进度百分比 = 已完成 / 总数 × 100\n\n**第二步：渲染 ASCII 甘特图**\n输出格式如下：\n```\n📅 项目甘特图 | {当前年} 年 {当前月} 月\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n{项目名称}  [{进度条}] {进度百分比}%\n  ├─ {YYYY-MM-DD} ✅ {已完成的里程碑名称}\n  ├─ {YYYY-MM-DD} 🔄 {进行中的里程碑名称}\n  └─ {YYYY-MM-DD} ⏳ {待完成的里程碑名称}\n```\n\n**进度条渲染规则**：\n- 总长度固定 20 个字符\n- █ 表示已完成部分，░ 表示未完成部分\n- 0% 进度：20 个 ░，100% 进度：20 个 █\n- 50% 进度：10 个 █ + 10 个 ░\n\n**第三步：资源冲突检测**\n- 扫描所有里程碑的日期，如果同一天有 ≥3 个项目有里程碑，显示 ⚠️ 资源冲突预警\n- 统计方式：把所有里程碑的日期去重计数，超过阈值即触发\n- ⚙️ 阈值说明：默认值 3，对个人 agent 可能敏感，后续支持通过配置调整\n\n**第四步：延期预警计算**\n- 🔴 已延期：当前日期 > estimated_end，且进度 < 100%\n- 🟡 延期风险：当前日期距 estimated_end < 3 天，且进度 < 70%\n\n**第五步：输出到项目目录**\n- 自动创建或更新每个项目的 `projects/{name}/GANTT.md`\n- 同时在 `projects/index.md` 顶部生成全局汇总甘特图\n\n---\n\n### 11. ⚠️ 项目风险自动识别（v2.5 新增）\n\n### 触发方式\n- **显式命令**：\"风险扫描\"、\"看看有什么风险\"、\"检查项目状态\"\n\n### 风险规则引擎（严格按此逻辑执行）\n\n| 风险项 | 触发条件 | 等级 | 所需字段 |\n| --- | --- | --- | --- |\n| **静默风险** | 最后更新日期距今 >14 天 | 🔴 高 | last_updated |\n| **无里程碑风险** | 项目启动 >7 天，但无任何里程碑记录 | 🔴 高 | start_date, milestones |\n| **单点依赖风险** | 有 >3 个项目声明依赖同一个 skill 或外部项目 | 🟡 中 | dependencies |\n| **估时不准风险** | 连续 2 个已完成项目的估时偏差 >50% | 🟡 中 | estimated_hours, actual_hours |\n| **范围蔓延风险** | 里程碑总数比最初增加 >50% 后又新增 | 🟡 中 | milestones |\n| **依赖循环风险** | A 依赖 B 且 B 依赖 A（DAG 环路检测） | 🔴 高 | dependencies |\n| **延期风险** | 当前距 estimated_end <3 天，且进度 <70% | 🟡 中 | estimated_end, milestones |\n| **已延期** | 当前日期 > estimated_end 且进度 <100% | 🔴 高 | estimated_end, milestones |\n\n### 特殊规则说明\n- **估时不准风险**：需要从 projects/ 目录下所有已完成项目（actual_end 非 null）中读取 estimated_hours 和 actual_hours 字段计算偏差。项目完成时**必须**回填 actual_hours，否则此规则无法触发。\n\n### 扫描算法（自然语言描述，按此逻辑执行）\n\n**第一步：读取所有项目目录**\n遍历 `projects/` 下每个项目，读取 STATUS.md，提取以下字段：timeline、dependencies、last_updated、estimated_hours、actual_hours。\n\n**第二步：逐个项目检查风险**\n按上述8项规则逐一检查，判断每个项目的风险项。\n\n**第三步：按风险等级分组输出**\n输出格式如下：\n```\n⚠️  项目风险扫描报告 | {YYYY-MM-DD}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n🔴 高风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  静默风险 - 最后更新 {天数} 天前\n  建议: ping 一下确认项目状态，或归档\n\n...\n\n🟡 中风险 ({总数} 项)\n──────────────────────────────────────────────────\n• [{项目名}]  单点依赖 - 依赖 {skill} 的项目共 {n} 个\n  建议: 评估是否需要技术储备方案\n\n🟢 健康 ({总数} 项)\n──────────────────────────────────────────────────\n• 按时更新 + 有里程碑 + 无单点依赖 + 无延期\n```\n\n**第四步：写入风险日志**\n- 所有识别出的风险写入对应项目 STATUS.md 的 `⚠️ Risk Log` 章节\n- 高风险项目同时在 `index.md` 标记 🔴 前缀\n\n### 风险 Mitigation 建议\n- **静默风险**：归档，或设一个唤醒日期\n- **无里程碑风险**：花 5 分钟拆 2-3 个阶段性节点\n- **单点依赖风险**：准备替代方案，或做技术储备\n- **估时不准风险**：下一个项目乘 1.5 倍安全系数\n\n---\n\n## 与日常记忆的关系\n\n| 信息类型 | 存放位置 | 示例 / 说明 |\n|---------|---------|------------|\n| 用户偏好 | `MEMORY.md` | \"不喜欢废话，只要结论\" |\n| 跨项目经验 | `MEMORY.md` | \"上次用 X 方案踩了 Y 坑\" |\n| 每日工作流水 | `memory/YYYY-MM-DD.md` | \"今天推进了 CMRA 认证模块，详情见 STATUS.md\" |\n| 项目进度 | `projects/{name}/STATUS.md` | \"CMRA：认证模块完成，开始做权限\" |\n| 甘特图数据 | `projects/{name}/GANTT.md` | STATUS.md Timeline YAML 的渲染输出 |\n| 项目对话日志 | `memory/project_log_{name}.md` | 关键决策和踩坑记录 |\n| 工时追踪 | `projects/{name}/STATUS.md` | 风险引擎「估时不准」规则依赖此数据 |\n| 技术细节 | `projects/{name}/status/` | 测试日志、设计草稿 |\n| 检查点 | `memory/pm-checkpoint.json` | 状态同步的位置标记 |\n\n**原则**：\n- 项目进度从 STATUS.md 读，经验教训沉淀到 MEMORY.md，两者不交叉。\n- `memory/YYYY-MM-DD.md` 中的项目记录**只写一句话摘要 + 引用 STATUS.md**，不重复细节。\n\n---\n\n## Git 关联（可选）\n\n如果 `git rev-parse --is-inside-work-tree` 在项目目录下执行成功（返回 0）：\n- STATUS.md 头部记录 `Git: [最近 commit hash]`\n- 更新状态时自动执行 `git log --oneline -1` 获取最新 commit\n\n---\n\n## 严格约束\n\n1. **Memory 禁令**：绝不要用 `memory` 工具或 `MEMORY.md` 记录项目进度。项目进度只存在于 `STATUS.md`。\n2. **读取优先**：回复项目相关问题前，**必须先读取** `STATUS.md`。不要依赖上一轮对话的记忆。\n3. **极简原则**：STATUS.md 只记\"结论\"和\"下一步\"，不记过程流水账。\n4. **模板降级**：小任务用轻量模板，别搞过度工程化。\n5. **模糊匹配**：用户说\"上次那个\"、\"接着来\"时，主动推断对应项目；无法确定时展示最近项目让用户选。\n6. **写入安全**：写 STATUS.md 前先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n7. **index.md 自愈**：首次使用时如不存在自动创建；发现项目目录存在但 index 中没有时，自动补录。\n8. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后（第 4 节）。\n9. **Session 结束收尾**：检测到用户离开意图时，做状态落盘（第 6 节）。\n10. **新项目必须确认**：创建新项目前必须向用户确认（第 2 节）。\n11. **按需启用**：session 状态同步仅在用户明确要求时启用（第 8 节）。\n\n---\n\n📋 **版本历史**：详见 `CHANGELOG.md`\n\nArchive v2.5.4: 13 files, 33808 bytes\n\nFiles: CHANGELOG.md (3425b), clawhub.json (1598b), DESIGN_CN.md (10090b), DESIGN.md (9423b), LICENSE (1061b), README_CN.md (4524b), README.md (4572b), references/templates.md (3005b), SECURITY.md (2375b), SKILL.md (24401b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nFile v2.5.4:SKILL.md\n\n---\nname: project-manager\ndescription: \"项目上下文隔离与状态管理系统 v2.5。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 项目列表, 记录一下, 回到项目, 继续项目, 上次那个, 甘特图, 时间线, 进度图\"\n---\n\n# Project Manager v2.5 - 项目上下文管理系统\n\n## 要解决的核心问题\n\n**Agent 会遗忘。** 每天醒来是全新的，如果对话中没有及时记录，第二天就完全不记得做过什么。\n\n本系统的目标：**最小化信息遗漏，最大化可恢复性，不增加对话负担。**\n\n## 架构原则\n\n| 层级 | 文件 | 职责 |\n|------|------|------|\n| **即时记录** | `projects/{name}/STATUS.md` | 对话中即时写入重要决策/需求/完成节点 |\n| **按需状态同步** | `memory/pm-checkpoint.json` | session 内检查新对话，发现新话题 |\n| **智能恢复** | `HEARTBEAT.md` 第 5 项 | 全局检查，作为最后一道防线 |\n| **全局记忆** | `MEMORY.md` / `memory/*.md` | 用户偏好、跨项目经验（不含项目进度） |\n\n## 与 Auto-Coding v3 集成\n当使用 `auto-coding-v3` 进行代码开发时，该系统会在 `workspace/projects/{project_name}/status/` 下生成详细的工程状态文件。\n*   `STATUS.md` 负责 **宏观进度**（Todo, Next Step, Decision）。\n*   `status/` 目录负责 **微观工程细节**（Scratchpad, Logs）。\n\n## 核心原则\n\n1. **物理隔离**：每个项目拥有独立的 `STATUS.md`，绝不混用。\n2. **状态显式化**：没有记录在文件里的事，就是没发生。\n3. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后。\n4. **session 内状态同步**：skill 激活后自动注册定期状态同步，持续检查新对话。\n5. **分级管理**：轻重有别，杀鸡不用牛刀。\n6. **意图优先**：根据对话上下文自动判断项目操作意图。\n7. **写入安全**：写入前必须先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n\n## 目录结构规范\n\n```text\nworkspace/projects/\n├── index.md              # 📇 项目索引（自动维护，必须含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 🧠 核心记忆：进度、待办、关键决策（每次对话必读/必写）\n│   ├── docs/             # 方案、报告、调研数据\n│   ├── src/              # 代码、产出物\n│   └── status/           # auto-coding v3 微观工程文件（可选）\n└── _archive/             # 📦 已归档项目\n    └── {project-name}/\n        └── STATUS.md     # 保留历史记录\n```\n\n## 📇 项目索引：`projects/index.md`\n\n```markdown\n# 项目索引\n> 自动维护，按最后活跃时间倒序\n\n| 项目 | 目录 | 最后更新 | 状态 | 备注 |\n|------|------|---------|------|------|\n| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |\n```\n\n**维护规则：**\n- **首次使用**：如不存在，自动创建并写入表头\n- 新建项目时：添加到顶部\n- 恢复项目时：更新\"最后更新\"时间，移到顶部\n- 暂停项目时：更新\"状态\"为\"已暂停\"并记录暂停原因\n- 归档项目时：移到 `_archive/`，index.md 标记为\"已归档\"\n- **索引自愈**：发现项目目录存在但 index 中没有时，自动补录\n- **必须包含一句话概述**，格式为「动词 + 对象 + 目的」\n\n---\n\n## 分级 STATUS.md 模板\n\n> ⚠️ 以下为简化示意，实际使用时应先从 `skills/project-manager/templates/` 目录读取对应完整模板文件。\n\n### A) 完整模板（>3天项目 / 多阶段任务 / 跨团队协作）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项 (Todo)\n- [x] 已完成 1\n- [ ] 待办 2 (优先级高)\n- [ ] 待办 3\n\n## 🔑 关键上下文/决策\n- 决策 1 (为什么这么做)\n- 约束 1 (用户明确要求的事项)\n- 链接 (相关 URL/文件路径)\n\n## 🛑 暂停原因/遗留问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n```\n\n### B) 轻量模板（<3天的单任务 / 调研/分析类临时任务）\n\n```markdown\n# 项目名称：[Name]\n> 最后更新：[Date] | PM: v2.5\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因]\n\n## 📋 下一步\n- [ ] 接下来要做什么\n```\n\n### 模板来源与选择规则\n\n**模板文件位置**：`skills/project-manager/templates/` 目录下的 STATUS-A.md / STATUS-B.md（不是内联伪代码）。\n\n**选择规则**：\n| 场景 | 模板 |\n|------|------|\n| 3天以上的多阶段项目 | A 完整模板 |\n| 单任务（如\"帮我把这个接口重构一下\"） | B 轻量模板 |\n| 调研/分析类临时任务 | B 轻量模板 |\n| 需要多人协作或长期维护 | A 完整模板 |\n| 不确定 | 先用 B，后续发现需要再升级到 A |\n\n---\n\n## 操作工作流 (Workflow)\n\n### 1. 意图识别（自动激活）\n\n**穷举触发场景：**\n\n#### 显式命令类（直接触发）\n- **新建**：新建项目、建个项目、帮我建一个、创建一个项目、开个新项目、搞个项目、我们来做XX、开始做XX\n- **恢复**：回到XX、继续XX、接着来、恢复到、回到项目、继续做\n- **保存**：保存状态、先停一下、暂停、我先走了、去做别的、歇会\n- **查看**：有哪些项目、项目列表、看看进度、看看XX进度、项目状态、目前在做啥\n- **切换**：切换到、不管这个了先搞YY、换个项目、先放一下\n\n#### 隐含指代类（根据上下文推断）\n- **上次类**：上次那个、上次说的、之前那个、之前聊的、上次说的方案、上次的方案、我们之前讨论的\n- **继续类**：接着来、继续吧、接着上次说、然后呢、下一步呢、继续做、那个做完了吗、那个项目怎么样了\n- **关联类**：跟之前说的一样、按我们之前讨论的、还是之前的方案、跟上次一样\n\n#### 重要性标记类（应即时记录到 STATUS.md）\n- 这个很重要、记住这个、别忘了、记一下、这个值得记录、这个方案要记下来、把刚才说的记到项目里、刚才聊的东西挺重要的\n\n#### 话题切换类（应保存当前状态）\n- 换个话题、先聊点别的、先不说这个了、我们今天先这样、明天继续、下周再说、改天再聊\n\n#### 完成信号类（应更新状态）\n- 搞定了、做完了、这个问题解决了、这个方案定了、就按这个来、确认了\n\n**识别优先级**：\n1. 明确提到项目名 → 直接匹配 index.md\n2. 模糊指代 → 根据 index.md 中最近活跃的项目推断\n3. 无法确定 → 展示最近 2-3 个活跃项目让用户选择，不要盲目猜测\n\n### 2. 初始化新项目 (Start New)\n\n**触发条件**：\n1. **显式触发**：用户明确说\"新建项目\"/\"帮我建一个\"/\"一个话题\"/\"记录一下\"\n2. **自动检测触发（P1 新增）**：\n   - 连续 3 轮对话收敛到同一主题\n   - 内容涉及具体问题/需求/决策讨论（非闲聊）\n   - 检查 index.md 无相关项目\n   - 主动询问用户：\"这个话题我们聊了 3 轮了，要不要建个项目记录一下？\"\n\n**门槛判断（避免过度工程）**：\n- **建项目**：超过几句实质讨论、有具体问题/需求/决策、可能后续会继续推进（如\"调研某系统\"、\"帮我想个方案\"、\"评估某技术\"）\n- **不建项目**：随口一问、一句话话题、单纯信息查询 → 写入当日记忆即可\n\n**动作**：\n1. **先扫描 `index.md`** — 检查是否有相关项目可以合并或关联\n2. 有关联 → 合并到已有项目，告知用户\"这个话题我已归入 XX 项目\"\n3. 无关联 → 继续以下步骤：\n   1. **先向用户确认**：\"这是个新话题，我建个项目记录一下？概述是「{一句话概述}」\"\n   2. 用户同意后再创建\n   3. 目录名用 kebab-case：`cmra-geo`\n   4. 创建目录 `workspace/projects/{name}/`\n   5. **先从 `skills/project-manager/templates/` 目录读取对应模板**，根据复杂度选择 A/B 模板，创建 `STATUS.md`\n   6. **确保 `index.md` 存在**：如不存在自动创建并写入表头\n   7. 一句话概述生成规则：从对话核心意图提炼，格式为「动词 + 对象 + 目的」\n   8. 更新 `projects/index.md`（添加到顶部）\n4. **注册 session 状态同步**（见第 8 节）\n\n### 3. 恢复旧项目 (Resume)\n\n**动作**：\n1. **模糊匹配**：用户说的项目名可能不精确，先在 index.md 中查找\n2. **强制读取**：`read(workspace/projects/{name}/STATUS.md)`\n3. **摘要同步**：\"📖 已恢复 `{name}` 上下文。当前：[简述进度]。待办：[列出]。继续哪一步？\"\n4. **更新 index.md**：将该项目移到最后活跃时间顶部\n5. **如果 STATUS.md 不存在或为空** → 检查 `memory/` 目录下是否有相关日期的记忆文件，尝试恢复上下文；无法恢复时如实告知用户\n6. **注册 session 状态同步**（见第 8 节）\n\n### 4. 🔄 对话中即时记录\n\n**这是核心机制。** 不是等到用户说\"保存状态\"才记录，而是在对话中**即时写入**。\n\n**触发时机（满足任一即写入）**：\n- 用户提出了新的需求或约束\n- 做出了技术/方案决策\n- 完成了一个子任务\n- 用户明确要求记住某事\n- 话题发生实质性切换（从项目 A 切换到项目 B）\n\n**写入策略（轻量，不拖慢对话）**：\n- 只更新 STATUS.md 的\"当前状态\"和\"待办\"模块\n- 用 1-2 句话记录结论，不写过程流水账\n- 如果当前对话没有关联的项目 → 触发\"新项目创建\"流程（第 2 节）\n\n**不写入的情况**：\n- 只是闲聊/寒暄\n- 正在讨论中还没确定方案\n- 同一个任务的中间尝试（最终用的是最初方案）\n\n### 5. 暂停/切换 (Pause/Switch)\n\n**输入**：`先停一下` / `我去忙别的` / `切换到 XX`\n\n**动作**：\n1. 总结当前对话的结论\n2. 更新当前项目的 `STATUS.md`\n3. 更新 `index.md`：状态改为\"已暂停\"，记录暂停原因\n4. 如果是切换，恢复目标项目\n5. **回复用户**：\"✅ 状态已保存。下次说'回到 [Name]'即可无缝接续。\"\n\n### 6. Session 结束收尾\n\n**当检测到以下信号时**（用户说\"我先走了\"、\"明天继续\"、长时间无新消息、或状态恢复检测到上次对话已超过 2 小时）：\n\n1. 回顾最近一轮对话的内容\n2. 提取未完成的任务和关键决策\n3. 更新当前项目的 STATUS.md\n4. 写入当日记忆 `memory/YYYY-MM-DD.md`（一句话摘要 + 引用 STATUS.md）\n5. 如果涉及新话题但未建项目 → 记录到 HEARTBEAT 待处理队列\n\n### 7. 项目清理与归档 (Cleanup & Archive)\n\n**状态恢复期间定期检查**：\n- 超过 30 天未活跃 → 标记为\"可能归档\"，询问用户\n- 已完成 → 状态改为\"已完成\"\n- 已废弃 → 状态改为\"已废弃\"\n\n**归档操作**：\n1. 移动到 `projects/_archive/{name}/`\n2. 保留 STATUS.md 作为历史记录\n3. index.md 标记为\"已归档\"并移到底部\n\n---\n\n### 8. 🔄 Session 内状态同步\n\n### 这是什么？\n\n当 project-manager skill 被激活（用户触发新建/恢复/保存等项目操作）时，**在当前 session 里注册状态同步任务**。之后每隔一段时间检查新对话，发现新话题就自动建项目或归档到已有项目。\n\n### 为什么需要？\n\n用户不会每次都主动说\"记一下\"。状态同步解决了\"你不说就不记\"的问题——一次激活，持续生效。\n\n### 如何工作？\n\n#### 注册流程\nskill 被激活时，执行以下操作：\n\n1. 创建/更新 checkpoint 文件 `memory/pm-checkpoint.json`：\n```json\n{\n  \"active\": true,\n  \"sessionKey\": \"当前session的key或label\",\n  \"lastCheckedMsgId\": \"当前最后一条消息的ID\",\n  \"lastCheckTime\": \"2026-04-25T11:09:00+08:00\",\n  \"intervalMinutes\": 60,\n  \"activeProject\": \"当前关联的项目名（可选）\",\n  \"expiresAt\": \"2026-04-26T00:00:00+08:00\"\n}\n```\n\n2. 创建一个 cron 任务，每 60 分钟执行一次：\n   - 读取 `pm-checkpoint.json` 获取上次检查位置\n   - 读取 checkpoint 之后新增的对话内容\n   - 分析新内容：是否有新话题、新决策、新需求？\n   - 对比 index.md：有关联 → 更新 STATUS.md；无关联 → 标记待确认\n   - 更新 checkpoint 的 `lastCheckedMsgId` 和 `lastCheckTime`\n\n#### 检查内容分析规则\n每次只读取 checkpoint 之后的新增对话，分析以下信号：\n\n| 信号类型 | 示例 | 动作 |\n|---------|------|------|\n| 新需求 | \"我们需要增加XX功能\" | 更新 STATUS.md 待办 |\n| 新决策 | \"用 Redis 不用 Memcached\" | 更新 STATUS.md 决策 |\n| 完成节点 | \"这个模块搞定了\" | 更新 STATUS.md 进度 |\n| 新话题 | 突然讨论完全不同的话题（如从技术跳到市场调研） | 扫描 index.md 判断是否建项目 |\n| 暂停信号 | \"先停一下\"、\"明天继续\" | 触发 Session 结束收尾（第 6 节） |\n\n#### 门槛判断\n- **实质内容**（有具体问题/需求/决策）→ 记录到 STATUS.md 或创建新项目\n- **闲聊/寒暄** → 跳过\n- **一句话话题** → 跳过\n\n#### 过期与清理\n- checkpoint 文件设置过期时间（默认 24 小时）\n- 过期后自动停止状态同步\n- 用户说\"不用检查了\"时立即停止\n- session 断开后下次激活时自动重新注册\n\n#### Token 消耗控制\n- 每次只读新增对话，不回顾全部历史\n- checkpoint 用 message ID 定位，精确到单条消息\n- 预计每次检查消耗 500-2000 token（60 分钟约 10-30 条新消息）\n\n---\n\n### 9. 📝 项目对话日志（v2.5 新增）\n\n### 为什么需要\n项目相关的讨论分散在历史会话中，想回顾时找不到。对话日志把项目相关的关键讨论打包成独立文件，随时可以回顾。\n\n### 触发时机\n- **项目新建时**：自动初始化日志条目\n- **每次更新 STATUS.md 时**：自动追加本次会话的关键内容\n- **项目归档时**：打包整个项目的完整对话历史\n\n### 存储结构\n写入 `memory/project_log_{project_name}.md`：\n\n```markdown\n# 📝 项目对话日志：{project_name}\n> 归档时间：{YYYY-MM-DD HH:MM}\n> 关联项目：projects/{project_name}/STATUS.md\n\n## 项目概况\n[核心目标一句话摘要]\n\n## 关键决策时间线\n| 时间 | 决策 | 上下文 |\n|------|------|--------|\n| YYYY-MM-DD | 决定采用方案A而不是B | 性能优先级高于成本 |\n\n## 踩过的坑\n[记录所有尝试过但失败的方案、原因、教训]\n\n## 历史会话快照\n> session_key: abc123 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要，不超过200字]\n\n---\n> session_key: def456 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要]\n```\n\n### 归档策略\n- **只记结论，不记流水**：超过200字的讨论压缩成摘要\n- **决策必记**：所有「就这么定了」「就用方案A」的时刻必须记录\n- **踩坑必记**：试过但失败的方案，防止重蹈覆辙\n- **自动关联**：session_key 链接到完整会话，方便回溯\n\n### 检索方式\n- 按文件名：`memory/project_log_{name}.md`\n- 按关键词搜索：记忆文件的内容可被全局搜索命中\n\n---\n\n### 10. 📅 甘特图自动生成（v2.5 新增）\n\n### 数据流关系\n**唯一数据源** = STATUS.md 中的 `## 📅 Timeline` YAML 块  \n**输出文件** = `projects/{name}/GANTT.md`  \n\n更新里程碑时：先改 STATUS.md Timeline → 再重新渲染 GANTT.md。不要直接编辑 GANTT.md，否则下次渲染会被覆盖。\n\n### 触发方式\n- **显式命令**：\"生成甘特图\"、\"看看时间线\"、\"项目进度图\"\n- **建议触发**：每次更新 STATUS.md 的 milestones 后，应该重新渲染 Gantt\n\n### 渲染算法（自然语言描述，按此逻辑执行）\n\n**第一步：读取项目时间配置**\n遍历所有项目目录，逐个读取 STATUS.md 中的 timeline 配置，提取每个项目的：\n- 开始日期 start_date\n- 预计完成日期 estimated_end\n- 所有里程碑列表（含名称、日期、状态）\n统计已完成里程碑数和总里程碑数，计算进度百分比 = 已完成 / 总数 × 100\n\n**第二步：渲染 ASCII 甘特图**\n输出格式如下：\n```\n📅 项目甘特图 | {当前年} 年 {当前月} 月\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n{项目名称}  [{进度条}] {进度百分比}%\n  ├─ {YYYY-MM-DD} ✅ {已完成的里程碑名称}\n  ├─ {YYYY-MM-DD} 🔄 {进行中的里程碑名称}\n  └─ {YYYY-MM-DD} ⏳ {待完成的里程碑名称}\n```\n\n**进度条渲染规则**：\n- 总长度固定 20 个字符\n- █ 表示已完成部分，░ 表示未完成部分\n- 0% 进度：20 个 ░，100% 进度：20 个 █\n- 50% 进度：10 个 █ + 10 个 ░\n\n**第三步：资源冲突检测**\n- 扫描所有里程碑的日期，如果同一天有 ≥3 个项目有里程碑，显示 ⚠️ 资源冲突预警\n- 统计方式：把所有里程碑的日期去重计数，超过阈值即触发\n- ⚙️ 阈值说明：默认值 3，对个人 agent 可能敏感，后续支持通过配置调整\n\n**第四步：延期预警计算**\n- 🔴 已延期：当前日期 > estimated_end，且进度 < 100%\n- 🟡 延期风险：当前日期距 estimated_end < 3 天，且进度 < 70%\n\n**第五步：输出到项目目录**\n- 自动创建或更新每个项目的 `projects/{name}/GANTT.md`\n- 同时在 `projects/index.md` 顶部生成全局汇总甘特图\n\n---\n\n### 11. ⚠️ 项目风险自动识别（v2.5 新增）\n\n### 触发方式\n- **显式命令**：\"风险扫描\"、\"看看有什么风险\"、\"检查项目状态\"\n- **定时检查**：状态恢复期间检查一次（默认每天一次）\n\n### 风险规则引擎（严格按此逻辑执行）\n\n| 风险项 | 触发条件 | 等级 | 所需字段 |\n| --- | --- | --- | --- |\n| **静默风险** | 最后更新日期距今 >14 天 | 🔴 高 | l\n\nArchive v2.5.3: 13 files, 33809 bytes\n\nFiles: CHANGELOG.md (3425b), clawhub.json (1598b), DESIGN_CN.md (10090b), DESIGN.md (9423b), LICENSE (1061b), README_CN.md (4524b), README.md (4572b), references/templates.md (3005b), SECURITY.md (2375b), SKILL.md (24401b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nArchive v2.5.2: 13 files, 33830 bytes\n\nFiles: CHANGELOG.md (3425b), clawhub.json (1622b), DESIGN_CN.md (10090b), DESIGN.md (9423b), LICENSE (1061b), README_CN.md (4524b), README.md (4572b), references/templates.md (3005b), SECURITY.md (2375b), SKILL.md (24401b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nArchive v2.5.1: 13 files, 33787 bytes\n\nFiles: CHANGELOG.md (3425b), clawhub.json (1582b), DESIGN_CN.md (10090b), DESIGN.md (9423b), LICENSE (1061b), README_CN.md (4524b), README.md (4572b), references/templates.md (3005b), SECURITY.md (2375b), SKILL.md (24339b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nArchive v2.5.0: 12 files, 32056 bytes\n\nFiles: CHANGELOG.md (3425b), clawhub.json (1189b), DESIGN_CN.md (10090b), DESIGN.md (9423b), LICENSE (1061b), README_CN.md (4524b), README.md (4572b), references/templates.md (3005b), SKILL.md (24325b), templates/STATUS-A.md (1974b), templates/STATUS-B.md (524b), _meta.json (140b)\n\nArchive v2.4.1: 10 files, 21255 bytes\n\nFiles: DESIGN_CN.md (6471b), DESIGN.md (7016b), PUBLISH_NOTES.md (763b), README_CN.md (4196b), README.md (4607b), references/templates.md (1362b), SKILL.md (15957b), templates/STATUS-A.md (578b), templates/STATUS-B.md (228b), _meta.json (140b)","readmeExcerpt":"Skill: Project Manager Owner: krislu1221 Summary: 项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图 Tags: latest:2.7.2 Version history: v2.7.2 | 2026-05-26T08:45:35.991Z | auto Project Manager v2.7.2 is a documentation update: - Condensed and clarified the SKILL.md, focusing on core problem/solution and goal sections. - Removed duplicate biling","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"workspace/projects/\n├── index.md              # 📇 项目索引（自动维护，必须含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 🧠 核心记忆：进度、待办、关键决策（每次对话必读/必写）\n│   ├── docs/             # 方案、报告、调研数据\n│   ├── src/              # 代码、产出物\n│   └── status/           # auto-coding v3 微观工程文件（可选）\n└── _archive/             # 📦 已归档项目\n    └── {project-name}/\n        └── STATUS.md     # 保留历史记录"},{"language":"markdown","snippet":"# 项目索引\n> 自动维护，按最后活跃时间倒序\n\n| 项目 | 目录 | 最后更新 | 状态 | 备注 |\n|------|------|---------|------|------|\n| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |"},{"language":"markdown","snippet":"# 项目名称：[Name]\n> 最后更新：[Date] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项 (Todo)\n- [x] 已完成 1\n- [ ] 待办 2 (优先级高)\n- [ ] 待办 3\n\n## 🔑 关键上下文/决策\n- 决策 1 (为什么这么做)\n- 约束 1 (用户明确要求的事项)\n- 链接 (相关 URL/文件路径)\n\n## 🛑 暂停原因/遗留问题\n[如果项目暂停，记录卡点或下次需要确认的问题]"},{"language":"markdown","snippet":"# 项目名称：[Name]\n> 最后更新：[Date] | PM: v2.5\n\n## 📍 当前状态\n[一句话描述当前进度]\n\n## 🔑 决策（可选）\n[如果做了重要选择，记录原因]\n\n## 📋 下一步\n- [ ] 接下来要做什么"},{"language":"json","snippet":"{\n  \"active\": true,\n  \"sessionKey\": \"当前session的key或label\",\n  \"lastCheckedMsgId\": \"当前最后一条消息的ID\",\n  \"lastCheckTime\": \"2026-04-25T11:09:00+08:00\",\n  \"intervalMinutes\": 60,\n  \"activeProject\": \"当前关联的项目名（可选）\",\n  \"expiresAt\": \"2026-04-26T00:00:00+08:00\"\n}"},{"language":"markdown","snippet":"# 📝 项目对话日志：{project_name}\n> 归档时间：{YYYY-MM-DD HH:MM}\n> 关联项目：projects/{project_name}/STATUS.md\n\n## 项目概况\n[核心目标一句话摘要]\n\n## 关键决策时间线\n| 时间 | 决策 | 上下文 |\n|------|------|--------|\n| YYYY-MM-DD | 决定采用方案A而不是B | 性能优先级高于成本 |\n\n## 踩过的坑\n[记录所有尝试过但失败的方案、原因、教训]\n\n## 历史会话快照\n> session_key: abc123 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要，不超过200字]\n\n---\n> session_key: def456 | 时间: YYYY-MM-DD\n[本次会话的关键讨论摘要]"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: project-manager\ndescription: \"项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图\"\n---\n\n# Project Manager v2.7.0 - 项目上下文管理系统\n\n## 要解决的核心问题 / Problems Solved\n\n**Agent 会遗忘。** 每天醒来是全新的，如果对话中没有及时记录，第二天就完全不记得做过什么。\n\n**Agents forget.** Every day they wake up fresh. If conversations aren't recorded in time, everything is lost by tomorrow.\n\n**本系统的目标：**\n\n- 最小化信息遗漏，最大化可恢复性，不增加对话负担\n- 以项目经理角度管理对话，而非日记——每个项目独立记录，独立保存所有信息和细节\n- 随时回到任意项目，不携带其他项目的污染信息和噪音\n- 结构化锚点：任何信息按项目精确召回，无需翻遍历史\n- 大幅降低 Memory 负载，节省 Token 消耗（STATUS.md 远小于完整对话历史）\n- 推荐完整对话保存在 MemPalace 中\n\n**Goals:**\n\n- Minimize information loss, maximize recoverability, without adding conversation burden\n- Manage conversations like a project manager — each project independently recorded with all details preserved\n- Switch between projects freely without carrying noise or pollution from other projects\n- Structured anchors: retrieve any information by project, no need to search through entire history\n- Significantly reduce Memory footprint — STATUS.md is far smaller than full conversation history\n- Full conversations recommended in MemPalace\n\n## 架构原则\n\n| 层级 | 文件 | 职责 |\n|------|------|------|\n| **即时记录** | `projects/{name}/STATUS.md` | 对话中即时写入重要决策/需求/完成节点 |\n| **按需状态同步** | `memory/pm-checkpoint.json` | session 内检查新对话，发现新话题 |\n| **智能恢复** | `HEARTBEAT.md` 第 5 项 | 全局检查，作为最后一道防线 |\n| **全局记忆** | `MEMORY.md` / `memory/*.md` | 用户偏好、跨项目经验（不含项目进度） |\n\n## 与 Auto-Coding v3 集成\n当使用 `auto-coding-v3` 进行代码开发时，该系统会在 `workspace/projects/{project_name}/status/` 下生成详细的工程状态文件。\n*   `STATUS.md` 负责 **宏观进度**（Todo, Next Step, Decision）。\n*   `status/` 目录负责 **微观工程细节**（Scratchpad, Logs）。\n\n## 核心原则\n\n1. **物理隔离**：每个项目拥有独立的 `STATUS.md`，绝不混用。\n2. **状态显式化**：没有记录在文件里的事，就是没发生。\n3. **对话中即时记录**：重要决策/需求/完成节点即时写入，不堆积到最后。⚠️ 需用户确认后写入。\n4. **Session 状态同步（opt-in）**：用户显式触发后才注册定期状态同步，不自动激活。\n5. **分级管理**：轻重有别，杀鸡不用牛刀。\n6. **意图优先（显式触发）**：根据对话上下文推断意图，但所有操作需用户确认后执行。\n7. **写入安全**：写入前必须先 read 最新内容，合并后再 write。⚠️ TOCTOU 限制：读-写之间内容可能被其他 session 修改，这不是真正的写入安全，只是降低冲突概率。\n\n## 目录结构规范\n\n```text\nworkspace/projects/\n├── index.md              # 📇 项目索引（自动维护，必须含一句话概述）\n├── {project-name}/\n│   ├── STATUS.md         # 🧠 核心记忆：进度、待办、关键决策（每次对话必读/必写）\n│   ├── docs/             # 方案、报告、调研数据\n│   ├── src/              # 代码、产出物\n│   └── status/           # auto-coding v3 微观工程文件（可选）\n└── _archive/             # 📦 已归档项目\n    └── {project-name}/\n        └── STATUS.md     # 保留历史记录\n```\n\n## 📇 项目索引：`projects/index.md`\n\n```markdown\n# 项目索引\n> 自动维护，按最后活跃时间倒序\n\n| 项目 | 目录 | 最后更新 | 状态 | 备注 |\n|------|------|---------|------|------|\n| english-reader | english-reader/ | 2026-04-20 | 活跃中 | 英语学习工具 |\n```\n\n**维护规则：**\n- **首次使用**：如不存在，自动创建并写入表头\n- 新建项目时：添加到顶部\n- 恢复项目时：更新\"最后更新\"时间，移到顶部\n- 暂停项目时：更新\"状态\"为\"已暂停\"并记录暂停原因\n- 归档项目时：移到 `_archive/`，index.md 标记为\"已归档\"\n- **索引自愈**：发现项目目录存在但 index 中没有时，自动补录\n- **必须包含一句话概述**，格式为「动词 + 对象 + 目的」\n\n---\n\n## 分级 STATUS.md 模板\n\n> ⚠️ 以下为简化示意，实际使用时应先从 `skills/project-manager/templates/` 目录读取对应完整模板文件。\n\n### A) 完整模板（>3天项目 / 多阶段任务 / 跨团队协作）\n\n``"},{"path":"README.md","content":"# 📂 Agent Project Manager Skill\n\n**Cross-Platform Project Context Isolation & State Management for AI Agents**\n\n> 🌐 [English](README.md) | [中文](README_CN.md)\n\n> Battle-tested across **nanobot**, **OpenClaw**, and **Hermes Agent** — solving the fundamental tension between AI agents' stateless nature and projects' need for continuity.\n\n## 简介 (Introduction)\n\nAI Agent 是无状态的，但项目需要连续性。本 Skill 通过为每个项目创建独立的 `STATUS.md` 文件，实现跨会话的无缝上下文恢复，同时不污染全局记忆。\n\n- **物理隔离**：每个项目独立文件，不共享状态\n- **意图识别**：无固定关键词，从上下文推断操作\n- **分级模板**：完整模板 (A) 用于复杂项目，轻量模板 (B) 用于单任务\n- **写入安全**：读-合并-写模式，减少意外覆盖\n- **Session 内状态同步**：一次激活，持续智能扫描新对话，防止\"聊了就忘\"\n- **增量 checkpoint**：只读新增对话，控制 token 消耗\n\n👉 详细中文设计文档：[DESIGN_CN.md](DESIGN_CN.md)\n\n## Problem\n\nAI agents forget — every day they wake up fresh. If conversations aren't recorded in time, everything is lost by tomorrow.\n\n- **Cross-day confusion**: Cannot accurately restore discussion details and context\n- **Multi-project contamination**: Decisions from Project A leak into Project B, causing contradictory advice\n- **Scattered conclusions**: Key decisions buried in dozens of messages, unrecoverable even with full history search\n\n**System goals**:\n\n- **Minimize information loss, maximize recoverability** without adding conversation burden\n- **Manage conversations like a project manager** — each project independently recorded with all details preserved\n- **Switch between projects freely** without carrying noise or pollution from other projects\n- **Structured anchors**: Retrieve any information by project, no need to search through entire history\n- **Significantly reduce Memory footprint** — STATUS.md is far smaller than full conversation history\n- **Full conversations recommended in MemPalace**\n\n## Solution\n\nA per-project `STATUS.md` system — the agent's \"external hard drive\":\n\n```\nworkspace/projects/\n├── index.md              # Auto-maintained project registry (with one-line summaries)\n├── {project-name}/\n│   ├── STATUS.md         # Progress, todos, key decisions\n│   ├── docs/             # Proposals, reports\n│   └── src/              # Code, deliverables\n└── _archive/             # Completed/abandoned projects\n```\n\n## Key Features\n\n| Feature | Description |\n|---------|-------------|\n| **Physical Isolation** | Each project has its own `STATUS.md` — no shared state |\n| **Intent Recognition** | No rigid keywords — infers new/resume/pause/switch from context |\n| **Tiered Templates** | Full (A) for multi-phase projects, Lightweight (B) for single tasks |\n| **Write-Safe** | Read-merge-write pattern reduces accidental overwrites within a session |\n| **Index Self-Healing** | Auto-creates `index.md`, auto-adds missing projects |\n| **Memory Boundary** | Project progress in `STATUS.md`, user preferences in global memory — never mixed |\n| **Session Periodic Check** 🆕 | Once activated, auto-scans new conversations for new topics (every 60 min) |\n| **Incremental Checkpoint** 🆕 | Only reads new messages since last check — minimal token overhead |\n| **Smart Recover"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71pbmkb9h8sppk4yg6dn7zad808rvt\",\n  \"slug\": \"agent-project-manager\",\n  \"version\": \"2.7.2\",\n  \"publishedAt\": 1779785135991\n}"},{"path":"skill-card.md","content":"## Description:\n\nProject Manager helps agents preserve per-project context by creating and maintaining local status files, project indexes, optional checkpoints, Gantt summaries, risk reports, and conversation-summary logs.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[krislu1221](https://clawhub.ai/user/krislu1221)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and agent users use this skill to keep AI-assisted project work recoverable across sessions by storing progress, decisions, todos, timelines, and risks in local project files. It is intended for project context management rather than application runtime execution.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Optional status synchronization and daily checks can create ongoing background monitoring and retention of conversation-derived summaries.\n\nMitigation: Enable synchronization only when explicitly needed, verify its expiration settings, and remove any scheduled tasks when the workflow is no longer desired.\n\nRisk: Project status, memory, and conversation-log files may contain sensitive user or project details.\n\nMitigation: Avoid sharing secrets in conversations that may be summarized, and review local project and memory files before publishing or committing them.\n\nRisk: Read-merge-write updates reduce accidental overwrite risk but do not prevent concurrent edits between read and write.\n\nMitigation: Review proposed file changes before accepting them and use version control or backups for important project records.\n\nRisk: Optional full conversation archival can preserve more history than users expect.\n\nMitigation: Use MemPalace or conversation-log archival only when the workspace retention policy permits that level of history.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/krislu1221/skills/agent-project-manager)\n- [README](artifact/README.md)\n- [Full Status Template](artifact/templates/STATUS-A.md)\n- [Lightweight Status Template](artifact/templates/STATUS-B.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown files, JSON checkpoint configuration, and concise text status summaries.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May update local project and memory files after user confirmation; optional synchronization and logging can retain conversation-derived summaries.]\n\n## Skill Version(s):\n\n2.7.2 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"templates/STATUS-A.md","content":"# 项目：[名称]\n> 最后更新：[日期] | Git: [commit hash, 如果有] | PM: v2.5\n\n## 🎯 核心目标\n[一句话描述项目终极目标]\n\n## ⏱️ 工时追踪\n```yaml\nestimated_hours: [预计工时，如 8]\nactual_hours: null  # 🔴 项目完成时必须回填，供风险引擎「估时不准」规则使用\n```\n\n## 📅 时间线\n```yaml\nstart_date: [YYYY-MM-DD]\nestimated_end: [YYYY-MM-DD]\nactual_end: null  # 项目完成时自动填写\nmilestones:\n  - name: [里程碑 1 名称]\n    date: [YYYY-MM-DD]\n    status: pending  # pending / in-progress / completed\n  - name: [里程碑 2 名称]\n    date: [YYYY-MM-DD]\n    status: pending\n```\n\n## 📍 当前状态\n[当前处于什么阶段，刚完成了什么]\n\n## 📋 待办事项\n- [x] 已完成 1\n- [ ] 待办 2（优先级高）\n- [ ] 待办 3\n\n## 🔗 关系管理\n```yaml\n# 【强依赖类型】有强制前后置关系\n# - type: requires   # A必须依赖B才能开始\n# - type: blocks     # A阻塞了B的进度\n# - type: optional   # 可选增强，没有也能用\n\n# 【弱关联类型】仅表示关联关系，无强制约束\n# - type: related    # 两者相关联，共同推进\n# - type: uses       # A使用了B的输出/能力\n# - type: references # A参考了B的设计/文档\n\n# - project: [关联项目名称]\n#   type: requires\n#   description: \"描述关系\"\n#   status: satisfied  # satisfied / blocked / in-progress\n```\n\n## 🔑 关键上下文 / 决策\n- 决策 1（为什么这么做）\n- 约束 1（用户明确要求的事项）\n- 链接（相关 URL / 文件路径）\n\n## 🛑 暂停原因 / 待确认问题\n[如果项目暂停，记录卡点或下次需要确认的问题]\n\n## ⚠️ 风险日志\n```yaml\n# Auto-scanned by Project Manager v2.5\n# - name: [风险名称]\n#   level: high  # high / medium / low\n#   trigger: 14 days no update  # 检测触发条件\n#   status: active  # active / mitigated / resolved\n#   description: \"详细描述\"\n#   suggestion: \"建议动作\"\n```"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图 Skill: Project Manager Owner: krislu1221 Summary: 项目上下文隔离与状态管理系统 v2.7.0。核心解决：对话中遗忘、跨天上下文丢失、新话题漏记录。新增：甘特图自动生成、项目风险自动识别、依赖关系管理。触发词: /project, 新建项目, 回到项目, 记录项目, 继续项目, 项目列表, 甘特图 Tags: latest:2.7.2 Version history: v2.7.2 | 2026-05-26T08:45:35.991Z | auto Project Manager v2.7.2 is a documentation update: - Condensed and clarified the SKILL.md, focusing on core problem/solution and goal sections. - Removed duplicate biling","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1380,"uniquenessScore":52,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T01:41:54.477Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T01:41:54.477Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:55:05.426Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}