# 模块 5:Skill 的难点是决策边界
Skill 的价值不在于堆叠说明,而在于把任务拆成可核对的输入条件、决策顺序、交接结果和停止边界。
只有这些边界被显式定义,复杂任务才能在不同项目事实下保持可控。
---
# 一个真实 Skill 包如何按职责拆开
```text
skill-name/
├── SKILL.md # 触发条件、输入、工作流、输出与门禁
├── agents/
│ └── openai.yaml # 展示名、简介与默认触发提示
├── assets/
│ ├── 生成.prompt.md # 可复用任务 Prompt
│ ├── 检查清单.md # 固定遗漏点
│ └── 报告.template.md # 结构化输出模板
├── references/ # 稳定背景知识与兼容性说明
└── scripts/ # 可重复执行的机械检查
```
`SKILL.md` 负责决策和编排;模板、检查单、参考资料和脚本各自承担单一职责,避免同一约束出现多个版本。
---
# SKILL.md 的核心结构
```md
---
name: state-change-safety
description: 当任务涉及业务状态写入、资源占用或释放时使用。
---
## Inputs
变更目标、相关源码、状态规则、测试或 diff、项目约束。
## Workflow
提取事实 -> 判断状态与副作用 -> 比较候选方案 -> 生成验证清单。
## Output Contract
事实表、影响链路、最小改动建议、验证项、待确认事项。
## Stop Conditions
证据不足、规则冲突、范围越界或关键验证失败时停止并说明原因。
```
---
# agent 配置只解决“如何被发现”
```yaml
interface:
display_name: "状态变更安全审查"
short_description: "分析状态写入、资源副作用与验证边界"
default_prompt: "Use $state-change-safety to review this change."
policy:
allow_implicit_invocation: true
```
配置文件:让 Agent 找得到
SKILL.md:让 Agent 做得对
---
# 什么不该做成 Skill?
| 情况 | 更合适的资产 | 原因 |
|---|---|---|
| 只有一条永远成立的约束 | Rule | 没有多步决策必要 |
| 只需固定格式生成一段内容 | Prompt 或 Command | 不需要上下文编排 |
| 只检查五个固定项目 | Checklist | 不需要 Agent 主动分析 |
| 只有一个项目的临时异常 | 任务记录或 Example | 复用价值不足 |
| 需要读取、判断、生成、验证并输出结构化结果 | Skill | 需要多个资产协同 |