name: autosync-ic-skills description: One-time installer that makes a Claude Code project keep its Internet Computer skills up to date automatically. Sets up a SessionStart hook plus a sync script so .claude/skills/ always mirrors the latest skills published at skills.internetcomputer.org. Use when a user wants to install, bootstrap, or enable "always-latest" Internet Computer / IC / ICP / Motoko skills in a project, or pastes the link to this skill. This is a one-time setup action, not ongoing IC knowledge — after it runs, the installed hook keeps skills current on every session. Do NOT use for IC coding questions themselves — this only configures auto-updating skills. license: Apache-2.0 metadata: title: Automatically Sync Latest IC Skills category: Infrastructure
Set up self-updating Internet Computer skills
This skill installs a small amount of project configuration so that every new
Claude Code session automatically downloads the latest Internet Computer skills
into .claude/skills/, where Claude discovers and triggers them natively.
It is a one-time installer. After you complete the steps below, the user never
needs this link again — the installed SessionStart hook does the work from then on.
What you will create
.claude/sync-ic-skills.sh— a differential sync script that mirrors the live skill index into.claude/skills/.- A
SessionStarthook in.claude/settings.jsonthat runs that script. - An immediate first run, so skills are present right away.
The script is a differential mirror. It fetches the discovery index once and
compares each skill's published hash against a stored manifest, re-downloading only
the skills that actually changed (and pruning ones removed upstream). Unchanged skills
are skipped with no per-file downloads, and the script stays silent unless something
changed. If the server does not publish a hash for a skill, the script falls back to
re-downloading it every run, so it remains correct either way.
Important: tell the user what to expect
Adding a hook means a shell script will run automatically at the start of future sessions. Claude Code will ask the user to review and trust the new hook before it activates — this is expected and correct. Let the user know:
"I'm adding a
SessionStarthook that runs.claude/sync-ic-skills.sh. Claude Code will ask you to approve/trust it before it runs automatically. After that, your IC skills stay current on every session."
Do not attempt to bypass that approval.
Step 0 — Check prerequisites (curl, jq)
The sync script needs curl (virtually always present) and jq (often not).
Before writing anything, check for them:
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"
- If
jqis missing, offer to install it (ask the user before running an install command). Pick the right one for their platform:- 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):
- If the user declines, still proceed — the script is written to degrade gracefully
(it exits cleanly with a warning when
jqis absent), and they can installjqlater and the next session will sync.
Step 1 — Download the sync script
The script is published as a file alongside this skill, so you fetch it verbatim rather
than transcribing it (this guarantees byte-exact content). Create the .claude directory
and download it:
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
Do not hand-write or paraphrase the script — always fetch the published copy so the sync logic stays correct as it is updated upstream.
What the script does (for the user's awareness):
- Fetches
https://skills.internetcomputer.org/.well-known/skills/index.jsononce. - For each skill, compares the published
hashagainst.claude/skills/.ic-managed.json(a{ "<skill>": "<hash>" }manifest of skills it manages) and re-downloads only the skills whose hash changed or are new. - Prunes skills it previously installed that are no longer in the index.
- Prints a one-line
added / updated / removedsummary only when something changed; otherwise it is silent. - Degrades gracefully: exits cleanly (keeping cached skills) if the network is down or
jqis missing, and falls back to re-downloading skills the server publishes nohashfor.
Step 2 — Register the SessionStart hook (idempotently)
Add a SessionStart hook to .claude/settings.json that runs the script.
- If
.claude/settings.jsondoes not exist, create it with the content below. - If it does exist, merge — preserve all existing keys, hooks, and
permissions. Only add the
SessionStartentry, and only if an equivalentbash .claude/sync-ic-skills.shcommand is not already present (do not create a duplicate). Parse the existing JSON, insert into thehooks.SessionStartarray, and write it back; never blindly overwrite the file.
The entry to ensure is present:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{ "type": "command", "command": "bash .claude/sync-ic-skills.sh" }
]
}
]
}
}
Step 3 — Run it once now
Run the script immediately so the skills are available in this session without waiting for the next session start:
bash .claude/sync-ic-skills.sh
Step 4 — Verify and report
- Confirm
.claude/skills/now contains skill directories (e.g.motoko,asset-canister,internet-identity, …) each with aSKILL.md. - Confirm
.claude/skills/.ic-managed.jsonmaps each synced skill name to its hash. - Tell the user: how many skills were installed, that the
SessionStarthook is in place, and that they'll be prompted to trust the hook before it auto-runs next session. From then on, their IC skills refresh automatically every session.
Notes
- Safe to re-run. Re-invoking this skill or the script is idempotent: the hook is
not duplicated, and only skills tracked in
.ic-managed.jsonare ever pruned. - Differential by hash. The script keys off the per-skill
hashfield in the discovery index, so a normal session that touches nothing downloads onlyindex.jsonand exits silently. Skills are re-downloaded only when their hash changes. Migrating from an older version of this script (whose manifest was a bare name array) is handled automatically on the next run. - Optional mid-session refresh. For very long-running sessions, the user can also
run
bash .claude/sync-ic-skills.shmanually, or schedule it (e.g. via/loopor a cron routine) — but the SessionStart hook covers the normal case.