CNB CLI 与 Skills:让脚本和人共用一个入口
第 22 篇提过 cnb 命令。这篇把它当工具用起来。
一句话定位:CNB CLI 是 OpenAPI 的命令行封装。页面上能点的,基本都能在命令行里对着干; 页面上点不了的(批量、循环、接管道),它是唯一选择。
一、装和登
npm install -g @cnbcool/cnb-cli # 需要 Node.js LTS
cnb --help
不想装也行,用 Docker:
docker run --rm cnbcool/cnb-cli cnb users get-user-info
登录走 OAuth2 设备授权,终端里会给你一个码,去网页确认:
cnb login
cnb status # 确认当前登录身份
cnb logout
也可以用环境变量 CNB_TOKEN 直接给令牌,适合脚本和临时容器。
二、命令是四层的
cnb <模块> <工具> [参数]
层层 --help 找下去,比背命令快:
cnb --help # 有哪些模块
cnb issues --help # issues 模块有哪些工具
cnb issues comment --help # 这个工具要什么参数
模块大致对应平台的资源面:仓库、Issue、PR、构建、制品、组织成员、知识库。
常用快捷命令(很多会自动从环境变量识别当前仓库和编号,不用手传 --repo):
cnb issues get # 当前 Issue 详情
cnb issues comment --body "已修复"
cnb pulls list-files # 当前 PR 的变更文件
cnb pulls check-status # PR 的 CI 状态
cnb issues comment --body 内容 --repo group/repo --number 12 # 跨仓库时显式指定
三、在流水线里怎么用
流水线里 CNB_TOKEN 由平台自动注入,不需要登录:
main:
push:
- docker:
image: cnbcool/cnb-cli
stages:
- name: 构建完成后回写 Issue
script: |
cnb issues comment --number "$ISSUE_ID" \
--body "构建完成:$CNB_COMMIT_SHORT"
这种「构建跑完反手写回 Issue / 改 PR 标签」的用法,是把流水线从"单向执行"变成"参与协作"的关键一步。
:::tip 注意令牌边界
PR 事件和公开仓库的 CNB_TOKEN 权限是受限的(只读、不能跨私有资源)。
写操作要放在 push、pull_request.target、tag_push 这类可信事件里。
:::
四、Skills 是什么,和 CLI 什么关系
CLI 是能力,Skills 是用法说明。
Skills 是写成 SKILL.md 的流程手册,告诉 NPC「遇到这类任务按什么步骤做、用哪些命令、注意哪些约束」。 NPC 加载它,就等于把某套固定打法装进了脑子。
一个 Skill 的结构很简单:
skills/<name>/SKILL.md
正文里可以引用相对路径的示例文件、脚本、模板。NPC 加载时会拿到 path,据此解析绝对路径。
五、什么时候值得写一个 Skill
不是所有事都值得。判断标准:同一套流程你会向 NPC 解释第二次。
适合抽成 Skill 的:
- 固定的发布检查清单(改版本号 → 跑测试 → 打 tag → 写 Release)
- 仓库特有的代码规范与目录约定
- 某个内部系统的查询套路(先查 A 再查 B,字段叫 C)
不适合的:
- 一次性的探索任务
- 纯知识问题(那该进知识库,不是 Skill)
六、一个最小可用的 Skill 长什么样
---
name: release-checklist
description: 发布新版本时使用:改版本号、跑构建、打 tag、发 Release
---
# 发布检查清单
1. 读 `package.json` 的 version,确认与目标版本一致
2. 执行 `yarn build` 确认通过
3. `git tag v<version>` 并推送
4. 用 `cnb` 创建 Release 并附上 CHANGELOG 对应段落
## 约束
- 不修改 git config
- 版本号只增不减
description 写得越像「什么情况下该用我」,NPC 命中率越高。
七、CLI 和 Skills 合起来能干什么
回到这个仓库本身。.cnb.yml 里 CI 跑的是 yarn build,Issue 是需求入口,
NPC 是被 @ 召唤的执行者。三者之间的每一次串联,底层都是 CLI 在调 OpenAPI。
理解了这层,你就能自己接出流程:评论触发 → NPC 改代码 → 开 PR → CI 验证 → 写回 Issue。 这不是炫技,是把「人盯流程」换成「流程找人」。