目标:创建可复用的 AI 技能,提升团队协作效率
概述
技能(Skills)是可复用的指令集,让 OpenCode 在需要时加载特定能力。它们是团队知识沉淀的最佳载体——将反复使用的提示词、规范、流程封装为标准化模块。
类比:
- 函数 — 代码复用
- 技能 — AI 行为复用
技能发现机制图
技能加载优先级
技能目录结构
标准目录布局
.opencode/
└── skills/
├── code-review/
│ └── SKILL.md
├── react-component/
│ ├── SKILL.md
│ └── examples/
│ ├── Button.tsx
│ └── Card.tsx
├── api-design/
│ └── SKILL.md
└── database-migration/
└── SKILL.md
全局技能目录
~/.config/opencode/
└── skills/
├── write-git-commit/
│ └── SKILL.md
├── generate-readme/
│ └── SKILL.md
└── explain-error/
└── SKILL.md
多路径发现规则
OpenCode 会自动发现以下位置的技能:
- 当前项目
.opencode/skills/ - 向上遍历到 Git 根目录的
.opencode/skills/ - 全局
~/.config/opencode/skills/ - Claude 兼容路径
.claude/skills/
创建技能
文件位置
# 项目本地
.opencode/skills/<name>/SKILL.md
# 全局
~/.config/opencode/skills/<name>/SKILL.md
# Claude 兼容
.claude/skills/<name>/SKILL.md文件格式
---
name: react-component
description: 生成符合规范的 React 组件
---
# React 组件生成规范
## 要求
1. 使用函数组件 + TypeScript
2. Props 使用 interface 定义
3. 添加 JSDoc 注释
4. 使用 Tailwind CSS 样式
## 模板
```tsx
interface {{ComponentName}}Props {
// ...
}
/**
* {{ComponentName}} 组件
*/
export function {{ComponentName}}(props: {{ComponentName}}Props) {
// ...
}示例
...
---
## Frontmatter 详解
SKILL.md 顶部的 YAML frontmatter 是技能的元数据,影响技能发现和加载行为。
### 完整字段说明
```yaml
---
# 必填:技能标识符,kebab-case
name: my-awesome-skill
# 必填:一句话描述技能用途
description: 生成符合团队规范的 API 文档
# 可选:技能版本,语义化版本号
version: 1.2.0
# 可选:许可证
license: MIT
# 可选:兼容的 OpenCode 最低版本
compatibility: ">=0.5.0"
# 可选:作者信息
author: your-name
# 可选:标签,用于分类和搜索
tags:
- api
- documentation
- backend
# 可选:自定义元数据
metadata:
team: backend-squad
priority: high
reviewed: "2025-06-01"
---
Frontmatter 字段速查表
| 字段 | 必填 | 类型 | 说明 | 示例 |
|---|---|---|---|---|
name | ✅ | string | 技能名称(kebab-case) | code-review |
description | ✅ | string | 技能描述 | 执行标准化代码审查 |
version | ❌ | string | 语义化版本 | 1.0.0 |
license | ❌ | string | 许可证 | MIT |
compatibility | ❌ | string | 兼容版本 | >=0.5.0 |
author | ❌ | string | 作者 | team-alpha |
tags | ❌ | string[] | 标签列表 | [api, backend] |
metadata | ❌ | object | 自定义元数据 | {team: backend} |
实战:创建代码审查技能
.opencode/skills/code-review/SKILL.md:
---
name: code-review
description: 执行标准化的代码审查
version: 1.0.0
tags:
- review
- quality
---
# 代码审查规范
## 检查项
### 安全性
- [ ] 没有 SQL 注入风险
- [ ] 用户输入经过校验(Zod / Joi / class-validator)
- [ ] 没有硬编码密钥或密码
- [ ] 敏感操作有权限校验
### 性能
- [ ] 没有 N+1 查询
- [ ] 大数据量有分页(limit/offset 或 cursor)
- [ ] 没有明显的内存泄漏
- [ ] 异步操作有适当的并发控制
### 可维护性
- [ ] 函数长度 < 50 行
- [ ] 命名清晰有意义(动词开头用于函数)
- [ ] 有适当的注释(复杂逻辑必须注释)
- [ ] 没有冗余代码
### 测试
- [ ] 新功能有单元测试
- [ ] 边界情况覆盖
- [ ] 异步代码有 await 测试
## 输出格式
对每个问题:
1. **严重程度**:🔴 严重 / 🟡 警告 / 🟢 建议
2. **位置**:文件名和行号
3. **问题**:描述
4. **建议**:如何修复
## 示例输出
🔴 严重 位置: src/auth.ts:42 问题: 密码使用 md5 哈希 建议: 改用 bcrypt,rounds ≥ 12
使用:
使用 code-review 技能审查 @src/api.ts
真实场景案例 ①:团队代码审查标准化
某 12 人团队以前 Code Review 质量参差不齐,有的审查者只看风格,有的只看逻辑。引入
code-review技能后,AI 按照统一清单逐项检查,每次审查覆盖安全、性能、可维护性、测试四个维度,遗漏率降低 80%。
使用技能
自动发现
OpenCode 会自动发现以下位置的技能:
- 当前项目
.opencode/skills/ - 全局
~/.config/opencode/skills/ - 向上遍历到 Git 根目录
手动加载
使用 skill:react-component 生成一个 Button 组件
或:
/load react-component
在规则中引用技能
{
"rules": [
"生成 React 组件时,使用项目定义的 react-component 技能",
"提交代码前,使用 code-review 技能自我审查"
]
}团队技能共享方案
方案 A:Git 子目录(推荐小团队)
将技能直接提交到项目仓库:
# 项目仓库
my-project/
├── src/
├── .opencode/
│ └── skills/
│ ├── code-review/
│ └── api-docs/
└── opencode.json优点:版本控制、与代码同步、零配置 缺点:跨项目复用需复制
方案 B:独立技能仓库(推荐中团队)
创建专门的技能仓库,通过 Git Submodule 或脚本同步:
# 团队技能仓库
team-opencode-skills/
├── README.md
├── code-review/
│ └── SKILL.md
├── react-components/
│ └── SKILL.md
└── scripts/
└── install.sh安装脚本:
#!/bin/bash
# scripts/install.sh
SKILLS_DIR="${HOME}/.config/opencode/skills"
REPO_URL="[email protected]:your-org/team-opencode-skills.git"
# 克隆或更新
if [ -d "$SKILLS_DIR/.git" ]; then
cd "$SKILLS_DIR" && git pull
else
git clone "$REPO_URL" "$SKILLS_DIR"
fi
echo "✅ 团队技能已同步到 $SKILLS_DIR"优点:统一管理、跨项目复用、权限控制 缺点:需要维护同步机制
方案 C:包管理器分发(推荐大团队)
将技能打包为 npm 包:
{
"name": "@your-org/opencode-skills",
"version": "1.0.0",
"scripts": {
"postinstall": "node scripts/install.js"
}
}安装:
npm install -g @your-org/opencode-skills真实场景案例 ②:企业级技能管理
某互联网公司有 30+ 微服务团队,每个团队有独特的技术栈和规范。公司在内部 npm 仓库发布
@corp/opencode-skills,包含各团队的技能包。新成员入职时一键安装,AI 立即了解团队规范,上手时间从 2 周缩短到 2 天。
技能市场规范
如果你想将技能分享到社区,建议遵循以下规范:
目录结构规范
my-skill/
├── SKILL.md # 技能定义(必须)
├── README.md # 使用说明
├── examples/ # 示例文件(可选)
│ └── example.tsx
├── CHANGELOG.md # 变更日志(可选)
└── LICENSE # 许可证(推荐)
SKILL.md 规范
---
name: skill-name
description: 清晰的技能描述
version: 1.0.0
license: MIT
author: your-name
tags:
- relevant-tag
---
# 技能标题
## 简介
一两句话说明这个技能是做什么的。
## 使用场景
- 场景 1:...
- 场景 2:...
## 使用方式
使用 skill:skill-name 做某事
## 规范详情
详细的指令、模板、检查项...
## 示例
### 输入
...用户请求示例...
### 输出
...期望的 AI 输出示例...
技能命名规范
| 类型 | 命名示例 | 说明 |
|---|---|---|
| 代码生成 | react-component, api-endpoint | 动词+名词 |
| 代码审查 | code-review, security-audit | 功能导向 |
| 文档生成 | api-docs, changelog | 产出物导向 |
| 工作流 | git-workflow, deploy-checklist | 流程导向 |
社区分享渠道
- GitHub Discussions — OpenCode 官方社区
- Awesome OpenCode — 精选技能列表
- npm — 可安装的技能包
- Gist — 快速分享单个技能
高级技能示例
API 设计技能
---
name: api-design
description: 设计符合 RESTful 规范的 API
tags:
- api
- backend
---
# API 设计规范
## 路由命名
- 使用 kebab-case:`/user-profiles` 而非 `/userProfiles`
- 资源名用复数:`/orders` 而非 `/order`
- 动作用语义 HTTP 方法,不用动词路径
## 请求/响应格式
```json
// 请求
{
"data": { ... }
}
// 成功响应
{
"success": true,
"data": { ... },
"meta": { "page": 1, "perPage": 20 }
}
// 错误响应
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "字段 email 格式不正确",
"details": [{ "field": "email", "issue": "invalid_format" }]
}
}HTTP 状态码
| 场景 | 状态码 |
|---|---|
| 成功 | 200 / 201 |
| 参数错误 | 400 |
| 未认证 | 401 |
| 无权限 | 403 |
| 不存在 | 404 |
| 服务端错误 | 500 |
---
## FAQ
**Q: 技能和规则有什么区别?**
> A: 规则是全局约束(如"使用单引号"),技能是按需加载的能力(如"按规范生成 React 组件")。规则始终生效,技能需要显式或按需调用。
**Q: 一个项目可以有多少个技能?**
> A: 没有硬性限制,但建议控制在 10-20 个以内。过多技能会导致发现困难,建议按团队/领域拆分。
**Q: 技能可以引用其他技能吗?**
> A: 目前不支持技能之间的显式引用。可以在一个技能的内容中说明"配合 X 技能使用"。
**Q: 技能更新后需要重启 OpenCode 吗?**
> A: 通常不需要。OpenCode 会在加载时读取最新的 SKILL.md 文件。如果已加载的技能正在使用中,新会话会使用最新版本。
---
## 避坑清单 ⚠️
| 坑 | 后果 | 正确做法 |
|----|------|----------|
| 技能描述过于模糊 | AI 无法理解技能意图 | 描述具体、包含使用场景 |
| 技能内容过长 | 占用过多上下文 | 控制在 500 行以内,核心规范优先 |
| 团队技能不纳入版本控制 | 新成员无法获取 | 将 `.opencode/skills/` 提交到 Git |
| 全局技能和项目技能冲突 | 行为不可预期 | 明确优先级,避免重复定义 |
| 技能命名不统一 | 发现困难 | 使用 kebab-case,语义清晰 |
| 忘记更新技能版本 | 无法追踪变更 | 修改后更新 `version` 字段 |
| 技能包含敏感信息 | 信息泄露 | 敏感配置使用环境变量 |
---
## 练习
1. 创建一个适合你们团队的技能(代码审查、组件生成、API 设计等)
2. 测试技能效果,让 AI 按技能规范输出
3. 与团队分享,将技能提交到 Git
4. 尝试创建一个全局技能,在多个项目中复用
---
🎉 中级教程完成!你已掌握 OpenCode 的进阶功能:
- ⚙️ 多层配置体系与优先级
- 🧠 模型选择策略与本地部署
- 🔒 工具权限与安全策略
- 📋 规则系统与团队规范
- 🔌 MCP 服务器集成
- 🐙 GitHub/GitLab 工作流
- 🖥️ 多界面形态选择
- 🛠️ 代理技能创建与共享
进入高级教程,学习定制和开发:
[16. 自定义工具开发](../advanced/16-custom-tools.md)