跳转到内容

技能包架构与文件组织设计

技能包架构与文件组织设计

学习目标

  • 理解 agent-skills 的三层架构职责分离
  • 掌握文件命名规范和目录组织规则
  • 学会应用组合规则(用户是编排者,Persona 不调用 Persona)
  • 理解项目从单一 skill 到 23 个 skill 的组织策略

前置知识

本章涉及 Skill 渐进式知识管理的通用原理,建议先阅读:

下文直接聚焦 agent-skills 的具体文件组织实现。

项目实践

三层架构的职责分离

┌─────────────────────────────────────────┐
│ SKILL.md │
│ │
│ ┌─ Frontmatter ─────────────────────┐ │
│ │ name: lowercase-hyphen-name │ │
│ │ description: 第三人称 + 触发条件 │ │
│ └───────────────────────────────────┘ │
│ Overview → 电梯演讲 │
│ When to Use → 触发条件 │
│ Process → 工作流步骤 │
│ Rationalizations → 反合理化表 │
│ Red Flags → 违反信号 │
│ Verification → 退出标准 │
└─────────────────────────────────────────┘

agent-skills 的三层架构各有明确职责:

层级是什么示例组合角色
Skill带步骤和退出标准的工作流code-review-and-qualityhow — 在 Persona 或命令内部调用
Persona有视角和输出格式的角色code-reviewerwho — 采用视角,产出报告
Command用户入口点/review/shipwhen — 编排层

组合规则:用户(或斜杠命令)是编排者。Persona 不调用其他 Persona。技能是 Persona 工作流中的强制跳转。

文件命名规范

元素规范示例
技能目录kebab-casecode-review-and-quality/
技能文件始终大写SKILL.md
脚本kebab-case.shdeploy.sh
支撑文件kebab-case.mdframeworks.md
Zip 包匹配目录名code-review-and-quality.zip

目录组织规则

agent-skills/
├── skills/ # 23 个技能
│ ├── interview-me/ # Define 阶段
│ ├── idea-refine/ # ├── 含 3 个支撑文件
│ │ ├── SKILL.md # └── 入口
│ │ ├── frameworks.md # ├── 支撑文件
│ │ ├── examples.md # └── 支撑文件
│ ├── spec-driven-development/ # Define
│ ├── planning-and-task-breakdown/ # Plan
│ ├── incremental-implementation/ # Build
│ ├── ... # Build / Verify / Review / Ship
│ └── using-agent-skills/ # Meta:如何使用这个技能包
├── agents/ # 3 个专业角色
│ ├── code-reviewer.md
│ ├── security-auditor.md
│ ├── test-engineer.md
│ └── README.md # 角色关系和决策矩阵
├── references/ # 5 个补充参考
│ ├── testing-patterns.md
│ ├── security-checklist.md
│ ├── performance-checklist.md
│ ├── accessibility-checklist.md
│ └── orchestration-patterns.md
├── hooks/ # 会话生命周期钩子
│ ├── hooks.json
│ ├── session-start.sh
│ ├── sdd-cache-pre.sh
│ ├── sdd-cache-post.sh
│ ├── simplify-ignore.sh
│ └── ...
├── .claude/commands/ # 7 个斜杠命令(Claude Code)
│ ├── spec.md
│ ├── plan.md
│ ├── build.md
│ ├── test.md
│ ├── review.md
│ ├── code-simplify.md
│ └── ship.md
├── .gemini/commands/ # 7 个等价命令(Gemini CLI)
└── docs/ # 设置指南和文档

从单一 Skill 到 23 个 Skill 的组织策略

agent-skills 不是从一开始就有 23 个技能。它的增长遵循以下策略:

  1. 核心技能优先:最初只有几个核心技能(如 spec-driven、incremental-implementation)
  2. 按阶段扩展:随着覆盖的开发阶段增多,添加对应技能
  3. 避免重复:新技能不重复已有技能的内容,而是引用
  4. Meta Skill 治理using-agent-skills 作为元技能,定义所有技能的共享行为

关键设计决策references/ 在项目根目录,不被任何技能独占。这避免了”参考文件属于哪个技能”的争议,同时确保所有技能都可以引用。

问题与规避

陷阱表现对策
scripts/ 目录增加噪音不改变工作方式不含 runnable helpers 时不创建
技能间内容重复Agent 收到矛盾指令引用而非重复,建立优先级
支撑文件过深按需加载时引用链太长文件引用只深一层
Persona 调用 Persona破坏单一视角通过斜杠命令编排,不内部调用

设计取舍

为什么不支持嵌套子目录?

扁平的技能目录(skills/name/)简化了发现逻辑。如果支持嵌套(如 skills/frontend/ui-engineering/),发现逻辑需要递归搜索,增加了复杂度和出错可能。扁平结构也使得新增技能时不需要决定”属于哪个子目录”。

为什么 Zip 包必须匹配目录名?

Zip 是分发单位。名称匹配确保安装时可以预测解压后的目录结构,避免路径冲突和版本不一致。

参考来源

  • 源码验证: docs/skill-anatomy.md — 技能解剖学和文件组织规范
  • 源码验证: CLAUDE.md — 项目约定和边界
  • 源码验证: AGENTS.md — 三层架构的职责分离定义