关于 chief-upgrade
用于将 Chief 升级到指定版本、分支或标签的技能。它会识别编码 Agent 和安装模式,先展示变更供用户批准,并保护用户内容、验证升级结果。
主要功能
- 01选择稳定版、canary 或指定标签
- 02识别 Agent 与安装模式
- 03规划变更并比较 AGENTS.md
- 04获批后才应用升级
- 05验证文件并清理临时数据
适用场景
- 01将 Chief 升级到指定版本
- 02应用前审查升级变更
- 03升级时保留项目专属规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ thaitype/ chief --skill chief-upgrade安装后在 Claude Code 中输入/chief-upgrade确认已加载。
详细介绍
将 Chief 升级到参数中指定的版本。
参数
第一个参数是目标版本(分支或标签)。可选。
- 无参数 → 升级到最新稳定版(语义化版本号最高的标签)。运行
git ls-remote --tags https://github.com/thaitype/chief.git查找,去掉refs/tags/,忽略^{}条目,并选择语义化版本号最高的标签。 canary→ 最新的 canary 分支(正在开发,尚未发布)v1.0.0、v2.0.0等 → 指定的标签版本
步骤
0. 检测编码 Agent 和安装模式
检测用户配置了哪种编码 Agent:
- 存在
.claude/agents/→ 建议使用 claude-code - 存在
.github/agents/→ 建议使用 copilot - 仅存在
.agents/→ 建议使用 opencode
检测安装模式:
- Agent 专用目录中的任意文件是符号链接 → link
- 文件是普通文件 → copy
- 不存在 Agent 专用目录 → 建议使用 link
请用户确认 Agent 和模式。
1. 克隆目标版本
git clone --depth 1 --branch <version> https://github.com/thaitype/chief.git .chief-agent-tmp
2. 运行 upgrade.sh --plan 并对比 AGENTS.md
运行升级脚本的计划模式:
bash .chief-agent-tmp/scripts/upgrade.sh --plan --agent <agent> --mode <mode>
然后单独对比 AGENTS.md(脚本不会处理此文件):
diff AGENTS.md .chief-agent-tmp/template/AGENTS.md
向用户展示这两项输出。对于 AGENTS.md,说明:
- 顶部的 Project Rules 部分由用户维护 — 切勿覆盖。
- 其下所有内容(Rules Hierarchy、Chief 等)都是框架内容,可能需要更新。
3. 等待用户批准
请用户检查。他们可以:
- 全部批准
- 取消
- 要求查看特定文件的更多详情
4. 运行 upgrade.sh(应用更改)并合并 AGENTS.md
bash .chief-agent-tmp/scripts/upgrade.sh --agent <agent> --mode <mode>
然后手动合并 AGENTS.md。按以下优先级处理:
-
如果用户的
AGENTS.md包含和标记(新的延迟安装约定):- 将两个标记之间的所有内容替换为
.chief-agent-tmp/template/AGENTS.md中的内容。 - 标记之外的所有内容保持原样。
- 将两个标记之间的所有内容替换为
-
否则,如果用户的
AGENTS.md有## Project Rules部分(旧版 v4 布局):- 将从
## Project Rules到下一个---之间的所有内容视为用户所有。 - 将该部分之后的所有内容替换为模板中的新框架内容。
- 用户的 Project Rules 部分保持原样。
- 将从
-
否则(没有标记,也没有 Project Rules 部分):
- 将整个文件视为框架内容,并用模板覆盖。
向用户展示合并后的结果,并在写入前征求确认。
升级绝不会触碰 .chief/(project.md、里程碑、规则)— 这些是用户数据,即使内容为空也是如此。
如果 upgrade.sh 成功,跳到步骤 6。
如果 upgrade.sh 失败,继续步骤 5。
5. 手动回退(如果 upgrade.sh 失败)
按照与 chief-install 回退流程相同的方式手动执行升级:
-
覆盖 Agent 文件 — 对每个
.chief-agent-tmp/template/.agents/agents/*.md:- 从本地文件中提取当前的
model:值 - 用模板文件覆盖本地文件
- 将
${thinking_model}和${coding_model}替换为提取到的模型值 - 对于新的 Agent 文件(本地没有对应文件):复制并处理模型占位符
- 从本地文件中提取当前的
-
根据 Agent 和模式更新集成文件:
claude-code link:
for f in .agents/agents/*.md; do ln -sf "../../$f" ".claude/agents/$(basename "$f")"; doneclaude-code copy:
cp .agents/agents/*.md .claude/agents/copilot link:
for f in .agents/agents/*.md; do ln -sf "../../$f" ".github/agents/$(basename "$f")"; donecopilot copy:
cp .agents/agents/*.md .github/agents/其他 Agent — 无需集成文件。
-
模型占位符 — 如果任何文件中仍有
${thinking_model}或${coding_model}:- claude-code:替换为
opus/sonnet - 其他 Agent:询问用户模型名称并进行替换
- claude-code:替换为
6. 验证
检查所有预期文件是否存在,以及符号链接是否可用(如果使用 link 模式)。修复发现的任何问题。
7. 清理
rm -rf .chief-agent-tmp
8. 总结
报告更改内容、跳过的内容,以及仍需手动执行的步骤。
重要规则
- 所有临时文件都必须位于
.chief-agent-tmp/中。绝不能写入/tmp、会话目录、主目录或仓库外的任何其他位置。 - 未经用户批准,绝不能应用更改
- 绝不能覆盖用户在
.chief/里程碑(目标、契约、计划、报告)中的内容 - 绝不能删除仅本地存在的文件——升级只更新和添加,绝不删除
- 绝不能凭记忆概述差异——始终使用实际的差异输出(来自 upgrade.sh 或手动命令)
- 即使升级已取消,也始终清理
.chief-agent-tmp