Skip to main content

writing-skills

当创建新 skill、编辑现有 skill,或在部署前验证 skill 是否有效时使用

설치로 이동

소스 정보

저장소
aaione/superpowers-zh
최근 소스 활동
2026년 6월 20일 21:05
감지된 SKILL.md 언어
중국어
스타
8
포크
3

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
7 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
writing-skills
description
当创建新 skill、编辑现有 skill,或在部署前验证 skill 是否有效时使用
# Writing Skills / 编写 Skills ## 概览 **编写 skills 就是把 TDD 应用于流程文档。** **个人 skill 存放在你的运行时 skills 目录中**——关于你所用运行时上的路径,参见 [claude-code-tools.md](../using-superpowers/references/claude-code-tools.md)、[codex-tools.md](../using-superpowers/references/codex-tools.md)、[copilot-tools.md](../using-superpowers/references/copilot-tools.md) 或 [gemini-tools.md](../using-superpowers/references/gemini-tools.md)。Codex、Copilot CLI 和 Gemini CLI 还都把 `~/.agents/skills/` 视为跨运行时的别名。 你编写测试用例(带 subagent 的压力场景),看它们失败(基线行为),编写 skill(文档),看测试通过(agent 合规),然后重构(关闭漏洞)。 **核心原则:** 如果你没有看到一个 agent 在没有这个 skill 时失败,你就不知道这个 skill 是否教对了东西。 **必需的前置知识:** 在使用本 skill 之前,你必须理解 superpowers:test-driven-development。那个 skill 定义了基本的 RED-GREEN-REFACTOR 循环。本 skill 将 TDD 适配到文档。 **官方指南:** 关于 Anthropic 官方的 skill 编写最佳实践,参见 anthropic-best-practices.md。该文档提供了补充本 skill 中以 TDD 为核心的方法的额外模式和指南。 ## 什么是 Skill? 一个 **skill** 是经过验证的技术、模式或工具的参考指南。Skills 帮助未来的 agent 找到并应用有效的方法。 **Skills 是:** 可复用的技术、模式、工具、参考指南 **Skills 不是:** 关于你某次如何解决问题的叙述 ## Skill 的 TDD 映射 | TDD 概念 | Skill 创建 | |-------------|----------------| | **测试用例** | 带 subagent 的压力场景 | | **生产代码** | Skill 文档(SKILL.md) | | **测试失败(RED)** | Agent 在没有 skill 时违反规则(基线) | | **测试通过(GREEN)** | Agent 在 skill 存在时合规 | | **重构** | 在保持合规的同时关闭漏洞 | | **先写测试** | 在编写 skill 之前运行基线场景 | | **看它失败** | 文档化 agent 使用的确切合理化借口 | | **最少代码** | 编写针对那些特定违规的 skill | | **看它通过** | 验证 agent 现在合规 | | **重构循环** | 找到新的合理化借口 → 堵住 → 重新验证 | 整个 skill 创建过程遵循 RED-GREEN-REFACTOR。 ## 何时创建 Skill **在这些情况下创建:** - 一项技术对你来说不是显而易见的 - 你会跨项目再次引用它 - 模式适用广泛(不是项目特定的) - 其他人会受益 **不要为这些创建:** - 一次性解决方案 - 在其他地方有充分文档的标准实践 - 项目特定的约定(放进你的指令文件) - 机械性约束(如果可以用正则/校验强制执行,就自动化它——把文档留给需要判断的事情) ## Skill 类型 ### 技术(Technique) 有步骤可遵循的具体方法(condition-based-waiting、root-cause-tracing) ### 模式(Pattern) 思考问题的方式(flatten-with-flags、test-invariants) ### 参考(Reference) API 文档、语法指南、工具文档(office 文档) ## 目录结构 ``` skills/ skill-name/ SKILL.md # 主参考(必需) supporting-file.* # 仅在需要时 ``` **扁平命名空间** - 所有 skill 处于一个可搜索的命名空间中 **为以下情况使用单独文件:** 1. **重型参考**(100 行以上)- API 文档、全面的语法 2. **可复用工具** - 脚本、实用程序、模板 **保持内联:** - 原则和概念 - 代码模式(< 50 行) - 其他一切 ## SKILL.md 结构 **Frontmatter(YAML):** - 两个必填字段:`name` 和 `description`(所有支持的字段见 [agentskills.io/specification](https://agentskills.io/specification)) - 总计最多 1024 个字符 - `name`:仅使用字母、数字和连字符(不要括号、特殊字符) - `description`:第三人称,仅描述何时使用(不是它做什么) - 以 "Use when..." 开头以聚焦触发条件 - 包含具体的症状、情境和上下文 - **绝不概括 skill 的流程或工作流**(原因见 SDO 小节) - 尽可能保持在 500 字符以内 ```markdown --- name: Skill-Name-With-Hyphens description: Use when [specific triggering conditions and symptoms] --- # Skill Name ## Overview 这是什么?1-2 句话的核心原则。 ## When to Use [如果决策不明显,放一个小的内联流程图] 带症状和用例的列表 何时不使用 ## Core Pattern(用于技术/模式) 修改前/后代码对比 ## Quick Reference 用于快速浏览常见操作的表格或列表 ## Implementation 简单模式的内联代码 重型参考或可复用工具链接到文件 ## Common Mistakes 出了什么问题 + 修复 ## Real-World Impact(可选) 具体结果 ``` ## Skill 发现优化(Skill Discovery Optimization, SDO) **对发现至关重要:** 未来的 agent 需要能找到你的 skill ### 1. 丰富的 description 字段 **目的:** 你的 agent 阅读 description 来决定为给定任务加载哪些 skill。让它能回答:"我现在应该读这个 skill 吗?" **格式:** 以 "Use when..." 开头以聚焦触发条件 **关键:description = 何时使用,而不是 skill 做什么** description 应当只描述触发条件。不要在 description 中概括 skill 的流程或工作流。 **为什么这很重要:** 测试揭示,当 description 概括了 skill 的工作流时,agent 可能会跟随 description 而不是阅读完整的 skill 内容。一个写着"任务之间的 code review"的 description 导致一个 agent 只做了一次 review,尽管 skill 的流程图清楚地显示了两次 review(先规范合规,再代码质量)。 当 description 改为仅"Use when executing implementation plans with independent tasks"(没有工作流概括)时,agent 正确地阅读了流程图并遵循了两阶段 review 流程。 **陷阱:** 概括工作流的 description 创造了一条 agent 会走的捷径。skill 的正文变成了 agent 跳过的文档。 ```yaml # ❌ 坏:概括了工作流——agent 可能跟随它而不是阅读 skill description: Use when executing plans - dispatches subagent per task with code review between tasks # ❌ 坏:流程细节太多 description: Use for TDD - write test first, watch it fail, write minimal code, refactor # ✅ 好:只有触发条件,没有工作流概括 description: Use when executing implementation plans with independent tasks in the current session # ✅ 好:只有触发条件 description: Use when implementing any feature or bugfix, before writing implementation code ``` **内容:** - 使用指示此 skill 适用之处的具体触发器、症状和情境 - 描述*问题*(竞态条件、不一致的行为),而不是*特定语言的*症状(setTimeout、sleep) - 保持触发器与具体技术无关,除非 skill 本身是技术特定的 - 如果 skill 是技术特定的,在触发器中明确说明 - 用第三人称撰写(会被注入到系统提示中) - **绝不概括 skill 的流程或工作流** ```yaml # ❌ 坏:太抽象、含糊,不包含何时使用 description: For async testing # ❌ 坏:第一人称 description: I can help you with async tests when they're flaky # ❌ 坏:提到了技术但 skill 并不特定于它 description: Use when tests use setTimeout/sleep and are flaky # ✅ 好:以 "Use when" 开头,描述问题,无工作流 description: Use when tests have race conditions, timing dependencies, or pass/fail inconsistently # ✅ 好:技术特定的 skill 带明确触发器 description: Use when using React Router and handling authentication redirects ``` ### 2. 关键词覆盖 使用 agent 会搜索的词: - 错误信息:"Hook timed out"、"ENOTEMPTY"、"race condition" - 症状:"flaky"、"hanging"、"zombie"、"pollution" - 同义词:"timeout/hang/freeze"、"cleanup/teardown/afterEach" - 工具:实际的命令、库名、文件类型 ### 3. 描述性命名 **使用主动语态,动词在前:** - ✅ `creating-skills` 而不是 `skill-creation` - ✅ `condition-based-waiting` 而不是 `async-test-helpers` ### 4. Token 效率(关键) **问题:** getting-started 和频繁被引用的 skill 会加载进每一次对话。每个 token 都很重要。 **目标字数:** - getting-started 工作流:每个 < 150 词 - 频繁加载的 skill:总计 < 200 词 - 其他 skill:< 500 词(仍然要简洁) **技术:** **把细节移到工具的 help 中:** ```bash # ❌ 坏:在 SKILL.md 中文档化所有标志 search-conversations supports --text, --both, --after DATE, --before DATE, --limit N # ✅ 好:引用 --help search-conversations supports multiple modes and filters. Run --help for details. ``` **使用交叉引用:** ```markdown # ❌ 坏:重复工作流细节 When searching, dispatch subagent with template... [20 lines of repeated instructions] # ✅ 好:引用其他 skill Always use subagents (50-100x context savings). REQUIRED: Use [other-skill-name] for workflow. ``` **压缩示例:** ```markdown # ❌ 坏:冗长示例(42 词) your human partner: "How did we handle authentication errors in React Router before?" You: I'll search past conversations for React Router authentication patterns. [Dispatch subagent with search query: "React Router authentication error handling 401"] # ✅ 好:最简示例(20 词) Partner: "How did we handle auth errors in React Router?" You: Searching... [Dispatch subagent → synthesis] ``` **消除冗余:** - 不要重复交叉引用 skill 中的内容 - 不要解释从命令就能明显看出的东西 - 不要为同一模式包含多个示例 **验证:** ```bash wc -w skills/path/SKILL.md # getting-started 工作流:目标每个 < 150 # 其他频繁加载的:目标总计 < 200 ``` **按你做什么或核心洞察命名:** - ✅ `condition-based-waiting` > `async-test-helpers` - ✅ `using-skills` 而不是 `skill-usage` - ✅ `flatten-with-flags` > `data-structure-refactoring` - ✅ `root-cause-tracing` > `debugging-techniques` **动名词(-ing)适合流程:** - `creating-skills`、`testing-skills`、`debugging-with-logs` - 主动的,描述你正在采取的行动 ### 5. 交叉引用其他 Skills **当编写引用其他 skill 的文档时:** 只使用 skill 名称,带明确的要求标记: - ✅ 好:`**REQUIRED SUB-SKILL:** Use superpowers:test-driven-development` - ✅ 好:`**REQUIRED BACKGROUND:** You MUST understand superpowers:systematic-debugging` - ❌ 坏:`See skills/testing/test-driven-development`(不清楚是否必需) - ❌ 坏:`@skills/testing/test-driven-development/SKILL.md`(强制加载,消耗上下文) **为什么不用 @ 链接:** `@` 语法会立即强制加载文件,在你需要它们之前就消耗了 20 万以上的上下文。 ## 流程图使用 ```dot digraph when_flowchart { "需要展示信息?" [shape=diamond]; "我可能走错的决策?" [shape=diamond]; "使用 markdown" [shape=box]; "小的内联流程图" [shape=box]; "需要展示信息?" -> "我可能走错的决策?" [label="是"]; "我可能走错的决策?" -> "小的内联流程图" [label="是"]; "我可能走错的决策?" -> "使用 markdown" [label="否"]; } ``` **仅在以下情况使用流程图:** - 不明显的决策点 - 你可能过早停止的流程循环 - "何时用 A 而非 B"的决策 **绝不在以下情况使用流程图:** - 参考材料 → 表格、列表 - 代码示例 → Markdown 代码块 - 线性指令 → 编号列表 - 没有语义含义的标签(step1、helper2) 关于 graphviz 风格规则,参见本目录下的 `graphviz-conventions.dot`。 **为你的 human partner 可视化:** 使用本目录下的 `render-graphs.js` 把一个 skill 的流程图渲染成 SVG: ```bash ./render-graphs.js ../some-skill # 每个图分别渲染 ./render-graphs.js ../some-skill --combine # 所有图合并为一个 SVG ``` ## 代码示例 **一个优秀的示例胜过许多平庸的** 选择最相关的语言: - 测试技术 → TypeScript/JavaScript - 系统调试 → Shell/Python - 数据处理 → Python **好的示例:** - 完整且可运行 - 注释充分,解释为什么 - 来自真实场景 - 清晰展示模式 - 可直接改编(不是通用模板) **不要:** - 用 5 种以上语言实现 - 创建填空式模板 - 编造牵强的示例 你擅长移植——一个绝佳示例就够了。 ## 文件组织 ### 自包含的 Skill ``` defense-in-depth/ SKILL.md # 一切内联 ``` 何时:所有内容都放得下,不需要重型参考 ### 带可复用工具的 Skill ``` condition-based-waiting/ SKILL.md # 概览 + 模式 example.ts # 可改编的可工作辅助代码 ``` 何时:工具是可复用代码,而不仅仅是叙述 ### 带重型参考的 Skill ``` pptx/ SKILL.md # 概览 + 工作流 pptxgenjs.md # 600 行 API 参考 ooxml.md # 500 行 XML 结构 scripts/ # 可执行工具 ``` 何时:参考材料太大无法内联 ## 铁律(与 TDD 相同) ``` 没有先写出失败的测试,就不写 skill ``` 这适用于新 skill 以及对现有 skill 的编辑。 先写 skill 再测试?删掉它。从头来。 不测试就编辑 skill?同样的违规。 **没有例外:** - 不是为了"简单的添加" - 不是为了"只是加一节" - 不是为了"文档更新" - 不要把未测试的改动留作"参考" - 不要在跑测试时"改编"它 - 删除就是删除 **必需的前置知识:** superpowers:test-driven-development skill 解释了为什么这很重要。同样的原则适用于文档。 ## 测试所有 Skill 类型 不同 skill 类型需要不同的测试方法: ### 强制纪律型 Skills(规则/要求) **示例:** TDD、verification-before-completion、designing-before-coding **测试方式:** - 学术性问题:它们理解规则吗? - 压力场景:它们在压力下合规吗? - 多重压力组合:时间 + 沉没成本 + 疲惫 - 识别合理化借口并添加明确的计数器 **成功标准:** agent 在最大压力下遵循规则 ### 技术型 Skills(操作指南) **示例:** condition-based-waiting、root-cause-tracing、defensive-programming **测试方式:** - 应用场景:它们能正确应用该技术吗? - 变体场景:它们处理边界情况吗? - 缺失信息测试:指令有空白吗? **成功标准:** agent 成功地把技术应用到新场景 ### 模式型 Skills(心智模型) **示例:** reducing-complexity、information-hiding concepts **测试方式:** - 识别场景:它们能识别模式何时适用吗? - 应用场景:它们能使用该心智模型吗? - 反例:它们知道何时不适用吗? **成功标准:** agent 正确地识别何时/如何应用模式 ### 参考型 Skills(文档/API) **示例:** API 文档、命令参考、库指南 **测试方式:** - 检索场景:它们能找到正确信息吗? - 应用场景:它们能正确使用找到的信息吗? - 空白测试:常见用例都覆盖了吗? **成功标准:** agent 找到并正确应用参考信息 ## 跳过测试的常见合理化借口 | 借口 | 现实 | |--------|---------| | "skill 显然很清楚" | 对你清楚 ≠ 对其他 agent 清楚。测试它。 | | "它只是个参考" | 参考也会有空白、不清晰的段落。测试检索。 | | "测试是杀鸡用牛刀" | 未测试的 skill 有问题。总是如此。15 分钟测试省下数小时。 | | "出现问题我再测" | 问题 = agent 用不了 skill。在部署前测试。 | | "测试太繁琐" | 测试比在生产环境调试糟糕的 skill 更不繁琐。 | | "我确信它是好的" | 过度自信必然带来问题。无论如何都要测。 | | "学术审查就够了" | 阅读 ≠ 使用。测试应用场景。 | | "没时间测" | 部署未测试的 skill 会在之后花更多时间修复它。 | **以上全部意味着:在部署前测试。没有例外。** ## 让形式匹配失败 在编写指南之前,先对基线失败进行分类。能让一种失败类型刀枪不入的形式,在另一种失败上会明显适得其反。 | 基线失败 | 正确形式 | 错误形式 | |---|---|---| | 在压力下跳过/违反规则(明知故犯) | 禁令 + 合理化借口表 + 危险信号(见下面的加固) | 软指南("prefer..."、"consider...") | | 合规了,但输出形状错误(臃肿的 prompt、被埋没的裁决、复述的规范) | 正面配方或契约:陈述输出*是*什么——它的各部分,按顺序 | 禁令列表("不要复述"、"绝不叙述") | | 从它们已经产出的东西中遗漏了必需元素 | 结构性的:模板中一个 REQUIRED 字段或填写的槽位 | 靠近模板的散文提醒 | | 行为应当取决于某个条件 | 以可观察谓词为键的条件("如果简报存在,引用它") | 无条件规则 + 豁免条款 | **为什么禁令在塑造问题上适得其反:** 在相互竞争的激励下("让 prompt 自包含"),agent 会和"不要 X"谈判。在 dispatch-prompt 指南的正面措辞对照测试中,禁令组产生的不想要内容明显多于配方组(分布完全分离),甚至比无指南对照组更糟——对你自己的案例做微测试,而不是假设,但绝不要默认就伸手拿禁令。配方没有留下任何谈判余地:输出要么匹配陈述的形状,要么不匹配。 **无论你选哪种形式的规则:** - **不要有细微差别条款。**"除非重要否则不要 X"重新打开了谈判——在一个获胜的配方上附加一个细微差别条款,在同样的措辞测试中把它从一致降级为嘈杂。把真正的例外表达为它自己的、基于可观察谓词的条件。 - **豁免条款不会限定范围。**"此限制不适用于代码块"仍然会抑制代码块。如果输出的一部分必须豁免,重构使规则无法触及它。 ## 加固 Skill 以抵抗合理化 强制纪律的 skill(如 TDD)需要抵抗合理化。Agent 很聪明,在压力下会寻找漏洞。 **范围:** 此工具箱用于纪律失败——一个知道规则却在压力下跳过它的 agent。对于错误形状的输出或遗漏的元素,基于禁令的加固会适得其反;改用"让形式匹配失败"中的形式。 **心理学说明:** 理解说服技术为什么有效,有助于你系统地应用它们。关于权威、承诺、稀缺、社会认同和共同体原则的研究基础(Cialdini, 2021; Meincke et al., 2025),见 persuasion-principles.md。 ### 显式关闭每一个漏洞 不要只陈述规则——禁止特定的变通方法: <Bad> ```markdown 先写代码再写测试?删除它。 ``` </Bad> <Good> ```markdown 先写代码再写测试?删除它。从头来。 **没有例外:** - 不要把它留作"参考" - 不要在写测试时"改编"它 - 不要看它 - 删除就是删除 ``` </Good> ### 应对"精神 vs 字面"的论调 尽早添加基础原则: ```markdown **违反规则的字面意义,就是违反规则的精神。** ``` 这切断了一整类"我遵循的是精神"的合理化借口。 ### 构建合理化借口表 从基线测试中捕获合理化借口(见下面的测试小节)。agent 做出的每一个借口都进表: ```markdown | Excuse | Reality | |--------|---------| | "Too simple to test" | Simple code breaks. Test takes 30 seconds. | | "I'll test after" | Tests passing immediately prove nothing. | | "Tests after achieve same goals" | Tests-after = "what does this do?" Tests-first = "what should this do?" | ``` ### 创建危险信号列表 让 agent 在合理化时易于自检: ```markdown ## Red Flags - STOP and Start Over - Code before test - "I already manually tested it" - "Tests after achieve the same purpose" - "It's about spirit not ritual" - "This is different because..." **All of these mean: Delete code. Start over with TDD.** ``` > 注:上表中保留英文,因为这些是 skill 内部原文示例文本,用于展示表与列表的写法。
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기