mcpField
A
autosync-ic-skills

autosync-ic-skills

github.com/dfinityAgent 工作流39130 次安装今天更新
代码仓库

关于 autosync-ic-skills

autosync-ic-skills 为 Claude Code 配置会话启动钩子,将 Internet Computer 技能同步到项目的 `.claude/skills/`。它适用于需要自动更新技能的项目,并通过哈希比较下载变更内容、清理上游已移除的技能。

主要功能

  1. 01配置 SessionStart 同步钩子
  2. 02按哈希差异下载
  3. 03清理上游已移除技能
  4. 04网络或缺少 jq 时安全退出

适用场景

  1. 01在 Claude Code 会话间保持 IC 技能更新
  2. 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 会从此负责处理。

你将创建的内容

  1. .claude/sync-ic-skills.sh — 一个差异同步脚本,将实时 技能索引镜像到 .claude/skills/。
  2. .claude/settings.json 中的 SessionStart hook,用于运行该脚本。
  3. 立即首次运行,确保技能马上可用。

该脚本是一个差异镜像。它会获取一次发现索引,并将每项技能已发布的 hash 与存储的清单进行比较,只重新下载实际发生变化的技能(并清理上游已移除的技能)。未更改的技能会跳过,不会逐个文件下载;只有发生变化时,脚本才会向 stdout 写入内容。如果服务器未为某项技能发布 hash,脚本会在每次运行时重新下载该技能,因此无论哪种情况都能确保内容正确。

重要:告知用户预期情况

添加 hook 意味着 shell 脚本会在今后每次会话开始时自动运行。Claude Code 会要求用户先审核并信任这个新 hook,然后才会启用——这是预期行为,也是正确做法。请告知用户:

“我正在添加一个运行 .claude/sync-ic-skills.sh 的 SessionStart hook。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
  • 如果用户拒绝,仍然继续——脚本会优雅降级(缺少 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 钩子已能满足常规需求。

评论

支持 Markdown