如何为cc-skills-golang贡献技能:从技能创建流程到版本管理与ClawHub发布的完整指南
【免费下载链接】cc-skills-golang🧑🎨 A collection of Golang agentic skills that works项目地址: https://gitcode.com/gh_mirrors/cc/cc-skills-golang
cc-skills-golang 是一个面向 Go 项目的AI Agent 技能(Golang Agent Skills)开源合集,它为 Claude Code、Codex、Gemini CLI、Cursor、Copilot 等编程助手提供可复用的 Golang 领域指令集:代码风格、错误处理、并发、安全、性能优化……按需加载、不占上下文。想为它贡献一个 Golang 技能?这篇文章带你走完整条路:创建 SKILL.md、控制 Token 预算、跑对抗式评测、升级版本号,最后用 ClawHub 一键发布。
先认识仓库:一个技能长什么样 🧩
仓库中每个技能都是 skills/ 目录下的一个独立文件夹,以 skills/golang-stay-updated/SKILL.md 为例,标准结构是:
| 目录/文件 | 作用 | 是否必需 |
|---|---|---|
SKILL.md | 元数据(YAML frontmatter)+ 正文指令 | 必需 |
references/ | 深度文档,按需懒加载 | 可选 |
assets/ | 模板、配置文件等非 Markdown 资源 | 可选 |
scripts/ | 可执行脚本,脚本内容不进上下文 | 可选 |
evals/evals.json | 对抗式评测用例 | 强烈建议 |
所有贡献规范都集中在 CLAUDE.md 里——它明确了一条总原则:"仓库级事实写在 CLAUDE.md,具体操作流程写在技能里",两处内容不要互相复制,避免两份事实源逐渐漂移。
创建技能:目录命名与 Frontmatter 一步到位 📝
新技能放在skills/<skill-name>/SKILL.md,目录名必须与 frontmatter 的name完全一致(小写字母、数字、连字符)。一份合格的 frontmatter 长这样:
--- name: golang-example description: "Golang skill for X. Use when doing Y." license: MIT compatibility: Designed for Claude Code, Codex or similar harness. metadata: author: your-name version: "1.0.0" openclaw: emoji: "🔧" requires: bins: [go] install: [] allowed-tools: Read Edit Write Glob Grep Bash(go:*) Bash(git:*) Agent ---最容易踩的 3 个坑(摘自 CLAUDE.md 的 Frontmatter 章节):
version必须嵌在metadata下——顶层写version:会在严格校验器处直接打包失败;description要加引号——描述里一旦出现"冒号+空格"会悄悄破坏 YAML 解析,技能会从列表中静默消失且没有任何报错;- 字段只保留规范内的六个 + 项目要求项,不要添加顶层扩展字段。
写好 description:技能能不能被触发的关键 🔑
description是模型决定是否加载技能的唯一依据,写不好等于白写。项目给出的黄金法则:
- 先说做什么,再说何时用,顺序不能反;
- 用第三人称(❌ "I can help you…" ✅ "Use when the user mentions…");
- 点名用户会真实输入的具体名词:文件扩展名、工具名、导入路径;
- 必须包含 "Golang" 一词,保证只在 Go 项目触发;
- 相邻技能要写边界条款:
Do NOT use for X — use <sibling> instead.; - 描述只讲 what 和 when,绝不写步骤——否则模型会照着描述执行、跳过正文。
allowed-tools 声明:最小权限原则
每个技能必须声明allowed-tools,从默认集合Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent出发按需添加,例如 gRPC 技能加Bash(protoc:*)、调试技能加Bash(dlv:*)。注意正文里只描述能力,不出现工具名——正文写 "ask the user",而不是AskUserQuestion。
正文怎么写:Token 预算是硬约束 📏
技能正文是"每次调用都要付费"的常驻内容,所以项目对 Token 有严格预算(CLAUDE.md Token budgets 章节):
| 预算 | 上限 |
|---|---|
| 每个 description | ≈100 token,≤1,000 字符 |
| 每个 SKILL.md | 推荐 <2,500 token,<500 行(目标 250 行内) |
| 技能全部文件(含 references) | ≤10,000 token |
| 会话中同时加载的所有 SKILL.md | ≈10,000 token |
超出预算怎么办?不要压缩文字,把细节拆到references/——references 只在被引用时加载,不占常驻预算。同时保持引用只有一层深,嵌套链会被截断读取;超过 100 行的 reference 文件要加目录。
正文风格上,项目要求祈使句开头、每条规则自带"为什么"(用破折号或 because 接在同一句里),可枚举内容一律用表格和清单。
技能架构:原子化与交叉引用 🕸️
项目把技能设计为原子化、互相引用的单元,核心纪律是"每个概念只在一个技能里存在":
- 概念只属于一个"拥有者"技能,其他技能用全限定标识符交叉引用:
samber/cc-skills-golang@golang-security; - 引用写在反引号里,绝不裸写
@skill——会被支持 @ 引用的运行时当作强制加载指令,整个技能被拉进上下文烧掉预算; - 拆分/合并技能时,记得同步更新所有相关交叉引用。
另外,如果技能范围变了或增删了技能,还要更新 skills/golang-how-to/SKILL.md——这个"编排器"技能维护着技能加载表和冲突消解表。
版本管理:三处版本号必须一致 🔢
这是贡献流程里 CI 会强制检查的部分,改一个技能前请先搞清楚有两级版本:
- 技能版本——SKILL.md frontmatter 里的
metadata.version,遵循 semver(a.b.c),新技能从1.0.0起步; - 插件版本——.claude-plugin/plugin.json、.cursor-plugin/plugin.json 和 gemini-extension.json三处必须完全相同(当前均为
2.0.1)。
修改技能后,必须在合并前同时递增这两级版本,CI 会在 PR 上检查。还有两个细节:
- 库类技能要维护
metadata.openclaw.skill-library-version,记录技能是针对哪个库版本写的,便于日后检测过期(仓库建议每月跑一次过期检查); - 不要自动递增版本——按规范应把"升级版本号"提醒给开发者确认。
评测与发布前检查清单 ✅
对抗式评测:先证明技能"有用"
评测用例存放在skills/{name}/evals/evals.json,可以参考 skills/golang-safety/evals/evals.json 的结构。设计要求非常严格:评测必须"对抗式"——每个用例都要有模型不带技能时会掉进去的"陷阱"(比如"实现共享计数器"诱使模型写出竞态条件),测试技能独有的判断力而非模型本来就会的常识。规模参考:每 1,000 token 技能内容约 10 条断言,最少 50 条。
跑完后把结果追加到 EVALUATIONS.md(只追加、不覆盖历史),并回写 README 的技能统计表——整体数据是 41 个技能 3,439 条断言,带技能 97% vs 不带 57%,提升 40 个百分点。
提交前 7 步检查清单
按 CLAUDE.md "After updating a skill" 章节执行:
- 跑可移植性 grep,确认正文没有漏写的工具名;
npx prettier --write+markdownlint-cli2格式化并过 lint(先格式化再数 Token);- 跑
snyk-agent-scan修掉 W011/W012/W001 提示注入告警; - 用
tiktoken-cli实测 Description / SKILL.md / Directory 三项 Token; - 更新 README 表格里的 Token 计数和 Error rate gap 列;
- 递增技能
metadata.version与三处插件版本; - 通过
/skill-creator跑评测并更新 EVALUATIONS.md。
另外,所有实现工作都应在 git worktree 中进行(.claude/worktrees/),不要直接在检出分支上动手。
ClawHub 发布:一条脚本走天下 🚀
仓库根目录的 clawhub-publish.sh 就是发布入口,逻辑非常直白:
- 遍历
skills/*/,逐个读取 SKILL.md frontmatter 中的version; - 跳过没有版本或版本为
0.0.0的技能; - 执行
npx -y clawhub publish <技能目录> --version <版本>发布到 ClawHub; - 本地手动运行时,每发布 5 个技能会
sleep 3600——因为 ClawHub 限流是每小时 5 个、每天 20 个; - 在 CI 中运行时通过
CLAWHUB_TOKEN环境变量登录,不再休眠等待。
每个技能 frontmatter 里的metadata.openclaw块(emoji、homepage、requires.bins、install)就是 ClawHub 的元数据,负责展示与依赖自动安装——这也是发布前必须写全的字段。
写在最后:贡献的三条心法 💡
- 原子化:宁可小而聚焦,不要大而全,让其他技能来引用你;
- 教推理而非罗列规则:每条建议带上"为什么",模型才能处理你没预料的边缘情况;
- 把 Token 当预算花:正文精瘦、细节下沉 references、脚本不进上下文。
符合这三条的技能,才配得上仓库里那句宣言——"No AI slop here"。祝你的第一个技能顺利合入并发布到 ClawHub!
【免费下载链接】cc-skills-golang🧑🎨 A collection of Golang agentic skills that works项目地址: https://gitcode.com/gh_mirrors/cc/cc-skills-golang
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考