在开发者工具领域,传统的命令行接口(CLI)一直遵循着“解析参数、运行逻辑、输出结果”的模式。例如,git commit -m "fix bug"并不知道你的代码仓库是否遵循了 Conventional Commits 规范,而npm audit也无法辨别哪些漏洞真正影响了你实际修改的代码。这些工具的根本局限在于:CLI 不了解你的项目上下文,所有背景信息都需要开发者手动提供。
“技能(Skills)”的出现颠覆了这一现状。一项“技能”是一个简单的 Markdown 文件,它旨在教会 AI Agent 如何在特定项目上下文中执行某项任务。它无需二进制文件、无需构建步骤,也没有运行时依赖。它只是一系列指令,能够根据 AI Agent 所发现的信息进行自我调整和适应。
技能并非要取代 CLI,而是要对其进行编排。我构建了许多技能,它们可以调用 Git、GitHub CLI(gh)、npm 以及自定义脚本,并对这些工具的执行结果进行推理。这种编排层所能实现的功能,是任何单一 CLI 都无法企及的。
什么是“技能(Skill)”?
一项“技能”本质上是一个名为 SKILL.md 的 Markdown 文件,其中包含 YAML 格式的 Frontmatter:
---
name: commit
description: ">
Create git commits following repository style.
Use when user asks to "commit changes", "/commit".
Don't use for pushing code or creating PRs.
---
description 字段构成了技能的完整 API。AI Agent 会读取此描述,以决定何时激活该技能。“Use when”定义了触发条件,“Don't use when”则用于避免误触。这就是技能与 Agent 之间的“契约”。
Markdown 文件的主体部分包含了 AI Agent 需要遵循的指令:这些不是 Agent 已知的通用知识,而是你项目的具体约定、潜在问题和首选工具。
值得一提的是,指令前的 ! 前缀会自动执行 Shell 命令,以便在 Agent 处理指令之前预加载上下文信息。
技能遵循一个开放标准,可以在 Claude Code、Cursor 和其他 AI 工具中通用。这意味着无需分发任何二进制文件,只需复制该 Markdown 文件,技能即可正常工作。
CLI 无法做到的五件事(本文仅介绍其中两点)
1. 适应你项目的约定
我的提交(commit)技能在激活时就会预加载上下文:
## Pre-loaded context
- Status: !`git status`
- Diff: !`git diff HEAD`
- Log: !`git log --oneline -10`
## Message Style
Match repo's existing commit patterns from log.
当技能开始工作时,它已经掌握了你最近的提交历史、暂存区内容以及代码差异。它会读取 Git 日志,识别你的项目是使用 Conventional Commits、Semantic Commits 还是其他自定义风格,并智能地匹配其提交风格。
要实现这一点,传统的 CLI 需要一个配置文件、一个解析器和一个分类器。而技能则仅通过读取和推理即可完成。
2. 编排多个工具并关联结果
我的代码覆盖率(coverage)技能不仅仅是运行测试,它还能将测试覆盖率与你实际更改的代码关联起来:
- 运行
git diff -U0 --no-color获取已更改的行。 - 运行测试套件并生成覆盖率报告。
- 解析
lcov.info文件,例如:SF:src/utils/helper.tsDA:10,1# 第 10 行,已覆盖DA:11,0# 第 11 行,未覆盖
- 将已更改的行与覆盖率数据进行匹配。
- 仅报告你实际更改的、且未被覆盖的行。