ce-compound-refresh

ce-compound-refresh

热门

结合当前代码库,刷新仓库中沉淀的经验心得(Learnings)。用于审计过期失效、重复重叠、已被替代或发生偏离的经验记录;除非明确涉及经验知识库维护,否则请勿用于常规代码重构、排查 Debug 或 Code Review。

2.4万Star
1885Fork
更新于 2026/7/31
SKILL.md
只读
名称
ce-compound-refresh
描述

结合当前代码库,刷新仓库中沉淀的经验心得(Learnings)。用于审计过期失效、重复重叠、已被替代或发生偏离的经验记录;除非明确涉及经验知识库维护,否则请勿用于常规代码重构、排查 Debug 或 Code Review。

Compound Refresh

维持 <root>/solutions/ 目录下文档的长期质量。本工作流会将现有的经验心得(Learnings)同当前代码库进行对照复核,并同步更新依赖这些经验导出的模式文档(Pattern Docs)。

Setup

在本次调用的最开始(任何子 Agent 分派之前)执行一次此脚本,并遵循其输出的指令——除非输出指令与本 Skill 自身的“询问用户”规则相冲突(无论是仅适用于非交互模式的规则,还是全局通用的规则),此时一律以本 Skill 的规则为准,不发起任何阻塞式提问。请勿在同一次调用中重复运行;后续若发起新的 Skill 调用,会自动运行其自身的初始化脚本。若当前没有可用的 Node 运行时,Skill 将按常规逻辑继续执行。

SKILL_DIR="<absolute path of the directory containing the SKILL.md you just read>";
NODE="$(for c in node nodejs; do command -v "$c" >/dev/null 2>&1 && "$c" -e '' >/dev/null 2>&1 && { echo "$c"; break; }; done)";
if [ -n "$NODE" ]; then
"$NODE" "$SKILL_DIR/scripts/context.mjs" || echo "context script failed; continue with the skill's normal behavior";
else
echo "no Node runtime; continue with the skill's normal behavior";
fi

Mode Detection

检查传入的调用参数中是否包含 mode:non-interactive 或其已废弃的别名 mode:headless。如果存在任意一个,则将其从参数列表中移除(剩余部分作为作用域提示 scope hint),并以非交互模式运行。若两个 Token 同时存在,并不构成冲突。

模式 适用场景 行为说明
交互模式(默认) 用户在场且能够回答提问 遇模棱两可的情况提示用户决策,并在执行操作前进行确认
非交互模式 参数中包含 mode:non-interactive 或废弃别名 mode:headless 无用户交互。直接自动执行所有明确无误的操作(Keep、Update、Consolidate、auto-Delete,以及证据充分时的 Replace)。模棱两可的情况直接标记为过期(stale)。最后生成汇总报告。

非交互模式规则

  • 跳过所有用户提问。 绝不暂停等待输入。
  • 处理作用域内的所有文档。 不询问缩小作用域——如果未提供 scope hint,则处理全部文档。
  • 尝试所有安全操作: Keep(无操作)、Update(修复引用)、Consolidate(合并并删除被包含的文档)、auto-Delete(满足明确的删除条件)、Replace(证据充分时)。如果写入成功,记录为 Applied(已应用)。如果写入失败(如无权限),在报告中将其记录为 Recommended(建议)并继续执行——不要中断或索要权限。
  • 文件迁移(Relocations)遵循自动删除模式:仅当所有条件均满足时才执行,否则记录为建议。 仅在以下 4 个条件同时满足时,才自动应用非交互式迁移:(1) Frontmatter 字段与所在目录按分类映射规则不一致;(2) 内容证据明确表明方向——是目录放错了,而不是 Frontmatter 填错了;(3) 目标分类目录已存在;(4) 所有指向该文档的引用都在仓库内部且可通过机械化重写。只要有任意条件不满足——包括内容似可归入任一分类的文档——一律将迁移操作记录在 Recommended 下。拆分文档(Splits)在非交互模式下永远只作建议:文档拆分门槛属于检索价值判断,不存在绝对标准,因此须将提议的片段边界记录在 Recommended 下。
  • 不确定时标记为过期(stale)。 如果分类确实存在歧义(例如在 Update、Replace、Consolidate、Delete 之间犹豫不决),或 Replace 的证据不足,请在 Frontmatter 中标注 status: stalestale_reasonstale_date。如果连标记 stale 的写入也失败了,同样将其作为建议写入报告。
  • 采取保守的置信度态度。 在交互模式下,压线边界情况会向用户提问;而在非交互模式下,压线情况直接标记为 stale。宁可标记 stale,也绝不盲目执行潜在的错误操作。
  • 始终生成汇总报告。 报告是核心交付物。报告包含两个板块:Applied(已成功写入的操作)和 Recommended(因权限不足等无法写入的操作,附带完整依据以便人工跟进或切回交互模式运行)。无论授予了什么权限,报告结构保持一致——区别仅在于各项操作落地在哪个板块。

