mcpField
A
autosync-ic-skills

autosync-ic-skills

github.com/dfinityエージェントワークフロー39130 回インストール今日更新
リポジトリ

autosync-ic-skills について

autosync-ic-skills は、Claude Code のセッション開始時に Internet Computer のスキルをプロジェクトの `.claude/skills/` へ同期するフックを設定します。スキルを自動更新したいプロジェクト向けで、ハッシュに基づく差分取得と公開終了スキルの削除に対応します。

主な機能

  1. 01SessionStart 同期フックの設定
  2. 02ハッシュによる差分ダウンロード
  3. 03公開終了スキルの削除
  4. 04ネットワーク障害や jq 不在時の安全な終了

活用シーン

  1. 01Claude 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 フックが以降の処理を実行します。

作成するもの

  1. .claude/sync-ic-skills.sh — 公開中のスキルインデックスを .claude/skills/ に反映する差分同期スクリプト。
  2. .claude/settings.json の SessionStart フック。このフックがスクリプトを実行します。
  3. 即時の初回実行。これにより、スキルがすぐに利用できるようになります。

このスクリプトは差分ミラーです。検出用インデックスを一度取得し、各スキルの公開済み hash を保存済みのマニフェストと比較して、実際に変更されたスキルだけを再ダウンロードします(上流で削除されたスキルも整理します)。変更されていないスキルはファイルごとのダウンロードを行わずにスキップされ、変更がない限り、スクリプトは標準出力に何も書き込みません。サーバーがスキルの hash を公開していない場合、スクリプトは毎回再ダウンロードするため、いずれの場合も正しく動作します。

重要:ユーザーに動作を説明する

フックを追加すると、今後のセッション開始時にシェルスクリプトが自動的に実行されます。Claude Code は、新しいフックが有効になる前に、ユーザーに確認と信頼を求めます。これは想定どおりの正常な動作です。ユーザーには次のように伝えてください。

「.claude/sync-ic-skills.sh を実行する SessionStart フックを追加します。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 をインストールすれば、次のセッションで同期されます。

Step 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>" } 形式のマニフェスト)を比較し、ハッシュが変更されたスキルまたは新しいスキルのみを再ダウンロードします。
  • 以前にインストールしたスキルのうち、インデックスに存在しなくなったものを削除します。また、変更されたスキルのディレクトリ全体をアトミックなステージングスワップで置き換えます。そのため、上流で名前変更または削除されたファイルがスキル内に残ることはなく、ダウンロードが中断されても既存のコピーはそのまま保持されます。
  • 変更がない同期では、標準出力に何も書き込みません。変更があった場合は、systemMessage に added / updated / removed の概要を含む JSON オブジェクトを 1 つ出力します。SessionStart フックは生の出力ではなく JSON フィールドを表示するため、ユーザーに表示されるのはこの文字列です。診断情報(中断された同期の復旧、安全でないスキル名)は標準エラー出力に送られるため、表示されません。
  • ネットワークに接続できない場合や jq が見つからない場合は、キャッシュされたスキルを保持したまま正常に終了します。また、サーバーが hash を公開していないスキルは、再ダウンロードに切り替えます。

Step 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" }
        ]
      }
    ]
  }
}

Step 3 — 今すぐ一度実行する

次のセッション開始まで待たずに、このセッションですぐスキルを利用できるよう、スクリプトを実行します。

bash .claude/sync-ic-skills.sh

Step 4 — 確認して報告する

  • .claude/skills/ にスキルのディレクトリ(例:writing-motoko、static-site、internet-identity、…)が作成され、それぞれに SKILL.md が含まれていることを確認します。
  • .claude/skills/.ic-managed.json に、同期された各スキル名とそのハッシュが記録されていることを確認します。
  • インストールされたスキルの数、SessionStart フックが設定されていること、次のセッションで自動実行される前にフックを信頼するよう求められることをユーザーに伝えます。それ以降は、毎回のセッションで IC スキルが自動的に更新されます。

Notes

  • 安全に再実行できます。 このスキルまたはスクリプトを再度実行しても冪等に動作します。フックは重複せず、削除対象になるのは .ic-managed.json で追跡されているスキルのみです。
  • ハッシュによる差分更新。 スクリプトは検出インデックスのスキルごとの hash フィールドを基準にします。そのため、通常のセッションで何も変更されていなければ、ダウンロードするのは index.json のみで、何も表示せずに終了します。スキルが再ダウンロードされるのはハッシュが変更された場合のみです。このスクリプトの旧バージョン(マニフェストが単なる名前の配列だったもの)からの移行は、次回の実行時に自動で処理されます。
  • セッション中の更新も可能です。 非常に長時間のセッションでは、ユーザーが bash .claude/sync-ic-skills.sh を手動で実行するか、(例:/loop または cron のルーチンを使って)定期実行することもできます。ただし、通常のケースには SessionStart フックで対応できます。

コメント