Skip to main content

sync-public-skills

Synchronize curated Agent Skills across approved repositories with policy checks and verification. Use when publishing or updating managed skills, validating a repository mirror, or selecting a safe sync scope. Triggers on "sync public skills", "publish skills", "public 公開", "skill sync", "repository mirror".

Ir para a instalação

Informações da origem

Repositório
aktsmm/Agent-Skills
Última atividade na origem
15 de agosto de 2026 às 03:44
Idioma detectado do SKILL.md
japonês
Estrelas
26
Forks
3

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Explorador de arquivos
3 arquivos

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
sync-public-skills
description
Synchronize curated Agent Skills across approved repositories with policy checks and verification. Use when publishing or updating managed skills, validating a repository mirror, or selecting a safe sync scope. Triggers on "sync public skills", "publish skills", "public 公開", "skill sync", "repository mirror".
argument-hint
対象 skill 名、private/public/EMU/GIM repo path(任意)、mode(safe-auto / review-only / dry-run / all)
user-invocable
true
license
CC BY-NC-SA 4.0
metadata
{"author":"yamapan (https://github.com/aktsmm)"}
# sync-public-skills private skill repo(SSOT)から public / EMU private / GIM internal へ、行き先ごとに安全な skill だけを同期する。CLI(`.copilot`、prompt 不可)向けの自己完結 SKILL。VS Code では同名 prompt を使う。 ## Scope - 対象 source: private repo の `.github/skills/<skill>/`(native skill)。`copilot-skills/{skills,m-skills}/` は private inventory とし、public へ同期しない - 公開先: public skill repo, EMU private repo, GIM internal repo - 配布(public/private → 実行環境 `~/.copilot`)は Agent Skills Ninja の担当。この SKILL は repo への同期 / 公開だけを扱う ## Environment - `SYNC_PUBLIC_SKILLS_PRIVATE_REPO`: private repo ルート - `SYNC_PUBLIC_SKILLS_PUBLIC_REPO`: public repo ルート - `SYNC_PUBLIC_SKILLS_SCRIPT`: `Sync-AndPush.ps1` のフルパス - `SYNC_INTERNAL_SKILLS_EMU_REPO`: EMU private repo - `SYNC_INTERNAL_SKILLS_GIM_REPO`: GIM internal repo - いずれも Process scope 優先、無ければ User scope で解決する(`[System.Environment]::GetEnvironmentVariable($name,'User')`) ## Mode - 既定は `safe-auto`: この skill が明示実行された場合に限り、監査 → 行き先別に安全な skill だけ sync → push まで進める - `review-only` / `dry-run` / `プレビュー` 指定時は、候補・監査・予定差分・commit message を提示して停止する - `all` 指定時は、`primary` だけでなく private repo の未コミット skill 差分も対象にする(下記 All Mode) ## All Mode(`all` 指定時の dirty 取り込み) - まず `scripts/Commit-DirtySkills.ps1` をdry-runし、skill contentとNot Doneを確認する。意味・scopeが明確な場合だけ `-Apply`でskill単位にcommitする - 対象は skill content のみ: `.github/skills/<skill>/**` と `copilot-skills/skills/<skill>/**`。`copilot-skills/m-skills/<skill>/**` は legacy/手動 opt-in 時だけ対象にする。`.skill-meta.json` と shared file(README / assets)は除外する - `.skill-meta.json` が未追跡で dirty に出たら local-only metadata とみなし、stage せず削除してよい。tracked なら自動削除せず停止する - skill 以外の dirty(scripts、設定、無関係ファイル、`/memories/**`)はコミットしない。混在すれば stage せず Not Done に列挙する - 各 dirty skill を skill 単位で個別コミットする(`feat|fix|docs(<skill>): ...`)。複数 skill を 1 コミットに混ぜない - コミット後に各 skill の public / EMU / GIM 振り分けを監査する。public-safe だけ public へ、internal-only / private-only は EMU/GIM へ振り、public へ漏らさない - secret / 顧客名 / 個人メール / 具体 TPID / ローカル絶対パスを含む skill は、コミットは可だが public sync から除外する。一般化できないものは EMU/GIM 側も停止して確認する - 大規模削除、意味変更、scope 不明な差分が混ざる skill は、その skill だけ自動コミットせず停止する ## Gates(公開前に必ず確認) - public / internal / denied / copilot-deniedの分類SSOTは `scripts/skill-distribution.json`。`publicCopilotSkills` は空を維持し、promptやSKILL本文へ現在の一覧を複製しない - `dirty` は sync 必要性ではなく、未確定 authoring の gate として扱う。通常 sync の要否は private source path と public / EMU / GIM destination path の content diff で判定する。content diff は **tracked file を基準**にし、raw な filesystem hash 比較だけで判断しない。両 repo で untracked な build 生成物(`__pycache__/*.pyc` 等)が phantom diff として出て、pending 集合が実際の倍近くに見える。候補が出たら `git ls-files` で tracked かどうかを確認してから対象に含める - 実行前に `Mode / Selected Skills / 選択外の public diff` を示す。対象が明示されていれば `primary-only`、`all` / `broad` なら broad とし、会話の流れだけで primary を推測しない - primary が明示されている場合、既定の確認範囲は primary とその同期経路に限定する。全 skill 棚卸し、全 duplicate、全 copilot-skills license audit は `all` / `broad` / `audit` / `棚卸し` が明示された場合だけ行う - private-only / internal-only / MS 社内向け skill は public sync から除外する。社内限定は EMU private repo や GIM internal repo 経路へ逃がす - `.skill-meta.json` は local-only metadata として、dirty 判定 / stage / push / public diff から除外する - shared file(`.github/skills/README.md`、`assets/**`、自動生成の `.github/skills/LICENSE`)は skill commit と分離する。broad sync 後に `LICENSE` だけ generated drift が残ったら内容を確認し、意図どおりなら sync/index commit へ分ける - sync-only 実行中は README / assets / index / SKILL 本文を編集しない - public safety audit: 想定外の skill 漏れ込みや、想定外の削除が出たら停止して原因を確認する - branch / remote ambiguity、unexpected deletion、audit failure、content authoring 必要時は停止する - 手動コピーや一時 sync script を作らず、正式 runner の `Sync-AndPush.ps1` とその scope parameter を使う - secret / 顧客情報 / 個人メール / 具体 TPID / ローカル絶対パスを public にも EMU にも入れない。例は placeholder にする ## Destination Audits and Gates Destination 別の判定(公開可否 / 除外リスト / repo visibility / sensitive scan)はこの SKILL が決める。詳細手順と既定リストは [references/instructions/audits-and-gates.md](references/instructions/audits-and-gates.md)。 - **New Skill Classification Gate**: `skill-distribution.json` のpublic / internal / deniedのどこにもない skill がprivate repoにある限りsyncを強制停止する。未分類skillは分類をconfigへ保存してから再実行 - **Agent Discovery Gate**: script の停止に頼らず、実行前に未分類 skill を検出したら必ずユーザーへ分類を確認する。内容から推測して分類せず、明示回答なしに `-AllowUnknownSkills` を使わない - **Copilot-Skills Private Inventory Gate**: `.copilot` 由来ミラーは license に関係なく public 対象外とし、private repo 内だけに保持する - **EMU Private Sync Gate**: visibility `PRIVATE`/`INTERNAL` 確認、secret 連を placeholder 化 - **GIM Internal Sync Gate**: org-owned internal へ MS 社内向け skill を集約。既定 internal セット SSOT - **Incident Recovery**: prevention gate を抜けて public へ漏れた場合の復旧(filter-repo の限界、GitHub Sensitive Data Removal 申請、fork purge、rename vs delete、robocopy move の罠)は references の Incident Recovery 節を参照 ## Sync Strategy - 今回同期する明示 skill を `primary` とする - primary-only は `Sync-AndPush.ps1 -PrimarySkills <skill-name...>` を使う。選択外 skill、README、LICENSE index、assets、copilot-skills、orphan deletion は変更しない - 対象 skill が明示されている場合は、その skill の readiness、source/destination diff、漏れ込みだけを先に確認する。既定は `primary-only` とする - `primary` が clean かつ commit 済みなら、unselected dirty があっても即停止しない。dirty が primary path にある場合は未確定 authoring とみなし、`all` 指定がない限り `retro-private-skills` へ戻す - private repo が clean で ahead の場合は、sync 前に remote private へ push してよい。private repo が clean かつ remote と同期済みでも、destination と content diff があれば sync 対象にする - `all` 指定時は unselected dirty を放置せず、All Mode で skill 単位にコミットしてから sync する - unselected dirty が primary path に無ければ `-PrimarySkills` の scope gate で選択外 path を commit しない。primary path 自体が dirty なら authoring 未確定として停止する - `primary-only` では他 skill directory の削除、shared file 更新、broad 一括削除ロジックを使わない。public / internal diff が selected primary destination path だけであることを検証する ## Workflow 1. private / public / script、必要なら EMU / GIM repo を解決し、`primary`・branch / remote・ahead/behind・dirty 状態を確認する 2. `primary` の readiness と source/destination content diff を確認し、未分類 skill があれば先にユーザーへ分類確認する。`shared-dirty` / `private-only-dirty` / `unselected-dirty` が public / EMU / GIM sync に漏れるかを判定し、`copilot-skills/` が public に存在しないことを確認する 3. `all` 指定時は、`Commit-DirtySkills.ps1`のdry-run→`-Apply`でskill単位にcommitする。skill以外のdirtyはNot Doneに残し、同期scriptはprivate dirtyを暗黙commitしない 4. safe path を選ぶ - primary-only: `Sync-AndPush.ps1 -PrimarySkills <skill-name...> -Message "sync: <skill summary>" -SkipDevPush` - broad: `Sync-AndPush.ps1 -Message "sync: <summary>" -SkipDevPush -ExcludeCopilotSkills <監査で確定した除外名>` - EMU private: `Sync-AndPush.ps1 -SyncEmu [-EmuDryRun]` - GIM internal: `Sync-AndPush.ps1 -SyncInternal [-InternalDryRun]` 5. private repo の current branch を remote へ push し、public / EMU / GIM 各 repo で想定した skill だけが更新されたことを確認する 6. Git の `master = origin/master` だけで完了としない。publicはlocal source/destination hashとremote到達を確認し、GIM/EMUはremote treeのpath集合とblob SHAを確認する。`Missing / Mismatch / Extra = 0`になるまで完了扱いにしない ## Gotchas - **Formatter drift**: VS Code / editor formatter が既存 markdown table を再整形して意味のない whitespace / column-align 差分を残すことがある。skill authoring commit に混ぜず、`chore(<skill>): normalize table whitespace after formatter run` として **必ず別 commit** で分離する。混ぜると後で revert しづらい - **Push rejected / divergence**: push前にfetchしてahead/behindを再計算する。双方にcommitがあれば変更pathの重複を調べ、競合がなければnormal mergeで同期する。stale tracking refのままrebaseやpushへ進まない - **`HEAD.lock` rename failure**: 同じ失敗が2回続いたら`n`で停止し、HEAD・status・diff・rebase metadata・lock所有を確認する。未commit変更を保護し、`reset --hard`やlock一括削除はしない。HEADが不変でindex/worktreeだけがfetched remoteと一致すると証明できる場合だけ対象をHEADへ戻し、HEADをdetachしないverified mergeへ切り替える - **Git Data API transient failure**: blob/tree/commit/ref APIは共通retryと空SHA fail-fastを通す。ref更新後にremote treeを再取得し、stale path削除と完全一致を確認する - **Internal full mirror only**: internal subset指定は未選択Skillを削除し得るため拒否する。distribution configの全集合だけをdesired setとして使う - **All Mode rollback**: tracked metadata、cross-root rename、commit失敗で停止する。commit途中の失敗は元HEADへ戻し、差分をunstagedで保持する ## Report - Summary / Primary / Path Chosen / Audit / Private Sync / EMU Private Sync / GIM Internal Sync / Public Sync / Verify / Not Done
Ver no GitHub