CONCEPTS.md 引导创建请求

如果调用本 Skill 的明确目的是创建或引导生成 CONCEPTS.md(例如“创建 CONCEPTS.md”、“构建概念映射图”、“建立共享词汇表”),此时意图在“构建词汇表文件”与“运行 <root>/solutions 刷新”这两项工作之间存在歧义,因此在继续前需先澄清意图。请使用宿主平台提供的阻塞式提问工具:Claude Code 中使用 AskUserQuestion(若未加载 schema,先调用 ToolSearch 并指定 select:AskUserQuestion)、Codex 中使用 request_user_input、Antigravity CLI (agy) 中使用 ask_question、Pi 中使用 ask_user(需安装 pi-ask-user 插件)。只有在宿主环境确实不存在阻塞式工具或调用报错(例如 Codex 编辑模式)时,才退回到纯文本带序号选项——绝不能仅因为需要加载 schema 就放弃工具。严禁默默跳过提问。提供以下两个选项:

  1. 创建 CONCEPTS.md(构建概念映射图) —— 播种全仓库的概念映射图并提交;仅跳过 <root>/solutions 的分类阶段(阶段 0–4)。读取 references/concepts-vocabulary.md 并遵循其播种目标播种范围(全仓库)规则:从已声明的领域模型(schema、核心类型、主模型、顶层领域文档)中提取项目的核心领域名词,各项均需达标,数量由代码库决定。编写前言(参见阶段 4.5),按组织规则进行聚类,并运行可发现性检查(Discoverability Check),使 AGENTS.md/CLAUDE.md 能够暴露新文件。然后进入阶段 5(提交变更),通过与 Refresh 相同的持久化写入流程来提交/发起 PR 保存新的 CONCEPTS.md 及任何指令文件修改——切勿保持未提交状态。
  2. 运行刷新循环(Refresh Cycle) —— 按下文正常的刷新流程继续;若 CONCEPTS.md 不存在则会进行播种,并作为阶段 4.5 的一部分进行比对对齐。

在非交互模式下由于无法向用户提问:默认执行刷新循环(词汇表无论如何都会在阶段 4.5 中完成播种与对齐),并在报告中注明未单独运行全仓库的引导创建。

Interaction Principles

以下原则仅适用于交互模式。在非交互模式下,请跳过所有用户提问,直接应用上文的非交互模式规则。

遵循与 ce-brainstorm 相同的交互风格:

  • 一次只问一个问题 —— 使用宿主平台提供的阻塞式提问工具:Claude Code 中使用 AskUserQuestion(若未加载 schema 先调用 ToolSearch 匹配 select:AskUserQuestion)、Codex 中使用 request_user_input、Antigravity CLI (agy) 中使用 ask_question、Pi 中使用 ask_user(需要 pi-ask-user 扩展)。仅当宿主不存在阻塞工具或调用出错时(如 Codex 编辑模式),才回退到纯文本序号选项——不要因为需要加载 schema 就跳过工具。切勿无声无息地跳过提问
  • 存在自然选项时优先使用多项选择
  • 作用域与意图切入,仅在必要时才逐步缩小范围
  • 拿到证据前不要急于让用户做决定
  • 先给出建议并简要解释理由

目的不是强迫用户走完一张检查清单,而是用最小的摩擦帮助他们做出良好的维护决策。

Artifact Root

