cnb-rs skill remove
cnb-rs skill remove <SKILL>... [options]
# alias
cnb-rs skill rm <SKILL>...卸载已装的 cnb skill:删 canonical 目录 + 各 agent 目录(symlink / copy 均处理)+ 从 lockfile 移除 entry。
gh skill / vercel-skills 装的 entry(非 sourceType: "cnb")会被拒绝处理并给清晰提示,避免误删它家管理的 skill。
参数
<SKILL>...:要卸载的 skill name(至少一个,对应 lockfile 中的 entry key)
选项
--scope <SCOPE>:安装 scope(project/user),决定要去哪个 base_dir 找文件;默认project--dir <PATH>:自定义目标根目录(覆盖--scope)--keep-files:仅删 lockfile entry,保留磁盘文件(给 manual 接管场景)
行为:7 步流程
- 校验 args:clap 层强制
<SKILL>至少一个 - 加载 lockfile + 提取
sourceType: "cnb"条目 - 对每个 name 选 entry:缺失或非 cnb → fail-fast,列出可选的 cnb skill 名
- 解析 scope / base_dir:决定文件实际位置
- 如果非
--keep-files:- 删 canonical universal dir:
<base>/.agents/skills/<skill>/ - 依据 lockfile entry 的
installed_agents字段,删每个 agent 的<base>/<agent.skills_dir>/<skill>/ - best-effort 语义:目录不存在 →
[skip]提示但不 fail(migrated 场景兼容) - symlink dir 用
remove_dir,真实 dir 用remove_dir_all,不会沿 symlink 误删 canonical
- 删 canonical universal dir:
- lockfile remove:抹掉该 entry
- lockfile save
关键设计
Agent 列表来自 lockfile 而不是 --agent / detect
remove 时不读 --agent 选项,也不做 detect_installed()。完全依据 lockfile entry 记录的 installed_agents 字段 —— 即「当年装到哪几个 agent,就从哪几个 agent 删」。
这避免一个常见 footgun:用户先装 claude-code,后来又装了 windsurf(但是手动操作),用 cnb-rs skill remove 时 windsurf 目录会残留。我们把责任精准化:只清理 cnb-rs 当年实际写过的位置。
--keep-files 的用途
把 skill 文件交给用户手动管理:
bash
# 装一次 + 把 lockfile 里登记移除,让 git track 这些文件
$ cnb-rs skill install wwvo/myorg/skills my-skill --dir ./.agents
$ cnb-rs skill remove my-skill --keep-files --dir ./.agents
$ git add .agents/skills/my-skill之后该 skill 不再受 cnb-rs skill update --all 管。
Symlink 安全
remove_skill_dir 用 symlink_metadata() 先 stat(不跟 symlink),再分支:
- symlink dir →
remove_dir:只删 link 本身,不会跟到 canonical 把真实文件递归删了 - 真实 dir →
remove_dir_all:递归删整目录(canonical 用这条) - 普通文件 →
remove_file(不该出现,但 best-effort)
输出示例
普通 remove(含 symlink 链接)
$ cnb-rs skill remove cnb-rs-api
📂 base: /home/alice/myproj
📋 targets: 1 skill(s) to remove
── cnb-rs-api ──
[del] canonical: /home/alice/myproj/.agents/skills/cnb-rs-api
[del] claude-code: /home/alice/myproj/.claude/skills/cnb-rs-api
[del] windsurf: /home/alice/myproj/.codeium/windsurf/skills/cnb-rs-api
✓ removed
🎉 removed 1 skill(s) from lockfile; 3 dirs deleted from disk; 0 missing dirs skipped多 skill 一次删
$ cnb-rs skill rm cnb-rs cnb-rs-api cnb-rs-issue
📂 base: /home/alice/myproj
📋 targets: 3 skill(s) to remove
── cnb-rs ──
[del] canonical: ...
✓ removed
── cnb-rs-api ──
[del] canonical: ...
✓ removed
── cnb-rs-issue ──
[del] canonical: ...
✓ removed
🎉 removed 3 skill(s) from lockfile; 6 dirs deleted from disk; 0 missing dirs skipped--keep-files:仅删 lockfile entry
$ cnb-rs skill remove cnb-rs-api --keep-files
📂 base: /home/alice/myproj
📋 targets: 1 skill(s) to remove
ℹ --keep-files:仅删 lockfile entry,磁盘文件保留
── cnb-rs-api ──
✓ removed
🎉 removed 1 skill(s) from lockfile; 0 dirs deleted from disk; 0 missing dirs skipped错误示例
没传 skill name
$ cnb-rs skill remove
error: the following required arguments were not provided:
<SKILL>...
Usage: cnb-rs skill remove [OPTIONS] <SKILL>...
For more information, try '--help'.Skill 不在 lockfile 中
$ cnb-rs skill remove nonexistent
错误: skill 'nonexistent' 不在 lockfile 中
可选 (cnb): cnb-rs, cnb-rs-api, cnb-rs-issueSkill 是 gh / vercel 装的(非 cnb sourceType)
$ cnb-rs skill remove react-best-practices
错误: skill 'react-best-practices' 的 sourceType 不是 "cnb"
提示:cnb-rs 只能管自家 sourceType="cnb" 的 entry;其它 (gh/vercel) 请用对应 CLI 卸载退出码
0:所有 target 删完(含目录缺失但 best-effort 通过的情况)1:任何一步失败(skill 不存在 / 非 cnb / 删除时遇到不可恢复的 IO 错)
与 gh skill remove / vercel-skills remove 的差异
| 特性 | cnb-rs skill remove | gh skill remove | vercel-skills 移除 |
|---|---|---|---|
| 处理范围 | 仅 sourceType: "cnb" | 仅 sourceType: "github" | 仅 vercel 自家 |
| Agent 列表来源 | lockfile installed_agents 字段 | detect | npm script |
--keep-files | ✅ | ✅ | ⚠ 不一致 |
| 对 symlink 的处理 | ✅ 用 symlink_metadata 安全删 link,不沿 link 走 | ✅ 同 | ⚠ 不一致 |
| pass-through 其它 sourceType | ✅ lockfile 中其它家 entry 完全不动 | ✅ 同 | ✅ 同 |
| 退出语义 | best-effort 删除磁盘 + fail-fast lockfile | 同 | 同 |
示例
bash
# 卸载一个 skill(删文件 + 移 lockfile entry)
$ cnb-rs skill remove cnb-rs-api
# alias
$ cnb-rs skill rm cnb-rs-api
# 一次卸载多个
$ cnb-rs skill remove cnb-rs cnb-rs-api cnb-rs-issue
# 仅删 lockfile 不动磁盘(把 skill 交给手工 / git 管理)
$ cnb-rs skill remove cnb-rs-api --keep-files
# 卸载 user scope 装的
$ cnb-rs skill remove cnb-rs-api --scope user
# 卸载到指定目录的
$ cnb-rs skill remove cnb-rs-api --dir ~/my-other-base另请参阅
- cnb-rs skill
- cnb-rs skill install — 首次安装
- cnb-rs skill list — 查看已装 + agent 字段
- cnb-rs skill update — 升级
- agentskills.io — skill 规范