扫描前端仓库页面逻辑,提炼业务场景,生成专业可执行的业务 Skill。
核心理念:不是翻译代码,而是读懂业务意图。
生成的 Skill 要像一个熟悉业务的同事写的操作手册,而不是接口文档的堆砌。
生成的 Skill 必须基于已有的 CLI 工具,这是硬性前提。Skill 里的每一步操作都通过 CLI 命令执行,不内联 HTTP 请求。原因:
首先确认用户是否已有 CLI:
> 你是否已经有可用的业务 CLI 工具?如果有,CLI 名称是什么?
情况 A:已有 CLI
确认 CLI 名称(如 my-shop-cli),运行 看一下有哪些命令,进入 Step 2。
情况 B:没有 CLI
必须先生成 CLI,再来生成 Skill。 告知用户:
生成业务 Skill 需要先有对应的 CLI 工具。
请先生成 CLI(可通过分析前端 API 定义自动生成),完成后回来继续。
等用户生成完 CLI 并确认可用后,再继续 Step 2。不提供跳过选项。
在扫描仓库之前,先把 CLI 有哪些命令搞清楚。 生成的 Skill 里的每一步操作都要对应到真实存在的 CLI 命令,不能用不存在的命令。
# 查看所有顶层命令
<cli-name> --help
# 逐一查看每个子命令的参数
<cli-name> <domain> --help
<cli-name> <domain> <action> --help
如果 CLI 未安装,先安装再继续:
npm install -g <cli-name> # Node.js CLI
pip3 install <cli-name> # Python CLI
安装后重新运行 确认可用。如果安装失败,告知用户并停止——不能在没有 CLI 命令清单的情况下继续生成 Skill。
读完 --help 后,整理出一张命令清单:
<cli-name> 可用命令:
auth show / refresh
product list --status --type --page --page-size
product get <id>
product create --name --type --start-date --end-date
order list --status --start-date --end-date
order get <id>
后续生成 Skill 时,只能使用这张清单里存在的命令和参数。
向用户确认(消息中已有则直接使用):
> 核心原则:三层漏斗,以 CLI 为锚点。
> 不要完整读每个页面文件——一个页面 500~2000 行,真正有业务价值的不超过 20%。
> 第一层宽网扫出所有操作入口 → 第二层只精读有价值的 handler 函数体 → 第三层与 CLI 命令清单对齐。
目标:不读完整文件,只用搜索工具快速拿到三类高密度信息。
路由文件几十行,直接告诉你所有页面、业务模块划分、页面层级关系。用 codebase_search 搜索 "route configuration" 或 glob_file_search 搜索 router./routes.,找到后完整读取。
读完路由后,整理出页面清单:
页面清单:
/product/list → 商品列表页
/product/create → 创建商品页
/order/list → 订单列表页
/order/detail/:id → 订单详情页
函数名本身就是业务语言,handleCreateProduct 比读 200 行代码更直接。用 grep 工具搜索:
pattern: const handle[A-Z]|function handle[A-Z]|const on[A-Z]|async handle[A-Z]
glob: *.{tsx,vue,ts}
整理出操作清单(按页面分组):
操作清单:
商品管理页:
handleQueryList → 查询商品列表
handleCreateProduct → 创建商品
handleUpdateStatus → 修改商品状态
handleDeleteProduct → 删除商品
pattern: await.*api\.|await.*service\.
glob: *.{tsx,vue,ts}
| 需要知道的 | 从哪里读 |
|---|---|
| --- | --- |
| 有哪些参数、类型、必填/可选、枚举值含义 | |
| 每个参数的值从哪来(用户输入 / 上一步返回 / 页面状态) | handler 函数体 |
对每个操作逐一运行 CLI 子命令 --help,提取:参数名、是否必填、枚举值及含义、默认值。
用 grep 定位函数起始行,再用 read_file 精读那几十行。只关注五件事:
queryScene: 'MANAGE')。发现场景标识必须核查 CLI 是否已固定写入。if 判断 → Skill 的前置检查步骤await 的先后关系 → Skill 的步骤编排Modal.confirm、Dialog、confirm() → Skill 的确认步骤catch 块里的 message.error(...) → Skill 的错误处理说明跳过:JSX/template 渲染、CSS、loading 状态、UI 组件 props。
合并输出参数表:
操作:创建商品(handleCreateProduct)
CLI 命令:<cli-name> product create
参数表:
--name 必填 用户输入(formData.name)
--type 必填 用户选择(枚举:1=实体 2=虚拟)
--shop-id 可选 自动读取全局状态,不需要问用户
前置条件:必须已选店铺
用户确认:有(Modal.confirm "确认创建商品?")
错误处理:商品名称重复时提示"商品名称已存在"
把操作清单和 CLI 命令清单做映射:
整理每个页面的业务语义:页面名称、业务场景、用户角色、可执行操作列表(只列有 CLI 对应的)、操作间依赖。
根据操作特征判断 Skill 类型:
| 操作特征 | Skill 类型 | 示例 |
|---|---|---|
| --- | --- | --- |
| 单步查询,无副作用 | 查询型 | 查商品列表 |
| 多步骤,有数据写入 | 操作型 | 创建商品 |
| 需要分析和判断 | 分析型 | 分析销售效果 |
| 跨多个接口的完整流程 | 流程型 | 商品从创建到上架 |
核心原则:以用户会说什么话来划分,而不是以页面模块或接口来划分。
❌ 错误(按接口分组太细):用户说"查商品",AI 不知道触发哪个
✅ 正确(按用户意图分组):一个"商品查询" Skill 覆盖多个子查询维度
经验值:3~5 个 Skill 覆盖一个业务模块。
列出将要生成的所有 Skill:
📋 发现以下业务场景:
页面:商品管理(src/pages/product/)
✅ [查询型] 查看商品列表 → <cli-name> product list
✅ [操作型] 创建商品 → <cli-name> product create
✅ [分析型] 分析销售效果 → <cli-name> product stats
✅ [流程型] 商品全流程 → create → update --status active
🚫 CLI 暂不支持:
- 删除商品(handleDeleteProduct)→ CLI 缺少 product delete 命令
将生成 N 个 Skill,是否继续?
~/.catpaw/skills/<cli-name>-<domain>-<action>/SKILL.md
<参数>、<值>),每行必须是真实内容| 401 | run auth refresh | update "四种类型(查询型 / 操作型 / 分析型 / 流程型)的完整模板见 templates.md。
生成时,按对应模板填充具体业务内容,确保:
mkdir -p ~/.catpaw/skills/<skill-name>
# 写入 ~/.catpaw/skills/<skill-name>/SKILL.md
输出汇总:
✅ 已生成 N 个 Skill:
~/.catpaw/skills/my-shop-product-create/SKILL.md
~/.catpaw/skills/my-shop-product-analysis/SKILL.md
重点读:函数名、API 调用顺序、if/else 业务判断、注释、TypeScript 类型定义
跳过:CSS 类名、组件渲染逻辑、纯 UI 状态(isLoading)、第三方组件 props
共 1 个版本