本 Skill 会审查并刷新 <root>/solutions/ 路径下的经验文档。首次拼接 <root>/solutions/ 路径时解析出 <root>(按下方配置块说明);将解析后的 <root>/solutions/ 路径传递给任何子 Agent,而非传配置原文本。

<!-- ce-docs-root:start -->
在拼接任何产物路径前,先解析出 CE 产物根目录 <root>

  • 读取 <repo-root>/.compound-engineering/config.local.yaml 中的 docs_root,若无则读取 config.yaml;取第一个非空值(<repo-root>git rev-parse --show-toplevel)。若均未设置 -> <root> 默认为 docs,与此前完全一致。
  • 校验已设置的值:必须是仓库相对目录,且经过软链接解析后的真实路径需留在仓库内部,既不能是仓库根目录,也不能在 .git/ 下。否则终止并报错指出 docs_root 及对应取值 -- 绝不回退至 docs
  • 使用 <root> 作为唯一的产物存储位置:若不存在则创建,按 <root>/<subdir> 格式拼接本 Skill 专用子目录的各项路径,绝不要再去读取 docs
    <!-- ce-docs-root:end -->

Refresh Order

按以下顺序进行刷新:

  1. 先审查相关的单篇经验文档(Learning Docs)
  2. 记录哪些经验依然有效、被更新、被合并、被替换或被删除
  3. 接着审查依赖这些经验的模式文档(Pattern Docs)

为什么采用这个顺序:

  • 经验文档(Learning Docs)是最基础的证据来源
  • 模式文档(Pattern Docs)是从一篇或多篇经验中衍生出来的
  • 过期失效的经验可能导致模式文档看起来比实际更合理/有效

如果用户一开始指定了一篇模式文档,你可以从那里入手以了解其关切点,但在修改模式文档之前,务必先复核其背后的经验文档。

Maintenance Model

对每个候选文档产物,将其分类为以下五种结果之一:

处理结果 含义 默认动作
Keep(保留) 依旧准确且具有实用价值 默认不修改文件;在报告中注明已复核且值得信赖
Update(更新) 核心解决方案仍然正确,但引用/路径等发生了偏离 根据确凿证据直接在原文件上进行修改
Consolidate(合并) 两篇或多篇文档高度重叠但内容均正确 将独特内容合并至主文档(Canonical Doc),删除被包含的文档
Replace(替换) 旧文档会产生误导,但已知有更好的替代方案 创建一份可靠的新文档,然后删除旧文档
Delete(删除) 不再有用、不再适用或不再独立存在 删除该文件 —— git 历史记录保留了它,以便日后有需要时恢复

Core Rules

  1. 用证据辅助决策。 下文列出的信号是输入参考,而非机械化的计分卡。请运用工程判断力来决定文档是否依然值得信赖。
  2. 优先选择不写入的 Keep。 不要为了留下一条“已复核”的痕迹而专门去修改文档。
  3. 让文档向现实看齐,而不是反过来。 当当前代码与经验文档不一致时,请更新文档以反映当前代码。本 Skill 的职责是保证文档准确性,而不是做 Code Review —— 不要去问用户代码变更究竟是“有意的”还是“退化(regression)”。如果代码改了,文档就该匹配。如果用户认为代码有错,那是本工作流之外的独立问题。
  4. 果断决策,减少提问。 当证据十分明确时(如文件重命名、类移动、引用失效),直接应用更新。在交互模式下,仅当正确的做法确实存在歧义时才询问用户。在非交互模式下,将模棱两可的情况标记为 stale 而不是提问。我们的目标是在人工把关关键判断的前提下实现自动化维护,而不是每发现一个点就问一次。
  5. 避免无价值的无用修改(churn)。 不要仅仅为了修复错别字、润色文案或做不影响准确性与易用性的表面修饰而去编辑文档。
  6. 仅在存在有价值且有证据支撑的偏离时使用 Update。 路径、模块名称、相关链接、分类元数据、代码片段以及明显过时的表述,只要修复它们能显著提升准确性,都在允许修改之列。归错类也是一种偏离:当文档的所在目录与其 Frontmatter 中的 category 不一致,或者其内容明确属于另一个现有的分类时,请按 Update 流程中的迁移说明重新安放文件。