Kiro Skills 使用指南
本文基于 Anthropic 官方 Claude Code Skills 系列教程,针对 Kiro IDE/CLI 的 Skills 兼容性进行适配编写。Kiro 自 v0.9.0 起支持 Agent Skills 开放标准。
一、什么是 Skills?
1、Skills 的定义
Skills 是一组指令和资源的文件夹,Kiro 可以自动发现并使用它们来更准确地处理任务。每个 Skill 存放在一个 SKILL.md 文件中,文件头部(frontmatter)包含名称和描述信息。
描述信息是 Kiro 决定是否使用该 Skill 的依据。当你要求 Kiro 审查一个 PR 时,它会将你的请求与所有可用的 Skill 描述进行匹配,找到相关的那个。Kiro 读取你的请求,将其与所有可用的 Skill 描述进行比较,然后激活匹配的 Skill。
以下是 Skill 的 frontmatter 示例:
---
name: pr-review
description: Reviews pull requests for code quality. Use when reviewing PRs or checking code changes.
---
在 frontmatter 下方,你编写实际的指令——你的审查清单、格式偏好,或者 Kiro 完成该任务所需的任何信息。
Skills 遵循开放的 Agent Skills 标准,可以在不同工具和团队之间共享。
2、Skills 的存放位置
你可以根据使用范围将 Skills 存放在不同位置:
| 路径 | 作用域 | 用途 |
|---|---|---|
.kiro/skills/ |
工作区(Workspace) | 项目特定的工作流、团队约定 |
~/.kiro/skills/ |
全局(Global) | 跨所有项目的个人工作流 |
- 工作区 Skills 存放在项目根目录的
.kiro/skills/中。任何克隆该仓库的人都会自动获得这些 Skills。这里适合存放团队标准,比如公司的品牌指南、编码规范等。 - 全局 Skills 存放在
~/.kiro/skills/(你的主目录)。这些 Skills 会跟随你在所有项目中使用——你的提交信息风格、文档格式、你喜欢的代码审查方式等。
当工作区 Skills 和全局 Skills 同名时,工作区 Skills 优先。这允许你定义通用的全局 Skills,同时为特定项目进行覆盖。
工作区 Skills 会随代码一起提交到版本控制系统,因此整个团队都能共享。
3、Skills 与 Steering 及 Powers 的对比
Kiro 有多种自定义行为的方式。以下是它们的对比:
- Skills 是遵循开放标准的可移植指令包。它们按需加载,可以包含脚本。适用于你想要共享或从他人处导入的可复用工作流。
- Steering 是 Kiro 特有的上下文,用于塑造 agent 行为。支持
always、auto、fileMatch和manual模式。适用于项目标准和约定。 - Powers 将 MCP 工具与知识和工作流打包在一起。它们根据上下文动态激活。适用于需要工具和指导的集成场景。
提示:Steering 文件中的
auto模式与 Skills 的工作方式类似——Kiro 使用描述来决定何时加载。但 Skills 是跨工具可移植的开放标准,而 Steering 是 Kiro 特有的。
4、何时使用 Skills
Skills 最适合用于针对特定任务的专业知识:
- 团队遵循的代码审查标准
- 你偏好的提交信息格式
- 组织的品牌指南
- 特定类型文档的模板
- 特定框架的调试清单
经验法则很简单:如果你发现自己反复向 Kiro 解释同样的事情,那就是一个等待被编写的 Skill。
5、要点总结
- Skills 是一组指令文件夹,Kiro 可以自动发现并使用它们来更准确地处理任务。每个 Skill 存放在一个
SKILL.md文件中,文件头部包含名称和描述 - Kiro 使用描述来匹配 Skills 与请求。当你要求 Kiro 做某事时,它会将你的请求与可用的 Skill 描述进行比较,并激活匹配的那些
- 全局 Skills 存放在
~/.kiro/skills/,跟随你在所有项目中使用。工作区 Skills 存放在项目内的.kiro/skills/中,与克隆仓库的所有人共享 - Skills 按需加载——只有在 Kiro 识别到相关场景时才自动激活,不会占满上下文窗口
- 如果你发现自己反复向 Kiro 解释同样的事情,那就是一个等待被编写的 Skill
二、创建你的第一个 Skill
1、创建 Skill
我们将构建一个全局 Skill,教会 Kiro 如何以一致的格式编写 PR 描述。由于这是全局 Skill,它存放在你的主目录中,可在所有项目中使用。
首先,在 skills 文件夹内为你的 Skill 创建一个目录。目录名应与你的 Skill 名称一致:
mkdir -p ~/.kiro/skills/pr-description
然后在该目录内创建一个 SKILL.md 文件。文件由 frontmatter 分隔线分为两部分:
---
name: pr-description
description: Writes pull request descriptions. Use when creating a PR, writing a PR, or when the user asks to summarize changes for a pull request.
---
When writing a PR description:
1. Run `git diff main...HEAD` to see all changes on this branch
2. Write a description following this format:
## What
One sentence explaining what this PR does.
## Why
Brief context on why this change is needed
## Changes
- Bullet points of specific changes made
- Group related changes together
- Mention any files deleted or renamed
name 标识你的 Skill。description 告诉 Kiro 何时使用它——这是匹配条件。第二组分隔线之后的所有内容是 Kiro 在 Skill 被激活时遵循的指令。
2、通过 Kiro 面板导入 Skill
除了手动创建,你还可以通过 Kiro 面板导入 Skill:
- 打开 Kiro 面板中的 Agent Steering & Skills 区域
- 点击 + 并选择 Import a skill
- 选择来源:
- GitHub ——从公开仓库 URL 导入。你可以粘贴指向 Skill 文件夹或直接指向
SKILL.md文件的 URL。URL 必须指向仓库中的子目录,而不是仓库根目录。 - Local folder ——从本地文件系统导入
- GitHub ——从公开仓库 URL 导入。你可以粘贴指向 Skill 文件夹或直接指向
导入的 Skills 会被复制到你的 skills 目录中,并立即可用。
3、测试你的 Skill
默认 agent 会自动从两个位置加载 Skills,无需额外配置。你可以通过以下方式验证 Skill 是否可用:
- 在 Kiro IDE 中,查看 Agent Steering & Skills 面板
- 在 Kiro CLI 中,直接询问 Kiro “有哪些可用的 Skills”
要测试它,在一个分支上做一些更改,然后说类似"为我的更改写一个 PR 描述"的话。Kiro 会提示它正在使用 PR 描述 Skill,检查你的 diff,并按照你的模板编写描述——每次格式都一样。
4、Skill 匹配的工作原理
当 Kiro 启动时,它会扫描 Skills 目录,但只加载名称和描述——不加载完整内容。这是一个重要的细节。
当你发送请求时,Kiro 会将你的消息与所有可用 Skills 的描述进行比较。一旦找到匹配,Kiro 加载完整的 SKILL.md 文件并遵循其指令。
Skills 基于你的请求自动激活,无需斜杠命令来调用它们。Kiro 通过将你的请求与 Skill 描述进行匹配来决定何时使用某个 Skill。
注意:在 Kiro IDE 中,你也可以在聊天输入框中输入
/来查看可用的 Skills 作为斜杠命令,手动选择加载。
5、Skill 优先级
当工作区 Skills 和全局 Skills 同名时,工作区 Skills 优先。这允许你定义通用的全局 Skills,同时为特定项目进行覆盖。
注意:Kiro 的优先级体系为两级(工作区 → 全局),不同于 Claude Code 的四级体系。Kiro 不支持 Enterprise 和 Plugins 级别的 Skills。
为避免冲突,请使用描述性名称。不要只用 “review”,而是使用类似 “frontend-review” 或 “backend-review” 这样的名称。
6、更新和删除 Skills
要更新 Skill,编辑其 SKILL.md 文件。要删除 Skill,删除其目录。更改后 Skills 会立即生效。
7、要点总结
- Skill 是一个包含
SKILL.md文件的目录,文件头部有元数据(名称、描述),下方是指令内容 - Kiro 在启动时只加载 Skill 的名称和描述,然后使用语义匹配将传入的请求与这些描述进行比较
- 名称冲突时的优先级:工作区(Workspace)→ 全局(Global)
- 要更新 Skill,编辑其
SKILL.md。要删除 Skill,删除其目录
三、配置与多文件 Skills
1、Skill 元数据字段
Agent Skills 开放标准在 SKILL.md 的 frontmatter 中支持多个字段:
| 字段 | 必填 | 说明 |
|---|---|---|
name |
是 | 必须与文件夹名一致。仅使用小写字母、数字和连字符(最多 64 个字符) |
description |
是 | 何时使用此 Skill。Kiro 将其与你的请求进行匹配(最多 1024 个字符) |
license |
否 | 许可证名称或对打包许可证文件的引用 |
compatibility |
否 | 环境要求(如所需工具、网络访问等) |
metadata |
否 | 额外的键值对数据,如作者或版本 |
注意:Claude Code 支持的
allowed-tools和model字段在 Kiro 中不受支持。allowed-tools在 Agent Skills 开放标准中标注为实验性(Experimental),Kiro 官方文档未列出此字段。model是 Claude Code 专有字段,不在开放标准中。
2、编写有效的描述
指令要明确。如果有人告诉你"你的工作是帮忙写文档",你不知道该做什么——Kiro 也是一样。
一个好的描述需要回答两个问题:
- 这个 Skill 做什么?
- Kiro 应该在什么时候使用它?
如果你的 Skill 没有在预期时触发,试着添加更多与你实际表述方式匹配的关键词。描述是 Kiro 用来判断 Skill 是否相关的依据,因此措辞很重要。
好的描述示例:
description: Review pull requests for security vulnerabilities and test coverage. Use when reviewing PRs or preparing code for review.
不好的描述示例:
description: Helps with code review
3、渐进式披露(Progressive Disclosure)
Skills 与你的对话共享 Kiro 的上下文窗口。当 Kiro 激活一个 Skill 时,它会将该 SKILL.md 的内容加载到上下文中。但有时你需要 Skill 依赖的参考资料、示例或工具脚本。
将所有内容塞进一个 2,000 行的文件有两个问题:它会占用大量上下文窗口空间,而且维护起来很痛苦。
渐进式披露解决了这个问题。将核心指令保留在 SKILL.md 中,将详细的参考资料放在单独的文件中,Kiro 仅在需要时才读取。
开放标准建议按以下方式组织你的 Skill 目录:
my-skill/
├── SKILL.md # 必需:元数据 + 指令
├── scripts/ # 可选:可执行代码
├── references/ # 可选:附加文档
└── assets/ # 可选:模板、资源
然后在 SKILL.md 中,链接到支持文件并明确说明何时加载它们:
For ECS deployments, follow the guide in `references/ecs-guide.md`.
Kiro 仅在指令引导时才加载参考文件。
经验法则:将 SKILL.md 保持在 500 行以内。如果超过了,考虑是否应该将内容拆分到单独的参考文件中。
已知问题:截至目前,全局 Skills(
~/.kiro/skills/)中的相对文件引用可能无法正确解析。这是因为 Skill 内容被注入时不包含 Skill 目录的路径上下文。工作区 Skills 通常不受此影响。详见 GitHub Issue #6955。
4、高效使用脚本
Skill 目录中的脚本可以在不将其内容加载到上下文中的情况下运行。脚本执行后,只有输出会消耗 token。在 SKILL.md 中需要包含的关键指令是告诉 Kiro 运行脚本,而不是读取它。
这对以下场景特别有用:
- 环境验证
- 需要保持一致性的数据转换
- 作为经过测试的代码比生成代码更可靠的操作
5、要点总结
name和description是必填字段——license、compatibility、metadata是可选补充- Kiro 不支持
allowed-tools和model字段 - 一个好的描述需要回答两个问题:这个 Skill 做什么?Kiro 应该在什么时候使用它?
- 渐进式披露:将
SKILL.md保持在 500 行以内,链接到支持文件(references、scripts、assets),Kiro 仅在需要时才读取 - 脚本执行时不会将其内容加载到上下文中——只有输出消耗 token,保持上下文高效
四、Skills 与其他 Kiro 功能的对比
1、Steering 与 Skills
Steering 是 Kiro 特有的上下文机制,通过 .kiro/steering/ 下的 Markdown 文件为 Kiro 提供持久化的项目知识。
Steering 的加载模式:
always(默认)——加载到每一次对话中auto——基于描述匹配自动加载(与 Skills 类似)fileMatch——当操作匹配特定文件模式时加载manual——通过#steering-file-name手动引用加载
使用 Steering 的场景:
- 始终适用的项目级标准
- 约束条件,如"永远不要修改数据库 schema"
- 框架偏好和编码风格
- 项目标准和约定
使用 Skills 的场景:
- 针对特定任务的专业知识
- 需要跨工具共享的可移植工作流
- 包含脚本和参考文件的复杂指令包
关键区别:Skills 遵循开放的 Agent Skills 标准,可以在 Kiro、Claude Code、Codex、Cursor 等工具之间共享。Steering 是 Kiro 特有的,不可移植。
2、AGENTS.md 支持
Kiro 支持通过 AGENTS.md 标准提供 Steering 指令。AGENTS.md 文件采用 Markdown 格式,类似于 Kiro 的 Steering 文件,但不支持加载模式配置,始终被加载。
你可以将 AGENTS.md 文件放在全局 Steering 目录(~/.kiro/steering/)或工作区根目录中,Kiro 会自动识别。
注意:Kiro 不支持 Claude Code 的
CLAUDE.md文件。如果你从 Claude Code 迁移,需要将CLAUDE.md的内容转换为 Kiro 的 Steering 文件或 AGENTS.md。
3、Skills 与 Hooks
Hooks 基于事件触发。一个 Hook 可能在 Kiro 每次保存文件时运行 linter,或在某些工具调用之前验证输入。它们是事件驱动的。
Skills 是请求驱动的。它们基于你的请求内容激活。
使用 Hooks 的场景:
- 每次文件保存时都应运行的操作
- 特定工具调用之前的验证
- Kiro 操作的自动化副作用
使用 Skills 的场景:
- 影响 Kiro 如何处理请求的知识
- 影响 Kiro 推理过程的指南
4、Skills 与 Powers
Powers 将 MCP 工具与知识和工作流打包在一起。它们根据上下文动态激活。
使用 Powers 的场景:
- 需要外部工具集成的场景(如 AWS、Figma 等)
- 需要工具和指导同时提供的集成
使用 Skills 的场景:
- 纯指令和知识,不需要外部工具
- 需要跨工具可移植的工作流
5、综合运用
一个典型的 Kiro 配置可能包括:
- Steering ——始终生效的项目标准和约定
- Skills ——按需加载的特定任务专业知识(跨工具可移植)
- Hooks ——由事件触发的自动化操作
- Powers ——MCP 工具与知识的打包集成
每个功能处理各自的专长。不要在另一个选项更合适时把所有东西都塞进 Skills——而且你可以同时使用多个功能。
6、要点总结
- Steering 是 Kiro 特有的上下文机制,支持 always/auto/fileMatch/manual 四种加载模式。Skills 遵循开放标准,按需加载
- Kiro 支持 AGENTS.md 标准(始终加载),但不支持 CLAUDE.md
- Hooks 是事件驱动的(在文件保存、工具调用时触发)。Skills 是请求驱动的(基于你的请求内容激活)
- Powers 提供 MCP 工具集成——与 Skills 是不同的类别
- 每个功能处理各自的专长——将它们组合使用,而不是把所有东西都塞进一种方式
五、共享 Skills
1、将 Skills 提交到仓库
最简单的共享方式是将 Skills 直接提交到你的仓库。将它们放在 .kiro/skills/ 中,任何克隆该仓库的人都会自动获得这些 Skills——无需额外安装。
当你推送更新时,所有人在下次拉取时都会获得更新。这种方式适用于:
- 团队编码标准
- 项目特定的工作流
- 引用你的代码库结构的 Skills
.kiro 目录包含你的 steering、skills、hooks 和 settings——全部通过正常的 Git 工作流进行版本控制并与团队共享。
2、从 GitHub 导入 Skills
Kiro 支持直接从 GitHub 公开仓库导入 Skills:
- 打开 Kiro 面板中的 Agent Steering & Skills 区域
- 点击 + 并选择 Import a skill
- 选择 GitHub,粘贴指向 Skill 文件夹或
SKILL.md文件的 URL
导入的 Skills 会被复制到你的 skills 目录中,立即可用。
由于 Skills 遵循开放的 Agent Skills 标准,你可以从任何兼容工具(Claude Code、Codex、Cursor 等)的社区中导入 Skills。
3、团队级 Steering 共享
虽然 Kiro 不支持企业级 Skills 托管,但你可以通过全局 Steering 实现团队级标准共享:
- 团队 Steering 文件可以通过 MDM 解决方案或组策略推送到用户的电脑
- 或者用户从中央仓库下载并放入
~/.kiro/steering文件夹
4、Skills 与自定义 Agents
在 Kiro CLI 中,自定义 agents 可以通过 resources 字段显式加载 Skills:
{
"name": "my-agent",
"description": "A custom agent for my workflow",
"tools": ["read", "write"],
"allowedTools": ["read"],
"resources": [
"file://README.md",
"file://.kiro/steering/**/*.md",
"skill://.kiro/skills/**/SKILL.md",
"skill://~/.kiro/skills/**/SKILL.md"
],
"prompt": "You are a helpful coding assistant",
"model": "claude-sonnet-4-6"
}
skill:// URI 方案支持特定路径、glob 模式和主目录展开。
需要注意的重要区别:
- 默认 agent 会自动从工作区和全局两个位置发现并加载 Skills,无需配置
- 自定义 agents 默认不加载 Skills——你需要在
resources字段中显式添加skill://URI
已知问题:截至目前,自定义 agents 可能不会自动发现
~/.kiro/skills/中的 Skills。详见 GitHub Issue #6888。
5、要点总结
.kiro/skills/中的工作区 Skills 通过 Git 自动共享——任何克隆仓库的人都会获得它们- Kiro 支持从 GitHub 和本地文件系统导入 Skills,兼容 Agent Skills 开放标准的社区生态
- 团队级标准可通过全局 Steering 文件(
~/.kiro/steering/)共享 - 自定义 agents 需要在
resources字段中显式添加skill://URI 来加载 Skills - 默认 agent 自动发现并加载所有 Skills,无需额外配置
六、如何创建高质量的 Skill
本章内容整理自 Agent Skills 官方文档 - For Skill Creators 系列,涵盖最佳实践、描述优化、效果评估和脚本使用。
1、从真实专业知识出发
创建 Skill 时一个常见的陷阱是让 LLM 在没有领域特定上下文的情况下生成 Skill——仅依赖 LLM 的通用训练知识。结果往往是模糊、泛泛的流程(“适当处理错误”、“遵循认证最佳实践”),而不是真正有价值的特定 API 模式、边界情况和项目约定。
(1) 从实际任务中提取
在与 agent 的对话中完成一个真实任务,沿途提供上下文、纠正和偏好。然后将可复用的模式提取为 Skill。关注以下几点:
- 成功的步骤——导致成功的操作序列
- 你做的纠正——你引导 agent 调整方向的地方(如"用库 X 而不是 Y"、“检查边界情况 Z”)
- 输入/输出格式——数据进出时的样子
- 你提供的上下文——agent 本身不知道的项目特定事实、约定或约束
(2) 从现有项目资料中综合
当你有大量现有知识时,可以将其输入 LLM 并要求它综合生成一个 Skill。关键是使用项目特定的材料,而不是通用参考。
好的素材来源包括:
- 内部文档、运维手册和风格指南
- API 规范、Schema 和配置文件
- 代码审查评论和 Issue 跟踪器(捕获反复出现的关注点)
- 版本控制历史,特别是补丁和修复(通过实际变更揭示模式)
- 真实的故障案例及其解决方案
2、通过真实执行来迭代
Skill 的初稿通常需要改进。用真实任务运行 Skill,然后将结果——所有结果,不仅仅是失败的——反馈到创建过程中。问自己:什么触发了误报?什么被遗漏了?什么可以删减?
即使只做一轮"执行-修改"循环,也能明显提高质量。复杂领域通常需要多轮迭代。
提示:阅读 agent 的执行轨迹,而不仅仅是最终输出。如果 agent 在无效步骤上浪费时间,常见原因包括:指令太模糊(agent 尝试多种方法才找到有效的)、指令不适用于当前任务(agent 仍然遵循了)、或者提供了太多选项而没有明确的默认值。
3、高效使用上下文
Skill 激活后,其完整的 SKILL.md 内容会加载到 agent 的上下文窗口中,与对话历史、系统上下文和其他活跃的 Skills 共存。Skill 中的每个 token 都在与窗口中的其他内容竞争 agent 的注意力。
(1) 添加 agent 缺少的,省略它已知的
专注于 agent 没有你的 Skill 就不会知道的内容:项目特定的约定、领域特定的流程、不明显的边界情况,以及要使用的特定工具或 API。你不需要解释什么是 PDF、HTTP 如何工作或数据库迁移是什么。
<!-- 太啰嗦——agent 已经知道什么是 PDF -->
## 提取 PDF 文本
PDF(便携式文档格式)文件是一种常见的文件格式...
<!-- 更好——直接跳到 agent 自己不知道的内容 -->
## 提取 PDF 文本
使用 pdfplumber 进行文本提取。对于扫描文档,回退到 pdf2image + pytesseract。
对每段内容问自己:“没有这条指令,agent 会做错吗?“如果答案是否,就删掉它。
(2) 设计内聚的单元
决定一个 Skill 应该覆盖什么,就像决定一个函数应该做什么:你希望它封装一个内聚的工作单元,能与其他 Skills 良好组合。范围太窄会迫使多个 Skills 为单个任务加载;范围太宽则难以精确激活。
(3) 追求适度的详细程度
过于全面的 Skills 可能弊大于利——agent 难以提取相关内容,可能被不适用于当前任务的指令引入歧途。简洁的、逐步的指导加上一个可用的示例,通常优于详尽的文档。
4、有效指令的编写模式
以下是构建 Skill 内容的可复用技巧。不是每个 Skill 都需要所有这些——使用适合你任务的那些。
(1) Gotchas(陷阱)章节
许多 Skills 中最有价值的内容是一个陷阱列表——违反合理假设的环境特定事实:
## Gotchas
- `users` 表使用软删除。查询必须包含 `WHERE deleted_at IS NULL`,否则结果会包含已停用的账户。
- 用户 ID 在数据库中是 `user_id`,在认证服务中是 `uid`,在计费 API 中是 `accountId`。三者指向同一个值。
- `/health` 端点只要 Web 服务器在运行就返回 200,即使数据库连接断开。使用 `/ready` 检查完整的服务健康状态。
提示:当 agent 犯了一个你必须纠正的错误时,将纠正内容添加到 Gotchas 章节。这是迭代改进 Skill 最直接的方式之一。
(2) 输出格式模板
当你需要 agent 以特定格式产出时,提供一个模板。这比用文字描述格式更可靠,因为 agent 擅长对具体结构进行模式匹配:
## 报告结构
使用此模板,根据具体分析调整各章节:
# [分析标题]
## 执行摘要
[关键发现的一段概述]
## 主要发现
- 发现 1 及支持数据
- 发现 2 及支持数据
## 建议
1. 具体可操作的建议
2. 具体可操作的建议
(3) 多步骤工作流的检查清单
显式的检查清单帮助 agent 跟踪进度并避免跳过步骤,特别是当步骤有依赖关系或验证关卡时:
## 表单处理工作流
进度:
- [ ] 步骤 1:分析表单(运行 `scripts/analyze_form.py`)
- [ ] 步骤 2:创建字段映射(编辑 `fields.json`)
- [ ] 步骤 3:验证映射(运行 `scripts/validate_fields.py`)
- [ ] 步骤 4:填充表单(运行 `scripts/fill_form.py`)
- [ ] 步骤 5:验证输出(运行 `scripts/verify_output.py`)
(4) 验证循环
指示 agent 在继续之前验证自己的工作。模式是:做工作 → 运行验证器 → 修复问题 → 重复直到验证通过:
## 编辑工作流
1. 进行编辑
2. 运行验证:`python scripts/validate.py output/`
3. 如果验证失败:
- 查看错误信息
- 修复问题
- 再次运行验证
4. 只有验证通过后才继续
(5) 提供默认值,而非菜单
当多种工具或方法都可行时,选择一个默认值并简要提及替代方案,而不是将它们作为同等选项呈现:
<!-- 太多选项 -->
你可以使用 pypdf、pdfplumber、PyMuPDF 或 pdf2image...
<!-- 明确的默认值加逃生通道 -->
使用 pdfplumber 进行文本提取。
对于需要 OCR 的扫描 PDF,改用 pdf2image + pytesseract。
5、优化 Skill 描述
description 字段承担了触发的全部责任。如果描述没有传达 Skill 何时有用,agent 就不知道该使用它。
(1) 编写有效描述的原则
- 使用祈使句——将描述框架为对 agent 的指令:“当…时使用此 Skill”,而不是"此 Skill 做…”
- 聚焦用户意图,而非实现——描述用户试图实现什么,而不是 Skill 的内部机制
- 宁可主动一些——显式列出 Skill 适用的场景,包括用户没有直接提到领域的情况:“即使他们没有明确提到 ‘CSV’ 或 ‘分析’”
- 保持简洁——几句话到一小段通常就够了。规范强制限制最多 1024 个字符
优化前后对比:
# 优化前
description: Process CSV files.
# 优化后
description: >
Analyze CSV and tabular data files — compute summary statistics,
add derived columns, generate charts, and clean messy data. Use this
skill when the user has a CSV, TSV, or Excel file and wants to
explore, transform, or visualize the data, even if they don't
explicitly mention "CSV" or "analysis."
(2) 设计触发评估查询
要系统地测试触发效果,你需要一组评估查询——标注了是否应该触发你的 Skill 的真实用户提示。
[
{
"query": "我有一个 ~/data/q4_results.xlsx 的电子表格,C 列是收入,D 列是支出——能加一个利润率列并高亮低于 10% 的吗?",
"should_trigger": true
},
{
"query": "把这个 JSON 文件转成 YAML 最快的方法是什么",
"should_trigger": false
}
]
目标约 20 个查询:8-10 个应该触发的,8-10 个不应该触发的。
应该触发的查询要在以下维度上变化:
- 措辞:正式的、随意的、有拼写错误的
- 明确程度:有的直接提到领域(“分析这个 CSV”),有的间接描述需求(“老板要一个数据图表”)
- 详细程度:混合简短和详细的提示
- 复杂度:单步任务和多步工作流
不应该触发的查询最有价值的是"近似命中”——与你的 Skill 共享关键词但实际需要不同东西的查询。
(3) 优化循环
- 在训练集和验证集上评估当前描述
- 识别训练集中的失败:哪些应该触发的没触发?哪些不应该触发的触发了?
- 修改描述——聚焦于泛化,避免为特定失败查询添加关键词(那是过拟合)
- 重复步骤 1-3,直到所有训练集查询通过或不再有明显改善
- 根据验证集通过率选择最佳迭代版本
通常 5 轮迭代就足够了。
提示:skill-creator Skill 可以端到端自动化这个循环:拆分评估集、并行评估触发率、使用 LLM 提出描述改进建议,并生成实时 HTML 报告。
6、评估 Skill 输出质量
你写了一个 Skill,试了一个提示,看起来有效。但它是否可靠——在不同提示下、在边界情况中、比没有 Skill 时更好?运行结构化评估(evals)可以回答这些问题,并为你提供系统改进 Skill 的反馈循环。
(1) 设计测试用例
一个测试用例有三个部分:
- Prompt:真实的用户消息
- Expected output:成功的人类可读描述
- Input files(可选):Skill 需要处理的文件
将测试用例存储在 Skill 目录的 evals/evals.json 中:
{
"skill_name": "csv-analyzer",
"evals": [
{
"id": 1,
"prompt": "我有一个月度销售数据 CSV 在 data/sales_2025.csv。能找出收入最高的 3 个月并做一个柱状图吗?",
"expected_output": "一个柱状图图片,显示收入最高的 3 个月,带有标注的坐标轴和数值。",
"files": ["evals/files/sales_2025.csv"]
}
]
}
编写好测试提示的建议:
- 从 2-3 个测试用例开始,不要在看到第一轮结果之前过度投入
- 变化提示的措辞、详细程度和正式程度
- 覆盖边界情况——至少包含一个测试边界条件的提示
- 使用真实上下文——文件路径、列名、个人背景
(2) 运行评估
核心模式是对每个测试用例运行两次:一次有 Skill,一次没有 Skill(或使用之前的版本)。这给你一个基线来对比。
每次运行应从干净的上下文开始——没有之前运行或 Skill 开发过程的残留状态。
(3) 编写断言(assert)
断言是关于输出应该包含或实现什么的可验证声明。在看到第一轮输出后再添加它们:
好的断言:
- “输出文件是有效的 JSON”——可编程验证
- “柱状图有标注的坐标轴”——具体且可观察
- “报告包含至少 3 条建议”——可计数
弱的断言:
- “输出很好”——太模糊
- “输出使用了确切的短语 ‘Total Revenue: $X’"——太脆弱
{
"assertions": [
"输出包含一个柱状图图片文件",
"图表显示恰好 3 个月",
"两个坐标轴都有标注",
"图表标题或说明提到了收入"
]
}
(4) 评分和聚合结果
评分意味着对每个断言评估实际输出并记录 PASS 或 FAIL,附带具体证据。完成后计算汇总统计:
{
"run_summary": {
"with_skill": {
"pass_rate": { "mean": 0.83 },
"tokens": { "mean": 3800 }
},
"without_skill": {
"pass_rate": { "mean": 0.33 },
"tokens": { "mean": 2100 }
},
"delta": {
"pass_rate": 0.50,
"tokens": 1700
}
}
}
delta 告诉你 Skill 的成本(更多时间、更多 token)和收益(更高的通过率)。一个增加 13 秒但将通过率提高 50 个百分点的 Skill 可能是值得的。一个将 token 使用量翻倍但只提高 2 个百分点的 Skill 可能不值得。
(5) 迭代改进循环
评分和审查后,你有三个信号来源:
- 失败的断言指向具体的差距
- 人工反馈指向更广泛的质量问题
- 执行轨迹揭示为什么出了问题
迭代循环:
- 将评估信号和当前
SKILL.md交给 LLM,要求它提出改进建议 - 审查并应用更改
- 在新的
iteration-<N+1>/目录中重新运行所有测试用例 - 评分并聚合新结果
- 人工审查。重复。
当你对结果满意、反馈持续为空、或迭代之间不再有明显改善时停止。
7、在 Skill 中使用脚本
Skills 可以指示 agent 运行 shell 命令并在 scripts/ 目录中打包可复用脚本。
(1) 一次性命令
当现有包已经能满足需求时,可以在 SKILL.md 指令中直接引用,无需 scripts/ 目录。许多生态系统提供在运行时自动解析依赖的工具:
# Python(使用 uvx)
uvx ruff@0.8.0 check .
# Node.js(使用 npx)
npx eslint@9.0.0 .
建议:
- 固定版本(如
npx eslint@9.0.0),确保命令行为一致 - 在
SKILL.md中声明前置条件(如"需要 Node.js 18+"),而不是假设 agent 的环境已具备
(2) 自包含脚本
当你需要可复用逻辑时,在 scripts/ 中打包一个声明自身依赖的脚本。以 Python 的 PEP 723 内联依赖声明为例:
# /// script
# dependencies = [
# "beautifulsoup4",
# ]
# ///
from bs4 import BeautifulSoup
html = '<html><body><h1>Welcome</h1><p class="info">This is a test.</p></body></html>'
print(BeautifulSoup(html, "html.parser").select_one("p.info").get_text())
使用 uv run scripts/extract.py 运行——uv run 会创建隔离环境、安装声明的依赖并运行脚本。
(3) 为 Agent 使用设计脚本
当 agent 运行你的脚本时,它读取 stdout 和 stderr 来决定下一步做什么。以下设计原则让脚本更易于 agent 使用:
- 避免交互式提示——agent 在非交互式 shell 中运行,无法响应 TTY 提示。通过命令行参数、环境变量或 stdin 接受所有输入
- 提供
--help文档——这是 agent 了解脚本接口的主要方式 - 编写有用的错误信息——说明什么出了错、期望什么、以及该尝试什么
- 使用结构化输出——优先使用 JSON、CSV 等格式,而非自由文本
- 支持幂等性——agent 可能重试命令,“如果不存在则创建"比"创建并在重复时失败"更安全
- 支持 dry-run——对于破坏性操作,
--dry-run标志让 agent 预览将要发生什么
8、要点总结
- 从真实专业知识出发创建 Skill,而不是让 LLM 凭空生成泛泛的指令
- 通过真实执行迭代改进——即使一轮"执行-修改"循环也能明显提高质量
- 高效使用上下文:添加 agent 缺少的,省略它已知的,保持
SKILL.md在 500 行以内 - 使用 Gotchas 章节、输出模板、检查清单和验证循环等模式构建有效指令
- 系统地优化描述:设计评估查询集,使用训练/验证拆分避免过拟合,通常 5 轮迭代足够
- 通过结构化评估(evals)测试 Skill 输出质量:设计测试用例、编写断言、对比有/无 Skill 的结果
- 脚本应避免交互式提示、提供
--help、使用结构化输出、支持幂等性
七、Skills 故障排查
1、Skill 没有触发
你的 Skill 存在,但 Kiro 在你期望时没有使用它。原因几乎总是描述。
Kiro 使用语义匹配,因此你的请求需要与描述的含义有重叠。如果重叠不够,就不会匹配。以下是解决方法:
- 检查你的描述是否与你实际的表述方式一致
- 添加用户实际会说的触发短语
- 用不同的表述进行测试,如"帮我分析性能”、“为什么这么慢?"、“让它更快”
- 如果任何变体未能触发,将这些关键词添加到你的描述中
2、Skill 没有加载
如果你的 Skill 没有出现在可用列表中,检查以下结构要求:
SKILL.md文件必须在一个命名目录内,而不是在 skills 根目录下- 文件名必须严格为
SKILL.md——“SKILL” 全大写,“md” 小写 - frontmatter 的 YAML 语法必须正确
name字段必须与文件夹名一致
验证方式:
- 在 Kiro IDE 中,查看 Agent Steering & Skills 面板确认 Skill 是否被列出
- 在 Kiro CLI 中,使用
/context show命令查看已加载的 Skills
3、错误的 Skill 被使用
如果 Kiro 使用了错误的 Skill 或在 Skills 之间混淆,你的描述可能太相似了。让它们更加明确。尽可能具体不仅帮助 Kiro 决定何时使用你的 Skill——还能防止与其他听起来相似的 Skills 冲突。
4、Skill 优先级冲突
如果你的全局 Skill 被忽略了,可能是工作区中有一个同名的 Skill 覆盖了它。
你的选择:
- 将你的 Skill 重命名为更独特的名称
- 检查工作区
.kiro/skills/中是否有同名 Skill
5、自定义 Agent 找不到 Skills
如果你使用自定义 agent 但看不到 Skills,检查 agent 配置文件中是否包含 skill:// URI:
{
"resources": [
"skill://.kiro/skills/**/SKILL.md",
"skill://~/.kiro/skills/**/SKILL.md"
]
}
注意:
skill://路径需要从.kiro/开始,相对路径可能无法正确解析。
6、运行时错误
Skill 加载了但在执行过程中失败。几个常见原因:
- 缺少依赖:如果你的 Skill 使用外部包,它们必须已安装。在 Skill 描述中添加依赖信息,让 Kiro 知道需要什么。
- 权限问题:脚本需要执行权限。对你的 Skill 引用的任何脚本运行
chmod +x。 - 路径分隔符:在所有地方使用正斜杠,即使在 Windows 上也是如此。
- 相对路径引用:全局 Skills 中的相对文件引用可能无法正确解析(已知问题)。
7、快速故障排查清单
- 没有触发? 改进你的描述并添加触发短语。
- 没有加载? 检查路径、文件名和 YAML 语法。
- 使用了错误的 Skill? 让描述之间更加不同。
- 被覆盖了? 检查工作区是否有同名 Skill。
- 自定义 Agent 找不到? 在
resources中添加skill://URI。 - 运行时失败? 检查依赖、权限和路径。
8、要点总结
- 如果 Skill 没有触发,原因几乎总是描述——添加与你实际表述方式匹配的触发短语
- 如果 Skill 没有加载,检查
SKILL.md是否在一个命名目录内(而不是在 skills 根目录下),且文件名严格为SKILL.md - 如果使用了错误的 Skill,你的描述太相似了——让它们更加不同
- 自定义 agents 需要在
resources字段中显式配置skill://URI - 对于运行时错误,检查依赖、文件权限(
chmod +x)和路径分隔符(在所有地方使用正斜杠)
当 Skills 不工作时,问题通常属于以下几类之一:Skill 没有触发、没有加载、存在冲突或运行时失败。好消息是大多数修复都相当简单。
参考文档
- Kiro Skills 官方文档(IDE)
- Kiro Skills 官方文档(CLI)
- Kiro Steering 官方文档
- Kiro Custom Agents 官方文档
- Agent Skills 开放标准规范
- Agent Skills - Skill 创建快速入门
- Agent Skills - 最佳实践
- Agent Skills - 优化描述
- Agent Skills - 评估 Skill 质量
- Agent Skills - 在 Skill 中使用脚本
- Anthropic 官方示例 Skills
- Agent Skills GitHub Issues(Kiro)
本文基于以下 Anthropic 官方视频教程适配编写:
- Part 1 - What are skills?
- Part 2 - Creating your first skill
- Part 3 - Configuration and multi-file skills
- Part 4 - Skills vs. other Claude Code features
- Part 5 - Sharing skills
- Part 6 - Troubleshooting skills
最后修改于 2026-04-22