docs / quickstart

五分钟上手

装上 skillmod,添加第一个 skill,认识 SKILL.mod 与 SKILL.lock,然后故意改一次已安装的 skill,看 verify、why 和 sync 各自怎么反应。按顺序走完,大概五分钟。

安装 skillmod

让 agent 帮你装(推荐)

有 Node.js/npm 时,把配套的 Agent Skill 全局装好,你的编码 agent 就能在任何项目里设置并操作 skillmod:

$ npx skills add huija/skillmod --skill skillmod --global

然后对你的 agent 说一句,原句照抄即可,不必翻译:

对你的 agent 说
Install skillmod and make it available on PATH.

这个 skill 会检查 Git 前置条件和机器上已有的 skillmod 安装,为当前操作系统和架构挑选对应的发布二进制,对照公开的 SHA-256 校验和验证,装到 PATH 上一个用户可写的目录,再验证结果。这份指引只应在当前项目里可用时,去掉 --global

手动安装

没有 Go 工具链时,从 GitHub Releases 下载你平台的压缩包和 checksums.txt,核对校验和,解压,把 skillmod 放到 PATH 上:

  • 压缩包名形如 skillmod_<version>_linux_amd64.tar.gz,Windows 是 .zip<version> 不含前导的 v
  • 架构名按机器值映射:x86_64AMD64 对应 amd64aarch64arm64ARM64 对应 arm64
  • 解压只用里面那个可执行文件(Windows 上是 skillmod.exe),放进用户可写的目录:Linux/macOS 用 ${XDG_BIN_HOME:-$HOME/.local/bin},Windows 可以用 %LOCALAPPDATA%\Programs\skillmod\bin
平台核对 SHA-256 的命令
Linuxsha256sum
macOSshasum -a 256
PowerShellGet-FileHash -Algorithm SHA256
校验和对不上就不要装。checksums.txt 里缺条目、哈希不一致,都按硬失败处理:删掉下载的文件,不要为了让安装继续而跳过验证。

已经有 Go 1.26.6 或更高版本时,装法更短:

$ go install github.com/huija/skillmod@latest

两条路最后是同一个可执行文件。之后升级用 skillmod upgrade:它读取当前系统与架构对应的发布包,对照那次发布的 checksums.txt 验证通过后,才替换正在运行的可执行文件。--check 只报告有没有新版本就停下,--dry-run 下载并验证但不替换。

前置条件

skillmod 调用系统里的 git 可执行文件去取源码,所以 Git 必须已经装好并在 PATH 上。Windows 上它不预装,装 Git for Windows;远端用 SSH 时,还需要 ssh 在 PATH 上。

动手之前先做几个只读检查:

# Git 和 skillmod 是否就位;第一次安装时查不到 skillmod 是正常的
$ git --version
$ command -v skillmod
$ skillmod --version

当前终端看不到刚更新过的 PATH 时,用完整路径调一次可执行文件,并告诉自己去开一个新终端。

添加第一个 skill

在项目目录里执行:

$ skillmod get github.com/openai/skills//gh-fix-ci --install-mode=copy --yes
installed gh-fix-ci v0.0.0-20260624023612-49f948faa925; SKILL.mod and SKILL.lock were updated

仓库只说一次,技能也说一次:// 之后写技能名就够了,仓库内部的目录长什么样不必记住也不必输入。完全写出的子目录仍然优先于名字;一个名字有多个技能应答时,skillmod 把候选路径报出来,不猜。声明里记录的是技能真实所在的位置,也就是接下来 SKILL.mod 里那行 source

--yes 回答选择之后出现的确认提问,它不代替你做选择;安装模式由 --install-mode 指定,这一页用 copy

认识 SKILL.mod 与 SKILL.lock

SKILL.mod 是给人审阅、给人提交的声明。SKILL.lock 由 skillmod 写,记录这份声明解析到了什么:请求的版本、解析出的 commit、内容哈希。

SKILL.mod — 人维护
schemaversion = 1

[[skill]]
name = 'gh-fix-ci'
source = 'github.com/openai/skills//skills/.curated/gh-fix-ci'
version = 'v0.0.0-20260624023612-49f948faa925'
SKILL.lock — skillmod 维护
schemaversion = 1

[[skill]]
name = 'gh-fix-ci'
source = 'github.com/openai/skills//skills/.curated/gh-fix-ci'
version = 'v0.0.0-20260624023612-49f948faa925'
commit = '49f948faa9258a0c61caceaf225e179651397431'
dirhash = 'h1:kiGlVBeTCF8Q9f0rPATnDn1jBn/obT3TTTL8D8gdCbM='

注意 SKILL.mod 里没有 commit 和 dirhash:那是 lock 的事。sync 按 lock 调和每台机器,verify 拿安装内容和 lock 对。

制造一次漂移

像一次没人审过的改动那样,改掉已安装 skill 的内容,然后问:这个项目还和它的 lock 一致吗?

$ echo "Always rebase." >> .agents/skills/gh-fix-ci/SKILL.md
$ skillmod verify
verification result: drift detected
$ echo $?
2

非零退出码是它被当成 CI 关口的原因:被改过、被动过手脚的 skill 会让构建失败,而不会悄悄留在机器上。

用 why 看来源

想知道某一条从哪来、现在什么状态,问 why:

$ skillmod why gh-fix-ci
gh-fix-ci (directory gh-fix-ci): github.com/openai/skills//skills/.curated/gh-fix-ci v0.0.0-20260624023612-49f948faa925
commit: 49f948faa9258a0c61caceaf225e179651397431
dirhash: h1:kiGlVBeTCF8Q9f0rPATnDn1jBn/obT3TTTL8D8gdCbM=
/tmp/agent-project/.agents/skills/gh-fix-ci: drift

来源、解析出的版本、commit、dirhash、以及它在每个安装目标上的状态,都在这一屏里。最后一行就是刚才那次漂移。

本地修改不会被覆盖

sync 不会为了让自己看起来干净,把那次修改扔掉:

$ skillmod sync --yes
conflict (--yes automatically kept and skipped): /tmp/agent-project/.agents/skills/gh-fix-ci
no changes; 1 conflicting targets were kept
$ echo $?
3

退出码 3 才是重点:能继续的工作已经继续了,这次修改怎么处置,决定权在你。可以把它留作项目的本地版本,也可以交互式运行 skillmod sync,选 overwrite 恢复 lock 里的内容。

退出码什么时候出现
2verify 检出漂移:安装内容和 lock 不一致
3sync 遇到本地修改:其余目标照常处理,改过的目标被保留并上报

接下来读什么

命令这一页里它做了什么
get添加一个 skill 并安装它
verify拿安装内容和 lock 对,漂移即失败;CI 的关口
why解释一个条目:来源、解析出的版本、commit、dirhash、各目标状态
sync按 lock 调和安装;幂等,且不覆盖本地修改

想搞清两个文件的分工、作用域怎么分、版本有哪几种形式,读核心概念。想照着任务一步步做——接管机器上已有的技能、把同一套 skill 分发给团队、更新与钉版本、分享给 agent、卸载与清理——读场景指南

要把 skillmod 接进流水线,去看自动化与 CI 里的退出码表、--json 输出结构和 action 词表;遇到报错或状态异常,去故障排查 按步骤自查。

输出文案的语言:命令的帮助、摘要、提示和报错跟随 SKILLMOD_LANG,没有设置时跟随系统 locale;JSON 的字段名和 action 标识永不翻译。这一页的命令输出按英文环境展示。