{"id":"b451ac70-a9f7-4e2d-8a24-1d1558748794","shortId":"xDxTWx","kind":"skill","title":"forge-fupan","tagline":"协作复盘与知识沉淀。在完成一段工作后，先启动本地 Fupan Workbench 让用户确认想学的知识点和深度，再按选择调研并生成结构化复盘文档，重点沉淀表达优化、行为诊断、领域知识、AI 协作改进和可执行 TLDR；每个展开的知识模块默认强尝试生成一张 Image 2 学习图，失败时保存 prompt pack 并明确标注待生成。触发方式：用户说\"总结知识\"、\"学习总结\"、\"复盘\"、\"可视化复盘\"、\"/forge-fupan\"时使用。","description":"> **文档落地路径**：遵循 forge-doc-policy 规范。完整白名单 + frontmatter schema 见\n> `~/claudecode_workspace/工具/forge-cookbook/skills/forge-doc-policy/doc-paths.md`。\n\n# 复盘 — 协作知识沉淀与深度诊断\n\n## 使用建议\n\n> **在会话收尾时复盘，不要在中途插入。** 中途复盘的问题：工作未收敛导致判断被推翻、全量重新生成浪费 token、知识调研重跑成本高。最佳节奏：一个会话的工作做完 → 复盘一次 → 结束。同会话迭代机制仅作为兜底方案保留。\n>\n> **优先在上下文压缩或清空之前复盘。** 这是最佳路径，因为当前模型上下文和本地 JSONL 都可用。若已经压缩，必须先检查原始 JSONL 是否仍包含 `user_message/agent_message` 或 Claude `message.role`；有原始日志则可正常复盘，无原始日志则只能做轻量复盘。\n>\n> **长会话 token 管理**：单次功能完成后先复盘，再压缩或新开会话；隔夜/隔天继续时新开会话；超过 200 条消息无论如何都该压缩或新开。\n\n---\n\n## 输出位置\n\n统一保存到 `~/claudecode_workspace/记录/复盘/{项目名}/` 目录：\n- **项目名**由 AI 根据当前项目判断（如 `info2action`、`skill-system`、`视频转文本`），用户可覆盖。\n- 文件名格式：`{YYYY-MM-DD}-{HHMM}-[任务标签]-{主题关键词}.md`。\n- 示例路径：`~/claudecode_workspace/记录/复盘/info2action/2026-04-06-1430-[多数据源聚合]-RSS-HN-Reddit-GitHub信息源扩展.md`。\n\n---\n\n## 前置脚本（每次先运行）\n\n```bash\n_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)\n_BRANCH=$(git branch --show-current 2>/dev/null || echo \"unknown\")\necho \"当前分支: $_BRANCH\"\necho \"项目根目录: $_ROOT\"\n\n# === Git 卫生检查 ===\ngit fetch --quiet 2>/dev/null\n_AHEAD=$(git rev-list @{u}..HEAD --count 2>/dev/null || echo \"?\")\n_BEHIND=$(git rev-list HEAD..@{u} --count 2>/dev/null || echo \"?\")\necho \"远程同步: 领先 $_AHEAD / 落后 $_BEHIND\"\nif [ \"$_BEHIND\" != \"?\" ] && [ \"$_BEHIND\" -gt 0 ]; then\n  echo \"⚠️ 落后远程 $_BEHIND 个提交，自动 rebase...\"\n  _HAS_CHANGES=$(git status --porcelain 2>/dev/null | head -1)\n  [ -n \"$_HAS_CHANGES\" ] && git stash --quiet 2>/dev/null && _STASHED=1 || _STASHED=0\n  git pull --rebase --quiet 2>/dev/null && echo \"✅ 已同步远程\" || echo \"❌ rebase 失败，请手动处理\"\n  [ \"$_STASHED\" = \"1\" ] && git stash pop --quiet 2>/dev/null\nfi\n_DIRTY=$(git status --porcelain 2>/dev/null | head -5)\n[ -n \"$_DIRTY\" ] && echo \"⚠️ 工作区有未提交改动\"\n\n# === 项目上下文收集 ===\n_RECENT_COMMITS=$(git log --oneline -20 2>/dev/null)\n_DIFF_STAT=$(git diff --stat HEAD~10..HEAD 2>/dev/null)\n_PROJECT_DOCS=$(ls docs/*.md 2>/dev/null)\necho \"--- 最近提交 ---\"\necho \"$_RECENT_COMMITS\"\necho \"--- 变更统计 ---\"\necho \"$_DIFF_STAT\"\necho \"--- 项目文档 ---\"\necho \"$_PROJECT_DOCS\"\n\n# === 会话日志定位（Claude Code / Codex）===\n_SESSION_SOURCE=\"unknown\"\n_JSONL_FILE=\"\"\n_CLAUDE_PROJECT_DIR=\"$HOME/.claude/projects\"\n_CODEX_HOME=\"${CODEX_HOME:-$HOME/.codex}\"\n_PARSE_TOKENS=$(find ~/claudecode_workspace -path '*/forge-fupan/parse_tokens.py' -type f 2>/dev/null | head -1)\n\n_latest_jsonl() {\n  _name_pattern=\"$1\"\n  shift\n  find \"$@\" -type f -name \"$_name_pattern\" -print 2>/dev/null | while IFS= read -r _f; do\n    [ -f \"$_f\" ] || continue\n    _mtime=$(stat -f %m \"$_f\" 2>/dev/null || stat -c %Y \"$_f\" 2>/dev/null || echo 0)\n    printf \"%s\\t%s\\n\" \"$_mtime\" \"$_f\"\n  done | sort -rn | head -1 | cut -f2-\n}\n\nif [ -n \"${CODEX_THREAD_ID:-}\" ] && [ -d \"$_CODEX_HOME\" ]; then\n  _JSONL_FILE=$(_latest_jsonl \"*${CODEX_THREAD_ID}*.jsonl\" \"$_CODEX_HOME/sessions\" \"$_CODEX_HOME/archived_sessions\")\n  [ -n \"$_JSONL_FILE\" ] && _SESSION_SOURCE=\"codex\"\nfi\nif [ -z \"$_JSONL_FILE\" ] && [ -n \"${CODEX_THREAD_ID:-}\" ] && [ -d \"$_CODEX_HOME\" ]; then\n  _JSONL_FILE=$(_latest_jsonl \"*.jsonl\" \"$_CODEX_HOME/sessions\" \"$_CODEX_HOME/archived_sessions\")\n  [ -n \"$_JSONL_FILE\" ] && _SESSION_SOURCE=\"codex\"\nfi\nif [ -z \"$_JSONL_FILE\" ] && [ -d \"$_CLAUDE_PROJECT_DIR\" ]; then\n  _JSONL_FILE=$(_latest_jsonl \"*.jsonl\" \"$_CLAUDE_PROJECT_DIR\")\n  [ -n \"$_JSONL_FILE\" ] && _SESSION_SOURCE=\"claude\"\nfi\nif [ -z \"$_JSONL_FILE\" ] && [ -z \"${CODEX_THREAD_ID:-}\" ] && [ -d \"$_CODEX_HOME\" ]; then\n  _JSONL_FILE=$(_latest_jsonl \"*.jsonl\" \"$_CODEX_HOME/sessions\" \"$_CODEX_HOME/archived_sessions\")\n  [ -n \"$_JSONL_FILE\" ] && _SESSION_SOURCE=\"codex\"\nfi\n\necho \"--- 会话日志 ---\"\necho \"会话来源: $_SESSION_SOURCE\"\necho \"会话日志: ${_JSONL_FILE:-未找到}\"\n\nif [ -n \"$_JSONL_FILE\" ]; then\n  echo \"--- Token 统计 ---\"\n  if [ -n \"$_PARSE_TOKENS\" ]; then\n    python3 \"$_PARSE_TOKENS\" \"$_JSONL_FILE\" 2>/dev/null || echo \"⚠️ Token 解析失败，将使用轮次估算\"\n  else\n    echo \"⚠️ parse_tokens.py 未找到，将使用轮次估算\"\n  fi\nfi\n\nif [ -n \"$_JSONL_FILE\" ]; then\n  echo \"--- 原始会话可用性 ---\"\n  python3 - \"$_JSONL_FILE\" \"$_SESSION_SOURCE\" <<'PY' 2>/dev/null || echo \"⚠️ 原始会话检查失败，将按摘要降级判断\"\nimport json\nimport sys\n\npath = sys.argv[1]\nsource = sys.argv[2]\ncounts = {\"user\": 0, \"agent\": 0, \"tool\": 0, \"compacted\": 0}\n\nwith open(path, encoding=\"utf-8\") as f:\n    for line in f:\n        try:\n            data = json.loads(line)\n        except Exception:\n            continue\n\n        payload = data.get(\"payload\") or {}\n        top_type = data.get(\"type\")\n        payload_type = payload.get(\"type\") if isinstance(payload, dict) else None\n\n        if top_type == \"compacted\" or payload_type == \"context_compacted\":\n            counts[\"compacted\"] += 1\n\n        if source == \"codex\":\n            if top_type == \"event_msg\" and payload_type == \"user_message\":\n                counts[\"user\"] += 1\n            elif top_type == \"event_msg\" and payload_type == \"agent_message\":\n                counts[\"agent\"] += 1\n            elif top_type == \"event_msg\" and payload_type in {\"exec_command_end\", \"patch_apply_end\"}:\n                counts[\"tool\"] += 1\n        else:\n            msg = data.get(\"message\") or data.get(\"data\", {}).get(\"message\") or {}\n            role = msg.get(\"role\")\n            if role == \"user\":\n                counts[\"user\"] += 1\n            elif role == \"assistant\":\n                counts[\"agent\"] += 1\n            if data.get(\"type\") in {\"tool_result\", \"tool_use\"}:\n                counts[\"tool\"] += 1\n\nif counts[\"user\"] > 0 and counts[\"agent\"] > 0:\n    status = \"FULL_LOG_AVAILABLE\"\nelif counts[\"user\"] > 0:\n    status = \"PARTIAL_LOG_AVAILABLE\"\nelse:\n    status = \"SUMMARY_ONLY_OR_MISSING\"\n\nprint(f\"原始消息: user={counts['user']} agent={counts['agent']} tool={counts['tool']} compacted={counts['compacted']}\")\nprint(f\"复盘可用性: {status}\")\nPY\nfi\n\n# === 同会话迭代检测 ===\n_FUPAN_DIR=\"$HOME/claudecode_workspace/记录/复盘\"\nif [ -n \"$_JSONL_FILE\" ]; then\n  _SESSION_ID=$(basename \"$_JSONL_FILE\")\n  _EXISTING_FUPAN=$(grep -rl \"session: $_SESSION_ID\" \"$_FUPAN_DIR\" 2>/dev/null | head -1)\n  if [ -n \"$_EXISTING_FUPAN\" ]; then\n    echo \"⚠️ 检测到同会话已有复盘: $_EXISTING_FUPAN\"\n    echo \"将迭代更新该文档，而非新建\"\n  fi\nfi\n```\n\nToken 数据只作为内部判断材料，不在复盘正文输出“精力分布”“会话脉络”或仪表盘。\n\n会话日志来源说明：\n- Claude Code 日志通常位于 `~/.claude/projects/**/*.jsonl`，消息 usage 在 `message.usage`。\n- Codex Desktop 当前会话通常位于 `~/.codex/sessions/YYYY/MM/DD/rollout-...{CODEX_THREAD_ID}.jsonl`，归档会话可能位于 `~/.codex/archived_sessions/rollout-*.jsonl`。\n- Codex JSONL 属于本地会话记录格式，不假定其结构长期稳定；解析时必须按 `event_msg.token_count` 等可识别字段防御式读取，缺字段时降级而不是中断复盘。\n\n上下文压缩后的复盘策略：\n- **最佳**：压缩前复盘。当前模型上下文和本地 JSONL 都可用，正常执行完整复盘。\n- **可接受**：已经压缩，但前置脚本输出 `FULL_LOG_AVAILABLE` 或 `PARTIAL_LOG_AVAILABLE`。说明本地 JSONL 仍保留原始消息，可从 JSONL 恢复逐条 Prompt 分析和行为序列分析。\n- **降级**：找不到 JSONL，或前置脚本输出 `SUMMARY_ONLY_OR_MISSING`。只能做轻量复盘：不做逐条 Prompt 分析，不对行为序列做强判断；只基于当前摘要、文件 diff、工具结果和用户补充反馈提炼知识点、AI 表现风险和下次 SOP。\n\n---\n\n## 文档结构\n\n复盘文档以 frontmatter 开头，包含会话标记：\n\n```markdown\n---\nsession: {JSONL文件名}\nsession_source: {claude|codex|unknown}\niteration: {迭代次数，首次为1}\ncreated: {首次创建时间}\nupdated: {最后更新时间}\n---\n```\n\n随后写导航目录和 5 个章节，最后写 `TLDR`。复盘不是周报，不追求完整复述全会话，只保留能帮助用户改进表达、行为和知识结构的信息。\n\n### 导航目录\n\n```markdown\n## 目录\n\n- [一、工作叙事](#一工作叙事)\n- [二、表达与行为复盘](#二表达与行为复盘)\n- [三、知识拓展](#三知识拓展)\n- [四、AI 表现复盘](#四ai-表现复盘)\n- [五、速查手册](#五速查手册)\n- [TLDR](#tldr)\n```\n\n### 一、工作叙事\n\n用 2-5 个短叙事段落回顾本次会话，不要写成阶段列表、流水账或 token 分布图。\n\n必须包含：\n- 本次用户真正想完成什么。\n- 会话中出现过哪些关键转折。\n- 最终交付了什么，或卡在什么地方。\n- 哪些表达或行为问题影响了协作效率，并自然引到第二章。\n- 只可补充与表达、行为、知识或 AI 表现诊断直接相关的信息。\n\n写法要求：\n- 写成 2-5 个短段落，不使用项目符号列表、阶段表、时间线表或自由扩展小标题。\n\n### 二、表达与行为复盘\n\n本章是整篇复盘的信息入口。目标是把“用户当时怎么说、为什么会增加 AI 协作成本、下次怎么说更好、哪些行为模式要调整”讲清楚。语气像教练，不像批改作业。\n\n#### 2.1 逐条 Prompt 分析\n\n只挑有学习价值的问题 Prompt，不按严重度打标签，不使用颜色标记。\n\n每条格式：\n\n```markdown\n<a id=\"p1\"></a>\n#### #P1: \"{用户原话}\"\n\n- **表达问题**：一针见血说明这句话的问题，例如目标缺失、范围不清、验收标准缺失、技术层级混在一起、默认 AI 知道上下文、只给结论不给约束。\n- **更好的说法**：\n  - **低关键词版**：当你不知道专业术语时，可以这样说：...\n  - **进阶版**：如果你已经知道一点背景，可以这样说：...\n```\n\n硬性规则：\n- `表达问题` 必须具体、短、准，不能写“表达不够清楚”这种空话。\n- `低关键词版` 不默认用户知道术语，重点帮用户说清目标、现状、约束、验收。\n- `进阶版` 可以引入第三章知识点中的专业术语，给出更像工程任务单的表达。\n\n#### 2.2 行为诊断\n\n行为诊断不是单条 Prompt 分析，而是跨多个 Prompt 的抽象观察。只列用户真实暴露出的低效行为或认知习惯，不为了凑数。\n\n每个行为格式：\n\n```markdown\n#### B1：{行为名称}\n\n- **问题**：描述这个行为暗含的问题（比如协作问题、表达问题、理解问题）。\n- **分析**：解释用户为什么会这样说或这样推进：可能是缺知识、没遵守已有规范、急于推进、陷入局部修复循环、没有先定义验收标准，或其他真实原因。\n- **建议**：给出可执行的修复方法。用户按这个建议做，下一次 AI coding 的效率和效果应该更好。\n```\n\n硬性规则：\n- `问题` 要描述行为，不要复述某一句话。\n- `分析` 必须判断原因类型：知识缺口、规范缺失、流程惯性、注意力偏移、目标不清、验收缺失等。\n- `建议` 必须能变成下次协作动作，例如“先给目标状态 + 验收标准，再让 AI 选方案”。\n- 决策复盘不再单独成章；有价值的决策、取舍和反思并入行为诊断。\n\n### 三、知识拓展\n\n按“单个知识点”展开，不按大领域写百科。每个知识点都必须来自用户选择、表达问题或本次实践中的真实知识缺口。\n\n知识点生产前必须经过 web research，规则如下：\n\n- 每个知识点必须做 web search 来搜集信息。\n- `延伸学习` 至少给出 1 个可打开的权威来源链接。来源优先级：官方文档或主流项目文档 > 权威教程或官方视频 > 高质量社区资源。\n- 若某知识点找不到官方或主流项目来源，必须在 `延伸学习` 中说明原因，并给出次优来源。\n- 调研结果必须融入 `是什么 / 怎么用 / 延伸学习` 三段。\n\n\n\n知识点了解的深度需匹配用户的选择，具体说明：\n\n- `了解`：讲清是什么、本次为什么出现、什么场景下会用、暂时不用深入什么。\n- `表达`：补充关键词、常见说法、什么场景下会用、下次可以怎么说。\n- `复现`：补充原理拆解、最小可复现实例、检查清单和练习方向。\n\n深度递增，兼容深度浅的规则。\n\n\n\n知识点输出格式：\n\n```markdown\n### K1：{知识点名称} [来自 #P1 / B2 / 本次实践]\n\n![K1 知识图](assets/{YYYY-MM-DD}-fupan-k1-{slug}.png)\n\n#### 是什么\n\n用通俗易懂的描述解释这个知识点，讲解方式视具体知识点和用户需求而定，可自由发挥。\n你的目标是让用户理解这个知识点、了解它的关键信息、学会运用这个知识点。\n\n#### 怎么用\n\n说明它在哪些场景下有用；如果本次会话已经用到，要连接回本次实践。\n若这个知识点只是背景知识，也要说明“什么时候不用深入”。\n\n#### 延伸学习\n\n- {官方文档 / 权威教程 / 视频 / 高质量资源}：说明适合看什么部分，解决什么问题。\n```\n\n知识图规则：\n- 每个最终展开的知识模块必须执行 1 次学习图强尝试；成功时插入 PNG，放在模块标题下方、`是什么` 之前。\n- 图片只服务记忆和理解，不替代 `是什么 / 怎么用 / 延伸学习` 正文。\n- 未被用户选择或未展开的候选知识点不生成图。\n- 若图片生成失败，保留同名 `.prompt.md` 和 `.meta.json`，在图片位置写：`> 图像待生成：已保存 prompt pack 到 {路径}`。\n- 最终回复必须报告学习图状态：`已生成 N 张 / 待生成 N 张`；不得把 prompt pack 占位描述成已生成图片。\n\n\n\n### 四、AI 表现复盘\n\n不要使用固定评分维度。根据本次原始会话和工具结果，自行识别 AI 表现不好的地方，只写真实发生、对协作效率或交付质量有影响的问题。\n\n每个问题格式：\n\n```markdown\n#### A1：{问题标题}\n\n- **表现**：AI 具体哪里做得不好。\n- **原因**：这是误解、遗漏、过度执行、验证不足、上下文管理问题，还是其他问题。\n- **用户可辅助方式**：用户下次可以提供什么信息、约束或检查点，帮助 AI 更快做对。\n```\n\n硬性规则：\n- 写真实可操作的优化方案，不能写“双方沟通不够”这类模糊归因。\n- 如果 AI 表现整体合格，可以写“可进一步提升的点”，但仍然必须基于会话证据。\n\n### 五、速查手册\n\n只保留概念速查表，服务复习和下次协作，不再写避坑指南、效率词典或下次行动清单。\n\n| 概念 | 解释 | 场景 |\n|------|------|------|\n| {概念名} | 详细说明这个名词的含义、边界和容易误解的点 | 最常使用它的场景，最好能连接到本次会话 |\n\n### TLDR（必须位于文档最后）\n\n`TLDR` 是最后的记忆卡，只关注用户以后要记住和执行的东西，不做普通摘要。\n\n```markdown\n## TLDR\n\n- **需要记住的知识**：{本次最值得带走的知识点，用人话说清楚}\n- **表达优化**：下次可以说：{一条可直接复制的高质量指令}\n- **协作 SOP**：{以后遇到同类任务时的操作顺序}\n```\n\n硬性规则：\n- TLDR 必须放在全文最后。\n- TLDR 必须是分点陈述，5-10 条为宜；不得写成长段落。\n- 每条都必须能在正文找到支撑，不得凭空发明。\n- 包含 `表达优化`，格式必须出现“下次可以说：...”。\n- 包含 `协作 SOP`，帮助用户提升与AI协作的能力。\n\n---\n\n## 执行流程\n\n### Phase 0：环境准备\n\n运行前置脚本，完成：\n1. Git 卫生检查 + 项目上下文收集。\n2. Token 统计（仅供内部判断，不作为正文图表）。\n3. 原始会话可用性检查。\n4. 同会话迭代检测。\n5. 读取 MEMORY.md 和 WORKSPACE-PULSE.json。\n\n### Phase 1：对话分析（主 agent 串行）\n\n会话读取规则：\n- Claude Code：从 `message.role` / `message.content` / `message.usage` 读取用户消息、AI 消息和 token。\n- Codex Desktop：从 `event_msg.user_message`、`event_msg.agent_message`、`event_msg.exec_command_end`、`event_msg.patch_apply_end` 读取用户可见对话和工具结果；`response_item` 只在需要补充模型内部调用细节时参考。\n- 任一来源缺字段时只降级相关分析，不得中断整个复盘。\n- 若前置脚本显示 `FULL_LOG_AVAILABLE` 或 `PARTIAL_LOG_AVAILABLE`，即使当前上下文已压缩，也优先以 JSONL 原始消息为准。\n- 若前置脚本显示 `SUMMARY_ONLY_OR_MISSING`，进入轻量复盘：跳过逐条 Prompt 分析，只写“原始 Prompt 不可用，本节跳过”；行为诊断只写当前摘要和文件证据能支撑的低置信观察，不能伪造轮次和用户原话。\n\n1. **提取工作叙事材料**：\n   - 找出本次用户真正想完成的目标。\n   - 找出关键转折、交付结果、卡点和返工来源。\n   - 只为第一章准备短叙事素材，不输出会话脉络、仪表盘或 token 分布。\n\n2. **逐条 Prompt 分析**：\n   - 扫描用户的每一条消息。\n   - 只保留有学习价值的问题 Prompt。\n   - 为每条准备 `表达问题`、`低关键词版`、`进阶版`。\n   - 不做严重度分级，不使用颜色标记。\n\n3. **识别行为诊断项**：\n   - 扫描多个 Prompt 构成的行为序列。\n   - 提取用户真实暴露出的低效行为或认知习惯。\n   - 为每个行为准备 `问题 / 分析 / 建议`。\n   - 将有价值的决策、取舍和反思并入行为诊断，不单独写决策复盘。\n\n4. **识别知识点**：\n   - 从 Prompt 表达问题、行为诊断和工作内容中提取需要调研的单个知识点。\n   - 每个知识点必须能说明“为什么本次需要学它”。\n   - 为 Workbench 准备人话解释、相关性和推荐深度。\n\n5. **AI 表现评估**：\n   - 不使用固定维度。\n   - 基于原始会话和工具结果，识别 AI 的误解、遗漏、过度执行、验证不足或上下文管理问题。\n   - 为每个问题准备用户可辅助方式。\n\n### Phase 1.5：学习地图确认（Workbench 优先）\n\nPhase 1 完成后，**不要直接进入 Phase 2 调研**。先把推测的学习内容交给用户确认。目标是让用户选择“学什么、学多少”。\n\n#### 1. 生成学习地图 JSON\n\n把 Phase 1 的分析整理为 `/tmp/fupan-learning-map.json`：\n\n```json\n{\n  \"project\": \"{项目名}\",\n  \"session\": \"{JSONL文件名}\",\n  \"source_thread\": \"{可为空}\",\n  \"active\": true,\n  \"summary\": \"本次复盘背景，用人话概括\",\n  \"user_questions\": [\n    \"用户原话摘录 1\",\n    \"用户原话摘录 2\"\n  ],\n  \"expression_issue_quotes\": [\n    {\n      \"quote\": \"用户表达有问题的原话，必须逐字摘录\",\n      \"issue\": \"这句话为什么会增加歧义或沟通成本\",\n      \"suggestion\": \"低关键词版：... / 进阶版：...\"\n    }\n  ],\n  \"topics\": [\n    {\n      \"id\": \"react\",\n      \"title\": \"React\",\n      \"plain_explanation\": \"用来搭网页界面的前端框架。\",\n      \"why_relevant\": \"本次设计了 React + Vite 的本地页面。\",\n      \"recommended_depth\": \"表达\",\n      \"selected\": true,\n      \"depth\": \"表达\"\n    }\n  ]\n}\n```\n\nTopic 规则：\n- `topics` 是 Workbench 兼容字段，语义上表示“知识点”，不是大领域。\n- 数量由用户最终选择，AI 只提出候选。\n- 每个 topic 必须是单个知识点，并有 `plain_explanation`，不能只写专业名词。\n- `recommended_depth` 只能是 `了解 / 表达 / 复现`。\n- 推荐深度只是建议，不代表替用户做决定。\n\n表达原话规则：\n- `expression_issue_quotes` 由 LLM 自行分析本次原始会话，不要求用户手动指出。\n- 只摘录真实出现过的用户原话，不能改写、概括或美化。\n- 只要用户表达导致目标、范围、验收标准、技术关键词、优先级或约束不清，就必须收入。\n- 如果确实没有表达问题，写空数组 `[]`。\n\n#### 2. 创建 task 并启动 Workbench\n\n```bash\n_WB=\"skills/forge-fupan/workbench/launcher.py\"\n_TASK_JSON=\"/tmp/fupan-learning-map.json\"\n_TASK=$(python3 \"$_WB\" create-task --input \"$_TASK_JSON\")\n_TASK_ID=$(python3 -c 'import json,sys; print(json.load(sys.stdin)[\"id\"])' <<< \"$_TASK\")\npython3 \"$_WB\" start --task-id \"$_TASK_ID\" --open\n```\n\n启动成功后，在对话里只提示一句：\n\n> 我已经打开 Fupan Workbench，请去页面确认这次想学习的知识点和深度；提交后我会自动继续。\n\n不要要求用户回命令行输入“好了”。\n\n#### 3. 等待当前 task 提交\n\n```bash\npython3 \"$_WB\" wait --task-id \"$_TASK_ID\" --timeout 1800\n```\n\n硬性规则：\n- 只轮询当前 `_TASK_ID`。\n- 不得读取或消费其他会话创建的 task。\n- 30 分钟未提交则停止等待，告诉用户页面仍可提交，下次可继续读取。\n- 如果 Workbench 启动失败、FastAPI/Uvicorn 缺失或浏览器无法打开，降级到对话内确认。\n- `wait` 返回的 task JSON 是后续写作依据，必须读取 `selection.topics` 和 `selection.feedback`。\n- `selection.feedback` 是用户补充反馈，不是备注字段；它会影响知识调研、行为诊断取舍、AI 表现复盘和最终文档写法。\n- 如果 `selection.feedback` 与默认推荐深度或主 agent 推断冲突，优先遵循用户反馈；除非反馈无法执行，此时必须在最终文档中说明冲突。\n\n#### 4. 对话内降级格式\n\n只有在 Workbench 不可用时使用：\n\n```markdown\nWorkbench 暂时没启动成功，我先用对话内确认兜底。\n\n我推测这次可以学：\n1. React — 人话解释：... — 推荐：表达\n2. FastAPI — 人话解释：... — 推荐：了解\n\n请告诉我：\n- 要学哪些编号\n- 每个编号学到：了解 / 表达 / 复现\n- 还有没有补充反馈\n```\n\n#### 5. 后续写作约束\n\n- Phase 2 只深度调研用户选择的 topic。\n- 未选择 topic 不得长篇展开，默认不写；如确需保留，只能在附录“未展开候选”里一行带过。\n- 有用户补充反馈时，按 `selection.feedback` 调整调研重点、解释深度、表达方式和 TLDR/SOP；没有反馈时，显式按默认深度规则执行。\n- `了解` 输出：人话解释 + 本次为什么出现 + 暂时不用深入学什么。\n- `表达` 输出：关键词 + 下次可以怎么说 + 常见误区。\n- `复现` 输出：原理拆解 + 最小可复现实例 + 检查清单 + 练习方向。\n\n### Phase 2：调研与诊断深化\n\nPhase 1.5 完成后，为用户选择的每个知识点做调研，并对每个行为诊断项做深化分析。可并行时并行；不可并行时串行完成，但不能跳过。\n\n#### 知识调研 Prompt（每个知识点一个）\n\n```text\n你正在为一次协作复盘调研一个“单个知识点”，不是泛泛调研一个大领域。\n\n## 知识点\n{知识点名称}\n\n## 项目背景\n{本次项目做了什么，核心目标是什么}\n\n## 用户背景\n{用户的角色、技术水平、工作习惯}\n{用户在本次会话中对该知识点展现出的认知水平}\n{用户用过的术语和没用到的术语}\n\n## 用户的核心目标\n通过复盘按用户选择的学习深度补齐该知识点的关键背景。不是写百科，而是让用户下次能更好地向 AI 表达、判断和协作。\n\n## 用户补充反馈\n{Workbench selection.feedback；若为空写“无”}\n\n## 本次实践摘要\n{本次会话里这个知识点出现在哪里、用了什么、卡在哪里}\n\n## 用户暴露出的知识缺口\n{具体列出哪些 Prompt 或行为暴露了哪些知识缺口}\n\n## 输出结构\n\n### 是什么\n用人话解释这个知识点的定义、边界和关键机制。先讲用户需要知道的 20%，不要铺百科。\n\n### 怎么用\n说明它在什么场景下有用；如果本次场景适用，要连接回本次实践。若只是背景知识，也说明什么时候不用深入。\n\n### 延伸学习\n给出官方文档、权威教程、视频或高质量资源，并说明每个资源适合看什么、解决什么问题。\n\n## 约束\n- 必须 web search 验证，不凭记忆编造\n- 优先官方文档、主流项目文档、权威教程、官方视频或高质量社区资源\n- 按用户选择的深度写：了解 / 表达 / 复现\n- 用户补充反馈优先于推荐深度和默认写法，必须体现在调研重点或输出取舍中\n- 不写百科全书，只写用户下次能用上的知识\n- 输出纯 markdown，不含代码块\n```\n\n#### 行为诊断 Prompt（每个行为一个）\n\n```text\n你正在分析一个用户和 AI 协作 coding 时暴露出的行为问题。\n\n## 行为\n{行为名称，如\"碎片修复循环\"}\n\n## 对话中的证据\n{主 agent 提取的具体对话片段，包括轮次编号和用户原文}\n\n## 用户背景\n{用户的角色、工作习惯、已知的偏好}\n\n## 用户补充反馈\n{Workbench selection.feedback；若为空写“无”}\n\n## 输出结构\n\n### 问题\n描述这个行为暗含的协作问题，不要只复述某一句话。\n\n### 分析\n解释用户为什么会这样说或这样推进：是没有知识、没有遵守规范、流程惯性、目标不清、验收缺失，还是陷入某个循环自己不自知。\n\n### 建议\n给出可执行的修复方法。用户遵循这个建议后，下一次 AI coding 的效率和效果应该更好。\n\n## 约束\n- 不要泛泛而谈，每个论点必须有对话证据支撑\n- 用户补充反馈会影响行为诊断取舍；若反馈要求关注某类行为，优先分析该类行为\n- 建议必须能变成下次协作动作\n- 输出纯 markdown\n```\n\n#### AI 表现复盘 Prompt\n\n```text\n不要使用固定评分维度。请基于本次原始会话和工具结果，自行识别 AI 表现不好的地方。\n\n用户补充反馈：{Workbench selection.feedback；若为空写“无”}\n\n只写真实发生、对协作效率或交付质量有影响的问题。每个问题包含：\n- 表现：AI 具体哪里做得不好。\n- 原因：这是误解、遗漏、过度执行、验证不足、上下文管理问题，还是其他问题。\n- 用户可辅助方式：用户下次可以提供什么信息、约束或检查点，帮助 AI 更快做对。\n\n如果 AI 表现整体合格，可以写“可进一步提升的点”，但仍然必须基于会话证据。\n```\n\n### Phase 2.5：知识模块图生成\n\nPhase 2 完成后，为每个最终展开的知识模块强尝试生成一张 Image 2 学习图。知识图必须表达该模块的关键概念、出现原因、关系链和用户下次可迁移的判断方式。图片生成是强尝试交付步骤，不是所有运行环境都能保证成功的硬依赖；失败时必须明确降级为 prompt pack 占位。\n\n#### 生成路径\n\n优先路径：\n- 使用 Codex 内置 `image_gen` / `imagegen` 能力逐张生成，不要求 `OPENAI_API_KEY`。\n- 每个知识模块单独调用一次，避免多个模块混在同一张图里。\n- 内置工具默认输出到 `${CODEX_HOME:-$HOME/.codex}/generated_images/{CODEX_THREAD_ID}/`。生成前先创建 marker 文件，生成后只复制 marker 之后新增的 PNG 到复盘文档的 `assets/` 目录，不删除原图。\n\n内置工具生成后复制示例：\n\n```bash\n_IMAGE_ROOT=\"${CODEX_HOME:-$HOME/.codex}/generated_images\"\n[ -n \"${CODEX_THREAD_ID:-}\" ] && _IMAGE_ROOT=\"$_IMAGE_ROOT/$CODEX_THREAD_ID\"\n_IMAGE_MARKER=$(mktemp)\n\n# 在这里调用 Codex 内置 image_gen 生成当前知识模块图片。\n\n_IMAGE_SRC=$(find \"$_IMAGE_ROOT\" -type f -name \"*.png\" -newer \"$_IMAGE_MARKER\" -print0 2>/dev/null | xargs -0 ls -t 2>/dev/null | head -1)\nif [ -n \"$_IMAGE_SRC\" ]; then\n  cp \"$_IMAGE_SRC\" \"$_ASSET_OUT\"\nfi\nrm -f \"$_IMAGE_MARKER\"\n```\n\nFallback：\n- 若内置图片工具不可用，且存在 `OPENAI_API_KEY`，使用 `skills/_shared/generate_image2.py`，默认模型 `gpt-image-2`。\n- 若两条路径都不可用，只保存 `.prompt.md` 和 `.meta.json`，不阻塞复盘。\n- 降级后必须在最终回复和文档中写清楚待生成数量，不能说“图片已生成”。\n\n#### 保存约定\n\n```text\n~/claudecode_workspace/记录/复盘/{项目名}/assets/{YYYY-MM-DD}-fupan-k{序号}-{slug}.png\n~/claudecode_workspace/记录/复盘/{项目名}/assets/{YYYY-MM-DD}-fupan-k{序号}-{slug}.prompt.md\n~/claudecode_workspace/记录/复盘/{项目名}/assets/{YYYY-MM-DD}-fupan-k{序号}-{slug}.meta.json\n```\n\n#### 知识图 Prompt 模板\n\n```text\nUse case: scientific-educational\nAsset type: AI coding retrospective knowledge-module illustration\nPrimary request: Create a clean educational knowledge map illustration for one module in an AI coding retrospective.\n\nTopic: {知识点名称}\n\nCore idea to teach:\n{这个知识点最重要的 1-3 个概念}\n\nHow it appeared in this session:\n{本次会话中它出现在哪里，用户为什么需要学它}\n\nKey relationships to show:\n{概念 A} -> {概念 B} -> {概念 C}\n{如果适用，列出流程、因果链、层级关系或判断路径}\n\nUser takeaway:\n{用户看完这张图应该记住什么、下次应该怎么判断或表达}\n\nVisual style:\n- Educational diagram, not marketing poster\n- Clear hierarchy, readable short Chinese labels, minimal decoration\n- Use simple boxes, arrows, callouts, and small symbolic icons\n- Neutral professional palette, white or light background\n- Keep text short and large enough to read\n- Avoid dense paragraphs; prefer 6-9 short labels\n- No code screenshots, no fake UI, no unrelated people\n- No purple-blue gradients, no decorative blobs, no watermark\n\nOutput: A single 16:9 PNG knowledge map suitable for embedding in a Markdown retrospective.\n```\n\n### Phase 3：组装文档（主 agent 串行）\n\n1. **撰写文档**：按 5 章 + TLDR 结构组装，插入知识调研、知识图和行为诊断结果。\n2. **应用用户反馈**：把 `selection.feedback` 作为全局写作约束，影响调研重点、诊断取舍、解释深度和 TLDR/SOP；反馈为空则按默认规则。\n3. **提炼 TLDR**：从表达问题、行为诊断、知识拓展、AI 表现复盘和速查手册中提取最值得记住的内容，放到文档最后。\n4. **建立锚点引用**：表达复盘 ↔ 知识拓展双向引用。\n5. **保存文档**：\n   - 新文档：写入复盘目录。\n   - 迭代更新：覆写已有文档，更新 frontmatter 的 iteration 和 updated。\n\n#### 文档内容 Checklist（全部 PASS 才能进入 Phase 4）\n\n```text\n\n□ 工作叙事是短段落，不是列表、进度条或 token 分布\n□ 已读取 task.selection.feedback，并反映在知识调研和最终输出中（为空则标注无）\n□ Prompt 分析没有严重度标记\n□ 每条 Prompt 分析只包含“表达问题”和“两档更好的说法”\n□ 每个行为诊断都包含“问题 / 分析 / 建议”\n□ 每个知识点都包含“是什么 / 怎么用 / 延伸学习”\n□ 每个展开知识点都已强尝试生成学习图；最终回复写明已生成 N 张 / 待生成 N 张，待生成项已保存 prompt pack\n□ AI 表现复盘不使用固定四维评分\n□ 速查手册概念表只有“概念 / 解释 / 场景”三列\n□ TLDR 位于全文最后，且至少 5 条\n□ TLDR 至少包含 1 条“下次可以说：...”表达优化\n□ TLDR 至少包含 1 条可执行协作 SOP\n□ TLDR 的知识、表达优化和 SOP 均能在正文中找到支撑\n□ 导航目录的锚点跳转全部正确\n□ frontmatter 中 session/session_source/iteration/created/updated 字段正确\n□ 已根据原始会话可用性选择完整复盘 / JSONL 恢复复盘 / 轻量复盘\n□ 若为轻量复盘，未伪造用户原话、轮次或行为序列证据\n```\n\n如果某项 FAIL，必须修复后重新检查。\n\n### Phase 4：回流与索引\n\n1. **清理 `.forge/active.md` 本会话登记**：\n   - 只清当前会话自己的登记行（session id 匹配），不动别的会话。\n   - 无法获取 session id → 不清理 + 提示用户后续 `/forge-status` 兜底。\n   - 这一步在 Memory 回流之前执行。\n\n2. **Memory 回流**：\n   - 读取当前 MEMORY.md。\n   - 只提取跨会话有价值的行为指令、项目状态、外部资源指向。\n   - 每条 Feedback 创建独立 `.md` 文件，在 MEMORY.md 加一行索引。\n   - 已有相同主题 → 更新而非新建。\n   - 不复制复盘全文。\n\n3. **WORKSPACE-PULSE 更新**：\n   - 增量更新 active_work / recent_learnings / pain_points / itch_list / unsolved_questions 等。\n   - 更新 `updated_at` 和 `updated_by`。\n\n4. **INDEX.md 维护**：\n   - 新文档：在对应日期下追加条目。\n   - 迭代更新：更新已有条目的描述和迭代标记。\n\n5. **标记 Workbench task 已完成**：\n\n   ```bash\n   _WB=\"${_WB:-skills/forge-fupan/workbench/launcher.py}\"\n   if [ -n \"${_TASK_ID:-}\" ] && [ -f \"$_WB\" ]; then\n     python3 \"$_WB\" consume --task-id \"$_TASK_ID\" || echo \"⚠️ Workbench task 标记 consumed 失败，可稍后手动处理: $_TASK_ID\"\n   fi\n   ```\n\n6. **提交与推送**：\n\n   ```bash\n   git add ~/claudecode_workspace/记录/复盘/ 2>/dev/null\n   git add ~/.claude/projects/*/memory/ ~/.codex/memories/ 2>/dev/null || true\n   git add ~/claudecode_workspace/WORKSPACE-PULSE.json 2>/dev/null\n   git commit -m \"docs: 复盘 — [主题关键词]\"\n   git push origin \"$_BRANCH\" 2>/dev/null && echo \"✅ 复盘已推送\"\n   ```\n\n7. **最终输出**：\n   - 列出所有生成的文件路径。\n   - 提醒用户 TLDR 已位于文档最后，可从最后一节开始复习。\n\n---\n\n## INDEX.md 规范\n\n**位置**：`~/claudecode_workspace/记录/复盘/INDEX.md`\n\n**格式**：\n\n```markdown\n# 复盘索引\n\n## 2026-04-06\n\n- **[视频转文本工具：从 brainstorm 到端到端交付](视频转文本/2026-04-06-0100-[视频转文本工具]-从brainstorm到端到端交付.md)** `视频转文本` `工具开发` `视频处理` `LLM-API`\n  录屏/截图→结构化文档的全自动管线。核心收获：LLM做语义+CV做像素。\n```\n\n规则：\n- 按日期倒序（最新在上）。\n- 同一天多篇复盘按时间排列。\n- 每条：标题超链接 + 项目标签 + 领域标签 + 1-2 句话描述。\n- 路径使用相对路径（相对于 INDEX.md 所在目录）。\n- 同会话迭代时更新已有条目，加 `迭代×N` 标签。\n- 每次 forge-fupan 执行完自动追加/更新。\n\n---\n\n## 同会话迭代规范\n\n当 Phase 0 检测到当前会话已有复盘文档时：\n\n1. 读取已有文档，获取 frontmatter 中的 iteration 和 created。\n2. 全量重新分析整个对话（包括第一次复盘前后的所有内容）。\n3. 覆写原文件，更新 frontmatter：\n   ```yaml\n   iteration: {原值+1}\n   updated: {当前时间}\n   ```\n4. INDEX.md 更新已有条目，加 `迭代×N` 标签。\n5. 工作叙事只补充复盘后的关键变化，不恢复“会话脉络”或 token 分布。\n6. Git 提交信息：`docs: 复盘迭代 — [主题关键词] (iter {N})`。\n\n---\n\n## 约束规范\n\n### 内容规范\n- **不放代码片段**：用自然语言描述概念；只有复现深度确实需要时才放最小示例。\n- **结构化克制**：诊断和速查用结构化格式，工作叙事和知识解释避免表格堆砌。\n- **不生成仪表盘**：不写“仪表盘速览”，不强制 show-widget，不输出精力分布图。\n- **知识模块图强尝试生成**：每个展开知识模块默认强尝试生成 1 张 Image 2 学习图；成功图插入对应知识模块标题下方，不替代正文；失败时保存 prompt pack 并明确标注待生成；行为诊断和 AI 表现复盘不默认生成图。\n- **内容全面优先**：每个分析点都要有充分依据，但不要为了凑结构扩写无价值内容。\n\n### AI 表现复盘规范\n- 必须归因到 AI 侧的具体失误，不能写“双方沟通不够”这类模糊归因。\n- 每个问题必须写“用户可辅助方式”。\n- 不使用固定评分维度。\n\n### Research 规范\n- 每个用户选择的知识点至少做一次 web search。\n- 用户描述模糊的地方，必须调研该知识点的标准表达方式并告诉用户“下次可以说”。\n- `延伸学习` 至少给出 1 个权威来源链接。来源优先级：官方文档或主流项目文档 > 权威教程或官方视频 > 高质量社区资源。\n- 若缺少官方或主流项目来源，必须说明原因并给出次优来源。\n- 调研结果融入知识拓展章节，不单独成章。\n\n### Memory 回流规范\n- ✅ 行为指令：“做X/不做Y” + 原因。\n- ✅ 项目活跃状态：架构、设计方向、待解决问题。\n- ✅ 外部资源指向：API 文档、监控地址、配置文件位置。\n- ❌ 代码实现细节。\n- ❌ 完整踩坑过程（已在复盘文件中）。\n- ❌ 一次性任务的临时状态。\n\n### Memory 文件格式\n\n```markdown\n---\nname: 名称\ndescription: 一行描述（用于判断是否相关，要具体）\ntype: feedback | project | reference\n---\n\n行为指令或项目状态描述。\n\n**Why:** 原因\n**How to apply:** 适用场景\n```","tags":["forge","fupan","skills","yike-gunshi","agent-skills","ai-development","claude-code","skill-md","skillsmp"],"capabilities":["skill","source-yike-gunshi","skill-forge-fupan","topic-agent-skills","topic-ai-development","topic-claude-code","topic-forge","topic-skill-md","topic-skillsmp"],"categories":["forge-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/yike-gunshi/forge-skills/forge-fupan","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add yike-gunshi/forge-skills","source_repo":"https://github.com/yike-gunshi/forge-skills","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (21,831 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:33.999Z","embedding":null,"createdAt":"2026-04-24T07:03:38.539Z","updatedAt":"2026-05-18T19:07:33.999Z","lastSeenAt":"2026-05-18T19:07:33.999Z","tsv":"'+1':2625 '-0':2014 '-04':2553 '-06':2554 '-1':212,328,379,776,2020 '-10':1280 '-2':2585 '-20':264 '-3':2148 '-5':253,928,949 '-8':574 '-9':2220 '/.claude/projects':801,2510 '/.codex/archived_sessions/rollout-':816 '/.codex/memories':2512 '/.codex/sessions/yyyy/mm/dd/rollout-':810 '/2026-04-06-0100-':2560 '/assets':2064,2079,2094 '/claudecode_workspace':44,90,116,320,2060,2075,2090,2503,2545 '/claudecode_workspace/workspace-pulse.json':2518 '/dev/null':139,148,163,173,184,210,220,230,244,251,266,276,283,326,343,359,365,520,546,774,2012,2018,2507,2514,2520,2532 '/forge-cookbook/skills/forge-doc-policy/doc-paths.md':46 '/forge-fupan':31 '/forge-fupan/parse_tokens.py':322 '/forge-status':2410 '/generated_images':1955,1977 '/index.md':2548 '/info2action/2026-04-06-1430-':119 '/memory':2511 '/tmp/fupan-learning-map.json':1465,1573 '0':196,224,367,562,564,566,568,704,708,716,1295,2605 '1':222,238,333,556,617,633,646,664,683,689,700,1088,1165,1299,1318,1381,1448,1458,1463,1482,1678,2147,2263,2364,2370,2396,2584,2607,2668,2706 '1.5':1443,1738 '16':2245 '1800':1627 '2':19,138,147,162,172,183,209,219,229,243,250,265,275,282,325,342,358,364,519,545,559,773,927,948,1303,1392,1452,1484,1563,1683,1698,1735,1921,1925,2011,2017,2048,2272,2415,2506,2513,2519,2531,2615,2671 '2.1':967 '2.2':1013 '2.5':1918 '20':1788 '200':86 '2026':2552 '3':1308,1405,1613,2258,2282,2434,2618 '30':1634 '4':1310,1418,1668,2291,2313,2394,2457,2628 '5':893,1279,1312,1430,1695,2266,2295,2360,2464,2635 '6':2219,2498,2642 '7':2535 '9':2246 'a1':1214 'activ':1474,2440 'add':2502,2509,2517 'agent':563,642,645,688,707,733,735,1321,1663,1838,2261 'ahead':164,189 'ai':14,97,869,914,944,960,986,1044,1065,1203,1208,1217,1230,1238,1331,1431,1436,1527,1658,1767,1828,1866,1878,1885,1896,1909,1912,2116,2137,2288,2350,2680,2685,2688 'api':1947,2040,2569,2727 'appear':2152 'appli':660,1345,2753 'arrow':2194 'asset':1132,1967,2029,2114 'assist':686 'avail':712,720,839,843,1356,1360 'avoid':2215 'b':2165 'b1':1025 'b2':1128 'background':2206 'basenam':761 'bash':129,1568,1617,1971,2469,2500 'behind':175,191,193,194,200 'blob':2239 'blue':2235 'box':2193 'brainstorm':2557 'branch':141,143,153,2530 'c':361,1586,2167 'callout':2195 'case':2110 'chang':205,215 'checklist':2308 'chines':2187 'claud':74,300,308,443,452,460,798,882,1324 'clean':2127 'clear':2183 'code':301,799,1045,1325,1830,1867,2117,2138,2224 'codex':302,312,314,384,388,395,399,401,408,415,419,427,429,436,467,471,479,481,488,620,807,811,818,883,1334,1939,1952,1956,1974,1979,1986,1993 'command':657,1342 'commit':260,288,2522 'compact':567,609,614,616,739,741 'consum':2482,2492 'context':613 'continu':352,587 'core':2142 'count':171,182,560,615,631,644,662,681,687,698,702,706,714,731,734,737,740,824 'cp':2026 'creat':888,1578,2125,2614 'create-task':1577 'current':146 'cut':380 'cv做像素':2575 'd':387,418,442,470 'data':582,671 'data.get':589,594,667,670,691 'dd':110,1136,2068,2083,2098 'decor':2190,2238 'dens':2216 'depth':1511,1515,1537 'descript':2740 'desktop':808,1335 'diagram':2179 'dict':603 'diff':267,270,292,867 'dir':310,445,454,750,772 'dirti':246,255 'doc':37,278,280,298,2524,2645 'done':375 'echo':149,151,154,174,185,186,198,231,233,256,284,286,289,291,294,296,366,490,492,496,506,521,526,537,547,782,786,2488,2533 'educ':2113,2128,2178 'elif':634,647,684,713 'els':525,604,665,721 'embed':2252 'encod':572 'end':658,661,1343,1346 'enough':2212 'event':624,637,650 'event_msg.agent':1339 'event_msg.exec':1341 'event_msg.patch':1344 'event_msg.token':823 'event_msg.user':1337 'except':585,586 'exec':656 'exist':764,779,784 'explan':1502,1534 'express':1485,1545 'f':324,337,348,350,351,355,357,363,374,576,580,728,743,2004,2033,2477 'f2':381 'fail':2391 'fake':2227 'fallback':2036 'fastapi':1684 'fastapi/uvicorn':1641 'feedback':2424,2745 'fetch':160 'fi':245,409,437,461,489,530,531,747,789,790,2031,2497 'file':307,392,405,413,423,433,441,448,457,465,475,485,499,504,518,535,541,757,763 'find':319,335,2000 'forg':2,36,2598 'forge-doc-polici':35 'forge-fupan':1,2597 'forge/active.md':2398 'frontmatt':41,874,2302,2379,2610,2621 'full':710,837,1354 'fupan':3,7,749,765,771,780,785,1138,1607,2070,2085,2100,2599 'fupan-k':2069,2084,2099 'fupan-k1':1137 'gen':1942,1996 'get':672 'git':131,142,157,159,165,176,206,216,225,239,247,261,269,1300,2501,2508,2516,2521,2527,2643 'github信息源扩展':125 'gpt':2046 'gpt-imag':2045 'gradient':2236 'grep':766 'gt':195 'head':170,180,211,252,272,274,327,378,775,2019 'hhmm':111 'hierarchi':2184 'hn':123 'home':313,315,389,420,472,1953,1975 'home/.claude/projects':311 'home/.codex':316,1954,1976 'home/archived_sessions':402,430,482 'home/claudecode_workspace':751 'home/sessions':400,428,480 'icon':2199 'id':386,397,417,469,760,770,813,1497,1584,1593,1600,1602,1623,1625,1631,1958,1981,1988,2402,2407,2476,2485,2487,2496 'idea':2143 'if':345 'illustr':2122,2131 'imag':18,1924,1941,1972,1982,1984,1989,1995,1998,2001,2008,2023,2027,2034,2047,2670 'imagegen':1943 'import':550,552,1587 'index.md':2458,2542,2589,2629 'info2action':100 'input':1580 'isinst':601 'issu':1486,1491,1546 'itch':2446 'item':1349 'iter':885,2304,2612,2623,2648 'json':551,1460,1466,1572,1582,1588,1647 'json.load':1591 'json.loads':583 'jsonl':65,69,306,330,391,394,398,404,412,422,425,426,432,440,447,450,451,456,464,474,477,478,484,498,503,517,534,540,756,762,802,814,817,819,831,845,848,854,1363,2384 'jsonl文件名':879,1470 'k':2071,2086,2101 'k1':1124,1130,1139 'keep':2207 'key':1948,2041,2158 'knowledg':2120,2129,2248 'knowledge-modul':2119 'label':2188,2222 'larg':2211 'latest':329,393,424,449,476 'learn':2443 'light':2205 'line':578,584 'list':168,179,2447 'llm':1549,2568 'llm-api':2567 'llm做语义':2574 'log':262,711,719,838,842,1355,1359 'ls':279,2015 'm':356,2523 'map':2130,2249 'markdown':877,902,976,1024,1123,1213,1263,1673,1821,1877,2255,2550,2737 'marker':1960,1963,1990,2009,2035 'market':2181 'md':114,126,281,2426,2563 'memori':2413,2416,2716,2735 'memory.md':1314,2419,2429 'messag':630,643,668,673,1338,1340 'message.content':1328 'message.role':75,1327 'message.usage':806,1329 'message/agent_message':72 'meta.json':1183,2053,2104 'minim':2189 'miss':726,859,1369 'mktemp':1991 'mm':109,1135,2067,2082,2097 'modul':2121,2134 'msg':625,638,651,666 'msg.get':676 'mtime':353,373 'n':213,254,372,383,403,414,431,455,483,502,510,533,755,778,1193,1196,1978,2022,2342,2345,2474,2594,2633,2649 'name':331,338,339,2005,2738 'neutral':2200 'newer':2007 'none':605 'one':2133 'onelin':263 'open':570,1603 'openai':1946,2039 'origin':2529 'output':2242 'p1':977,1127 'pack':23,1188,1200,1934,2349,2677 'pain':2444 'palett':2202 'paragraph':2217 'pars':134,317,511,515 'parse_tokens.py':527 'partial':718,841,1358 'pass':2310 'patch':659 'path':321,554,571 'pattern':332,340 'payload':588,590,596,602,611,627,640,653 'payload.get':598 'peopl':2231 'phase':1294,1317,1442,1447,1451,1462,1697,1734,1737,1917,1920,2257,2312,2393,2604 'plain':1501,1533 'png':1141,1168,1965,2006,2074,2247 'point':2445 'polici':38 'pop':241 'porcelain':208,249 'poster':2182 'prefer':2218 'primari':2123 'print':341,727,742,1590 'print0':2010 'printf':368 'profession':2201 'project':277,297,309,444,453,1467,2746 'prompt':22,850,862,969,972,1016,1019,1187,1199,1372,1376,1394,1398,1408,1421,1746,1781,1824,1880,1933,2106,2324,2327,2348,2676 'prompt.md':1181,2051,2089 'pull':226 'puls':2437 'purpl':2234 'purple-blu':2233 'push':2528 'pwd':140 'py':544,746 'python3':514,539,1575,1585,1595,1618,2480 'question':1480,2449 'quiet':161,218,228,242 'quot':1487,1488,1547 'r':347 'react':1498,1500,1507,1679 'read':346,2214 'readabl':2185 'rebas':203,227,234 'recent':259,287,2442 'recommend':1510,1536 'reddit':124 'refer':2747 'relationship':2159 'relev':1505 'request':2124 'research':1080,2696 'respons':1348 'result':695 'retrospect':2118,2139,2256 'rev':133,167,178 'rev-list':166,177 'rev-pars':132 'rl':767 'rm':2032 'rn':377 'role':675,677,679,685 'root':130,156,1973,1983,1985,2002 'rss':122 'rss-hn-reddit-github信息源扩展':121 'schema':42 'scientif':2112 'scientific-educ':2111 'screenshot':2225 'search':1084,1805,2700 'select':1513 'selection.feedback':1652,1653,1661,1711,1772,1847,1889,2275 'selection.topics':1650 'session':303,406,434,458,486,494,542,759,768,769,878,880,1469,2155,2401,2406 'session/session_source/iteration/created/updated':2381 'shift':334 'short':2186,2209,2221 'show':136,145,2161,2663 'show-curr':144 'show-toplevel':135 'show-widget':2662 'simpl':2192 'singl':2244 'skill':102 'skill-forge-fupan' 'skill-system':101 'skills/_shared/generate_image2.py':2043 'skills/forge-fupan/workbench/launcher.py':1570,2472 'slug':1140,2073,2088,2103 'small':2197 'sop':871,1272,1291,2372,2376 'sort':376 'sourc':304,407,435,459,487,495,543,557,619,881,1471 'source-yike-gunshi' 'src':1999,2024,2028 'start':1597 'stash':217,221,223,237,240 'stat':268,271,293,354,360 'status':207,248,709,717,722,745 'style':2177 'suggest':1493 'suitabl':2250 'summari':723,856,1366,1476 'symbol':2198 'sys':553,1589 'sys.argv':555,558 'sys.stdin':1592 'system':103 'takeaway':2173 'task':1565,1571,1574,1579,1581,1583,1594,1599,1601,1615,1622,1624,1630,1633,1646,2467,2475,2484,2486,2490,2495 'task-id':1598,1621,2483 'task.selection.feedback':2321 'teach':2145 'text':1748,1826,1881,2059,2108,2208,2314 'thread':385,396,416,468,812,1472,1957,1980,1987 'timeout':1626 'titl':1499 'tldr':16,896,922,923,1257,1259,1264,1275,1277,2268,2284,2357,2362,2368,2373,2539 'tldr/sop':1715,2280 'token':55,79,318,507,512,516,522,791,932,1304,1333,1390,2318,2640 'tool':565,663,694,696,699,736,738 'top':592,607,622,635,648 'topic':1496,1517,1519,1530,1700,1702,2140 'topic-agent-skills' 'topic-ai-development' 'topic-claude-code' 'topic-forge' 'topic-skill-md' 'topic-skillsmp' 'toplevel':137 'tri':581 'true':1475,1514,2515 'type':323,336,593,595,597,599,608,612,623,628,636,641,649,654,692,2003,2115,2744 'u':169,181 'ui':2228 'unknown':150,305,884 'unrel':2230 'unsolv':2448 'updat':890,2306,2452,2455,2626 'usag':804 'use':697,2109,2191 'user':71,561,629,632,680,682,703,715,730,732,1479,2172 'utf':573 'visual':2176 'vite':1508 'wait':1620,1644 'watermark':2241 'wb':1569,1576,1596,1619,2470,2471,2478,2481 'web':1079,1083,1804,2699 'white':2203 'widget':2664 'work':2441 'workbench':8,1427,1445,1521,1567,1608,1639,1671,1674,1771,1846,1888,2466,2489 'workspac':2436 'workspace-puls':2435 'workspace-pulse.json':1316 'xarg':2013 'y':362 'yaml':2622 'yyyi':108,1134,2066,2081,2096 'yyyy-mm-dd':107,1133,2065,2080,2095 'z':411,439,463,466 '~10':273 '一':904,924 '一个会话的工作做完':58 '一工作叙事':906 '一条可直接复制的高质量指令':1270 '一次性任务的临时状态':2734 '一行描述':2741 '一针见血说明这句话的问题':980 '三':910,1070 '三列':2356 '三段':1103 '三知识拓展':912 '上下文压缩后的复盘策略':827 '上下文管理问题':1224,1903 '下一次':1043,1865 '下次可以怎么说':1115,1726 '下次可以说':1269,1288,2366,2703 '下次可继续读取':1637 '下次应该怎么判断或表达':2175 '下次怎么说更好':962 '不为了凑数':1022 '不代表替用户做决定':1543 '不作为正文图表':1307 '不使用固定维度':1433 '不使用固定评分维度':2695 '不使用项目符号列表':951 '不使用颜色标记':974,1404 '不假定其结构长期稳定':821 '不做i':2720 '不做严重度分级':1403 '不做普通摘要':1262 '不做逐条':861 '不像批改作业':966 '不再写避坑指南':1247 '不写':2659 '不写百科全书':1818 '不凭记忆编造':1807 '不删除原图':1969 '不动别的会话':2404 '不单独写决策复盘':1417 '不单独成章':2715 '不可并行时串行完成':1743 '不可用':1377 '不可用时使用':1672 '不含代码块':1822 '不在复盘正文输出':793 '不复制复盘全文':2433 '不对行为序列做强判断':864 '不强制':2661 '不得中断整个复盘':1352 '不得写成长段落':1282 '不得凭空发明':1284 '不得把':1198 '不得读取或消费其他会话创建的':1632 '不得长篇展开':1703 '不恢复':2637 '不按严重度打标签':973 '不按大领域写百科':1075 '不放代码片段':2652 '不是写百科':1765 '不是列表':2316 '不是备注字段':1655 '不是大领域':1525 '不是所有运行环境都能保证成功的硬依赖':1931 '不是泛泛调研一个大领域':1751 '不替代':1173 '不替代正文':2674 '不清理':2408 '不生成仪表盘':2658 '不能伪造轮次和用户原话':1380 '不能写':1001,1234,2690 '不能只写专业名词':1535 '不能改写':1553 '不能说':2056 '不要使用固定评分维度':1205,1882 '不要写成阶段列表':930 '不要只复述某一句话':1853 '不要在中途插入':51 '不要复述某一句话':1050 '不要求':1945 '不要求用户手动指出':1551 '不要泛泛而谈':1870 '不要直接进入':1450 '不要要求用户回命令行输入':1611 '不要铺百科':1789 '不输出会话脉络':1388 '不输出精力分布图':2665 '不追求完整复述全会话':898 '不阻塞复盘':2054 '不默认用户知道术语':1005 '与默认推荐深度或主':1662 '且存在':2038 '且至少':2359 '两档更好的说法':2331 '个可打开的权威来源链接':1089 '个提交':201 '个权威来源链接':2707 '个概念':2149 '个短叙事段落回顾本次会话':929 '个短段落':950 '个章节':894 '中':2380 '中的':2611 '中说明原因':1097 '中途复盘的问题':52 '串行':1322,2262 '为':1426 '为什么会增加':959 '为什么本次需要学它':1425 '为每个最终展开的知识模块强尝试生成一张':1923 '为每个行为准备':1411 '为每个问题准备用户可辅助方式':1441 '为每条准备':1399 '为用户选择的每个知识点做调研':1740 '为空则标注无':2323 '主':1320,1837,2260 '主流项目文档':1809 '主题关键词':113,2526,2647 '之前':1171 '之后新增的':1964 '也优先以':1362 '也要说明':1154 '也说明什么时候不用深入':1795 '了解':1106,1539,1687,1691,1718,1813 '了解它的关键信息':1147 '二':907,954 '二表达与行为复盘':909 '五':919,1243 '五速查手册':921 '交付结果':1385 '人话解释':1680,1685,1720 '什么场景下会用':1109,1114 '什么时候不用深入':1155 '仅供内部判断':1306 '仍保留原始消息':846 '从':1326,1336,1420,2556 '从brainstorm到端到端交付':2562 '从表达问题':2285 '代码实现细节':2731 '以后遇到同类任务时的操作顺序':1273 '仪表盘或':1389 '仪表盘速览':2660 '任一来源缺字段时只降级相关分析':1351 '任务标签':112 '优先':1446 '优先分析该类行为':1874 '优先在上下文压缩或清空之前复盘':62 '优先官方文档':1808 '优先级或约束不清':1559 '优先路径':1937 '优先遵循用户反馈':1665 '会话中出现过哪些关键转折':936 '会话日志':491,497 '会话日志定位':299 '会话日志来源说明':797 '会话来源':493 '会话脉络':795,2638 '会话读取规则':1323 '但不能跳过':1744 '但不要为了凑结构扩写无价值内容':2684 '但仍然必须基于会话证据':1242,1916 '但前置脚本输出':836 '位于全文最后':2358 '位置':2544 '低关键词版':990,1004,1401,1494 '作为全局写作约束':2276 '你正在为一次协作复盘调研一个':1749 '你正在分析一个用户和':1827 '你的目标是让用户理解这个知识点':1146 '使用':1938,2042 '使用建议':49 '例如':1061 '例如目标缺失':981 '侧的具体失误':2689 '保存文档':2296 '保存约定':2058 '保留同名':1180 '做x':2719 '先启动本地':6 '先把推测的学习内容交给用户确认':1454 '先给目标状态':1062 '先讲用户需要知道的':1787 '兜底':2411 '全部':2309 '全量重新分析整个对话':2616 '全量重新生成浪费':54 '关系链和用户下次可迁移的判断方式':1929 '关键词':1725 '具体列出哪些':1780 '具体哪里做得不好':1218,1897 '具体说明':1105 '兼容字段':1522 '兼容深度浅的规则':1121 '内容全面优先':2682 '内容规范':2651 '内置':1940,1994 '内置工具生成后复制示例':1970 '内置工具默认输出到':1951 '再压缩或新开会话':82 '再按选择调研并生成结构化复盘文档':10 '再让':1064 '写入复盘目录':2298 '写成':947 '写法要求':946 '写真实可操作的优化方案':1233 '写空数组':1562 '决策复盘不再单独成章':1067 '准':1000 '准备人话解释':1428 '出现原因':1928 '分布':1391,2319,2641 '分布图':933 '分析':863,970,1017,1032,1051,1373,1395,1413,1854,2334 '分析只包含':2328 '分析和行为序列分析':851 '分析没有严重度标记':2325 '分钟未提交则停止等待':1635 '列出所有生成的文件路径':2537 '列出流程':2169 '创建':1564 '创建独立':2425 '判断和协作':1769 '到':1189 '到复盘文档的':1966 '到端到端交付':2558 '前置脚本':127 '加':2592,2631 '加一行索引':2430 '包含':1285,1289 '包含会话标记':876 '包括第一次复盘前后的所有内容':2617 '包括轮次编号和用户原文':1840 '匹配':2403 '协作':1271,1290,1829 '协作复盘与知识沉淀':4 '协作成本':961 '协作改进和可执行':15 '协作知识沉淀与深度诊断':48 '单个知识点':1073,1750 '单次功能完成后先复盘':81 '占位':1935 '占位描述成已生成图片':1201 '卡在哪里':1778 '卡点和返工来源':1386 '卫生检查':158,1301 '即使当前上下文已压缩':1361 '压缩前复盘':829 '原值':2624 '原因':1219,1898,2721,2750 '原始':1375 '原始会话可用性':538 '原始会话可用性检查':1309 '原始会话检查失败':548 '原始消息':729 '原始消息为准':1364 '原理拆解':1730 '双方沟通不够':1235,2691 '反馈为空则按默认规则':2281 '取舍和反思并入行为诊断':1069,1416 '变更统计':290 '句话描述':2586 '只为第一章准备短叙事素材':1387 '只保存':2050 '只保留有学习价值的问题':1397 '只保留概念速查表':1245 '只保留能帮助用户改进表达':899 '只关注用户以后要记住和执行的东西':1261 '只写':1374 '只写用户下次能用上的知识':1819 '只写真实发生':1210,1892 '只列用户真实暴露出的低效行为或认知习惯':1021 '只可补充与表达':941 '只在需要补充模型内部调用细节时参考':1350 '只基于当前摘要':865 '只挑有学习价值的问题':971 '只提出候选':1528 '只提取跨会话有价值的行为指令':2420 '只摘录真实出现过的用户原话':1552 '只有在':1670 '只有复现深度确实需要时才放最小示例':2654 '只深度调研用户选择的':1699 '只清当前会话自己的登记行':2400 '只给结论不给约束':988 '只能做轻量复盘':860 '只能在附录':1706 '只能是':1538 '只要用户表达导致目标':1555 '只轮询当前':1629 '可为空':1473 '可从':847 '可从最后一节开始复习':2541 '可以写':1240,1914 '可以引入第三章知识点中的专业术语':1011 '可以这样说':992,995 '可并行时并行':1742 '可接受':834 '可稍后手动处理':2494 '可能是缺知识':1034 '可自由发挥':1145 '可视化复盘':30 '可进一步提升的点':1241,1915 '同一天多篇复盘按时间排列':2579 '同会话迭代时更新已有条目':2591 '同会话迭代机制仅作为兜底方案保留':61 '同会话迭代检测':748,1311 '同会话迭代规范':2602 '名称':2739 '后续写作约束':1696 '启动失败':1640 '启动成功后':1604 '告诉用户页面仍可提交':1636 '和':1182,1315,1651,2052,2305,2330,2454,2613 '哪些行为模式要调整':963 '哪些表达或行为问题影响了协作效率':939 '四':913,1202 '四ai':917 '四ai-表现复盘':916 '回流':2417 '回流与索引':2395 '回流之前执行':2414 '回流规范':2717 '因为当前模型上下文和本地':64 '因果链':2170 '图像待生成':1185 '图片只服务记忆和理解':1172 '图片已生成':2057 '图片生成是强尝试交付步骤':1930 '在':805,2428 '在会话收尾时复盘':50 '在图片位置写':1184 '在完成一段工作后':5 '在对应日期下追加条目':2461 '在对话里只提示一句':1605 '在这里调用':1992 '场景':1251,2355 '均能在正文中找到支撑':2377 '基于原始会话和工具结果':1434 '增量更新':2439 '复现':1116,1541,1693,1728,1815 '复盘':29,47,92,118,753,2062,2077,2092,2505,2525,2547 '复盘一次':59 '复盘不是周报':897 '复盘可用性':744 '复盘已推送':2534 '复盘文档以':873 '复盘索引':2551 '复盘迭代':2646 '外部资源指向':2422,2726 '多数据源聚合':120 '失败':235,2493 '失败时保存':21,2675 '失败时必须明确降级为':1932 '好了':1612 '如':99,1834 '如果':1237,1638,1660,1911 '如果你已经知道一点背景':994 '如果本次会话已经用到':1151 '如果本次场景适用':1792 '如果某项':2390 '如果确实没有表达问题':1561 '如果适用':2168 '如确需保留':1705 '字段正确':2382 '学习图':20,1926,2672 '学习地图确认':1444 '学习总结':28 '学什么':1456 '学会运用这个知识点':1148 '学多少':1457 '它会影响知识调研':1656 '完成':1298 '完成后':1449,1739,1922 '完整白名单':40 '完整踩坑过程':2732 '官方文档':1157 '官方文档或主流项目文档':1091,2709 '官方视频或高质量社区资源':1811 '对协作效率或交付质量有影响的问题':1211,1893 '对话中的证据':1836 '对话内降级格式':1669 '对话分析':1319 '导航目录':901 '导航目录的锚点跳转全部正确':2378 '将使用轮次估算':524,529 '将按摘要降级判断':549 '将有价值的决策':1415 '将迭代更新该文档':787 '就必须收入':1560 '层级关系或判断路径':2171 '展开':1074 '属于本地会话记录格式':820 '工作习惯':1760,1843 '工作区有未提交改动':257 '工作叙事':905,925 '工作叙事只补充复盘后的关键变化':2636 '工作叙事和知识解释避免表格堆砌':2657 '工作叙事是短段落':2315 '工作未收敛导致判断被推翻':53 '工具':45 '工具开发':2565 '工具结果和用户补充反馈提炼知识点':868 '已位于文档最后':2540 '已保存':1186 '已同步远程':232 '已在复盘文件中':2733 '已完成':2468 '已有相同主题':2431 '已根据原始会话可用性选择完整复盘':2383 '已生成':1192 '已知的偏好':1844 '已经压缩':835 '已读取':2320 '帮助':1229,1908 '帮助用户提升与ai协作的能力':1292 '常见误区':1727 '常见说法':1113 '并反映在知识调研和最终输出中':2322 '并启动':1566 '并对每个行为诊断项做深化分析':1741 '并明确标注待生成':24,2678 '并有':1532 '并给出次优来源':1098 '并自然引到第二章':940 '并说明每个资源适合看什么':1800 '序号':2072,2087,2102 '应用用户反馈':2273 '延伸学习':1086,1096,1102,1156,1176,1796,2339,2704 '建立锚点引用':2292 '建议':1040,1059,1414,1862,2335 '建议必须能变成下次协作动作':1875 '开头':875 '张':1194,1197,2343,2346,2669 '归档会话可能位于':815 '当':2603 '当你不知道专业术语时':991 '当前会话通常位于':809 '当前分支':152 '当前时间':2627 '当前模型上下文和本地':830 '录屏':2570 '影响调研重点':2277 '待生成':1195,2344 '待生成项已保存':2347 '待解决问题':2725 '必须':1803 '必须位于文档最后':1258 '必须体现在调研重点或输出取舍中':1817 '必须修复后重新检查':2392 '必须先检查原始':68 '必须具体':998 '必须判断原因类型':1052 '必须包含':934 '必须在':1095 '必须归因到':2687 '必须放在全文最后':1276 '必须是分点陈述':1278 '必须是单个知识点':1531 '必须能变成下次协作动作':1060 '必须说明原因并给出次优来源':2713 '必须读取':1649 '必须调研该知识点的标准表达方式并告诉用户':2702 '必须逐字摘录':1490 '怎么用':1101,1149,1175,1790,2338 '急于推进':1036 '总结知识':27 '恢复复盘':2385 '恢复逐条':849 '成功图插入对应知识模块标题下方':2673 '成功时插入':1167 '我先用对话内确认兜底':1676 '我已经打开':1606 '我推测这次可以学':1677 '或':73,840,1357,2639 '或仪表盘':796 '或其他真实原因':1039 '或前置脚本输出':855 '或卡在什么地方':938 '或行为暴露了哪些知识缺口':1782 '截图':2571 '所在目录':2590 '才能进入':2311 '执行完自动追加':2600 '执行流程':1293 '扫描多个':1407 '扫描用户的每一条消息':1396 '找不到':853 '找出关键转折':1384 '找出本次用户真正想完成的目标':1383 '技术关键词':1558 '技术层级混在一起':984 '技术水平':1759 '把':1461,2274 '按':1072,1710,2265 '按日期倒序':2577 '按用户选择的深度写':1812 '推断冲突':1664 '推荐':1681,1686 '推荐深度只是建议':1542 '描述这个行为暗含的协作问题':1852 '描述这个行为暗含的问题':1028 '提交':1616 '提交与推送':2499 '提交信息':2644 '提交后我会自动继续':1610 '提取工作叙事材料':1382 '提取用户真实暴露出的低效行为或认知习惯':1410 '提取的具体对话片段':1839 '提炼':2283 '提示用户后续':2409 '提醒用户':2538 '插入知识调研':2270 '撰写文档':2264 '放到文档最后':2290 '放在模块标题下方':1169 '效率词典或下次行动清单':1248 '数据只作为内部判断材料':792 '数量由用户最终选择':1526 '文件':866,1961,2427 '文件名格式':106 '文件格式':2736 '文档':2728 '文档内容':2307 '文档结构':872 '文档落地路径':33 '新文档':2297,2460 '无':1774,1849,1891 '无原始日志则只能做轻量复盘':77 '无法获取':2405 '日志通常位于':800 '时使用':32 '时暴露出的行为问题':1831 '时间线表或自由扩展小标题':953 '是':1520 '是什么':1100,1142,1170,1174,1784,2337 '是后续写作依据':1648 '是否仍包含':70 '是最后的记忆卡':1260 '是没有知识':1856 '是用户补充反馈':1654 '显式按默认深度规则执行':1717 '暂时不用深入什么':1110 '暂时不用深入学什么':1722 '暂时没启动成功':1675 '更好的说法':989 '更快做对':1231,1910 '更新':2301,2438,2451,2601,2620 '更新已有条目':2630 '更新已有条目的描述和迭代标记':2463 '更新而非新建':2432 '最佳':828 '最佳节奏':57 '最后写':895 '最后更新时间':891 '最好能连接到本次会话':1256 '最小可复现实例':1118,1731 '最常使用它的场景':1255 '最新在上':2578 '最终交付了什么':937 '最终回复写明已生成':2341 '最终回复必须报告学习图状态':1191 '最终输出':2536 '最近提交':285 '有价值的决策':1068 '有原始日志则可正常复盘':76 '有用户补充反馈时':1709 '服务复习和下次协作':1246 '未伪造用户原话':2388 '未展开候选':1707 '未找到':500,528 '未被用户选择或未展开的候选知识点不生成图':1178 '未选择':1701 '本会话登记':2399 '本次为什么出现':1108,1721 '本次会话中它出现在哪里':2156 '本次会话里这个知识点出现在哪里':1776 '本次复盘背景':1477 '本次实践':1129 '本次实践摘要':1775 '本次最值得带走的知识点':1266 '本次用户真正想完成什么':935 '本次设计了':1506 '本次项目做了什么':1755 '本章是整篇复盘的信息入口':956 '本节跳过':1378 '权威教程':1158,1798,1810 '权威教程或官方视频':1092,2710 '条':2361,2365 '条为宜':1281 '条可执行协作':2371 '条消息无论如何都该压缩或新开':87 '来搜集信息':1085 '来源优先级':1090,2708 '来自':1126 '构成的行为序列':1409 '架构':2723 '标签':2595,2634 '标记':2465,2491 '标题超链接':2581 '核心收获':2573 '核心目标是什么':1756 '根据当前项目判断':98 '根据本次原始会话和工具结果':1206 '格式':2549 '格式必须出现':1287 '检查清单':1732 '检查清单和练习方向':1119 '检测到同会话已有复盘':783 '检测到当前会话已有复盘文档时':2606 '概念':1249,2162,2164,2166,2353 '概念名':1252 '概括或美化':1554 '模板':2107 '次学习图强尝试':1166 '正常执行完整复盘':833 '正文':1177 '此时必须在最终文档中说明冲突':1667 '每个':1529 '每个分析点都要有充分依据':2683 '每个展开的知识模块默认强尝试生成一张':17 '每个展开知识模块默认强尝试生成':2667 '每个展开知识点都已强尝试生成学习图':2340 '每个最终展开的知识模块必须执行':1164 '每个用户选择的知识点至少做一次':2698 '每个知识模块单独调用一次':1949 '每个知识点一个':1747 '每个知识点必须做':1082 '每个知识点必须能说明':1424 '每个知识点都包含':2336 '每个知识点都必须来自用户选择':1076 '每个编号学到':1690 '每个行为一个':1825 '每个行为格式':1023 '每个行为诊断都包含':2332 '每个论点必须有对话证据支撑':1871 '每个问题包含':1894 '每个问题必须写':2693 '每个问题格式':1212 '每条':2326,2423,2580 '每条格式':975 '每条都必须能在正文找到支撑':1283 '每次':2596 '每次先运行':128 '比如协作问题':1029 '没有先定义验收标准':1038 '没有反馈时':1716 '没有遵守规范':1857 '没遵守已有规范':1035 '注意力偏移':1056 '流水账或':931 '流程惯性':1055,1858 '消息':803 '消息和':1332 '深度递增':1120 '清理':2397 '环境准备':1296 '现状':1007 '理解问题':1031 '生成前先创建':1959 '生成后只复制':1962 '生成学习地图':1459 '生成当前知识模块图片':1997 '生成路径':1936 '用':926 '用了什么':1777 '用于判断是否相关':2742 '用人话概括':1478 '用人话解释这个知识点的定义':1785 '用人话说清楚':1267 '用户下次可以提供什么信息':1227,1906 '用户为什么需要学它':2157 '用户原话':978 '用户原话摘录':1481,1483 '用户可覆盖':105 '用户可辅助方式':1226,1905,2694 '用户在本次会话中对该知识点展现出的认知水平':1761 '用户当时怎么说':958 '用户按这个建议做':1042 '用户描述模糊的地方':2701 '用户暴露出的知识缺口':1779 '用户用过的术语和没用到的术语':1762 '用户的核心目标':1763 '用户的角色':1758,1842 '用户看完这张图应该记住什么':2174 '用户背景':1757,1841 '用户补充反馈':1770,1845,1887 '用户补充反馈优先于推荐深度和默认写法':1816 '用户补充反馈会影响行为诊断取舍':1872 '用户表达有问题的原话':1489 '用户说':26 '用户遵循这个建议后':1864 '用来搭网页界面的前端框架':1503 '用自然语言描述概念':2653 '用通俗易懂的描述解释这个知识点':1143 '由':96,1548 '的':2303 '的分析整理为':1464 '的抽象观察':1020 '的效率和效果应该更好':1046,1868 '的本地页面':1509 '的知识':2374 '的误解':1437 '监控地址':2729 '目录':94,903,1968 '目标不清':1057,1859 '目标是把':957 '目标是让用户选择':1455 '相关性和推荐深度':1429 '相对于':2588 '知识图':1131,2105 '知识图和行为诊断结果':2271 '知识图必须表达该模块的关键概念':1927 '知识图规则':1163 '知识或':943 '知识拓展':911,1071,2287 '知识拓展双向引用':2294 '知识模块图强尝试生成':2666 '知识模块图生成':1919 '知识点':1524,1752 '知识点了解的深度需匹配用户的选择':1104 '知识点名称':1125,1753,2141 '知识点生产前必须经过':1078 '知识点输出格式':1122 '知识缺口':1053 '知识调研':1745 '知识调研重跑成本高':56 '知道上下文':987 '短':999 '硬性规则':996,1047,1232,1274,1628 '碎片修复循环':1835 '示例路径':115 '章':2267 '等':2450 '等可识别字段防御式读取':825 '等待当前':1614 '管理':80 '精力分布':794 '约束':1008,1802,1869 '约束或检查点':1228,1907 '约束规范':2650 '练习方向':1733 '组装文档':2259 '结束':60 '结构化克制':2655 '结构化文档的全自动管线':2572 '结构组装':2269 '给出可执行的修复方法':1041,1863 '给出官方文档':1797 '给出更像工程任务单的表达':1012 '统一保存到':89 '统计':508,1305 '维护':2459 '缺失或浏览器无法打开':1642 '缺字段时降级而不是中断复盘':826 '而是让用户下次能更好地向':1766 '而是跨多个':1018 '而非新建':788 '能力逐张生成':1944 '自动':202 '自行分析本次原始会话':1550 '自行识别':1207,1884 '至少包含':2363,2369 '至少给出':1087,2705 '若两条路径都不可用':2049 '若为空写':1773,1848,1890 '若为轻量复盘':2387 '若内置图片工具不可用':2037 '若前置脚本显示':1353,1365 '若反馈要求关注某类行为':1873 '若只是背景知识':1794 '若图片生成失败':1179 '若已经压缩':67 '若某知识点找不到官方或主流项目来源':1094 '若缺少官方或主流项目来源':2712 '若这个知识点只是背景知识':1153 '范围':1556 '范围不清':982 '获取':2609 '落后':190 '落后远程':199 '行为':942,1832 '行为名称':1026,1833 '行为和知识结构的信息':900 '行为指令':2718 '行为指令或项目状态描述':2748 '行为诊断':12,1014,1823,2286 '行为诊断不是单条':1015 '行为诊断取舍':1657 '行为诊断只写当前摘要和文件证据能支撑的低置信观察':1379 '行为诊断和':2679 '行为诊断和工作内容中提取需要调研的单个知识点':1423 '补充关键词':1112 '补充原理拆解':1117 '表现':1216,1895 '表现不好的地方':1209,1886 '表现复盘':915,918,1204,1879 '表现复盘不使用固定四维评分':2351 '表现复盘不默认生成图':2681 '表现复盘和最终文档写法':1659 '表现复盘和速查手册中提取最值得记住的内容':2289 '表现复盘规范':2686 '表现整体合格':1239,1913 '表现评估':1432 '表现诊断直接相关的信息':945 '表现风险和下次':870 '表达':1111,1512,1516,1540,1682,1692,1723,1768,1814 '表达不够清楚':1002 '表达与行为复盘':908,955 '表达优化':1268,1286,2367 '表达优化和':2375 '表达原话规则':1544 '表达复盘':2293 '表达方式和':1714 '表达问题':979,997,1030,1400,1422,2329 '表达问题或本次实践中的真实知识缺口':1077 '要具体':2743 '要学哪些编号':1689 '要描述行为':1049 '要连接回本次实践':1152,1793 '覆写原文件':2619 '覆写已有文档':2300 '见':43 '规则':1518,2576 '规则如下':1081 '规范':39,2543,2697 '规范缺失':1054 '视频':1159 '视频处理':2566 '视频或高质量资源':1799 '视频转文本':104,2559,2564 '视频转文本工具':2555,2561 '解决什么问题':1162,1801 '解析失败':523 '解析时必须按':822 '解释':1250,2354 '解释深度':1713 '解释深度和':2279 '解释用户为什么会这样说或这样推进':1033,1855 '触发方式':25 '让用户确认想学的知识点和深度':9 '记录':91,117,752,2061,2076,2091,2504,2546 '讲清是什么':1107 '讲清楚':964 '讲解方式视具体知识点和用户需求而定':1144 '设计方向':2724 '识别':1435 '识别知识点':1419 '识别行为诊断项':1406 '诊断取舍':2278 '诊断和速查用结构化格式':2656 '详细说明这个名词的含义':1253 '语义上表示':1523 '语气像教练':965 '说明它在什么场景下有用':1791 '说明它在哪些场景下有用':1150 '说明本地':844 '说明适合看什么部分':1161 '请去页面确认这次想学习的知识点和深度':1609 '请告诉我':1688 '请基于本次原始会话和工具结果':1883 '请手动处理':236 '读取':1313 '读取已有文档':2608 '读取当前':2418 '读取用户可见对话和工具结果':1347 '读取用户消息':1330 '调整调研重点':1712 '调研':1453 '调研与诊断深化':1736 '调研结果必须融入':1099 '调研结果融入知识拓展章节':2714 '超过':85 '路径':1190 '路径使用相对路径':2587 '跳过逐条':1371 '轮次或行为序列证据':2389 '轻量复盘':2386 '输出':1719,1724,1729 '输出位置':88 '输出纯':1820,1876 '输出结构':1783,1850 '边界和关键机制':1786 '边界和容易误解的点':1254 '过度执行':1222,1439,1901 '运行前置脚本':1297 '返回的':1645 '还是其他问题':1225,1904 '还是陷入某个循环自己不自知':1861 '还有没有补充反馈':1694 '这一步在':2412 '这个知识点最重要的':2146 '这句话为什么会增加歧义或沟通成本':1492 '这是最佳路径':63 '这是误解':1220,1899 '这种空话':1003 '这类模糊归因':1236,2692 '进入轻量复盘':1370 '进度条或':2317 '进阶版':993,1010,1402,1495 '远程同步':187 '迭代':2593,2632 '迭代更新':2299,2462 '迭代次数':886 '适用场景':2754 '选方案':1066 '逐条':968,1393 '通过复盘按用户选择的学习深度补齐该知识点的关键背景':1764 '速查手册':920,1244 '速查手册概念表只有':2352 '遗漏':1221,1438,1900 '遵循':34 '避免多个模块混在同一张图里':1950 '都可用':66,832 '配置文件位置':2730 '里一行带过':1708 '重点帮用户说清目标':1006 '重点沉淀表达优化':11 '长会话':78 '问题':1027,1048,1412,1851,2333 '问题标题':1215 '阶段表':952 '降级':852 '降级到对话内确认':1643 '降级后必须在最终回复和文档中写清楚待生成数量':2055 '除非反馈无法执行':1666 '陷入局部修复循环':1037 '随后写导航目录和':892 '隔夜':83 '隔天继续时新开会话':84 '需要记住的知识':1265 '项目上下文收集':258,1302 '项目名':93,95,1468,2063,2078,2093 '项目文档':295 '项目标签':2582 '项目根目录':155 '项目活跃状态':2722 '项目状态':2421 '项目背景':1754 '领先':188 '领域标签':2583 '领域知识':13 '首次为1':887 '首次创建时间':889 '验收':1009 '验收标准':1063,1557 '验收标准缺失':983 '验收缺失':1860 '验收缺失等':1058 '验证':1806 '验证不足':1223,1902 '验证不足或上下文管理问题':1440 '高质量社区资源':1093,2711 '高质量资源':1160 '默认':985 '默认不写':1704 '默认模型':2044","prices":[{"id":"883afcff-1e2f-4cf8-af1b-858a47ac2f62","listingId":"b451ac70-a9f7-4e2d-8a24-1d1558748794","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"yike-gunshi","category":"forge-skills","install_from":"skills.sh"},"createdAt":"2026-04-24T07:03:38.539Z"}],"sources":[{"listingId":"b451ac70-a9f7-4e2d-8a24-1d1558748794","source":"github","sourceId":"yike-gunshi/forge-skills/forge-fupan","sourceUrl":"https://github.com/yike-gunshi/forge-skills/tree/main/skills/forge-fupan","isPrimary":false,"firstSeenAt":"2026-04-24T07:03:38.539Z","lastSeenAt":"2026-05-18T19:07:33.999Z"}],"details":{"listingId":"b451ac70-a9f7-4e2d-8a24-1d1558748794","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"yike-gunshi","slug":"forge-fupan","github":{"repo":"yike-gunshi/forge-skills","stars":11,"topics":["agent-skills","ai-development","claude-code","forge","skill-md","skillsmp"],"license":"mit","html_url":"https://github.com/yike-gunshi/forge-skills","pushed_at":"2026-04-28T05:11:10Z","description":"Forge — 文档驱动的 AI 辅助开发框架 | Document-driven AI development framework with 14 Skills covering brainstorm → PRD → design → engineering → QA → review → ship → retrospective","skill_md_sha":"4906047f7c8dbdcc2d5b9352bd56657864966e6d","skill_md_path":"skills/forge-fupan/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/yike-gunshi/forge-skills/tree/main/skills/forge-fupan"},"layout":"multi","source":"github","category":"forge-skills","frontmatter":{"name":"forge-fupan","description":"协作复盘与知识沉淀。在完成一段工作后，先启动本地 Fupan Workbench 让用户确认想学的知识点和深度，再按选择调研并生成结构化复盘文档，重点沉淀表达优化、行为诊断、领域知识、AI 协作改进和可执行 TLDR；每个展开的知识模块默认强尝试生成一张 Image 2 学习图，失败时保存 prompt pack 并明确标注待生成。触发方式：用户说\"总结知识\"、\"学习总结\"、\"复盘\"、\"可视化复盘\"、\"/forge-fupan\"时使用。"},"skills_sh_url":"https://skills.sh/yike-gunshi/forge-skills/forge-fupan"},"updatedAt":"2026-05-18T19:07:33.999Z"}}