关于 autosync-ic-skills
autosync-ic-skills 为 Claude Code 配置会话启动钩子,将 Internet Computer 技能同步到项目的 `.claude/skills/`。它适用于需要自动更新技能的项目,并通过哈希比较下载变更内容、清理上游已移除的技能。
主要功能
- 01配置 SessionStart 同步钩子
- 02按哈希差异下载
- 03清理上游已移除技能
- 04网络或缺少 jq 时安全退出
适用场景
- 01在 Claude Code 会话间保持 IC 技能更新
- 02同步时跳过未变更的技能下载
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dfinity/ icskills --skill autosync-ic-skills安装后在 Claude Code 中输入/autosync-ic-skills确认已加载。
附带文件scripts/sync-ic-skills.sh
详细介绍
设置自动更新的 Internet Computer 技能
此技能会安装少量项目配置,让每个新的
Claude Code 会话都自动下载最新的 Internet Computer 技能
到 .claude/skills/,供 Claude 原生发现并触发这些技能。
这是一个一次性安装程序。完成以下步骤后,用户无需再访问此链接——已安装的 SessionStart hook 会从此负责处理。
你将创建的内容
.claude/sync-ic-skills.sh— 一个差异同步脚本,将实时 技能索引镜像到.claude/skills/。.claude/settings.json中的SessionStarthook,用于运行该脚本。- 立即首次运行,确保技能马上可用。
该脚本是一个差异镜像。它会获取一次发现索引,并将每项技能已发布的 hash 与存储的清单进行比较,只重新下载实际发生变化的技能(并清理上游已移除的技能)。未更改的技能会跳过,不会逐个文件下载;只有发生变化时,脚本才会向 stdout 写入内容。如果服务器未为某项技能发布 hash,脚本会在每次运行时重新下载该技能,因此无论哪种情况都能确保内容正确。
重要:告知用户预期情况
添加 hook 意味着 shell 脚本会在今后每次会话开始时自动运行。Claude Code 会要求用户先审核并信任这个新 hook,然后才会启用——这是预期行为,也是正确做法。请告知用户:
“我正在添加一个运行
.claude/sync-ic-skills.sh的SessionStarthook。Claude Code 会要求你在它自动运行前批准并信任它。之后,你的 IC 技能会在每次会话中保持最新。”
不要尝试绕过该批准流程。
步骤 0 — 检查前置条件(curl、jq)
同步脚本需要 curl(几乎总是已安装)和 jq(通常未安装)。
开始写入任何内容之前,请检查是否已安装:
command -v curl >/dev/null 2>&1 && echo "curl: ok" || echo "curl: MISSING"
command -v jq >/dev/null 2>&1 && echo "jq: ok" || echo "jq: MISSING"
- 如果缺少
jq,请提出安装建议(运行安装命令前先征求用户同意)。根据用户的平台选择正确的命令:- macOS(Homebrew):
brew install jq - Debian/Ubuntu:
sudo apt-get update && sudo apt-get install -y jq - Fedora/RHEL:
sudo dnf install -y jq - Alpine:
apk add jq - Arch:
sudo pacman -S --noconfirm jq - Windows(winget):
winget install jqlang.jq
- macOS(Homebrew):
- 如果用户拒绝,仍然继续——脚本会优雅降级(缺少
jq时会发出警告并正常退出),用户可以之后再安装jq,下次会话时就会执行同步。
步骤 1 — 下载同步脚本
该脚本作为文件与此技能一同发布,因此应直接获取原文件,而不是转录内容(这样可确保字节级内容完全一致)。创建 .claude 目录并下载:
mkdir -p .claude
curl -fsSL https://skills.internetcomputer.org/.well-known/skills/autosync-ic-skills/scripts/sync-ic-skills.sh \
-o .claude/sync-ic-skills.sh
不要手动编写或改述脚本——始终获取已发布的副本,以确保同步逻辑随着上游更新保持正确。
脚本的作用(供用户了解):
- 获取一次
https://skills.internetcomputer.org/.well-known/skills/index.json。 - 对每项技能,将发布的
hash与.claude/skills/.ic-managed.json(一个{ "<skill>": "<hash>" }格式的清单,记录其管理的技能)进行比较,并且仅重新下载哈希已更改或新增的技能。 - 清理先前安装但已不在索引中的技能,并通过原子暂存交换替换已更改技能的整个目录——这样,上游重命名或删除的文件就不会残留在技能目录中;如果下载中断,现有副本也会保持完整。
- 无操作同步时不向 stdout 写入任何内容。发生更改时,会打印一个 JSON 对象,其
systemMessage包含新增、更新和移除的摘要——用户看到的就是此字符串,因为 SessionStart 钩子会显示 JSON 字段,而不是原始输出。诊断信息(同步中断恢复、不安全的技能名称)会写入 stderr,因此不会显示出来。 - 可平稳降级:如果网络不可用或缺少
jq,则正常退出(保留缓存的技能);如果服务器未为某项技能发布hash,则改为重新下载该技能。
步骤 2 — 注册 SessionStart 钩子(幂等)
向 .claude/settings.json 添加一个运行此脚本的 SessionStart 钩子。
- 如果
.claude/settings.json不存在,则使用以下内容创建它。 - 如果文件已存在,则合并——保留所有现有键、钩子和权限。仅添加
SessionStart项,且仅当其中尚不存在等效的bash .claude/sync-ic-skills.sh命令时才添加(不要重复创建)。解析现有 JSON,将其插入hooks.SessionStart数组,然后写回文件;切勿盲目覆盖该文件。
确保以下条目存在:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{ "type": "command", "command": "bash .claude/sync-ic-skills.sh" }
]
}
]
}
}
步骤 3 — 立即运行一次
立即运行脚本,以便本次会话无需等待下次会话启动即可使用这些技能:
bash .claude/sync-ic-skills.sh
步骤 4 — 验证并报告
- 确认
.claude/skills/现在包含技能目录(例如writing-motoko、static-site、internet-identity等),且每个目录中都有SKILL.md。 - 确认
.claude/skills/.ic-managed.json将每个已同步的技能名称映射到其哈希。 - 告知用户已安装多少项技能、
SessionStart钩子已就位,以及在钩子于下次会话自动运行前,系统会提示他们信任该钩子。从此以后,他们的 IC 技能会在每次会话中自动刷新。
说明
- 可安全重复运行。 重新调用此技能或脚本都是幂等的:不会重复添加钩子,并且只会清理
.ic-managed.json中记录的技能。 - 按哈希进行差异同步。 脚本依据发现索引中每项技能的
hash字段,因此在内容未发生变化的正常会话中,只会下载index.json,然后静默退出。只有哈希发生变化时才会重新下载技能。从此脚本的旧版本(其清单是仅包含名称的数组)迁移时,下次运行会自动处理。 - 可选的会话中刷新。 对于运行时间很长的会话,用户也可以手动运行
bash .claude/sync-ic-skills.sh,或安排其定时运行(例如通过/loop或 cron 任务)——但SessionStart钩子已能满足常规需求。