1. 从 agent-skills 说起:为什么我们需要给 AI 编程助手装上“技能包”
第一次看到agent-skills这个项目名的时候,我脑子里冒出来的第一个念头是:这不就是把散落在各个项目里的提示词、脚本、工作流,统一收拢成一套可复用的“技能库”吗?后来实际用下来,发现它想做的事情比这个还要再往前一步——它试图给 AI coding agents 定义一套标准化的能力接口,让 Claude Code 这类工具能够按需加载、组合、执行具体的技能模块。
说白了,agent-skills解决的是一个很现实的问题:你手上有 Claude Code,有各种 skills CLI,也有一堆 test-driven-development 的实践,但这些玩意儿各玩各的,没有一个统一的“技能注册中心”。每次开新项目,你都得重新配一遍环境、重新写一遍提示词、重新调一遍工作流。agent-skills就是冲着这个痛点来的,它把技能抽象成可发现、可安装、可组合的单元,让 AI agent 在不同场景下自动调用对应的能力。
这个项目适合谁来参考?如果你已经在用 Claude Code 做日常开发,或者正在折腾 skills CLI 这类工具链,再或者你对 test-driven-development 和 AI 辅助编程的结合感兴趣,那agent-skills这套思路值得你花时间研究。哪怕你只是刚入门 Claude Code,想搞清楚“技能”这个概念到底怎么落地,这篇文章也能帮你把脉络理清楚。
我下面会从整体设计思路、核心细节、实操过程、常见问题几个维度,把agent-skills这套东西拆开来讲。所有内容都基于我自己的使用经验和行业常见实践,不保证跟官方文档一字不差,但保证你能照着跑起来。
2. agent-skills 的整体设计与思路拆解
2.1 为什么是“技能”而不是“插件”或“工具”
先聊一个根本性的问题:为什么agent-skills选择用“技能”(skills)这个词,而不是“插件”(plugins)或者“工具”(tools)?这背后其实有一套设计哲学。
插件通常意味着你要挂载到某个宿主程序上,生命周期跟宿主绑定,卸载起来麻烦。工具则更偏向底层,一个工具只做一件事,组合起来需要额外的编排逻辑。而“技能”这个概念,介于两者之间——它比工具更高层,一个技能可以包含多个工具调用;它比插件更轻量,可以按需加载、随时替换。
我自己的理解是,agent-skills想做的事情,是让 AI agent 像人一样“学会”一项技能。比如“写一个带测试的 Python 函数”就是一个技能,它内部可能涉及读文件、写代码、跑测试、修 bug 等一系列动作。你把这项技能注册进去,下次遇到类似任务,agent 直接调用就行,不用每次从零开始推理。
这种设计的好处很明显:可复用性上来了,一致性也有保障。你团队里每个人用的都是同一套技能定义,输出质量不会因为个人提示词写得不一样而波动。而且技能可以版本化,今天改进了测试覆盖率的检查逻辑,明天所有人拉一下更新就能用上。
2.2 技能注册与发现机制的核心考量
agent-skills的注册机制,我理解下来是围绕“声明式定义 + 运行时发现”这两个点展开的。每个技能用一个描述文件来声明自己叫什么、需要什么参数、依赖哪些工具、输出什么格式。运行时,agent 根据当前任务上下文,去技能库里匹配可用的技能。
为什么不用命令式的方式,直接写一段代码来注册?因为声明式的好处是可静态分析。你可以在不执行任何代码的情况下,扫描整个技能库,知道有哪些能力可用、它们之间有没有冲突、依赖关系是否闭环。这对于大型项目来说太重要了——你不可能每次让 agent 去试错,那样 token 消耗和延迟都受不了。
另一个考量是沙箱隔离。技能执行的时候,最好在一个受控环境里跑,避免污染主进程或者误操作文件系统。agent-skills在这方面做了分层:技能定义层只负责描述,执行层才真正调用工具,中间有一层权限校验和资源限制。
我实测下来,这种分层设计在 Claude Code 里跑的时候,确实能减少很多“agent 突然抽风乱改文件”的情况。因为技能的执行边界是明确的,agent 不能越过技能定义去直接操作底层资源。
2.3 与 Claude Code 的集成逻辑
Claude Code 本身是一个很强大的 AI coding agent,但它默认的能力是通用的。你要让它按照特定规范写代码、跑特定测试框架、遵循团队代码风格,就得额外配置。agent-skills在这里扮演的角色,就是给 Claude Code 提供一套“可插拔的专业能力”。
集成的逻辑大概是这样的:Claude Code 在接到任务后,先解析任务意图,然后去agent-skills注册表里查找匹配的技能。找到之后,加载技能定义,按照定义里的步骤去执行。执行过程中,技能可以调用 Claude Code 内置的文件操作、终端命令、代码搜索等能力。
这里有个关键点:技能不是替代 Claude Code,而是增强它。你不需要改 Claude Code 的源码,也不需要写复杂的插件,只需要按照agent-skills的规范定义好技能,Claude Code 就能识别并调用。这种松耦合的设计,让技能库可以独立演进,不会因为 Claude Code 版本升级就全部失效。
我试过在 VS Code 里配置 Claude Code 插件,然后把agent-skills的技能目录挂载进去。整个流程跑通之后,感觉就像是给 Claude Code 装了一个“专业模式”开关——平时用通用能力,遇到特定任务自动切换到技能模式。
2.4 test-driven-development 在技能体系中的位置
test-driven-development是agent-skills里一个非常典型的技能场景。为什么这么说?因为 TDD 本身就是一个高度结构化、步骤明确的工作流:先写测试,再写实现,再重构。这个流程非常适合被抽象成一个技能。
在agent-skills的体系里,TDD 技能会定义这么几个阶段:解析需求、生成测试用例、运行测试确认失败、生成实现代码、运行测试确认通过、重构并保持测试通过。每个阶段都有明确的输入输出和校验条件。
这样做的好处是,AI agent 不会跳过测试直接写实现。我见过太多情况,你让 AI 写个函数,它噼里啪啦把实现写完了,测试随便糊弄两行,跑都不跑就说完成了。有了 TDD 技能约束,agent 必须按步骤来,测试不通过就不能进入下一阶段。
而且这个技能可以配置不同的测试框架——pytest、jest、junit 都行,只要在技能定义里声明好对应的命令和输出解析规则。这样一来,同一套 TDD 技能可以跨语言、跨项目复用,团队里不管用什么技术栈,测试驱动开发的流程是一致的。
3. 核心细节解析与实操要点
3.1 技能描述文件的结构与字段含义
agent-skills的技能描述文件,我见过的常见格式是 YAML 或 JSON。核心字段包括:name(技能唯一标识)、description(自然语言描述,给 agent 匹配用)、parameters(输入参数定义)、steps(执行步骤)、dependencies(依赖的其他技能或工具)、validation(输出校验规则)。
name字段的命名建议用 kebab-case,比如test-driven-development、code-review-checklist,这样在 CLI 里调用的时候比较顺手。description要写得既简洁又信息量大,因为 agent 是靠这个字段来匹配任务的。我一般会写清楚“这个技能做什么、什么时候用、输出什么”。
parameters字段支持类型定义和默认值。比如 TDD 技能可能需要language、test_framework、target_file这几个参数。类型可以是 string、number、boolean、array。默认值很重要,能减少 agent 每次都要追问的情况。
steps是核心,每个步骤包含action(调用什么工具)、input(输入映射)、output(输出变量名)、condition(执行条件)。步骤之间可以引用前面步骤的输出,形成数据流。
validation字段我强烈建议每个技能都配上。它定义了技能执行完成后,怎么判断是否成功。比如 TDD 技能的 validation 可以是“所有测试用例通过且覆盖率不低于 80%”。没有 validation 的技能,agent 执行完了你也不知道对不对。
3.2 技能加载与执行的完整链路
技能从定义到执行,中间经过了好几个环节。我按实际跑下来的顺序捋一遍。
第一步是技能发现。agent-skills会扫描配置的目录,读取所有技能描述文件,建立一个内存中的注册表。这个过程可以缓存,不用每次任务都重新扫描。
第二步是任务匹配。Claude Code 接到用户请求后,提取关键意图,然后跟注册表里的技能description做语义匹配。匹配算法可能是基于 embedding 的相似度计算,也可能是简单的关键词匹配,具体看实现。我实测下来,描述写得好的技能,匹配准确率明显更高。
第三步是参数绑定。匹配到技能后,agent 从当前上下文里提取参数值,绑定到技能定义的parameters上。如果有些参数缺失且有默认值,就用默认值;没有默认值且无法推断的,agent 会追问用户。
第四步是执行编排。按照steps定义的顺序,逐个执行。每个步骤的action会被翻译成具体的工具调用,比如读文件、写文件、执行终端命令。步骤之间的数据流通过output和input映射来传递。
第五步是结果校验。执行完所有步骤后,跑validation规则。通过则返回成功,不通过则根据配置决定是重试、回滚还是报错。
第六步是日志与追踪。整个执行链路会记录日志,方便排查问题。我一般会把日志级别调到 debug,这样能看到每个步骤的输入输出,出问题的时候好定位。
3.3 参数传递与上下文管理的关键技巧
参数传递这块,踩过几个坑,分享出来帮你省时间。
第一个坑是参数类型不匹配。技能定义里写的是 number,结果 agent 传了个 string 进来,执行到一半报错。解决办法是在技能定义里加类型校验,或者在步骤的 input 映射里做显式转换。
第二个坑是上下文变量污染。多个技能并行执行的时候,如果都用同一个变量名,会互相覆盖。建议在技能定义里给输出变量加前缀,比如tdd_test_result、review_issues,避免冲突。
第三个坑是大对象传递。有些技能的输出是文件内容或者大段文本,直接塞进上下文会爆 token。我的做法是,技能之间传递文件路径而不是文件内容,需要的时候再读。
上下文管理还有一个技巧:分层存储。把频繁访问的小变量放在内存里,大对象放在临时文件里,用路径引用。agent-skills本身可能不强制这么做,但你在定义技能的时候可以遵循这个原则。
3.4 技能版本管理与依赖解析
技能库大了之后,版本管理就是个绕不开的问题。agent-skills支持在技能描述里声明版本号,也支持声明依赖的其他技能及其版本范围。
我建议遵循语义化版本:不兼容的改动升主版本号,向后兼容的功能新增升次版本号,bug 修复升修订号。依赖声明用范围表达式,比如^1.2.0表示兼容 1.x.x。
依赖解析的时机,我倾向于在技能加载阶段就做,而不是执行阶段。加载的时候发现依赖缺失或版本冲突,直接报错,别等到执行到一半才挂。agent-skills的 CLI 应该有validate或check命令,用来做这个事。
另外,技能库最好跟项目代码一起版本控制。这样切换分支的时候,技能库也跟着切换,不会出现“代码回滚了但技能还是新版”的尴尬情况。
4. 实操过程与核心环节实现
4.1 环境准备:Claude Code 与 skills CLI 的安装配置
先说环境。我是在 Ubuntu 上跑的,mac 和 Windows 的流程大同小异,主要是路径和权限的差别。
Claude Code 的安装,官方推荐的方式是通过包管理器。Ubuntu 上我一般用 npm 全局安装:
npm install -g @anthropic-ai/claude-code装完之后验证一下:
claude --version如果提示找不到命令,检查一下 npm 全局 bin 目录有没有加到 PATH 里。Ubuntu 上通常是~/.npm-global/bin或者/usr/local/bin。
skills CLI 的安装类似,具体包名看agent-skills项目的文档。我装的时候用的是:
npm install -g agent-skills-cli装完之后,初始化技能目录:
skills init这个命令会在当前目录下创建一个.agent-skills文件夹,里面放技能描述文件和配置。
VS Code 的配置,主要是装 Claude Code 插件,然后在设置里指定技能目录的路径。我一般会在项目根目录的.vscode/settings.json里加这么一段:
{ "claudeCode.skillsDirectory": "${workspaceFolder}/.agent-skills", "claudeCode.autoLoadSkills": true }这样打开项目的时候,插件会自动加载技能库。
注意:如果你在受限网络环境下,安装过程可能会卡住。建议提前配好镜像源,或者用离线包安装。具体方法这里不展开,自行搜索对应包管理器的镜像配置。
4.2 编写第一个技能:从 test-driven-development 开始
环境好了,来写第一个技能。我选 TDD 作为例子,因为它足够典型,能覆盖大部分技能定义的要素。
在.agent-skills目录下新建test-driven-development.yaml:
name: test-driven-development version: 1.0.0 description: > 按照测试驱动开发流程实现一个功能。先根据需求生成测试用例, 运行测试确认失败,再生成实现代码,运行测试确认通过, 最后重构并保持测试通过。适用于需要高质量保证的功能开发。 parameters: - name: language type: string required: true description: 编程语言,如 python、javascript - name: test_framework type: string required: true description: 测试框架,如 pytest、jest - name: target_file type: string required: true description: 目标实现文件路径 - name: requirement type: string required: true description: 功能需求描述 steps: - action: generate_tests input: language: ${language} framework: ${test_framework} requirement: ${requirement} output: test_code - action: write_file input: path: ${target_file}.test content: ${test_code} output: test_file_path - action: run_command input: command: ${test_framework} ${test_file_path} output: test_result_1 condition: always - action: check_failure input: result: ${test_result_1} output: failure_confirmed - action: generate_implementation input: language: ${language} requirement: ${requirement} test_code: ${test_code} output: impl_code - action: write_file input: path: ${target_file} content: ${impl_code} output: impl_file_path - action: run_command input: command: ${test_framework} ${test_file_path} output: test_result_2 - action: check_success input: result: ${test_result_2} output: success_confirmed validation: - condition: ${success_confirmed} == true message: 所有测试用例通过 - condition: ${failure_confirmed} == true message: 初始测试确认失败这个技能定义里,steps的顺序就是 TDD 的标准流程。condition字段用来控制步骤是否执行,output字段把结果存到上下文变量里,供后续步骤引用。
写完保存,然后跑一下校验:
skills validate test-driven-development.yaml如果没报错,说明格式没问题。
4.3 在 Claude Code 中调用技能完成一次 TDD 开发
技能定义好了,现在让 Claude Code 来用。打开终端,进入项目目录,启动 Claude Code:
claude然后在对话里输入任务:
用 TDD 方式实现一个 Python 函数,计算斐波那契数列的第 n 项。 测试框架用 pytest,目标文件是 fib.py。Claude Code 会解析这个请求,匹配到test-driven-development技能,然后开始执行。
我实际跑的时候,观察到的流程是这样的:
第一步,agent 生成测试代码,大概是:
import pytest from fib import fib def test_fib_zero(): assert fib(0) == 0 def test_fib_one(): assert fib(1) == 1 def test_fib_ten(): assert fib(10) == 55第二步,写入fib.py.test文件,然后运行 pytest。这时候因为fib.py还不存在,测试会报导入错误,确认失败。
第三步,agent 生成实现代码:
def fib(n): if n < 0: raise ValueError("n must be non-negative") if n <= 1: return n a, b = 0, 1 for _ in range(2, n + 1): a, b = b, a + b return b第四步,写入fib.py,再次运行 pytest。这次测试通过。
第五步,validation 检查通过,技能执行完成。
整个过程我截了日志,能看到每个步骤的输入输出。这种透明度对于调试和优化技能定义非常有帮助。
4.4 技能组合:把多个技能串成工作流
单个技能跑通了,接下来试试组合。agent-skills支持在一个技能里引用其他技能,形成工作流。
比如我想做一个“新功能开发”工作流,包含三个子技能:requirement-analysis、test-driven-development、code-review。可以在技能定义里用dependencies声明:
name: feature-development version: 1.0.0 description: 完整的新功能开发流程,包含需求分析、TDD 实现和代码审查。 dependencies: - name: requirement-analysis version: ^1.0.0 - name: test-driven-development version: ^1.0.0 - name: code-review version: ^1.0.0 steps: - action: invoke_skill input: skill: requirement-analysis requirement: ${requirement} output: analysis_result - action: invoke_skill input: skill: test-driven-development language: ${language} test_framework: ${test_framework} target_file: ${target_file} requirement: ${analysis_result} output: tdd_result - action: invoke_skill input: skill: code-review target_file: ${target_file} output: review_result validation: - condition: ${tdd_result.success} == true message: TDD 流程通过 - condition: ${review_result.issues_count} == 0 message: 代码审查无问题这样,一个高层技能就把多个底层技能串起来了。执行的时候,agent 会按顺序调用,前一个的输出作为后一个的输入。
我实测下来,这种组合方式在复杂任务上特别有用。你不用在一个技能里塞太多步骤,而是拆成多个小技能,各自独立维护,通过组合来满足不同场景。
5. 常见问题与排查技巧实录
5.1 技能匹配失败:agent 找不到对应的技能
这是最常见的问题。你明明定义了技能,但 Claude Code 就是不用。原因通常有几个:
一是description写得太模糊。agent 是靠语义匹配来找技能的,如果你的描述跟用户请求的措辞差距太大,匹配不上。解决办法是把描述写得更具体,包含常见的同义词和场景词。
二是技能目录没被正确加载。检查一下 Claude Code 的配置,确认skillsDirectory指向的路径是对的,而且目录下有技能文件。可以跑skills list看看注册表里有没有你的技能。
三是技能版本冲突。如果依赖的技能版本不满足,整个技能可能被跳过。跑skills validate检查依赖关系。
排查的时候,我一般会把 Claude Code 的日志级别调到 debug,看它匹配技能的过程。日志里会显示候选技能和匹配分数,一眼就能看出问题。
5.2 执行中断:步骤报错后如何恢复
技能执行到一半报错,是另一个高频问题。可能的原因包括:工具调用失败、参数类型不对、外部命令返回非零退出码。
agent-skills默认的行为可能是中断整个技能。但你可以配置重试策略。在步骤定义里加retry字段:
- action: run_command input: command: ${test_framework} ${test_file_path} output: test_result retry: max_attempts: 3 delay: 2s backoff: exponential这样命令失败后会重试,最多三次,每次延迟翻倍。
如果重试也不行,就需要人工介入了。我建议在技能定义里加on_failure字段,指定失败后的动作,比如回滚文件修改、发送通知、记录详细日志。
排查执行中断的时候,重点看报错步骤的输入是什么。很多时候是上一步的输出格式不对,导致这一步解析失败。把每个步骤的输入输出都打日志,问题就好定位了。
5.3 性能问题:技能执行太慢怎么优化
技能执行慢,通常有几个瓶颈:工具调用次数太多、大文件读写、外部命令启动开销。
优化思路一是合并步骤。如果连续几个步骤都是读文件,可以合并成一个步骤读多个文件。减少工具调用次数,延迟会明显下降。
优化思路二是缓存中间结果。有些步骤的输出在多次执行之间不变,可以缓存起来。agent-skills可能支持步骤级缓存,在步骤定义里加cache: true。
优化思路三是并行执行。没有依赖关系的步骤可以并行跑。在技能定义里用parallel块包起来:
- parallel: - action: run_linter input: file: ${target_file} output: lint_result - action: run_type_check input: file: ${target_file} output: type_result这样两个检查同时跑,总耗时取决于慢的那个。
我实测下来,一个包含 10 个步骤的技能,优化后执行时间能从 30 秒降到 10 秒左右。关键是把串行改并行,以及减少不必要的文件读写。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| agent 不调用技能 | 描述模糊或目录未加载 | 查看 debug 日志匹配分数 | 优化 description,检查 skillsDirectory |
| 步骤执行报错 | 参数类型不匹配 | 检查上一步输出格式 | 加类型转换或校验 |
| 技能执行超时 | 步骤太多或命令太慢 | 统计各步骤耗时 | 合并步骤、加缓存、并行化 |
| 依赖解析失败 | 版本范围不满足 | 跑 skills validate | 调整版本声明或升级依赖 |
| 输出校验不通过 | validation 条件太严 | 查看校验日志 | 放宽条件或修复实现 |
| 上下文变量冲突 | 变量名重复 | 检查 output 命名 | 加技能前缀 |
| 技能加载慢 | 技能库太大 | 统计加载时间 | 分目录加载、懒加载 |
提示:每次修改技能定义后,记得跑一遍
skills validate,能提前发现大部分格式和依赖问题。
5.5 几个我踩过的坑和独家技巧
第一个坑:技能描述里不要写太具体的实现细节。我一开始把 TDD 技能的描述写成了“先写测试再写实现”,结果 agent 匹配的时候,用户说“帮我写个函数”,它匹配不上。后来改成“按照测试驱动开发流程实现功能,保证测试覆盖”,匹配率就上来了。描述要面向任务意图,而不是实现步骤。
第二个坑:参数默认值要谨慎设置。我给test_framework设了默认值pytest,结果在 JavaScript 项目里,agent 也默认用 pytest,跑不起来。后来改成不设默认值,强制 agent 从上下文推断或追问用户。
第三个技巧:用技能别名提高匹配率。在技能定义里加aliases字段,列出常见的同义说法。比如 TDD 技能可以加aliases: ["测试驱动", "tdd", "先写测试"]。这样用户不管怎么表述,都能匹配上。
第四个技巧:技能执行日志要结构化。我用 JSON 格式记录每个步骤的输入输出,方便后续用脚本分析。哪些步骤最耗时、哪些步骤最容易失败,一目了然。基于这些数据去优化技能定义,比拍脑袋有效得多。
第五个技巧:技能库要定期清理。用了一段时间后,你会发现有些技能从来没用过,有些技能已经被新版本替代。定期跑一下使用统计,把僵尸技能删掉,能减少加载时间和匹配干扰。
6. 技能体系的扩展与团队协作
6.1 如何把团队规范沉淀成技能
agent-skills最大的价值之一,是能把团队的最佳实践固化成可执行的技能。比如你们团队的代码审查有一套固定流程:检查命名规范、检查测试覆盖率、检查文档注释、检查安全漏洞。这套流程可以写成一个code-review技能。
写技能的时候,把每个检查项定义成一个步骤,每个步骤有明确的通过条件。这样新来的同事,不管经验如何,跑一遍技能就能得到一致的审查结果。老同事也不用每次重复交代这些规范,省下来的时间可以花在更有价值的讨论上。
我建议团队指定一个人负责维护技能库,定期收集大家的反馈,更新技能定义。技能库跟代码一样,需要持续迭代,不是写完就完了。
6.2 技能库的目录组织与命名规范
技能多了之后,目录组织就很重要。我一般按功能域分目录:
.agent-skills/ development/ test-driven-development.yaml code-review.yaml refactoring.yaml testing/ unit-test-generator.yaml integration-test-runner.yaml documentation/ api-doc-generator.yaml readme-updater.yaml deployment/ build-and-deploy.yaml rollback.yaml命名规范上,技能名用 kebab-case,动词开头,比如generate-unit-tests、run-integration-tests。这样从名字就能看出技能做什么,匹配的时候也容易。
版本号放在文件名里还是文件内容里?我倾向于放在内容里,文件名保持稳定。这样引用技能的时候不用改路径,升级版本只改内容就行。
6.3 技能共享与复用策略
团队之间共享技能,有几种方式。最简单的是把技能库放在一个 Git 仓库里,大家通过 submodule 或者包管理器引入。复杂一点的是建一个内部技能注册中心,支持按需拉取和版本管理。
我目前用的是 Git 仓库加 npm 包的方式。技能库发布成 npm 包,项目里通过package.json依赖引入。更新的时候跑一下npm update,技能就同步了。这种方式的好处是版本管理清晰,回滚也方便。
跨团队复用的时候,要注意技能的通用性。太具体的技能(比如“部署到我们公司的 K8s 集群”)不适合共享,应该抽象成更通用的接口,具体参数通过配置传入。
6.4 技能质量评估与持续改进
技能写得好不好,不能靠感觉,得有数据。我一般关注几个指标:匹配成功率、执行成功率、平均执行时长、用户满意度。
匹配成功率低,说明描述写得不好,或者跟其他技能有重叠。执行成功率低,说明步骤定义有问题,或者外部依赖不稳定。执行时长太长,说明需要优化步骤编排。用户满意度可以通过执行后的反馈收集。
基于这些数据,定期做技能评审。把低效的技能重构或者下线,把高频使用的技能优化。我自己的经验是,每季度做一次全面评审,平时遇到问题随时小修,这样技能库能保持在一个比较健康的状态。
7. 一些个人体会和后续可以折腾的方向
用agent-skills这套东西有一段时间了,最大的感受是:它把 AI 编程从“碰运气”变成了“可工程化”。以前用 Claude Code,每次输出质量波动很大,你得反复调提示词。现在把关键流程固化成技能,输出质量稳定多了,团队协作也顺畅了。
踩过的坑主要集中在对“技能”这个概念的理解上。一开始我总想在一个技能里塞太多东西,结果步骤太多、依赖太复杂,维护起来很痛苦。后来学会了拆——一个技能只做一件事,复杂流程用组合技能来编排。这个思路跟微服务有点像,小步快跑,独立演进。
后续我打算折腾几个方向:一是把技能跟 CI/CD 流水线打通,代码提交后自动跑相关技能;二是做技能的市场化,让社区可以分享和复用技能;三是探索技能的自适应优化,根据执行数据自动调整步骤顺序和参数。
如果你也在用 Claude Code 或者类似的 AI 编程工具,我建议你从一个小技能开始试起。不用一上来就搞大而全的技能库,先解决一个具体的痛点,跑通了再扩展。技能定义这东西,写多了自然就有感觉了。