Decentralization? We're still early!

如何让 AI Agent 更懂你:OpenCode Skills 配置完全指南

  • 如何让 AI Agent 更懂你:OpenCode Skills 配置完全指南

    發布人 Brave 2026-05-31 06:47

    这篇文章面向新手,我会把每个概念都拆开讲。如果你完全不会编程,前几章也看得懂。如果你已经会用 OpenCode,可以直接跳到第三章。

    〇、先搞懂几个基本问题

    OpenCode 是什么?Skills 又是什么?

    OpenCode 是一个开源 AI 编码助手。你可以理解为:一个在终端或桌面里帮你写代码的 AI。它开源(源代码公开)、免费、可以连任意 AI 模型(ChatGPT、Claude、Gemini 或者你电脑上本地跑的模型都行)。

    Skills(技能) 是 OpenCode 的一个功能,简单说就是:给 AI 写一份"操作说明书"

    打个比方:

    • 你是一个项目主管,OpenCode 是你的新员工
    • 你每次分配任务都要重复说一遍公司的代码规范、测试流程、数据库约定
    • Skills 就是把这些"重复说明"写成文档,新员工(AI)自己会去读,不需要你每次都讲

    更准确地说:一个 Skill 就是一个文件夹,里面放一个叫 SKILL.md 的文件。这个文件里写清楚"当你遇到某类任务时,应该怎么做"。

    Skills 和"普通聊天"有什么区别?

     普通聊天用了 Skills
    你输入"帮我写个 API 接口""帮我写个 API 接口"
    AI 的行为凭它自己的理解来写先检查有没有匹配的 Skill,有的话按照 Skill 里写的规范来
    结果质量取决于 AI 的通用知识高度符合你项目的特定要求
    优势简单直接稳定、可重复、团队可共享

    一、你需要知道的背景:Skills 是怎么工作的?

    Skills 的"发现"机制

    OpenCode 启动时,会自动扫描多个目录,找 Skill 文件。它不会一次性把所有 Skill 的内容都塞给 AI(那样对话会变得很慢很贵),而是只让 AI 看到 Skill 的名字和一句话描述。当 AI 判断当前任务需要某个 Skill 时,它才会请求加载完整内容。

    这个过程非常像手机上的 App Store 搜索:

    1. 你打开 App Store,看到一堆应用的名字和简介(对应 Skill 的 namedescription
    2. 你找到一个需要的,点进去看详情(AI 调用 skill() 加载完整的 SKILL.md
    3. 看完之后决定用不用

    OpenCode 会在哪些位置找 Skills?

    OpenCode 会扫描以下六个位置(按优先级从低到高):

    位置路径示例作用范围
    项目目录(OpenCode 格式).opencode/skills/<名称>/SKILL.md仅当前项目
    项目目录(Claude 兼容格式).claude/skills/<名称>/SKILL.md仅当前项目
    项目目录(agents 兼容格式).agents/skills/<名称>/SKILL.md仅当前项目
    全局目录(OpenCode 格式)~/.config/opencode/skills/<名称>/SKILL.md所有项目
    全局目录(Claude 兼容格式)~/.claude/skills/<名称>/SKILL.md所有项目
    全局目录(agents 兼容格式)~/.agents/skills/<名称>/SKILL.md所有项目

    关键区别

    • 项目级:把这个目录提交到 Git,整个团队都能用
    • 全局级:只属于你个人,所有项目都能用

    为什么有三套格式? 因为 OpenCode 兼容了 Claude Code 和 Cursor 的 Skill 格式。如果你之前用过这些工具,写的 Skill 可以直接拿来用,不需要改。

    搜索升级规则

    对于项目级路径,OpenCode 会从你当前所在的文件夹开始,向上逐级查找,直到找到 Git 仓库的根目录为止。也就是说,如果你在 ~/projects/myapp/src/components/ 目录下启动 OpenCode,它会逐层往上找:

    1. src/components/ → 没有
    2. src/ → 没有
    3. ~/projects/myapp/(Git 根目录)→ 有 .opencode/skills/ → 加载

    这意味着你可以把 Skill 放在项目根目录,在项目的任何子目录里都能用。

    二、核心操作:怎么写一个 Skill?

    一个 Skill 文件长什么样?

    每个 Skill 就是一个文件夹 + 一个 SKILL.md 文件。文件必须包含两部分:

    第一部分:YAML 头信息(frontmatter)——用 --- 包裹的配置信息区

    第二部分:Markdown 正文——具体的操作说明,AI 会读这个

    来看一个完整例子。假设你要写一个"处理 Git 发布流程"的 Skill:

    ---
    name: git-release
    description: Create consistent releases and changelogs
    license: MIT
    compatibility: opencode
    metadata:
      audience: maintainers
      workflow: github
    ---
    
    ## What I do
    
    - Draft release notes from merged PRs
    - Propose a version bump (遵循语义化版本号)
    - Provide a copy-pasteable `gh release create` command
    
    ## When to use me
    
    Use this when you are preparing a tagged release.
    Ask clarifying questions if the target versioning scheme is unclear.
    
    ## Steps
    
    1. 先查看最近的 Git 标签:`git tag --sort=-creatordate | head -5`
    2. 对比当前版本和上一个版本之间的合并 PR
    3. 按 Conventional Commits 规范分类这些 PR
    4. 生成发布说明
    5. 用 `gh release create` 创建发布

    头信息字段详解

    字段是否必填最长说明
    name必填64 字符Skill 名称。只能用小写字母、数字和单个连字符(-),不能以连字符开头或结尾
    description必填1024 字符一句话描述。AI 根据这个决定是否加载 Skill。这是最重要的字段
    license可选-许可证,比如 MIT、Apache-2.0
    compatibility可选-兼容的工具,比如 opencode、claude
    metadata可选-自定义键值对,随便写什么

    name 的命名规则(容易踩坑)

    name 必须:

    • 1-64 个字符
    • 只能包含 小写字母 + 数字 + 连字符
    • 不能以连字符开头或结尾
    • 不能出现连续两个 --
    • 必须和文件夹名称完全一致

    ✅ 正确示例:

    • git-release
    • react-best-practices
    • docker-compose
    • test-2026

    ❌ 错误示例:

    • Git Release(有大写字母和空格)
    • git_release(下划线不行)
    • -git-release(以连字符开头)
    • git--release(连续两个连字符)

    description 是最关键的字段

    AI 靠 description 来决定要不要加载你的 Skill,而不是靠正文内容。所以 description 必须写得精准。

    不好的例子:

    description: Help with code

    这太模糊了,AI 不知道什么时候该用它。

    好的例子:

    description: Review TypeScript React components for accessibility issues, including ARIA labels, keyboard navigation, and color contrast compliance

    这个描述很具体:什么语言(TypeScript)、什么框架(React)、什么方面(无障碍)、检查哪些具体项目(ARIA、键盘导航、颜色对比度)。

    一个小技巧:在 description 里包含你项目中常用的术语和关键词,能提高 Skill 被自动匹配的准确率。

    三、进阶配置:权限控制

    为什么需要权限控制?

    如果你的项目里有很多 Skill,你可能不想让 AI 随便用。比如:

    • 有个 Skill 是用来"删除数据库"的——你希望 AI 每次要用时都问一下你
    • 有个 Skill 是"内部安全审查"——你只想让特定的 AI 智能体用
    • 有些 Skill 还没写完——你想藏起来不让 AI 看到

    OpenCode 提供了三种权限级别:

    权限值效果
    allowAI 可以直接加载和使用,不需要问你
    denyAI 看不到这个 Skill,完全隐藏
    askAI 加载前会弹窗问你"可以吗?"

    全局权限配置

    opencode.json 中配置:

    {
      "permission": {
        "skill": {
          "*": "allow",
          "pr-review": "allow",
          "internal-*": "deny",
          "experimental-*": "ask"
        }
      }
    }

    这个配置的意思是:

    • * 表示"所有 Skill"——默认允许
    • pr-review 这个 Skill——允许
    • 所有以 internal- 开头的 Skill——隐藏
    • 所有以 experimental- 开头的 Skill——加载前需要你批准

    尤其注意* 放在最前面表示"设置所有 Skill 的默认值",如果写在后面,它会覆盖前面所有规则。

    给不同的 AI 智能体设置不同权限

    OpenCode 允许你创建多个 AI 智能体(Agent),比如"写代码模式""审查代码模式""计划模式"。不同模式可以用不同的 Skill 权限。

    对内置智能体(在 opencode.json 中配置):

    {
      "agent": {
        "plan": {
          "permission": {
            "skill": {
              "internal-*": "allow"
            }
          }
        },
        "build": {
          "permission": {
            "skill": {
              "*": "allow",
              "dangerous-*": "ask"
            }
          }
        }
      }
    }

    这样,"计划模式"的智能体可以看到内部 Skill,但"写代码模式"的智能体在调用危险类 Skill 时需要你确认。

    对自定义智能体(在智能体文件中配置):

    ---
    permission:
      skill:
        "documents-*": allow
        "experimental-*": ask
    ---

    完全禁用 Skills

    如果你觉得某个智能体根本不需要 Skills,可以直接关掉:

    ---
    tools:
      skill: false
    ---

    这样 AI 连"有哪些 Skills"都看不到。

    四、实用建议:怎么用好 Skills?

    什么时候该用 Skills?

    场景建议
    团队有统一的代码规范写一个 Skill,比放在 README 里更有效,因为 AI 会自动读
    项目有特定的测试流程写一个测试 Skill,AI 每次写测试都按这个来
    你有重复性的任务(比如发布版本)写一个 Skill,以后直接说"发布新版"就行
    项目用了特殊的框架或约定写一个 Skill 说明这些约定
    每个开发者的习惯不同全局 Skills 解决你个人的通用需求

    项目级 vs 全局级,选哪个?

    项目级(.opencode/skills/

    • 适合这个项目特有的规范
    • 提交到 Git,整个团队共享
    • 新成员 clone 项目后自动拥有

    全局级(~/.config/opencode/skills/

    • 适合你自己的通用习惯
    • 适合通用的知识(比如 Docker 最佳实践、Git 工作流)
    • 所有项目都能用

    实际建议:通用 Skill 放全局,项目特定 Skill 放项目里。

    如何测试一个 Skill 是否正常工作?

    1. 检查文件路径:确认 SKILL.md 文件名全大写,且放在正确的目录下
    2. 验证 name 匹配:文件夹名称必须和 frontmatter 里的 name 完全一致
    3. 重启 OpenCode:Skills 是在启动时加载的,修改后需要重启
    4. 检查权限:如果 Skill 没有出现,看看是不是被 deny
    5. 名字不能重复:所有搜索路径下的 Skill 名字必须唯一,如果重复了,行为不确定

    常见错误排查

    问题最可能的原因
    AI 完全不按 Skill 说的做description 写得太模糊,AI 没意识到该用这个 Skill
    Skill 根本找不到文件名不是 SKILL.md(全大写),或者 name 和文件夹名不一致
    某个项目里 Skill 不出现可能被上级目录的权限配置 deny
    团队其他人用不了Skill 放在了全局目录而非项目目录,别人电脑上没有

    五、高级技巧:用 skill-creator 自动生成

    手工写太麻烦?有工具

    如果你觉得手写 YAML 和 Markdown 有点繁琐,OpenCode 生态里有一个开源工具叫 opencode-skill-creator,可以帮你自动生成 Skill:

    npx opencode-skill-creator install --global

    装完之后,你只需要在 OpenCode 里对 AI 说一句话:

    "Create a skill that helps with Docker compose files"

    然后它会:

    1. 问你 3-5 个问题(你要处理什么场景、输出格式要求等)
    2. 自动生成一个 Skill 草稿
    3. 生成测试用例,测试这个 Skill 能不能正确触发
    4. 让你看测试结果,不满意就迭代改进
    5. 最终安装到指定目录

    评价机制:让你的 Skill 不断变好

    这个工具最厉害的一点是:它可以自动测试你的 Skill 描述是否准确。

    具体做法是:

    1. 它会生成 20 个模拟问题(有些应该触发这个 Skill,有些不应该)
    2. 分别测试"有 Skill"和"没有 Skill"两种情况下的输出
    3. 对比质量差异
    4. 如果描述不准确导致触发错误,它会自动优化描述文字
    5. 重复多轮,选出最好的版本

    这个过程其实就是"数据驱动的配置优化"——用测试数据说话,而不是凭感觉调整描述文字。

    六、小结

    Skill 的核心逻辑其实就一句话:把重复的"操作说明"写成文档,让 AI 自己读

    你要做的事一句话说明
    创建新建文件夹 + 写一个 SKILL.md 文件
    命名全小写字母 + 连字符,文件夹名和 name 一致
    描述写精准的 description,AI 靠它判断要不要用
    放置项目通用技能放 .opencode/skills/,个人通用技能放 ~/.config/opencode/skills/
    权限allow/deny/ask 控制哪些 AI 智能体能用什么 Skill
    优化用 skill-creator 工具自动生成和测试

    记住:Skills 不是一次性写了就完的。随着项目发展,你的规范会变,Skills 也要跟着更新。好的 Skills 是活文档。

    参考来源:OpenCode 官方文档 skills 页面、opencode-skill-creator GitHub 项目、OpenCode Config 文档

    Brave 回复 2 weeks, 1 day ago 1 成員 · 0 回复
  • 0 回复

歡迎留言回复交流。

Log in to reply.

讨论開始
00 回复 2018 年 6 月
現在