Skills 是什么?为什么它不是另一个 Node CLI

93 阅读5分钟

Skill 和 Node CLI 本质上做的是同一件事:自动化

真正的区别不在“能做什么”,而在“谁来决定什么时候用它”。

在实际接触 Skill 之前,我心里一直有个疑问:这不就是我们前端项目里常写的那些 Node 脚本吗?

我们早就可以用 npm scripts 写命令行工具,自动生成组件、批量改代码、初始化模板等等。

我之所以会产生这种疑惑,很大一部分原因是:从工程形态上看,两者长得太像了——都有入口命令/入口脚本,也都有模板/规则,最后产出一个明确的输出。 但它们真正的分岔点也在这里:npm scripts 通常把输出写回某个项目,而 Skill 更像把这套能力抽象成可复用的产物/结果,供系统/Agent 在工作流里调用。

why-it-looks-similar-npm-scripts-vs-skill.png

那 Skill 到底“新”在哪里?

如果你写过前端工程化,这个疑惑基本躲不开。

这篇文章不讲官方定义,也不讲抽象概念,我只想用一个前端工程师最熟悉的视角,把 Skill 和 Node CLI 的区别,用更直白的话讲清楚。

node-cli-vs-skill-position.png

一、先从你已经会的东西说起

在前端工程化实践中,我们写 Node 脚本通常是为了什么?

你一定做过这些事:

  • 写一个脚本,按照模板一键生成组件
  • 写一个脚本,批量改代码
  • 写一个脚本,自动处理文件结构

最后统一塞进 package.json

{
  "scripts": {
    "gen:component": "node scripts/gen-component.js"
  }
}

然后在终端里跑:

npm run gen:component Button

这套东西非常成熟,也非常好用。

它有一个很明确的前提:

这是“给开发者在项目里用的工具”。

二、Skill 和 Node CLI:先说清楚共同点

在继续区分之前,有一件事必须先说清楚:

Skill 和 Node CLI,本质上是在做同一类事情。

它们的共同点非常简单:

  • 都是为了自动化执行某个明确的功能
  • 都是在把原本要“人一步步做”的事,交给程序
  • 都可以是:
    • 内容生成
    • 格式转换
    • 批量处理
    • 自动执行一套流程

所以 Skill 并不比 Node CLI “高级”, Node CLI 也不是“过时的方案”。

它们解决的是同一类问题:自动化。

三、真正的差别:谁来决定“什么时候执行”

如果一定要用一句话区分 Skill 和 Node CLI, 那不是技术能力,而是:

“由谁来决定什么时候执行这件事”。

node-cli-vs-skill-comparison.png


Node CLI 更像是:

人判断 → 人敲命令 → 工具执行

  • 你很清楚自己在什么项目里
  • 很清楚现在要干什么
  • 在终端里手动触发

所以 Node CLI 天然适合项目内自动化

node-cli-key-differences.png


Skill 更像是:

系统 / Agent 判断 → 选择能力 → 自动执行

  • 不假设某个具体项目
  • 不假设一定是人来触发
  • 更关注:
    • 输入是什么
    • 输出是什么

这也是为什么 Skill 更容易出现在:

  • Agent 工作流中
  • 多步自动化流程里
  • 让大模型自己决定下一步做什么的场景中

skill-key-differences.png

四、Node CLI 的典型使用方式(你一定很熟)

一个 Node CLI / npm script,通常默认:

  • 你在一个前端项目里
  • 有固定的目录结构
  • package.json
  • 输出结果通常是:
    • 创建文件
    • 修改项目结构

换句话说,它在一开始就假设:

“我知道你在哪个项目里,也知道你要改什么。”

这非常适合: 项目相关的自动化

五、Skill 换了一种出发点

Skill 的思路可以用一句更简单的话理解:

“我不关心你在哪个项目, 我只关心你给我什么输入, 我能稳定地给你什么输出。”

你可以把 Skill 想成一个能力黑盒

  • 输入是清楚的
  • 输出也是清楚的
  • 可以被不同流程、不同系统复用

这也是为什么在很多开源 Skill 里,你会看到这样的能力:

  • 把 Markdown / PDF / Word 转成结构化内容
  • 自动生成 changelog
  • 文本分析、格式转换、数据整理

它们不像“项目脚本”, 更像是:

“你给我一段东西,我帮你处理好再还给你。”

六、两个最直观的场景对比

场景 1:生成项目内组件

你在一个 React 项目里生成组件:

npm run gen:component Button

这个脚本会:

  • 创建目录
  • 写文件
  • 遵守项目规范

👉 这件事,用 Node CLI 是最顺的。

因为它:

  • 强依赖项目结构
  • 一次生成完就结束
  • 很少被其他项目复用

场景 2:把 Markdown 转成公众号文章

换一个场景:

  • 输入:一篇 Markdown
  • 输出:一份可直接粘贴到公众号后台的内容

它的特点是:

  • 和某个项目无关
  • 输入和输出非常明确
  • 未来可能被系统自动调用

👉 这就非常像一个 Skill。

你当然也可以写成 Node CLI, 但你很快会发现自己开始想:

“这个能力,好像不应该只绑在一个项目里。”

skill-vs-cli-scenarios.png

七、什么时候该用哪个?一句话就够

后来我给自己定了一个很实用的判断问题。每次纠结“这到底是 CLI 还是 Skill”时,我都会先把问题换成这句话:

这件事更像“项目内的一部分”,还是“可被单独复用的一项能力”?

  • 更偏“项目内的一部分”:Node CLI
  • 更偏“全局可独立复用的能力”:Skill

node-cli-or-skill-decision-flow.png


结尾:用工程化思想理解 Skill

因为说到底:

Skill 的核心机制并不陌生, 它更像是把你早就写过的那些脚本, 从“项目里”抽象成可复用的能力。

如果你写过 npm scripts、做过项目内自动化, 那理解 Skill 会非常顺:只是把项目脚本的思路,换成可复用能力的视角。

skill-closing-summary.png

接下来需要搞清楚的,只是:

  • 一个 Skill 从工程上是如何构成的?
  • 为什么 scripts 通常选择 Python?
  • 如何把一个需求,真正实现成 Skill?

下一篇文章,我们就从工程结构开始, 正式进入实现层。


如果你对本文相关的 前端 / AI / 新技术实践 等内容感兴趣,

我也会在公众号 前端 Fusion 持续更新类似内容,

欢迎关注,一起交流和学习 🌟