[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-check-updates":3,"mdc-c7edug-key":31,"related-repo-microsoft-check-updates":2215,"related-org-microsoft-check-updates":2324},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":26,"sourceUrl":29,"mdContent":30},"check-updates","check for Fabric skill marketplace updates","Check an installed skills-for-fabric plugin bundle or git clone for updates, show the matching changelog, and provide host-appropriate update guidance. Use when the user wants to: (1) check for skill updates, (2) see what changed, (3) verify the installed version. Triggers: \"check for updates\", \"am I up to date\", \"what version\", \"update skills\", \"show changelog\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,17],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Microsoft Fabric","microsoft-fabric",858,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills-for-fabric","2026-07-24T05:41:25.892114",null,237,[],{"repoUrl":21,"stars":20,"forks":24,"topics":27,"description":28},[],"A collection of skills and MCP systems to enable users of CLI, VSCode, Claude to operate over Microsoft Fabric","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills-for-fabric\u002Ftree\u002FHEAD\u002Fskills\u002Fcheck-updates","---\nname: check-updates\ndescription: >\n  Check an installed skills-for-fabric plugin bundle or git clone for updates,\n  show the matching changelog, and provide host-appropriate update guidance.\n  Use when the user wants to: (1) check for skill updates, (2) see what changed,\n  (3) verify the installed version. Triggers: \"check for updates\", \"am I up to\n  date\", \"what version\", \"update skills\", \"show changelog\".\n---\n\n# Check for Updates\n\nThis is a read-only update checker. It identifies the installation that supplied\nthis skill, compares its version with the repository's `main` branch, and shows\nthe update path supported by the current agent host. It never updates\nautomatically.\n\n## Cadence\n\nKeep these two controls separate:\n\n- **Invocation guard:** Other Fabric skills invoke this skill once per session\n  before continuing.\n- **Network guard:** Automatic invocations perform a remote lookup at most once\n  every 7 days for each detected installation identity.\n\nIf the user's current request directly asks for a version, changelog, or update\ncheck, treat it as an **explicit invocation** and bypass the 7-day network guard.\nIf this skill was invoked only by another skill's session-start notice, treat it\nas an **automatic invocation**.\n\nAlways continue with the caller's original task after an automatic invocation,\nincluding when the check is skipped or fails.\n\n## Procedure\n\n### Step 1: Resolve the Installation Context\n\nDetermine one candidate installation root:\n\n1. If the user explicitly supplied an installation path, use that exact path.\n2. Otherwise, start from the active\n   `\u003Cskills-root>\u002Fcheck-updates\u002FSKILL.md` file.\n3. When `\u003Cskills-root>` is named `skills`, consider its parent as a containing\n   root. Use that containing root only if it has a supported plugin manifest or\n   both `package.json` and a direct `.git` file or directory plus the positive\n   skills-for-fabric Git identity defined below.\n4. Otherwise, use `\u003Cskills-root>` as the candidate root. This includes personal\n   copies under `~\u002F.copilot\u002Fskills` and `~\u002F.agents\u002Fskills`, plus project copies\n   under `.github\u002Fskills`, `.agents\u002Fskills`, and `.claude\u002Fskills`.\n5. If the runtime does not expose the active skill path, report the context as\n   unknown. Do not guess.\n\nNever infer the installation from the shell's current working directory. Never\nwalk upward beyond the candidate root. A project containing an unrelated parent\n`.git` directory is not evidence that the skill came from that repository.\n\nResolve the runtime host independently from the installation channel:\n\n```text\ncopilot-cli | claude-code | cursor | windsurf | codex | other | unknown\n```\n\nUse the host identity exposed by the current session or runtime. Do not infer it\nfrom a plugin manifest, install path, or working directory. A deterministic test\nmay supply an explicit runtime-host override; normal use may not. If the host\ncannot be established, use `unknown`.\n\nFor runtime detection of an already installed plugin, use the first existing\nmanifest in this cross-tool precedence:\n\n1. `.plugin\u002Fplugin.json`\n2. `plugin.json`\n3. `.github\u002Fplugin\u002Fplugin.json`\n4. `.claude-plugin\u002Fplugin.json`\n\nIn this repository, `.github\u002Fplugin\u002Fplugin.json` is the canonical source\nmanifest. `.plugin\u002Fplugin.json` and `plugin.json` are compatibility fallbacks\nfor other installed layouts or test fixtures. The final location supports\npackages that expose only a Claude-compatible manifest. Do not treat this\nruntime probe order as authoring guidance for this repository.\n\nThen classify the candidate root in this order:\n\n| Channel | Required files at the candidate root | Read |\n|---|---|---|\n| Plugin | one supported plugin manifest | top-level `name`, `version`, `repository` |\n| Git clone | `package.json`, a direct `.git` file or directory, and a positive skills-for-fabric Git identity | top-level `version`, `repository.url` |\n| Copied skills | no plugin or Git layout, plus either a root `SKILL.md` or direct child skill directories containing `SKILL.md` | tentative skill directory names only |\n| Unknown | none of the exact layouts | no identity or update command |\n\nPlugin detection takes precedence if both layouts are present. This lets a\ndevelopment fixture retain plugin semantics while using a local Git remote.\n\nA positive Git identity requires both of these checks:\n\n- The final unscoped segment of `package.json` `name` is\n  `skills-for-fabric`. Accepted examples include `skills-for-fabric`,\n  `@microsoft\u002Fskills-for-fabric`, and contributor-fork scopes.\n- After removing a trailing slash and `.git`, the final repository path segment\n  is `skills-for-fabric`, compared case-insensitively.\n\nIf either check fails, do not promote that containing root to the Git channel\nand do not run Git against it. Continue candidate-root resolution and classify\nthe resulting candidate independently; a nested `skills` root may therefore be\na loose copy. A generic Node repository that happens to contain a `skills\u002F`\ndirectory is not a skills-for-fabric installation.\n\nA copied channel is terminal until an explicit request confirms its source:\n\n- For an automatic invocation, do not ask a question. Optionally show one short\n  note that the unverified loose copy was skipped and can be checked explicitly,\n  then continue the caller's original task.\n- For an explicit invocation without source confirmation, list the tentative\n  copied skill names, state that source and version are unverified, ask the\n  confirmation question in the copied-channel section, and stop.\n\nNeither path continues to the network guard or remote-version steps.\n\nBuild one context object:\n\n```text\nruntimeHost: copilot-cli | claude-code | cursor | windsurf | codex | other | unknown\nchannel: plugin | git | copy | unknown\nroot: exact candidate root\ninstallKind: marketplace | direct | none\ninstallScope: user | project | local | managed | none\nmanifestName: plugin manifest name | none\ninstalledName: marketplace entry name | none\nmarketplace: marketplace name | none\nsourceId: direct-install source ID | none\nidentity: plugin:\u003Cmarketplace>\u002F\u003Cinstalled-name> | plugin:direct\u002F\u003Csource-id> | git:\u003Crepository-url-as-stored>|\u003Croot>\nlocalVersion: manifest version\nrepository: URL exactly as stored in the selected manifest\nupdateTarget: \u003Cinstalled-name>@\u003Cmarketplace> | \u003Cmanifest-name> | \u003Croot> | none\ncopiedSkills: direct skill directory names | none\n```\n\nFor a plugin, keep the manifest name separate from the installed marketplace\nentry name. They can differ. Resolve the installed entry from native runtime\nmetadata or the native plugin listing when it identifies the candidate root.\n\nFor GitHub Copilot CLI marketplace installs, the documented path is\n`~\u002F.copilot\u002Finstalled-plugins\u002F\u003Cmarketplace>\u002F\u003Cinstalled-name>`, so those two path\nsegments are authoritative.\n\nFor a direct Copilot CLI install at\n`~\u002F.copilot\u002Finstalled-plugins\u002F_direct\u002F\u003Csource-id>`, set `installKind` to\n`direct`, use the source ID only for the cache identity, and use the manifest\nname as the bare update target. `_direct` is not a marketplace name.\n\nFor Claude Code marketplace installs, resolve the installed entry and scope from\nClaude's native plugin metadata. `claude plugin list --json` can identify the\nentry; the declaring settings file identifies its scope:\n\n- `~\u002F.claude\u002Fsettings.json` -> `user`\n- `.claude\u002Fsettings.json` -> `project`\n- `.claude\u002Fsettings.local.json` -> `local`\n- managed settings -> `managed`\n\nIf the same entry exists at more than one scope, list the choices and ask which\none to update. Do not guess a scope. A plugin loaded only from a skills\ndirectory, `--plugin-dir`, or `--plugin-url` has no marketplace install record;\ndo not fabricate an update command for it.\n\nIf native metadata and the installed path are unavailable, use the manifest\nname with marketplace `fabric-collection` only when the mapping is\nunambiguous. The `fabric-skills` manifest is not unambiguous because the legacy\n`skills-for-fabric` marketplace entry uses the same payload. In that case,\nreport that the installed entry could not be resolved, ask the user to inspect\nthe native plugin list, and do not guess an identity or update command.\n\nFor Git `package.json`, accept either a repository object with a `url` property\nor a repository URL string. Keep the repository value exactly as stored and\nappend the exact resolved root when building the cache identity. This prevents\none clone from suppressing checks for another clone of the same repository.\nWhen parsing a GitHub owner and repository for remote tools, strip only a\ntrailing `.git` and trailing slash. Do not alter owner spelling, case,\nunderscores, or punctuation.\n\nValidate that required fields are present and that `localVersion` is semantic\nversion text. If validation fails, report the malformed field and classify the\ncontext as unknown rather than using partial metadata.\n\n### Step 2: Apply the Network Guard\n\nUse an exact cache path supplied by the caller only for a deterministic test.\nOtherwise, use this persistent cache file:\n\n```text\n~\u002F.config\u002Ffabric-collection\u002Flast-update-check.json\n```\n\nOn Windows, this is:\n\n```text\n$env:USERPROFILE\\.config\\fabric-collection\\last-update-check.json\n```\n\nThe file is a flat JSON object keyed by installation identity:\n\n```json\n{\n  \"plugin:fabric-collection\u002Ffabric-consumption\": \"2026-07-15\",\n  \"plugin:direct\u002Fgithub-com-example-skills\": \"2026-07-15\",\n  \"git:https:\u002F\u002Fgithub.com\u002Fexample\u002Fskills-for-fabric.git|C:\\\\repos\\\\skills-for-fabric\": \"2026-07-14\"\n}\n```\n\nUse UTC dates in `YYYY-MM-DD` format.\n\n- For an automatic invocation, skip the remote lookup when this identity has a\n  valid date within the last 7 days.\n- For an explicit invocation, perform the remote lookup even when a fresh cache\n  entry exists.\n- Entries for different installed plugin entries or Git clone roots do not\n  suppress each other.\n- Preserve every unrelated entry when writing the file.\n- If the file contains malformed JSON, warn and do not overwrite it.\n- Do not read or write a cache entry for a copied or unknown context.\n\nAfter a remote attempt completes, record today's UTC date for the detected\nidentity whether the attempt found an update, found no update, or failed, unless\nthe cache file was malformed. This prevents an automatic network failure from\nrepeating in every session. Do not rewrite the marker when the network guard\nskipped the attempt.\n\n### Step 3: Read the Remote Version\n\nRead `package.json` and `CHANGELOG.md` from the same repository and the same\n`main` ref. Try these methods in order and stop after the first successful one:\n\n1. **Git CLI:** Only when the candidate root itself has a direct `.git` file or\n   directory. Do not use `git rev-parse` as the availability check because it\n   can discover an unrelated parent repository.\n\n   ```bash\n   git -C \"\u003Croot>\" fetch origin main --quiet\n   git -C \"\u003Croot>\" show origin\u002Fmain:package.json\n   git -C \"\u003Croot>\" show origin\u002Fmain:CHANGELOG.md\n   ```\n\n2. **Authenticated GitHub tools:** Use GitHub MCP file tools or `gh api` with\n   the owner and repository parsed exactly from the manifest URL. Read\n   `package.json` and `CHANGELOG.md` at ref `main`.\n3. **Public raw content:** For a public repository, read both files from\n   `https:\u002F\u002Fraw.githubusercontent.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Fmain\u002F`.\n\nDo not use the latest GitHub Release tag as the remote version. Plugin\nmarketplace updates follow repository content, and a release tag can lag behind\nthe version available to plugin users.\n\nIf version retrieval fails, show the detected channel, identity, and local\nversion with a concise warning. Do not fabricate a remote version. If only the\nchangelog retrieval fails, still report the version comparison and note that\nthe changelog was unavailable.\n\n### Step 4: Compare and Report\n\nCompare semantic versions:\n\n- `remoteVersion > localVersion`: update available.\n- `remoteVersion \u003C= localVersion`: up to date.\n\nFor an update, show the relevant `CHANGELOG.md` entries between the local and\nremote versions, then provide only guidance verified for both the detected\nchannel and `runtimeHost`.\n\n**Plugin channel**\n\nNever emit one host's plugin command for another host.\n\n| Runtime host | Verified guidance |\n|---|---|\n| GitHub Copilot CLI | For a marketplace install, show `\u002Fplugin update \u003Cinstalled-name>@\u003Cmarketplace>`. For a direct install, show `\u002Fplugin update \u003Cmanifest-name>`. |\n| Claude Code | For a marketplace install with a resolved scope, show `claude plugin update \u003Cinstalled-name>@\u003Cmarketplace> --scope \u003Cscope>`, then tell the user to run `\u002Freload-plugins` or restart Claude Code. |\n| Cursor | Direct the user to **Customize > Plugins**. For a team marketplace, an administrator can use **Refresh** or **Enable Auto Refresh**. Do not emit a plugin CLI command. |\n| Windsurf, Codex, other, or unknown | Report the available version and repository, but provide no executable plugin command because none is verified for this layout. |\n\nGitHub Copilot CLI marketplace install:\n\n```text\n\u002Fplugin update \u003Cinstalled-name>@\u003Cmarketplace>\n```\n\nThe installed marketplace entry is authoritative. For example, an installed\n`fabric-consumption@fabric-collection` entry produces:\n\n```text\n\u002Fplugin update fabric-consumption@fabric-collection\n```\n\nIf the installed entry is the legacy `skills-for-fabric` alias, update that\nalias first so the installed entry can receive the current payload, even though\nits copied manifest is named `fabric-skills`:\n\n```text\n\u002Fplugin update skills-for-fabric@fabric-collection\n```\n\nAfterward, optional migration to the canonical entry is:\n\n```text\n\u002Fplugin uninstall skills-for-fabric@fabric-collection\n\u002Fplugin install fabric-skills@fabric-collection\n```\n\nGitHub Copilot CLI direct install:\n\n```text\n\u002Fplugin update \u003Cmanifest-name>\n```\n\nThe native CLI update target for a direct install is the bare manifest name.\nDo not append `@_direct` or use the opaque source ID as the update target.\n\nClaude Code marketplace install:\n\n```text\nclaude plugin update \u003Cinstalled-name>@\u003Cmarketplace> --scope \u003Cscope>\n```\n\nThe entry name and scope must come from Claude's installed-plugin metadata. Do\nnot reuse Copilot's `_direct` behavior for Claude Code.\n\n**Git channel**\n\n```text\ngit -C \"\u003Cdetected-root>\" pull --ff-only\n```\n\n**Unknown channel**\n\nState which expected files were absent and provide no update command. Never\ndefault to `fabric-skills`.\n\n**Copied-skill channel**\n\nA loose copy has no trustworthy repository, installed version, or native update\ntarget. This includes a skill materialized from a local file or URL by\n`copilot skill add` when no source metadata accompanies it.\n\nFor an automatic invocation, do not interrupt the caller with a source question.\nSkip the copied-skill update flow, optionally state that an explicit update\ncheck can identify a supported replacement, and continue the caller's task.\nDo not list an executable command.\n\nFor an explicit invocation, list the tentative skill names found at the\ncandidate root, state that their provenance cannot be verified from the files\nalone, and ask:\n\n```text\nWere these skills copied from https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills-for-fabric?\nIf yes, I can inspect the official public repository and show the supported\nplugin bundle that will refresh them. I will not install or remove anything\nwithout your confirmation.\n```\n\nBefore the user confirms the source, do not contact the network, compare\nversions, write cache state, or offer an executable install\u002Fupdate command.\n\nAfter explicit confirmation:\n\n1. Read `.github\u002Fplugin\u002Fmarketplace.json` from the `main` ref of\n   `microsoft\u002Fskills-for-fabric`, using authenticated GitHub tools first and\n   public raw content second.\n2. Match the tentative skill directory names against the skill paths inside\n   each marketplace plugin source. Treat only exact path matches as evidence.\n3. Prefer a focused plugin that covers all matched non-utility skills. If more\n   than one plugin qualifies, list the valid choices and ask the user to choose.\n   Never choose `fabric-skills` merely because `check-updates` appears in it.\n4. Offer only the replacement path supported by `runtimeHost`:\n\n   GitHub Copilot CLI:\n\n   ```text\n   \u002Fplugin marketplace add microsoft\u002Fskills-for-fabric\n   \u002Fplugin install \u003Cmatched-plugin>@fabric-collection\n   ```\n\n   Claude Code, using `user` for a personal copied-skills root or `project` for\n   a project copied-skills root:\n\n   ```text\n   \u002Fplugin marketplace add microsoft\u002Fskills-for-fabric\n   claude plugin install \u003Cmatched-plugin>@fabric-collection --scope \u003Cscope>\n   ```\n\n   Tell the user to run `\u002Freload-plugins` or restart Claude Code after the\n   install. If the Claude scope cannot be resolved, ask instead of guessing.\n\n   For Cursor, Windsurf, Codex, other, or unknown hosts, link to the official\n   repository's installation instructions and provide no executable replacement\n   command. The current public repository does not expose a verified native\n   plugin marketplace for those hosts.\n\nThis installs a complete current bundle instead of overwriting loose files and\nleaving mixed-version dependencies. Keep the loose copy until the native plugin\nis installed and verified. Ask separately before removing it. If no exact\nofficial mapping exists or the public repository is unavailable, report that\nand do not fabricate a bundle or copy individual files.\n\n## Examples\n\n### Focused plugin bundle\n\n```text\nHost: copilot-cli\nDetected: plugin:fabric-collection\u002Ffabric-consumption\nCurrent: 0.3.7\nLatest: 0.3.8\nUpdate: \u002Fplugin update fabric-consumption@fabric-collection\n```\n\n### Claude Code plugin bundle\n\n```text\nHost: claude-code\nDetected: plugin:fabric-collection\u002Ffabric-consumption\nCurrent: 0.3.7\nLatest: 0.3.8\nUpdate: claude plugin update fabric-consumption@fabric-collection --scope user\nReload: \u002Freload-plugins\n```\n\n### Git clone\n\n```text\nDetected: git:https:\u002F\u002Fgithub.com\u002Fexample\u002Fskills-for-fabric.git|C:\\repos\\skills-for-fabric\nCurrent: 0.3.7\nLatest: 0.3.8\nUpdate: git -C \"C:\\repos\\skills-for-fabric\" pull --ff-only\n```\n\n### Unknown layout\n\n```text\nCould not determine the skills-for-fabric installation at \u003Ccandidate-root>.\nExpected a supported plugin manifest, or a positively identified\nskills-for-fabric package.json plus a direct .git entry.\nNo update command was guessed.\n```\n\n### Confirmed official loose copy\n\n```text\nHost: copilot-cli\nDetected loose skills: check-updates, powerbi-report-planning\nConfirmed source: https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills-for-fabric\nSupported refresh:\n  \u002Fplugin marketplace add microsoft\u002Fskills-for-fabric\n  \u002Fplugin install powerbi-authoring@fabric-collection\nThe loose files were not changed or removed.\n```\n\n## Must\n\n- Resolve identity from the active skill root or an explicit user path.\n- Resolve the runtime host independently from the installation layout.\n- Keep once-per-session invocation separate from the 7-day network guard.\n- Use the installed marketplace entry, not merely the manifest name, in plugin\n  identities and update commands.\n- Keep direct installs distinct from marketplace installs.\n- Require positive package and repository identity before using the Git channel.\n- Isolate Git cache entries by repository and exact clone root.\n- Preserve unrelated cache entries and use UTC dates.\n- Require source confirmation before looking up a loose copy in the official\n  public repository.\n- Match copied skill names to exact public marketplace skill paths.\n- Emit only update or replacement commands verified for the runtime host.\n- Continue non-blockingly after automatic checks.\n\n## Prefer\n\n- Use a root-local Git remote before authenticated GitHub tools.\n- Fetch version and changelog from the same repository ref.\n- Replace confirmed official loose copies through a complete native plugin\n  bundle rather than overwriting individual files.\n- Show concise, copy-pasteable output.\n\n## Avoid\n\n- Inferring installation context from the current working directory.\n- Letting `git` discover a parent repository.\n- Treating an unrelated package plus `.git` as a skills-for-fabric clone.\n- Inferring the runtime host from a manifest or install path.\n- Showing Copilot or Claude plugin commands to another host.\n- Defaulting focused bundles to `fabric-skills`.\n- Using GitHub Release tags as the plugin marketplace version.\n- Repeating failed automatic network checks every session.\n- Treating a same-named loose folder as proof that it came from the official\n  repository.\n- Replacing individual copied files without their complete bundle dependencies.\n- Updating without explicit user consent.\n\n## Error Handling\n\nOn failure, report the operation that failed and continue:\n\n```text\nCould not check plugin:fabric-collection\u002Ffabric-consumption for updates: remote package.json was unavailable.\nCurrent installed version: 0.3.7\nThe automatic check is non-blocking; continuing with the requested task.\n```\n\nIf the user says only \"update my skills\", clarify whether they want to check for\nan update or execute the detected native update command. Do not execute an\nupdate based on ambiguous intent.\n",{"data":32,"body":33},{"name":4,"description":6},{"type":34,"children":35},"root",[36,45,60,67,72,98,117,122,128,135,140,255,267,272,284,296,301,340,365,370,531,536,541,605,625,630,643,648,653,662,667,680,717,730,793,814,842,869,882,888,893,902,907,916,921,1086,1099,1132,1137,1143,1169,1372,1377,1382,1388,1393,1418,1437,1445,1450,1576,1581,1590,1603,1612,1630,1639,1644,1653,1658,1667,1680,1685,1694,1706,1714,1723,1731,1742,1750,1763,1768,1773,1782,1787,1792,1917,1922,1928,1934,1943,1949,1958,1963,1972,1978,1987,1993,2002,2008,2071,2077,2100,2106,2184,2190,2195,2204,2209],{"type":37,"tag":38,"props":39,"children":41},"element","h1",{"id":40},"check-for-updates",[42],{"type":43,"value":44},"text","Check for Updates",{"type":37,"tag":46,"props":47,"children":48},"p",{},[49,51,58],{"type":43,"value":50},"This is a read-only update checker. It identifies the installation that supplied\nthis skill, compares its version with the repository's ",{"type":37,"tag":52,"props":53,"children":55},"code",{"className":54},[],[56],{"type":43,"value":57},"main",{"type":43,"value":59}," branch, and shows\nthe update path supported by the current agent host. It never updates\nautomatically.",{"type":37,"tag":61,"props":62,"children":64},"h2",{"id":63},"cadence",[65],{"type":43,"value":66},"Cadence",{"type":37,"tag":46,"props":68,"children":69},{},[70],{"type":43,"value":71},"Keep these two controls separate:",{"type":37,"tag":73,"props":74,"children":75},"ul",{},[76,88],{"type":37,"tag":77,"props":78,"children":79},"li",{},[80,86],{"type":37,"tag":81,"props":82,"children":83},"strong",{},[84],{"type":43,"value":85},"Invocation guard:",{"type":43,"value":87}," Other Fabric skills invoke this skill once per session\nbefore continuing.",{"type":37,"tag":77,"props":89,"children":90},{},[91,96],{"type":37,"tag":81,"props":92,"children":93},{},[94],{"type":43,"value":95},"Network guard:",{"type":43,"value":97}," Automatic invocations perform a remote lookup at most once\nevery 7 days for each detected installation identity.",{"type":37,"tag":46,"props":99,"children":100},{},[101,103,108,110,115],{"type":43,"value":102},"If the user's current request directly asks for a version, changelog, or update\ncheck, treat it as an ",{"type":37,"tag":81,"props":104,"children":105},{},[106],{"type":43,"value":107},"explicit invocation",{"type":43,"value":109}," and bypass the 7-day network guard.\nIf this skill was invoked only by another skill's session-start notice, treat it\nas an ",{"type":37,"tag":81,"props":111,"children":112},{},[113],{"type":43,"value":114},"automatic invocation",{"type":43,"value":116},".",{"type":37,"tag":46,"props":118,"children":119},{},[120],{"type":43,"value":121},"Always continue with the caller's original task after an automatic invocation,\nincluding when the check is skipped or fails.",{"type":37,"tag":61,"props":123,"children":125},{"id":124},"procedure",[126],{"type":43,"value":127},"Procedure",{"type":37,"tag":129,"props":130,"children":132},"h3",{"id":131},"step-1-resolve-the-installation-context",[133],{"type":43,"value":134},"Step 1: Resolve the Installation Context",{"type":37,"tag":46,"props":136,"children":137},{},[138],{"type":43,"value":139},"Determine one candidate installation root:",{"type":37,"tag":141,"props":142,"children":143},"ol",{},[144,149,162,199,250],{"type":37,"tag":77,"props":145,"children":146},{},[147],{"type":43,"value":148},"If the user explicitly supplied an installation path, use that exact path.",{"type":37,"tag":77,"props":150,"children":151},{},[152,154,160],{"type":43,"value":153},"Otherwise, start from the active\n",{"type":37,"tag":52,"props":155,"children":157},{"className":156},[],[158],{"type":43,"value":159},"\u003Cskills-root>\u002Fcheck-updates\u002FSKILL.md",{"type":43,"value":161}," file.",{"type":37,"tag":77,"props":163,"children":164},{},[165,167,173,175,181,183,189,191,197],{"type":43,"value":166},"When ",{"type":37,"tag":52,"props":168,"children":170},{"className":169},[],[171],{"type":43,"value":172},"\u003Cskills-root>",{"type":43,"value":174}," is named ",{"type":37,"tag":52,"props":176,"children":178},{"className":177},[],[179],{"type":43,"value":180},"skills",{"type":43,"value":182},", consider its parent as a containing\nroot. Use that containing root only if it has a supported plugin manifest or\nboth ",{"type":37,"tag":52,"props":184,"children":186},{"className":185},[],[187],{"type":43,"value":188},"package.json",{"type":43,"value":190}," and a direct ",{"type":37,"tag":52,"props":192,"children":194},{"className":193},[],[195],{"type":43,"value":196},".git",{"type":43,"value":198}," file or directory plus the positive\nskills-for-fabric Git identity defined below.",{"type":37,"tag":77,"props":200,"children":201},{},[202,204,209,211,217,219,225,227,233,235,241,243,249],{"type":43,"value":203},"Otherwise, use ",{"type":37,"tag":52,"props":205,"children":207},{"className":206},[],[208],{"type":43,"value":172},{"type":43,"value":210}," as the candidate root. This includes personal\ncopies under ",{"type":37,"tag":52,"props":212,"children":214},{"className":213},[],[215],{"type":43,"value":216},"~\u002F.copilot\u002Fskills",{"type":43,"value":218}," and ",{"type":37,"tag":52,"props":220,"children":222},{"className":221},[],[223],{"type":43,"value":224},"~\u002F.agents\u002Fskills",{"type":43,"value":226},", plus project copies\nunder ",{"type":37,"tag":52,"props":228,"children":230},{"className":229},[],[231],{"type":43,"value":232},".github\u002Fskills",{"type":43,"value":234},", ",{"type":37,"tag":52,"props":236,"children":238},{"className":237},[],[239],{"type":43,"value":240},".agents\u002Fskills",{"type":43,"value":242},", and ",{"type":37,"tag":52,"props":244,"children":246},{"className":245},[],[247],{"type":43,"value":248},".claude\u002Fskills",{"type":43,"value":116},{"type":37,"tag":77,"props":251,"children":252},{},[253],{"type":43,"value":254},"If the runtime does not expose the active skill path, report the context as\nunknown. Do not guess.",{"type":37,"tag":46,"props":256,"children":257},{},[258,260,265],{"type":43,"value":259},"Never infer the installation from the shell's current working directory. Never\nwalk upward beyond the candidate root. A project containing an unrelated parent\n",{"type":37,"tag":52,"props":261,"children":263},{"className":262},[],[264],{"type":43,"value":196},{"type":43,"value":266}," directory is not evidence that the skill came from that repository.",{"type":37,"tag":46,"props":268,"children":269},{},[270],{"type":43,"value":271},"Resolve the runtime host independently from the installation channel:",{"type":37,"tag":273,"props":274,"children":279},"pre",{"className":275,"code":277,"language":43,"meta":278},[276],"language-text","copilot-cli | claude-code | cursor | windsurf | codex | other | unknown\n","",[280],{"type":37,"tag":52,"props":281,"children":282},{"__ignoreMap":278},[283],{"type":43,"value":277},{"type":37,"tag":46,"props":285,"children":286},{},[287,289,295],{"type":43,"value":288},"Use the host identity exposed by the current session or runtime. Do not infer it\nfrom a plugin manifest, install path, or working directory. A deterministic test\nmay supply an explicit runtime-host override; normal use may not. If the host\ncannot be established, use ",{"type":37,"tag":52,"props":290,"children":292},{"className":291},[],[293],{"type":43,"value":294},"unknown",{"type":43,"value":116},{"type":37,"tag":46,"props":297,"children":298},{},[299],{"type":43,"value":300},"For runtime detection of an already installed plugin, use the first existing\nmanifest in this cross-tool precedence:",{"type":37,"tag":141,"props":302,"children":303},{},[304,313,322,331],{"type":37,"tag":77,"props":305,"children":306},{},[307],{"type":37,"tag":52,"props":308,"children":310},{"className":309},[],[311],{"type":43,"value":312},".plugin\u002Fplugin.json",{"type":37,"tag":77,"props":314,"children":315},{},[316],{"type":37,"tag":52,"props":317,"children":319},{"className":318},[],[320],{"type":43,"value":321},"plugin.json",{"type":37,"tag":77,"props":323,"children":324},{},[325],{"type":37,"tag":52,"props":326,"children":328},{"className":327},[],[329],{"type":43,"value":330},".github\u002Fplugin\u002Fplugin.json",{"type":37,"tag":77,"props":332,"children":333},{},[334],{"type":37,"tag":52,"props":335,"children":337},{"className":336},[],[338],{"type":43,"value":339},".claude-plugin\u002Fplugin.json",{"type":37,"tag":46,"props":341,"children":342},{},[343,345,350,352,357,358,363],{"type":43,"value":344},"In this repository, ",{"type":37,"tag":52,"props":346,"children":348},{"className":347},[],[349],{"type":43,"value":330},{"type":43,"value":351}," is the canonical source\nmanifest. ",{"type":37,"tag":52,"props":353,"children":355},{"className":354},[],[356],{"type":43,"value":312},{"type":43,"value":218},{"type":37,"tag":52,"props":359,"children":361},{"className":360},[],[362],{"type":43,"value":321},{"type":43,"value":364}," are compatibility fallbacks\nfor other installed layouts or test fixtures. The final location supports\npackages that expose only a Claude-compatible manifest. Do not treat this\nruntime probe order as authoring guidance for this repository.",{"type":37,"tag":46,"props":366,"children":367},{},[368],{"type":43,"value":369},"Then classify the candidate root in this order:",{"type":37,"tag":371,"props":372,"children":373},"table",{},[374,398],{"type":37,"tag":375,"props":376,"children":377},"thead",{},[378],{"type":37,"tag":379,"props":380,"children":381},"tr",{},[382,388,393],{"type":37,"tag":383,"props":384,"children":385},"th",{},[386],{"type":43,"value":387},"Channel",{"type":37,"tag":383,"props":389,"children":390},{},[391],{"type":43,"value":392},"Required files at the candidate root",{"type":37,"tag":383,"props":394,"children":395},{},[396],{"type":43,"value":397},"Read",{"type":37,"tag":399,"props":400,"children":401},"tbody",{},[402,441,482,513],{"type":37,"tag":379,"props":403,"children":404},{},[405,411,416],{"type":37,"tag":406,"props":407,"children":408},"td",{},[409],{"type":43,"value":410},"Plugin",{"type":37,"tag":406,"props":412,"children":413},{},[414],{"type":43,"value":415},"one supported plugin manifest",{"type":37,"tag":406,"props":417,"children":418},{},[419,421,427,428,434,435],{"type":43,"value":420},"top-level ",{"type":37,"tag":52,"props":422,"children":424},{"className":423},[],[425],{"type":43,"value":426},"name",{"type":43,"value":234},{"type":37,"tag":52,"props":429,"children":431},{"className":430},[],[432],{"type":43,"value":433},"version",{"type":43,"value":234},{"type":37,"tag":52,"props":436,"children":438},{"className":437},[],[439],{"type":43,"value":440},"repository",{"type":37,"tag":379,"props":442,"children":443},{},[444,449,466],{"type":37,"tag":406,"props":445,"children":446},{},[447],{"type":43,"value":448},"Git clone",{"type":37,"tag":406,"props":450,"children":451},{},[452,457,459,464],{"type":37,"tag":52,"props":453,"children":455},{"className":454},[],[456],{"type":43,"value":188},{"type":43,"value":458},", a direct ",{"type":37,"tag":52,"props":460,"children":462},{"className":461},[],[463],{"type":43,"value":196},{"type":43,"value":465}," file or directory, and a positive skills-for-fabric Git identity",{"type":37,"tag":406,"props":467,"children":468},{},[469,470,475,476],{"type":43,"value":420},{"type":37,"tag":52,"props":471,"children":473},{"className":472},[],[474],{"type":43,"value":433},{"type":43,"value":234},{"type":37,"tag":52,"props":477,"children":479},{"className":478},[],[480],{"type":43,"value":481},"repository.url",{"type":37,"tag":379,"props":483,"children":484},{},[485,490,508],{"type":37,"tag":406,"props":486,"children":487},{},[488],{"type":43,"value":489},"Copied skills",{"type":37,"tag":406,"props":491,"children":492},{},[493,495,501,503],{"type":43,"value":494},"no plugin or Git layout, plus either a root ",{"type":37,"tag":52,"props":496,"children":498},{"className":497},[],[499],{"type":43,"value":500},"SKILL.md",{"type":43,"value":502}," or direct child skill directories containing ",{"type":37,"tag":52,"props":504,"children":506},{"className":505},[],[507],{"type":43,"value":500},{"type":37,"tag":406,"props":509,"children":510},{},[511],{"type":43,"value":512},"tentative skill directory names only",{"type":37,"tag":379,"props":514,"children":515},{},[516,521,526],{"type":37,"tag":406,"props":517,"children":518},{},[519],{"type":43,"value":520},"Unknown",{"type":37,"tag":406,"props":522,"children":523},{},[524],{"type":43,"value":525},"none of the exact layouts",{"type":37,"tag":406,"props":527,"children":528},{},[529],{"type":43,"value":530},"no identity or update command",{"type":37,"tag":46,"props":532,"children":533},{},[534],{"type":43,"value":535},"Plugin detection takes precedence if both layouts are present. This lets a\ndevelopment fixture retain plugin semantics while using a local Git remote.",{"type":37,"tag":46,"props":537,"children":538},{},[539],{"type":43,"value":540},"A positive Git identity requires both of these checks:",{"type":37,"tag":73,"props":542,"children":543},{},[544,586],{"type":37,"tag":77,"props":545,"children":546},{},[547,549,554,556,561,563,569,571,576,578,584],{"type":43,"value":548},"The final unscoped segment of ",{"type":37,"tag":52,"props":550,"children":552},{"className":551},[],[553],{"type":43,"value":188},{"type":43,"value":555}," ",{"type":37,"tag":52,"props":557,"children":559},{"className":558},[],[560],{"type":43,"value":426},{"type":43,"value":562}," is\n",{"type":37,"tag":52,"props":564,"children":566},{"className":565},[],[567],{"type":43,"value":568},"skills-for-fabric",{"type":43,"value":570},". Accepted examples include ",{"type":37,"tag":52,"props":572,"children":574},{"className":573},[],[575],{"type":43,"value":568},{"type":43,"value":577},",\n",{"type":37,"tag":52,"props":579,"children":581},{"className":580},[],[582],{"type":43,"value":583},"@microsoft\u002Fskills-for-fabric",{"type":43,"value":585},", and contributor-fork scopes.",{"type":37,"tag":77,"props":587,"children":588},{},[589,591,596,598,603],{"type":43,"value":590},"After removing a trailing slash and ",{"type":37,"tag":52,"props":592,"children":594},{"className":593},[],[595],{"type":43,"value":196},{"type":43,"value":597},", the final repository path segment\nis ",{"type":37,"tag":52,"props":599,"children":601},{"className":600},[],[602],{"type":43,"value":568},{"type":43,"value":604},", compared case-insensitively.",{"type":37,"tag":46,"props":606,"children":607},{},[608,610,615,617,623],{"type":43,"value":609},"If either check fails, do not promote that containing root to the Git channel\nand do not run Git against it. Continue candidate-root resolution and classify\nthe resulting candidate independently; a nested ",{"type":37,"tag":52,"props":611,"children":613},{"className":612},[],[614],{"type":43,"value":180},{"type":43,"value":616}," root may therefore be\na loose copy. A generic Node repository that happens to contain a ",{"type":37,"tag":52,"props":618,"children":620},{"className":619},[],[621],{"type":43,"value":622},"skills\u002F",{"type":43,"value":624},"\ndirectory is not a skills-for-fabric installation.",{"type":37,"tag":46,"props":626,"children":627},{},[628],{"type":43,"value":629},"A copied channel is terminal until an explicit request confirms its source:",{"type":37,"tag":73,"props":631,"children":632},{},[633,638],{"type":37,"tag":77,"props":634,"children":635},{},[636],{"type":43,"value":637},"For an automatic invocation, do not ask a question. Optionally show one short\nnote that the unverified loose copy was skipped and can be checked explicitly,\nthen continue the caller's original task.",{"type":37,"tag":77,"props":639,"children":640},{},[641],{"type":43,"value":642},"For an explicit invocation without source confirmation, list the tentative\ncopied skill names, state that source and version are unverified, ask the\nconfirmation question in the copied-channel section, and stop.",{"type":37,"tag":46,"props":644,"children":645},{},[646],{"type":43,"value":647},"Neither path continues to the network guard or remote-version steps.",{"type":37,"tag":46,"props":649,"children":650},{},[651],{"type":43,"value":652},"Build one context object:",{"type":37,"tag":273,"props":654,"children":657},{"className":655,"code":656,"language":43,"meta":278},[276],"runtimeHost: copilot-cli | claude-code | cursor | windsurf | codex | other | unknown\nchannel: plugin | git | copy | unknown\nroot: exact candidate root\ninstallKind: marketplace | direct | none\ninstallScope: user | project | local | managed | none\nmanifestName: plugin manifest name | none\ninstalledName: marketplace entry name | none\nmarketplace: marketplace name | none\nsourceId: direct-install source ID | none\nidentity: plugin:\u003Cmarketplace>\u002F\u003Cinstalled-name> | plugin:direct\u002F\u003Csource-id> | git:\u003Crepository-url-as-stored>|\u003Croot>\nlocalVersion: manifest version\nrepository: URL exactly as stored in the selected manifest\nupdateTarget: \u003Cinstalled-name>@\u003Cmarketplace> | \u003Cmanifest-name> | \u003Croot> | none\ncopiedSkills: direct skill directory names | none\n",[658],{"type":37,"tag":52,"props":659,"children":660},{"__ignoreMap":278},[661],{"type":43,"value":656},{"type":37,"tag":46,"props":663,"children":664},{},[665],{"type":43,"value":666},"For a plugin, keep the manifest name separate from the installed marketplace\nentry name. They can differ. Resolve the installed entry from native runtime\nmetadata or the native plugin listing when it identifies the candidate root.",{"type":37,"tag":46,"props":668,"children":669},{},[670,672,678],{"type":43,"value":671},"For GitHub Copilot CLI marketplace installs, the documented path is\n",{"type":37,"tag":52,"props":673,"children":675},{"className":674},[],[676],{"type":43,"value":677},"~\u002F.copilot\u002Finstalled-plugins\u002F\u003Cmarketplace>\u002F\u003Cinstalled-name>",{"type":43,"value":679},", so those two path\nsegments are authoritative.",{"type":37,"tag":46,"props":681,"children":682},{},[683,685,691,693,699,701,707,709,715],{"type":43,"value":684},"For a direct Copilot CLI install at\n",{"type":37,"tag":52,"props":686,"children":688},{"className":687},[],[689],{"type":43,"value":690},"~\u002F.copilot\u002Finstalled-plugins\u002F_direct\u002F\u003Csource-id>",{"type":43,"value":692},", set ",{"type":37,"tag":52,"props":694,"children":696},{"className":695},[],[697],{"type":43,"value":698},"installKind",{"type":43,"value":700}," to\n",{"type":37,"tag":52,"props":702,"children":704},{"className":703},[],[705],{"type":43,"value":706},"direct",{"type":43,"value":708},", use the source ID only for the cache identity, and use the manifest\nname as the bare update target. ",{"type":37,"tag":52,"props":710,"children":712},{"className":711},[],[713],{"type":43,"value":714},"_direct",{"type":43,"value":716}," is not a marketplace name.",{"type":37,"tag":46,"props":718,"children":719},{},[720,722,728],{"type":43,"value":721},"For Claude Code marketplace installs, resolve the installed entry and scope from\nClaude's native plugin metadata. ",{"type":37,"tag":52,"props":723,"children":725},{"className":724},[],[726],{"type":43,"value":727},"claude plugin list --json",{"type":43,"value":729}," can identify the\nentry; the declaring settings file identifies its scope:",{"type":37,"tag":73,"props":731,"children":732},{},[733,750,766,782],{"type":37,"tag":77,"props":734,"children":735},{},[736,742,744],{"type":37,"tag":52,"props":737,"children":739},{"className":738},[],[740],{"type":43,"value":741},"~\u002F.claude\u002Fsettings.json",{"type":43,"value":743}," -> ",{"type":37,"tag":52,"props":745,"children":747},{"className":746},[],[748],{"type":43,"value":749},"user",{"type":37,"tag":77,"props":751,"children":752},{},[753,759,760],{"type":37,"tag":52,"props":754,"children":756},{"className":755},[],[757],{"type":43,"value":758},".claude\u002Fsettings.json",{"type":43,"value":743},{"type":37,"tag":52,"props":761,"children":763},{"className":762},[],[764],{"type":43,"value":765},"project",{"type":37,"tag":77,"props":767,"children":768},{},[769,775,776],{"type":37,"tag":52,"props":770,"children":772},{"className":771},[],[773],{"type":43,"value":774},".claude\u002Fsettings.local.json",{"type":43,"value":743},{"type":37,"tag":52,"props":777,"children":779},{"className":778},[],[780],{"type":43,"value":781},"local",{"type":37,"tag":77,"props":783,"children":784},{},[785,787],{"type":43,"value":786},"managed settings -> ",{"type":37,"tag":52,"props":788,"children":790},{"className":789},[],[791],{"type":43,"value":792},"managed",{"type":37,"tag":46,"props":794,"children":795},{},[796,798,804,806,812],{"type":43,"value":797},"If the same entry exists at more than one scope, list the choices and ask which\none to update. Do not guess a scope. A plugin loaded only from a skills\ndirectory, ",{"type":37,"tag":52,"props":799,"children":801},{"className":800},[],[802],{"type":43,"value":803},"--plugin-dir",{"type":43,"value":805},", or ",{"type":37,"tag":52,"props":807,"children":809},{"className":808},[],[810],{"type":43,"value":811},"--plugin-url",{"type":43,"value":813}," has no marketplace install record;\ndo not fabricate an update command for it.",{"type":37,"tag":46,"props":815,"children":816},{},[817,819,825,827,833,835,840],{"type":43,"value":818},"If native metadata and the installed path are unavailable, use the manifest\nname with marketplace ",{"type":37,"tag":52,"props":820,"children":822},{"className":821},[],[823],{"type":43,"value":824},"fabric-collection",{"type":43,"value":826}," only when the mapping is\nunambiguous. The ",{"type":37,"tag":52,"props":828,"children":830},{"className":829},[],[831],{"type":43,"value":832},"fabric-skills",{"type":43,"value":834}," manifest is not unambiguous because the legacy\n",{"type":37,"tag":52,"props":836,"children":838},{"className":837},[],[839],{"type":43,"value":568},{"type":43,"value":841}," marketplace entry uses the same payload. In that case,\nreport that the installed entry could not be resolved, ask the user to inspect\nthe native plugin list, and do not guess an identity or update command.",{"type":37,"tag":46,"props":843,"children":844},{},[845,847,852,854,860,862,867],{"type":43,"value":846},"For Git ",{"type":37,"tag":52,"props":848,"children":850},{"className":849},[],[851],{"type":43,"value":188},{"type":43,"value":853},", accept either a repository object with a ",{"type":37,"tag":52,"props":855,"children":857},{"className":856},[],[858],{"type":43,"value":859},"url",{"type":43,"value":861}," property\nor a repository URL string. Keep the repository value exactly as stored and\nappend the exact resolved root when building the cache identity. This prevents\none clone from suppressing checks for another clone of the same repository.\nWhen parsing a GitHub owner and repository for remote tools, strip only a\ntrailing ",{"type":37,"tag":52,"props":863,"children":865},{"className":864},[],[866],{"type":43,"value":196},{"type":43,"value":868}," and trailing slash. Do not alter owner spelling, case,\nunderscores, or punctuation.",{"type":37,"tag":46,"props":870,"children":871},{},[872,874,880],{"type":43,"value":873},"Validate that required fields are present and that ",{"type":37,"tag":52,"props":875,"children":877},{"className":876},[],[878],{"type":43,"value":879},"localVersion",{"type":43,"value":881}," is semantic\nversion text. If validation fails, report the malformed field and classify the\ncontext as unknown rather than using partial metadata.",{"type":37,"tag":129,"props":883,"children":885},{"id":884},"step-2-apply-the-network-guard",[886],{"type":43,"value":887},"Step 2: Apply the Network Guard",{"type":37,"tag":46,"props":889,"children":890},{},[891],{"type":43,"value":892},"Use an exact cache path supplied by the caller only for a deterministic test.\nOtherwise, use this persistent cache file:",{"type":37,"tag":273,"props":894,"children":897},{"className":895,"code":896,"language":43,"meta":278},[276],"~\u002F.config\u002Ffabric-collection\u002Flast-update-check.json\n",[898],{"type":37,"tag":52,"props":899,"children":900},{"__ignoreMap":278},[901],{"type":43,"value":896},{"type":37,"tag":46,"props":903,"children":904},{},[905],{"type":43,"value":906},"On Windows, this is:",{"type":37,"tag":273,"props":908,"children":911},{"className":909,"code":910,"language":43,"meta":278},[276],"$env:USERPROFILE\\.config\\fabric-collection\\last-update-check.json\n",[912],{"type":37,"tag":52,"props":913,"children":914},{"__ignoreMap":278},[915],{"type":43,"value":910},{"type":37,"tag":46,"props":917,"children":918},{},[919],{"type":43,"value":920},"The file is a flat JSON object keyed by installation identity:",{"type":37,"tag":273,"props":922,"children":926},{"className":923,"code":924,"language":925,"meta":278,"style":278},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"plugin:fabric-collection\u002Ffabric-consumption\": \"2026-07-15\",\n  \"plugin:direct\u002Fgithub-com-example-skills\": \"2026-07-15\",\n  \"git:https:\u002F\u002Fgithub.com\u002Fexample\u002Fskills-for-fabric.git|C:\\\\repos\\\\skills-for-fabric\": \"2026-07-14\"\n}\n","json",[927],{"type":37,"tag":52,"props":928,"children":929},{"__ignoreMap":278},[930,942,986,1023,1077],{"type":37,"tag":931,"props":932,"children":935},"span",{"class":933,"line":934},"line",1,[936],{"type":37,"tag":931,"props":937,"children":939},{"style":938},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[940],{"type":43,"value":941},"{\n",{"type":37,"tag":931,"props":943,"children":945},{"class":933,"line":944},2,[946,951,957,962,967,972,978,982],{"type":37,"tag":931,"props":947,"children":948},{"style":938},[949],{"type":43,"value":950},"  \"",{"type":37,"tag":931,"props":952,"children":954},{"style":953},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[955],{"type":43,"value":956},"plugin:fabric-collection\u002Ffabric-consumption",{"type":37,"tag":931,"props":958,"children":959},{"style":938},[960],{"type":43,"value":961},"\"",{"type":37,"tag":931,"props":963,"children":964},{"style":938},[965],{"type":43,"value":966},":",{"type":37,"tag":931,"props":968,"children":969},{"style":938},[970],{"type":43,"value":971}," \"",{"type":37,"tag":931,"props":973,"children":975},{"style":974},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[976],{"type":43,"value":977},"2026-07-15",{"type":37,"tag":931,"props":979,"children":980},{"style":938},[981],{"type":43,"value":961},{"type":37,"tag":931,"props":983,"children":984},{"style":938},[985],{"type":43,"value":577},{"type":37,"tag":931,"props":987,"children":989},{"class":933,"line":988},3,[990,994,999,1003,1007,1011,1015,1019],{"type":37,"tag":931,"props":991,"children":992},{"style":938},[993],{"type":43,"value":950},{"type":37,"tag":931,"props":995,"children":996},{"style":953},[997],{"type":43,"value":998},"plugin:direct\u002Fgithub-com-example-skills",{"type":37,"tag":931,"props":1000,"children":1001},{"style":938},[1002],{"type":43,"value":961},{"type":37,"tag":931,"props":1004,"children":1005},{"style":938},[1006],{"type":43,"value":966},{"type":37,"tag":931,"props":1008,"children":1009},{"style":938},[1010],{"type":43,"value":971},{"type":37,"tag":931,"props":1012,"children":1013},{"style":974},[1014],{"type":43,"value":977},{"type":37,"tag":931,"props":1016,"children":1017},{"style":938},[1018],{"type":43,"value":961},{"type":37,"tag":931,"props":1020,"children":1021},{"style":938},[1022],{"type":43,"value":577},{"type":37,"tag":931,"props":1024,"children":1026},{"class":933,"line":1025},4,[1027,1031,1036,1042,1047,1051,1055,1059,1063,1067,1072],{"type":37,"tag":931,"props":1028,"children":1029},{"style":938},[1030],{"type":43,"value":950},{"type":37,"tag":931,"props":1032,"children":1033},{"style":953},[1034],{"type":43,"value":1035},"git:https:\u002F\u002Fgithub.com\u002Fexample\u002Fskills-for-fabric.git|C:",{"type":37,"tag":931,"props":1037,"children":1039},{"style":1038},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1040],{"type":43,"value":1041},"\\\\",{"type":37,"tag":931,"props":1043,"children":1044},{"style":953},[1045],{"type":43,"value":1046},"repos",{"type":37,"tag":931,"props":1048,"children":1049},{"style":1038},[1050],{"type":43,"value":1041},{"type":37,"tag":931,"props":1052,"children":1053},{"style":953},[1054],{"type":43,"value":568},{"type":37,"tag":931,"props":1056,"children":1057},{"style":938},[1058],{"type":43,"value":961},{"type":37,"tag":931,"props":1060,"children":1061},{"style":938},[1062],{"type":43,"value":966},{"type":37,"tag":931,"props":1064,"children":1065},{"style":938},[1066],{"type":43,"value":971},{"type":37,"tag":931,"props":1068,"children":1069},{"style":974},[1070],{"type":43,"value":1071},"2026-07-14",{"type":37,"tag":931,"props":1073,"children":1074},{"style":938},[1075],{"type":43,"value":1076},"\"\n",{"type":37,"tag":931,"props":1078,"children":1080},{"class":933,"line":1079},5,[1081],{"type":37,"tag":931,"props":1082,"children":1083},{"style":938},[1084],{"type":43,"value":1085},"}\n",{"type":37,"tag":46,"props":1087,"children":1088},{},[1089,1091,1097],{"type":43,"value":1090},"Use UTC dates in ",{"type":37,"tag":52,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":43,"value":1096},"YYYY-MM-DD",{"type":43,"value":1098}," format.",{"type":37,"tag":73,"props":1100,"children":1101},{},[1102,1107,1112,1117,1122,1127],{"type":37,"tag":77,"props":1103,"children":1104},{},[1105],{"type":43,"value":1106},"For an automatic invocation, skip the remote lookup when this identity has a\nvalid date within the last 7 days.",{"type":37,"tag":77,"props":1108,"children":1109},{},[1110],{"type":43,"value":1111},"For an explicit invocation, perform the remote lookup even when a fresh cache\nentry exists.",{"type":37,"tag":77,"props":1113,"children":1114},{},[1115],{"type":43,"value":1116},"Entries for different installed plugin entries or Git clone roots do not\nsuppress each other.",{"type":37,"tag":77,"props":1118,"children":1119},{},[1120],{"type":43,"value":1121},"Preserve every unrelated entry when writing the file.",{"type":37,"tag":77,"props":1123,"children":1124},{},[1125],{"type":43,"value":1126},"If the file contains malformed JSON, warn and do not overwrite it.",{"type":37,"tag":77,"props":1128,"children":1129},{},[1130],{"type":43,"value":1131},"Do not read or write a cache entry for a copied or unknown context.",{"type":37,"tag":46,"props":1133,"children":1134},{},[1135],{"type":43,"value":1136},"After a remote attempt completes, record today's UTC date for the detected\nidentity whether the attempt found an update, found no update, or failed, unless\nthe cache file was malformed. This prevents an automatic network failure from\nrepeating in every session. Do not rewrite the marker when the network guard\nskipped the attempt.",{"type":37,"tag":129,"props":1138,"children":1140},{"id":1139},"step-3-read-the-remote-version",[1141],{"type":43,"value":1142},"Step 3: Read the Remote Version",{"type":37,"tag":46,"props":1144,"children":1145},{},[1146,1148,1153,1154,1160,1162,1167],{"type":43,"value":1147},"Read ",{"type":37,"tag":52,"props":1149,"children":1151},{"className":1150},[],[1152],{"type":43,"value":188},{"type":43,"value":218},{"type":37,"tag":52,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":43,"value":1159},"CHANGELOG.md",{"type":43,"value":1161}," from the same repository and the same\n",{"type":37,"tag":52,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":43,"value":57},{"type":43,"value":1168}," ref. Try these methods in order and stop after the first successful one:",{"type":37,"tag":141,"props":1170,"children":1171},{},[1172,1318,1355],{"type":37,"tag":77,"props":1173,"children":1174},{},[1175,1180,1182,1187,1189,1195,1197],{"type":37,"tag":81,"props":1176,"children":1177},{},[1178],{"type":43,"value":1179},"Git CLI:",{"type":43,"value":1181}," Only when the candidate root itself has a direct ",{"type":37,"tag":52,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":43,"value":196},{"type":43,"value":1188}," file or\ndirectory. Do not use ",{"type":37,"tag":52,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":43,"value":1194},"git rev-parse",{"type":43,"value":1196}," as the availability check because it\ncan discover an unrelated parent repository.",{"type":37,"tag":273,"props":1198,"children":1202},{"className":1199,"code":1200,"language":1201,"meta":278,"style":278},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git -C \"\u003Croot>\" fetch origin main --quiet\ngit -C \"\u003Croot>\" show origin\u002Fmain:package.json\ngit -C \"\u003Croot>\" show origin\u002Fmain:CHANGELOG.md\n","bash",[1203],{"type":37,"tag":52,"props":1204,"children":1205},{"__ignoreMap":278},[1206,1253,1286],{"type":37,"tag":931,"props":1207,"children":1208},{"class":933,"line":934},[1209,1215,1220,1224,1229,1233,1238,1243,1248],{"type":37,"tag":931,"props":1210,"children":1212},{"style":1211},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1213],{"type":43,"value":1214},"git",{"type":37,"tag":931,"props":1216,"children":1217},{"style":974},[1218],{"type":43,"value":1219}," -C",{"type":37,"tag":931,"props":1221,"children":1222},{"style":938},[1223],{"type":43,"value":971},{"type":37,"tag":931,"props":1225,"children":1226},{"style":974},[1227],{"type":43,"value":1228},"\u003Croot>",{"type":37,"tag":931,"props":1230,"children":1231},{"style":938},[1232],{"type":43,"value":961},{"type":37,"tag":931,"props":1234,"children":1235},{"style":974},[1236],{"type":43,"value":1237}," fetch",{"type":37,"tag":931,"props":1239,"children":1240},{"style":974},[1241],{"type":43,"value":1242}," origin",{"type":37,"tag":931,"props":1244,"children":1245},{"style":974},[1246],{"type":43,"value":1247}," main",{"type":37,"tag":931,"props":1249,"children":1250},{"style":974},[1251],{"type":43,"value":1252}," --quiet\n",{"type":37,"tag":931,"props":1254,"children":1255},{"class":933,"line":944},[1256,1260,1264,1268,1272,1276,1281],{"type":37,"tag":931,"props":1257,"children":1258},{"style":1211},[1259],{"type":43,"value":1214},{"type":37,"tag":931,"props":1261,"children":1262},{"style":974},[1263],{"type":43,"value":1219},{"type":37,"tag":931,"props":1265,"children":1266},{"style":938},[1267],{"type":43,"value":971},{"type":37,"tag":931,"props":1269,"children":1270},{"style":974},[1271],{"type":43,"value":1228},{"type":37,"tag":931,"props":1273,"children":1274},{"style":938},[1275],{"type":43,"value":961},{"type":37,"tag":931,"props":1277,"children":1278},{"style":974},[1279],{"type":43,"value":1280}," show",{"type":37,"tag":931,"props":1282,"children":1283},{"style":974},[1284],{"type":43,"value":1285}," origin\u002Fmain:package.json\n",{"type":37,"tag":931,"props":1287,"children":1288},{"class":933,"line":988},[1289,1293,1297,1301,1305,1309,1313],{"type":37,"tag":931,"props":1290,"children":1291},{"style":1211},[1292],{"type":43,"value":1214},{"type":37,"tag":931,"props":1294,"children":1295},{"style":974},[1296],{"type":43,"value":1219},{"type":37,"tag":931,"props":1298,"children":1299},{"style":938},[1300],{"type":43,"value":971},{"type":37,"tag":931,"props":1302,"children":1303},{"style":974},[1304],{"type":43,"value":1228},{"type":37,"tag":931,"props":1306,"children":1307},{"style":938},[1308],{"type":43,"value":961},{"type":37,"tag":931,"props":1310,"children":1311},{"style":974},[1312],{"type":43,"value":1280},{"type":37,"tag":931,"props":1314,"children":1315},{"style":974},[1316],{"type":43,"value":1317}," origin\u002Fmain:CHANGELOG.md\n",{"type":37,"tag":77,"props":1319,"children":1320},{},[1321,1326,1328,1334,1336,1341,1342,1347,1349,1354],{"type":37,"tag":81,"props":1322,"children":1323},{},[1324],{"type":43,"value":1325},"Authenticated GitHub tools:",{"type":43,"value":1327}," Use GitHub MCP file tools or ",{"type":37,"tag":52,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":43,"value":1333},"gh api",{"type":43,"value":1335}," with\nthe owner and repository parsed exactly from the manifest URL. Read\n",{"type":37,"tag":52,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":43,"value":188},{"type":43,"value":218},{"type":37,"tag":52,"props":1343,"children":1345},{"className":1344},[],[1346],{"type":43,"value":1159},{"type":43,"value":1348}," at ref ",{"type":37,"tag":52,"props":1350,"children":1352},{"className":1351},[],[1353],{"type":43,"value":57},{"type":43,"value":116},{"type":37,"tag":77,"props":1356,"children":1357},{},[1358,1363,1365,1371],{"type":37,"tag":81,"props":1359,"children":1360},{},[1361],{"type":43,"value":1362},"Public raw content:",{"type":43,"value":1364}," For a public repository, read both files from\n",{"type":37,"tag":52,"props":1366,"children":1368},{"className":1367},[],[1369],{"type":43,"value":1370},"https:\u002F\u002Fraw.githubusercontent.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Fmain\u002F",{"type":43,"value":116},{"type":37,"tag":46,"props":1373,"children":1374},{},[1375],{"type":43,"value":1376},"Do not use the latest GitHub Release tag as the remote version. Plugin\nmarketplace updates follow repository content, and a release tag can lag behind\nthe version available to plugin users.",{"type":37,"tag":46,"props":1378,"children":1379},{},[1380],{"type":43,"value":1381},"If version retrieval fails, show the detected channel, identity, and local\nversion with a concise warning. Do not fabricate a remote version. If only the\nchangelog retrieval fails, still report the version comparison and note that\nthe changelog was unavailable.",{"type":37,"tag":129,"props":1383,"children":1385},{"id":1384},"step-4-compare-and-report",[1386],{"type":43,"value":1387},"Step 4: Compare and Report",{"type":37,"tag":46,"props":1389,"children":1390},{},[1391],{"type":43,"value":1392},"Compare semantic versions:",{"type":37,"tag":73,"props":1394,"children":1395},{},[1396,1407],{"type":37,"tag":77,"props":1397,"children":1398},{},[1399,1405],{"type":37,"tag":52,"props":1400,"children":1402},{"className":1401},[],[1403],{"type":43,"value":1404},"remoteVersion > localVersion",{"type":43,"value":1406},": update available.",{"type":37,"tag":77,"props":1408,"children":1409},{},[1410,1416],{"type":37,"tag":52,"props":1411,"children":1413},{"className":1412},[],[1414],{"type":43,"value":1415},"remoteVersion \u003C= localVersion",{"type":43,"value":1417},": up to date.",{"type":37,"tag":46,"props":1419,"children":1420},{},[1421,1423,1428,1430,1436],{"type":43,"value":1422},"For an update, show the relevant ",{"type":37,"tag":52,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":43,"value":1159},{"type":43,"value":1429}," entries between the local and\nremote versions, then provide only guidance verified for both the detected\nchannel and ",{"type":37,"tag":52,"props":1431,"children":1433},{"className":1432},[],[1434],{"type":43,"value":1435},"runtimeHost",{"type":43,"value":116},{"type":37,"tag":46,"props":1438,"children":1439},{},[1440],{"type":37,"tag":81,"props":1441,"children":1442},{},[1443],{"type":43,"value":1444},"Plugin channel",{"type":37,"tag":46,"props":1446,"children":1447},{},[1448],{"type":43,"value":1449},"Never emit one host's plugin command for another host.",{"type":37,"tag":371,"props":1451,"children":1452},{},[1453,1469],{"type":37,"tag":375,"props":1454,"children":1455},{},[1456],{"type":37,"tag":379,"props":1457,"children":1458},{},[1459,1464],{"type":37,"tag":383,"props":1460,"children":1461},{},[1462],{"type":43,"value":1463},"Runtime host",{"type":37,"tag":383,"props":1465,"children":1466},{},[1467],{"type":43,"value":1468},"Verified guidance",{"type":37,"tag":399,"props":1470,"children":1471},{},[1472,1500,1529,1563],{"type":37,"tag":379,"props":1473,"children":1474},{},[1475,1480],{"type":37,"tag":406,"props":1476,"children":1477},{},[1478],{"type":43,"value":1479},"GitHub Copilot CLI",{"type":37,"tag":406,"props":1481,"children":1482},{},[1483,1485,1491,1493,1499],{"type":43,"value":1484},"For a marketplace install, show ",{"type":37,"tag":52,"props":1486,"children":1488},{"className":1487},[],[1489],{"type":43,"value":1490},"\u002Fplugin update \u003Cinstalled-name>@\u003Cmarketplace>",{"type":43,"value":1492},". For a direct install, show ",{"type":37,"tag":52,"props":1494,"children":1496},{"className":1495},[],[1497],{"type":43,"value":1498},"\u002Fplugin update \u003Cmanifest-name>",{"type":43,"value":116},{"type":37,"tag":379,"props":1501,"children":1502},{},[1503,1508],{"type":37,"tag":406,"props":1504,"children":1505},{},[1506],{"type":43,"value":1507},"Claude Code",{"type":37,"tag":406,"props":1509,"children":1510},{},[1511,1513,1519,1521,1527],{"type":43,"value":1512},"For a marketplace install with a resolved scope, show ",{"type":37,"tag":52,"props":1514,"children":1516},{"className":1515},[],[1517],{"type":43,"value":1518},"claude plugin update \u003Cinstalled-name>@\u003Cmarketplace> --scope \u003Cscope>",{"type":43,"value":1520},", then tell the user to run ",{"type":37,"tag":52,"props":1522,"children":1524},{"className":1523},[],[1525],{"type":43,"value":1526},"\u002Freload-plugins",{"type":43,"value":1528}," or restart Claude Code.",{"type":37,"tag":379,"props":1530,"children":1531},{},[1532,1537],{"type":37,"tag":406,"props":1533,"children":1534},{},[1535],{"type":43,"value":1536},"Cursor",{"type":37,"tag":406,"props":1538,"children":1539},{},[1540,1542,1547,1549,1554,1556,1561],{"type":43,"value":1541},"Direct the user to ",{"type":37,"tag":81,"props":1543,"children":1544},{},[1545],{"type":43,"value":1546},"Customize > Plugins",{"type":43,"value":1548},". For a team marketplace, an administrator can use ",{"type":37,"tag":81,"props":1550,"children":1551},{},[1552],{"type":43,"value":1553},"Refresh",{"type":43,"value":1555}," or ",{"type":37,"tag":81,"props":1557,"children":1558},{},[1559],{"type":43,"value":1560},"Enable Auto Refresh",{"type":43,"value":1562},". Do not emit a plugin CLI command.",{"type":37,"tag":379,"props":1564,"children":1565},{},[1566,1571],{"type":37,"tag":406,"props":1567,"children":1568},{},[1569],{"type":43,"value":1570},"Windsurf, Codex, other, or unknown",{"type":37,"tag":406,"props":1572,"children":1573},{},[1574],{"type":43,"value":1575},"Report the available version and repository, but provide no executable plugin command because none is verified for this layout.",{"type":37,"tag":46,"props":1577,"children":1578},{},[1579],{"type":43,"value":1580},"GitHub Copilot CLI marketplace install:",{"type":37,"tag":273,"props":1582,"children":1585},{"className":1583,"code":1584,"language":43,"meta":278},[276],"\u002Fplugin update \u003Cinstalled-name>@\u003Cmarketplace>\n",[1586],{"type":37,"tag":52,"props":1587,"children":1588},{"__ignoreMap":278},[1589],{"type":43,"value":1584},{"type":37,"tag":46,"props":1591,"children":1592},{},[1593,1595,1601],{"type":43,"value":1594},"The installed marketplace entry is authoritative. For example, an installed\n",{"type":37,"tag":52,"props":1596,"children":1598},{"className":1597},[],[1599],{"type":43,"value":1600},"fabric-consumption@fabric-collection",{"type":43,"value":1602}," entry produces:",{"type":37,"tag":273,"props":1604,"children":1607},{"className":1605,"code":1606,"language":43,"meta":278},[276],"\u002Fplugin update fabric-consumption@fabric-collection\n",[1608],{"type":37,"tag":52,"props":1609,"children":1610},{"__ignoreMap":278},[1611],{"type":43,"value":1606},{"type":37,"tag":46,"props":1613,"children":1614},{},[1615,1617,1622,1624,1629],{"type":43,"value":1616},"If the installed entry is the legacy ",{"type":37,"tag":52,"props":1618,"children":1620},{"className":1619},[],[1621],{"type":43,"value":568},{"type":43,"value":1623}," alias, update that\nalias first so the installed entry can receive the current payload, even though\nits copied manifest is named ",{"type":37,"tag":52,"props":1625,"children":1627},{"className":1626},[],[1628],{"type":43,"value":832},{"type":43,"value":966},{"type":37,"tag":273,"props":1631,"children":1634},{"className":1632,"code":1633,"language":43,"meta":278},[276],"\u002Fplugin update skills-for-fabric@fabric-collection\n",[1635],{"type":37,"tag":52,"props":1636,"children":1637},{"__ignoreMap":278},[1638],{"type":43,"value":1633},{"type":37,"tag":46,"props":1640,"children":1641},{},[1642],{"type":43,"value":1643},"Afterward, optional migration to the canonical entry is:",{"type":37,"tag":273,"props":1645,"children":1648},{"className":1646,"code":1647,"language":43,"meta":278},[276],"\u002Fplugin uninstall skills-for-fabric@fabric-collection\n\u002Fplugin install fabric-skills@fabric-collection\n",[1649],{"type":37,"tag":52,"props":1650,"children":1651},{"__ignoreMap":278},[1652],{"type":43,"value":1647},{"type":37,"tag":46,"props":1654,"children":1655},{},[1656],{"type":43,"value":1657},"GitHub Copilot CLI direct install:",{"type":37,"tag":273,"props":1659,"children":1662},{"className":1660,"code":1661,"language":43,"meta":278},[276],"\u002Fplugin update \u003Cmanifest-name>\n",[1663],{"type":37,"tag":52,"props":1664,"children":1665},{"__ignoreMap":278},[1666],{"type":43,"value":1661},{"type":37,"tag":46,"props":1668,"children":1669},{},[1670,1672,1678],{"type":43,"value":1671},"The native CLI update target for a direct install is the bare manifest name.\nDo not append ",{"type":37,"tag":52,"props":1673,"children":1675},{"className":1674},[],[1676],{"type":43,"value":1677},"@_direct",{"type":43,"value":1679}," or use the opaque source ID as the update target.",{"type":37,"tag":46,"props":1681,"children":1682},{},[1683],{"type":43,"value":1684},"Claude Code marketplace install:",{"type":37,"tag":273,"props":1686,"children":1689},{"className":1687,"code":1688,"language":43,"meta":278},[276],"claude plugin update \u003Cinstalled-name>@\u003Cmarketplace> --scope \u003Cscope>\n",[1690],{"type":37,"tag":52,"props":1691,"children":1692},{"__ignoreMap":278},[1693],{"type":43,"value":1688},{"type":37,"tag":46,"props":1695,"children":1696},{},[1697,1699,1704],{"type":43,"value":1698},"The entry name and scope must come from Claude's installed-plugin metadata. Do\nnot reuse Copilot's ",{"type":37,"tag":52,"props":1700,"children":1702},{"className":1701},[],[1703],{"type":43,"value":714},{"type":43,"value":1705}," behavior for Claude Code.",{"type":37,"tag":46,"props":1707,"children":1708},{},[1709],{"type":37,"tag":81,"props":1710,"children":1711},{},[1712],{"type":43,"value":1713},"Git channel",{"type":37,"tag":273,"props":1715,"children":1718},{"className":1716,"code":1717,"language":43,"meta":278},[276],"git -C \"\u003Cdetected-root>\" pull --ff-only\n",[1719],{"type":37,"tag":52,"props":1720,"children":1721},{"__ignoreMap":278},[1722],{"type":43,"value":1717},{"type":37,"tag":46,"props":1724,"children":1725},{},[1726],{"type":37,"tag":81,"props":1727,"children":1728},{},[1729],{"type":43,"value":1730},"Unknown channel",{"type":37,"tag":46,"props":1732,"children":1733},{},[1734,1736,1741],{"type":43,"value":1735},"State which expected files were absent and provide no update command. Never\ndefault to ",{"type":37,"tag":52,"props":1737,"children":1739},{"className":1738},[],[1740],{"type":43,"value":832},{"type":43,"value":116},{"type":37,"tag":46,"props":1743,"children":1744},{},[1745],{"type":37,"tag":81,"props":1746,"children":1747},{},[1748],{"type":43,"value":1749},"Copied-skill channel",{"type":37,"tag":46,"props":1751,"children":1752},{},[1753,1755,1761],{"type":43,"value":1754},"A loose copy has no trustworthy repository, installed version, or native update\ntarget. This includes a skill materialized from a local file or URL by\n",{"type":37,"tag":52,"props":1756,"children":1758},{"className":1757},[],[1759],{"type":43,"value":1760},"copilot skill add",{"type":43,"value":1762}," when no source metadata accompanies it.",{"type":37,"tag":46,"props":1764,"children":1765},{},[1766],{"type":43,"value":1767},"For an automatic invocation, do not interrupt the caller with a source question.\nSkip the copied-skill update flow, optionally state that an explicit update\ncheck can identify a supported replacement, and continue the caller's task.\nDo not list an executable command.",{"type":37,"tag":46,"props":1769,"children":1770},{},[1771],{"type":43,"value":1772},"For an explicit invocation, list the tentative skill names found at the\ncandidate root, state that their provenance cannot be verified from the files\nalone, and ask:",{"type":37,"tag":273,"props":1774,"children":1777},{"className":1775,"code":1776,"language":43,"meta":278},[276],"Were these skills copied from https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills-for-fabric?\nIf yes, I can inspect the official public repository and show the supported\nplugin bundle that will refresh them. I will not install or remove anything\nwithout your confirmation.\n",[1778],{"type":37,"tag":52,"props":1779,"children":1780},{"__ignoreMap":278},[1781],{"type":43,"value":1776},{"type":37,"tag":46,"props":1783,"children":1784},{},[1785],{"type":43,"value":1786},"Before the user confirms the source, do not contact the network, compare\nversions, write cache state, or offer an executable install\u002Fupdate command.",{"type":37,"tag":46,"props":1788,"children":1789},{},[1790],{"type":43,"value":1791},"After explicit confirmation:",{"type":37,"tag":141,"props":1793,"children":1794},{},[1795,1822,1827,1846],{"type":37,"tag":77,"props":1796,"children":1797},{},[1798,1799,1805,1807,1812,1814,1820],{"type":43,"value":1147},{"type":37,"tag":52,"props":1800,"children":1802},{"className":1801},[],[1803],{"type":43,"value":1804},".github\u002Fplugin\u002Fmarketplace.json",{"type":43,"value":1806}," from the ",{"type":37,"tag":52,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":43,"value":57},{"type":43,"value":1813}," ref of\n",{"type":37,"tag":52,"props":1815,"children":1817},{"className":1816},[],[1818],{"type":43,"value":1819},"microsoft\u002Fskills-for-fabric",{"type":43,"value":1821},", using authenticated GitHub tools first and\npublic raw content second.",{"type":37,"tag":77,"props":1823,"children":1824},{},[1825],{"type":43,"value":1826},"Match the tentative skill directory names against the skill paths inside\neach marketplace plugin source. Treat only exact path matches as evidence.",{"type":37,"tag":77,"props":1828,"children":1829},{},[1830,1832,1837,1839,1844],{"type":43,"value":1831},"Prefer a focused plugin that covers all matched non-utility skills. If more\nthan one plugin qualifies, list the valid choices and ask the user to choose.\nNever choose ",{"type":37,"tag":52,"props":1833,"children":1835},{"className":1834},[],[1836],{"type":43,"value":832},{"type":43,"value":1838}," merely because ",{"type":37,"tag":52,"props":1840,"children":1842},{"className":1841},[],[1843],{"type":43,"value":4},{"type":43,"value":1845}," appears in it.",{"type":37,"tag":77,"props":1847,"children":1848},{},[1849,1851,1856,1857,1861,1863,1872,1875,1877,1882,1884,1889,1891,1900,1903,1905,1910,1912,1915],{"type":43,"value":1850},"Offer only the replacement path supported by ",{"type":37,"tag":52,"props":1852,"children":1854},{"className":1853},[],[1855],{"type":43,"value":1435},{"type":43,"value":966},{"type":37,"tag":1858,"props":1859,"children":1860},"br",{},[],{"type":43,"value":1862},"GitHub Copilot CLI:",{"type":37,"tag":273,"props":1864,"children":1867},{"className":1865,"code":1866,"language":43,"meta":278},[276],"\u002Fplugin marketplace add microsoft\u002Fskills-for-fabric\n\u002Fplugin install \u003Cmatched-plugin>@fabric-collection\n",[1868],{"type":37,"tag":52,"props":1869,"children":1870},{"__ignoreMap":278},[1871],{"type":43,"value":1866},{"type":37,"tag":1858,"props":1873,"children":1874},{},[],{"type":43,"value":1876},"Claude Code, using ",{"type":37,"tag":52,"props":1878,"children":1880},{"className":1879},[],[1881],{"type":43,"value":749},{"type":43,"value":1883}," for a personal copied-skills root or ",{"type":37,"tag":52,"props":1885,"children":1887},{"className":1886},[],[1888],{"type":43,"value":765},{"type":43,"value":1890}," for\na project copied-skills root:",{"type":37,"tag":273,"props":1892,"children":1895},{"className":1893,"code":1894,"language":43,"meta":278},[276],"\u002Fplugin marketplace add microsoft\u002Fskills-for-fabric\nclaude plugin install \u003Cmatched-plugin>@fabric-collection --scope \u003Cscope>\n",[1896],{"type":37,"tag":52,"props":1897,"children":1898},{"__ignoreMap":278},[1899],{"type":43,"value":1894},{"type":37,"tag":1858,"props":1901,"children":1902},{},[],{"type":43,"value":1904},"Tell the user to run ",{"type":37,"tag":52,"props":1906,"children":1908},{"className":1907},[],[1909],{"type":43,"value":1526},{"type":43,"value":1911}," or restart Claude Code after the\ninstall. If the Claude scope cannot be resolved, ask instead of guessing.",{"type":37,"tag":1858,"props":1913,"children":1914},{},[],{"type":43,"value":1916},"For Cursor, Windsurf, Codex, other, or unknown hosts, link to the official\nrepository's installation instructions and provide no executable replacement\ncommand. The current public repository does not expose a verified native\nplugin marketplace for those hosts.",{"type":37,"tag":46,"props":1918,"children":1919},{},[1920],{"type":43,"value":1921},"This installs a complete current bundle instead of overwriting loose files and\nleaving mixed-version dependencies. Keep the loose copy until the native plugin\nis installed and verified. Ask separately before removing it. If no exact\nofficial mapping exists or the public repository is unavailable, report that\nand do not fabricate a bundle or copy individual files.",{"type":37,"tag":61,"props":1923,"children":1925},{"id":1924},"examples",[1926],{"type":43,"value":1927},"Examples",{"type":37,"tag":129,"props":1929,"children":1931},{"id":1930},"focused-plugin-bundle",[1932],{"type":43,"value":1933},"Focused plugin bundle",{"type":37,"tag":273,"props":1935,"children":1938},{"className":1936,"code":1937,"language":43,"meta":278},[276],"Host: copilot-cli\nDetected: plugin:fabric-collection\u002Ffabric-consumption\nCurrent: 0.3.7\nLatest: 0.3.8\nUpdate: \u002Fplugin update fabric-consumption@fabric-collection\n",[1939],{"type":37,"tag":52,"props":1940,"children":1941},{"__ignoreMap":278},[1942],{"type":43,"value":1937},{"type":37,"tag":129,"props":1944,"children":1946},{"id":1945},"claude-code-plugin-bundle",[1947],{"type":43,"value":1948},"Claude Code plugin bundle",{"type":37,"tag":273,"props":1950,"children":1953},{"className":1951,"code":1952,"language":43,"meta":278},[276],"Host: claude-code\nDetected: plugin:fabric-collection\u002Ffabric-consumption\nCurrent: 0.3.7\nLatest: 0.3.8\nUpdate: claude plugin update fabric-consumption@fabric-collection --scope user\nReload: \u002Freload-plugins\n",[1954],{"type":37,"tag":52,"props":1955,"children":1956},{"__ignoreMap":278},[1957],{"type":43,"value":1952},{"type":37,"tag":129,"props":1959,"children":1961},{"id":1960},"git-clone",[1962],{"type":43,"value":448},{"type":37,"tag":273,"props":1964,"children":1967},{"className":1965,"code":1966,"language":43,"meta":278},[276],"Detected: git:https:\u002F\u002Fgithub.com\u002Fexample\u002Fskills-for-fabric.git|C:\\repos\\skills-for-fabric\nCurrent: 0.3.7\nLatest: 0.3.8\nUpdate: git -C \"C:\\repos\\skills-for-fabric\" pull --ff-only\n",[1968],{"type":37,"tag":52,"props":1969,"children":1970},{"__ignoreMap":278},[1971],{"type":43,"value":1966},{"type":37,"tag":129,"props":1973,"children":1975},{"id":1974},"unknown-layout",[1976],{"type":43,"value":1977},"Unknown layout",{"type":37,"tag":273,"props":1979,"children":1982},{"className":1980,"code":1981,"language":43,"meta":278},[276],"Could not determine the skills-for-fabric installation at \u003Ccandidate-root>.\nExpected a supported plugin manifest, or a positively identified\nskills-for-fabric package.json plus a direct .git entry.\nNo update command was guessed.\n",[1983],{"type":37,"tag":52,"props":1984,"children":1985},{"__ignoreMap":278},[1986],{"type":43,"value":1981},{"type":37,"tag":129,"props":1988,"children":1990},{"id":1989},"confirmed-official-loose-copy",[1991],{"type":43,"value":1992},"Confirmed official loose copy",{"type":37,"tag":273,"props":1994,"children":1997},{"className":1995,"code":1996,"language":43,"meta":278},[276],"Host: copilot-cli\nDetected loose skills: check-updates, powerbi-report-planning\nConfirmed source: https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills-for-fabric\nSupported refresh:\n  \u002Fplugin marketplace add microsoft\u002Fskills-for-fabric\n  \u002Fplugin install powerbi-authoring@fabric-collection\nThe loose files were not changed or removed.\n",[1998],{"type":37,"tag":52,"props":1999,"children":2000},{"__ignoreMap":278},[2001],{"type":43,"value":1996},{"type":37,"tag":61,"props":2003,"children":2005},{"id":2004},"must",[2006],{"type":43,"value":2007},"Must",{"type":37,"tag":73,"props":2009,"children":2010},{},[2011,2016,2021,2026,2031,2036,2041,2046,2051,2056,2061,2066],{"type":37,"tag":77,"props":2012,"children":2013},{},[2014],{"type":43,"value":2015},"Resolve identity from the active skill root or an explicit user path.",{"type":37,"tag":77,"props":2017,"children":2018},{},[2019],{"type":43,"value":2020},"Resolve the runtime host independently from the installation layout.",{"type":37,"tag":77,"props":2022,"children":2023},{},[2024],{"type":43,"value":2025},"Keep once-per-session invocation separate from the 7-day network guard.",{"type":37,"tag":77,"props":2027,"children":2028},{},[2029],{"type":43,"value":2030},"Use the installed marketplace entry, not merely the manifest name, in plugin\nidentities and update commands.",{"type":37,"tag":77,"props":2032,"children":2033},{},[2034],{"type":43,"value":2035},"Keep direct installs distinct from marketplace installs.",{"type":37,"tag":77,"props":2037,"children":2038},{},[2039],{"type":43,"value":2040},"Require positive package and repository identity before using the Git channel.",{"type":37,"tag":77,"props":2042,"children":2043},{},[2044],{"type":43,"value":2045},"Isolate Git cache entries by repository and exact clone root.",{"type":37,"tag":77,"props":2047,"children":2048},{},[2049],{"type":43,"value":2050},"Preserve unrelated cache entries and use UTC dates.",{"type":37,"tag":77,"props":2052,"children":2053},{},[2054],{"type":43,"value":2055},"Require source confirmation before looking up a loose copy in the official\npublic repository.",{"type":37,"tag":77,"props":2057,"children":2058},{},[2059],{"type":43,"value":2060},"Match copied skill names to exact public marketplace skill paths.",{"type":37,"tag":77,"props":2062,"children":2063},{},[2064],{"type":43,"value":2065},"Emit only update or replacement commands verified for the runtime host.",{"type":37,"tag":77,"props":2067,"children":2068},{},[2069],{"type":43,"value":2070},"Continue non-blockingly after automatic checks.",{"type":37,"tag":61,"props":2072,"children":2074},{"id":2073},"prefer",[2075],{"type":43,"value":2076},"Prefer",{"type":37,"tag":73,"props":2078,"children":2079},{},[2080,2085,2090,2095],{"type":37,"tag":77,"props":2081,"children":2082},{},[2083],{"type":43,"value":2084},"Use a root-local Git remote before authenticated GitHub tools.",{"type":37,"tag":77,"props":2086,"children":2087},{},[2088],{"type":43,"value":2089},"Fetch version and changelog from the same repository ref.",{"type":37,"tag":77,"props":2091,"children":2092},{},[2093],{"type":43,"value":2094},"Replace confirmed official loose copies through a complete native plugin\nbundle rather than overwriting individual files.",{"type":37,"tag":77,"props":2096,"children":2097},{},[2098],{"type":43,"value":2099},"Show concise, copy-pasteable output.",{"type":37,"tag":61,"props":2101,"children":2103},{"id":2102},"avoid",[2104],{"type":43,"value":2105},"Avoid",{"type":37,"tag":73,"props":2107,"children":2108},{},[2109,2114,2126,2138,2143,2148,2159,2164,2169,2174,2179],{"type":37,"tag":77,"props":2110,"children":2111},{},[2112],{"type":43,"value":2113},"Inferring installation context from the current working directory.",{"type":37,"tag":77,"props":2115,"children":2116},{},[2117,2119,2124],{"type":43,"value":2118},"Letting ",{"type":37,"tag":52,"props":2120,"children":2122},{"className":2121},[],[2123],{"type":43,"value":1214},{"type":43,"value":2125}," discover a parent repository.",{"type":37,"tag":77,"props":2127,"children":2128},{},[2129,2131,2136],{"type":43,"value":2130},"Treating an unrelated package plus ",{"type":37,"tag":52,"props":2132,"children":2134},{"className":2133},[],[2135],{"type":43,"value":196},{"type":43,"value":2137}," as a skills-for-fabric clone.",{"type":37,"tag":77,"props":2139,"children":2140},{},[2141],{"type":43,"value":2142},"Inferring the runtime host from a manifest or install path.",{"type":37,"tag":77,"props":2144,"children":2145},{},[2146],{"type":43,"value":2147},"Showing Copilot or Claude plugin commands to another host.",{"type":37,"tag":77,"props":2149,"children":2150},{},[2151,2153,2158],{"type":43,"value":2152},"Defaulting focused bundles to ",{"type":37,"tag":52,"props":2154,"children":2156},{"className":2155},[],[2157],{"type":43,"value":832},{"type":43,"value":116},{"type":37,"tag":77,"props":2160,"children":2161},{},[2162],{"type":43,"value":2163},"Using GitHub Release tags as the plugin marketplace version.",{"type":37,"tag":77,"props":2165,"children":2166},{},[2167],{"type":43,"value":2168},"Repeating failed automatic network checks every session.",{"type":37,"tag":77,"props":2170,"children":2171},{},[2172],{"type":43,"value":2173},"Treating a same-named loose folder as proof that it came from the official\nrepository.",{"type":37,"tag":77,"props":2175,"children":2176},{},[2177],{"type":43,"value":2178},"Replacing individual copied files without their complete bundle dependencies.",{"type":37,"tag":77,"props":2180,"children":2181},{},[2182],{"type":43,"value":2183},"Updating without explicit user consent.",{"type":37,"tag":61,"props":2185,"children":2187},{"id":2186},"error-handling",[2188],{"type":43,"value":2189},"Error Handling",{"type":37,"tag":46,"props":2191,"children":2192},{},[2193],{"type":43,"value":2194},"On failure, report the operation that failed and continue:",{"type":37,"tag":273,"props":2196,"children":2199},{"className":2197,"code":2198,"language":43,"meta":278},[276],"Could not check plugin:fabric-collection\u002Ffabric-consumption for updates: remote package.json was unavailable.\nCurrent installed version: 0.3.7\nThe automatic check is non-blocking; continuing with the requested task.\n",[2200],{"type":37,"tag":52,"props":2201,"children":2202},{"__ignoreMap":278},[2203],{"type":43,"value":2198},{"type":37,"tag":46,"props":2205,"children":2206},{},[2207],{"type":43,"value":2208},"If the user says only \"update my skills\", clarify whether they want to check for\nan update or execute the detected native update command. Do not execute an\nupdate based on ambiguous intent.",{"type":37,"tag":2210,"props":2211,"children":2212},"style",{},[2213],{"type":43,"value":2214},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2216,"total":2323},[2217,2223,2244,2262,2278,2294,2310],{"slug":4,"name":4,"fn":5,"description":6,"org":2218,"tags":2219,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2220,2221,2222],{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"slug":2224,"name":2224,"fn":2225,"description":2226,"org":2227,"tags":2228,"stars":20,"repoUrl":21,"updatedAt":2243},"databricks-migration","migrate Databricks notebooks to Microsoft Fabric","Port Databricks notebooks and jobs to Microsoft Fabric. Provides an exhaustive dbutils to notebookutils substitution table: fs operations (runtime mounts or OneLake Shortcuts), secret scope to Key Vault URL conversion, notebook run and exit, widget replacement with parameter-tagged cells, and library install replacement with Fabric Environments. Covers Unity Catalog three-level namespace reduction to Lakehouse two-level schemas, DBFS path conversion to OneLake, Databricks Jobs to Spark Job Definitions, MLflow tracking URI removal, and Photon to Native Execution Engine substitution. Use when the user wants to: (1) replace dbutils with notebookutils, (2) collapse Unity Catalog namespaces to Lakehouse schemas, (3) convert Databricks Jobs or Delta Live Tables. Triggers: \"migrate from databricks\", \"databricks to fabric\", \"dbutils to notebookutils\", \"dbutils fabric\", \"unity catalog migration\", \"dbfs to onelake\", \"databricks notebook migration\", \"delta live tables fabric\", \"photon native execution\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2229,2232,2235,2236,2237,2240],{"name":2230,"slug":2231,"type":15},"Data Engineering","data-engineering",{"name":2233,"slug":2234,"type":15},"Databricks","databricks",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":2238,"slug":2239,"type":15},"Migration","migration",{"name":2241,"slug":2242,"type":15},"Notebooks","notebooks","2026-07-24T05:41:22.914341",{"slug":2245,"name":2245,"fn":2246,"description":2247,"org":2248,"tags":2249,"stars":20,"repoUrl":21,"updatedAt":2261},"dataflows-authoring-cli","manage Microsoft Fabric Dataflows via CLI","Create, update, delete, and refresh Fabric Dataflows Gen2 with write-side CLI via Fabric APIs. Build mashup.pq and queryMetadata.json, preview candidate M with executeQuery\u002FcustomMashupDocument, bind connections, and configure output destinations. For saved query execution or refresh-status reads, use `dataflows-consumption-cli`. If a request explicitly insists on the Dataflows consumption or read-only path for a mutation, do not route here; let consumption refuse before any separately confirmed authoring handoff. Triggers: \"create dataflow\", \"update dataflow\", \"delete dataflow\", \"trigger dataflow refresh\", \"preview Power Query M\", \"preview before save\", \"customMashupDocument\", \"create Fabric data source connection\", \"create SQL Server source REST\", \"POST \u002Fv1\u002Fconnections\", \"supportedConnectionTypes\", \"passwordReference\", \"bind connection\", \"dataflow output destination\", \"dataflow write to lakehouse\", \"dataflow write to warehouse\", \"dataflow write to ADX\", \"DataDestinations annotation\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2250,2253,2254,2257,2258],{"name":2251,"slug":2252,"type":15},"CLI","cli",{"name":2230,"slug":2231,"type":15},{"name":2255,"slug":2256,"type":15},"Data Pipeline","data-pipeline",{"name":18,"slug":19,"type":15},{"name":2259,"slug":2260,"type":15},"REST API","rest-api","2026-07-31T05:54:59.059517",{"slug":2263,"name":2263,"fn":2264,"description":2265,"org":2266,"tags":2267,"stars":20,"repoUrl":21,"updatedAt":2277},"e2e-medallion-architecture","implement Medallion Architecture in Microsoft Fabric","Plan and implement end-to-end Microsoft Fabric data platforms and Medallion Architecture (Bronze\u002FSilver\u002FGold) lakehouse patterns using PySpark, Delta Lake, Lakehouse\u002FWarehouse items, Fabric Pipelines, and semantic-model handoff. Use when the user wants to: (1) design a Bronze\u002FSilver\u002FGold data lakehouse, (2) plan an ingestion-to-semantic-model Fabric data platform, (3) set up multi-layer workspaces with lakehouses for each tier, (4) build ingestion-to-analytics pipelines with data quality enforcement, (5) orchestrate Bronze-to-Silver-to-Gold flows via notebooks. For natural-language business questions over existing Power BI report data, use `fabriciq`. Triggers: \"medallion architecture\", \"bronze silver gold\", \"lakehouse layers\", \"e2e data pipeline\", \"end-to-end lakehouse\", \"data lakehouse pattern\", \"multi-layer lakehouse\", \"build medallion\", \"setup medallion\", \"end-to-end Fabric data platform\", \"bronze silver gold platform\", \"ingestion semantic model platform\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2268,2271,2272,2273,2274],{"name":2269,"slug":2270,"type":15},"Architecture","architecture",{"name":2230,"slug":2231,"type":15},{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":2275,"slug":2276,"type":15},"PySpark","pyspark","2026-07-31T05:54:57.038396",{"slug":2279,"name":2279,"fn":2280,"description":2281,"org":2282,"tags":2283,"stars":20,"repoUrl":21,"updatedAt":2293},"eventhouse-authoring-cli","manage Fabric Eventhouse and KQL databases","Execute KQL management commands (table management, ingestion, policies, functions, materialized views) against Fabric Eventhouse and KQL Databases via CLI. Use when the user wants to:\n  1. Create or alter KQL tables, columns, or functions\n  2. Ingest data into an Eventhouse (inline, from storage, streaming)\n  3. Configure retention, caching, or partitioning policies\n  4. Create or manage materialized views and update policies\n  5. Manage data mappings for ingestion pipelines\n  6. Deploy KQL schema via scripts\nTriggers: \"create kql table\", \"kql ingestion\", \"ingest into eventhouse\", \"kql function\", \"materialized view\", \"kql retention policy\", \"eventhouse schema\", \"kql authoring\", \"create eventhouse table\", \"kql mapping\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2284,2287,2290,2291,2292],{"name":2285,"slug":2286,"type":15},"Database","database",{"name":2288,"slug":2289,"type":15},"KQL","kql",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:36:51.340409",{"slug":2295,"name":2295,"fn":2296,"description":2297,"org":2298,"tags":2299,"stars":20,"repoUrl":21,"updatedAt":2309},"eventhouse-consumption-cli","query Fabric Eventhouse with KQL","Run KQL queries against Fabric Eventhouse for real-time intelligence and time-series analytics using `az rest` against the Kusto REST API. Covers KQL operators (where, summarize, join, render), Eventhouse schema discovery (.show tables), time-series patterns with bin(), and ingestion monitoring. Use when the user wants to:\n  1. Run read-only KQL queries against an Eventhouse or KQL Database\n  2. Discover Eventhouse table schema and metadata\n  3. Analyse real-time or time-series data with KQL operators\n  4. Monitor ingestion health and active KQL queries\n  5. Export KQL results to JSON\nTriggers: \"kql query\", \"kusto query\", \"eventhouse query\", \"kql database\", \"real-time intelligence\", \"time-series kql\", \"query eventhouse\", \"explore eventhouse\", \"show tables kql\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2300,2303,2304,2305,2306],{"name":2301,"slug":2302,"type":15},"Analytics","analytics",{"name":2288,"slug":2289,"type":15},{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":2307,"slug":2308,"type":15},"Real-Time Intelligence","real-time-intelligence","2026-04-06T18:36:45.018807",{"slug":2311,"name":2311,"fn":2312,"description":2313,"org":2314,"tags":2315,"stars":20,"repoUrl":21,"updatedAt":2322},"eventstream-consumption-cli","monitor Fabric Eventstream ingestion pipelines","List, inspect, and monitor Fabric Eventstream real-time ingestion pipelines via the Items REST API. Discover Eventstreams across workspaces, decode base64 graph topologies tracing event flow from source through operators to destination nodes. Validate connection IDs, wiring, retention policies (1-90 days), and throughput levels. Retrieve Custom Endpoint Kafka credentials via Topology API. **Invoke this skill** to: (1) list Eventstreams, (2) inspect Eventstream topology showing sources and destinations, (3) validate Eventstream configurations, (4) check Eventstream retention policy and throughput level, (5) get connection strings. Triggers: \"list eventstreams\", \"inspect eventstream\", \"describe eventstream topology\", \"eventstream operator nodes\", \"eventstream sources and destinations\", \"eventstream health\", \"eventstream status\", \"eventstream configuration\", \"eventstream retention\", \"eventstream throughput level\", \"eventstream connection string\", \"custom endpoint credentials\", \"check eventstream\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2316,2317,2318,2319],{"name":2251,"slug":2252,"type":15},{"name":2230,"slug":2231,"type":15},{"name":18,"slug":19,"type":15},{"name":2320,"slug":2321,"type":15},"Monitoring","monitoring","2026-07-31T05:55:03.045486",19,{"items":2325,"total":2514},[2326,2348,2369,2386,2401,2418,2429,2442,2457,2472,2489,2502],{"slug":2327,"name":2327,"fn":2328,"description":2329,"org":2330,"tags":2331,"stars":2345,"repoUrl":2346,"updatedAt":2347},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2332,2335,2338,2339,2342],{"name":2333,"slug":2334,"type":15},"Engineering","engineering",{"name":2336,"slug":2337,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":2340,"slug":2341,"type":15},"Project Management","project-management",{"name":2343,"slug":2344,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":2349,"name":2349,"fn":2350,"description":2351,"org":2352,"tags":2353,"stars":2366,"repoUrl":2367,"updatedAt":2368},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2354,2357,2360,2363],{"name":2355,"slug":2356,"type":15},".NET","net",{"name":2358,"slug":2359,"type":15},"Agents","agents",{"name":2361,"slug":2362,"type":15},"Azure","azure",{"name":2364,"slug":2365,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":2370,"name":2370,"fn":2371,"description":2372,"org":2373,"tags":2374,"stars":2366,"repoUrl":2367,"updatedAt":2385},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2375,2376,2377,2380,2383,2384],{"name":2301,"slug":2302,"type":15},{"name":2361,"slug":2362,"type":15},{"name":2378,"slug":2379,"type":15},"Data Analysis","data-analysis",{"name":2381,"slug":2382,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":2320,"slug":2321,"type":15},"2026-05-13T06:14:16.261754",{"slug":2387,"name":2387,"fn":2388,"description":2389,"org":2390,"tags":2391,"stars":2366,"repoUrl":2367,"updatedAt":2400},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2392,2395,2396,2397],{"name":2393,"slug":2394,"type":15},"AI Infrastructure","ai-infrastructure",{"name":2361,"slug":2362,"type":15},{"name":2381,"slug":2382,"type":15},{"name":2398,"slug":2399,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":2402,"name":2402,"fn":2403,"description":2404,"org":2405,"tags":2406,"stars":2366,"repoUrl":2367,"updatedAt":2417},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2407,2408,2411,2412,2413,2416],{"name":2361,"slug":2362,"type":15},{"name":2409,"slug":2410,"type":15},"Compliance","compliance",{"name":2364,"slug":2365,"type":15},{"name":9,"slug":8,"type":15},{"name":2414,"slug":2415,"type":15},"Python","python",{"name":2398,"slug":2399,"type":15},"2026-07-18T05:14:23.017504",{"slug":2419,"name":2419,"fn":2420,"description":2421,"org":2422,"tags":2423,"stars":2366,"repoUrl":2367,"updatedAt":2428},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2424,2425,2426,2427],{"name":2301,"slug":2302,"type":15},{"name":2361,"slug":2362,"type":15},{"name":2364,"slug":2365,"type":15},{"name":2414,"slug":2415,"type":15},"2026-07-31T05:54:29.068751",{"slug":2430,"name":2430,"fn":2431,"description":2432,"org":2433,"tags":2434,"stars":2366,"repoUrl":2367,"updatedAt":2441},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2435,2438,2439,2440],{"name":2436,"slug":2437,"type":15},"API Development","api-development",{"name":2361,"slug":2362,"type":15},{"name":9,"slug":8,"type":15},{"name":2414,"slug":2415,"type":15},"2026-07-18T05:14:16.988376",{"slug":2443,"name":2443,"fn":2444,"description":2445,"org":2446,"tags":2447,"stars":2366,"repoUrl":2367,"updatedAt":2456},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2448,2449,2452,2455],{"name":2361,"slug":2362,"type":15},{"name":2450,"slug":2451,"type":15},"Computer Vision","computer-vision",{"name":2453,"slug":2454,"type":15},"Images","images",{"name":2414,"slug":2415,"type":15},"2026-07-18T05:14:18.007737",{"slug":2458,"name":2458,"fn":2459,"description":2460,"org":2461,"tags":2462,"stars":2366,"repoUrl":2367,"updatedAt":2471},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2463,2464,2467,2470],{"name":2361,"slug":2362,"type":15},{"name":2465,"slug":2466,"type":15},"Configuration","configuration",{"name":2468,"slug":2469,"type":15},"Feature Flags","feature-flags",{"name":2381,"slug":2382,"type":15},"2026-07-03T16:32:01.278468",{"slug":2473,"name":2473,"fn":2474,"description":2475,"org":2476,"tags":2477,"stars":2366,"repoUrl":2367,"updatedAt":2488},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2478,2481,2482,2485],{"name":2479,"slug":2480,"type":15},"Cosmos DB","cosmos-db",{"name":2285,"slug":2286,"type":15},{"name":2483,"slug":2484,"type":15},"NoSQL","nosql",{"name":2486,"slug":2487,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":2490,"name":2490,"fn":2474,"description":2491,"org":2492,"tags":2493,"stars":2366,"repoUrl":2367,"updatedAt":2501},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2494,2495,2496,2497,2498],{"name":2479,"slug":2480,"type":15},{"name":2285,"slug":2286,"type":15},{"name":9,"slug":8,"type":15},{"name":2483,"slug":2484,"type":15},{"name":2499,"slug":2500,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":2503,"name":2503,"fn":2504,"description":2505,"org":2506,"tags":2507,"stars":2366,"repoUrl":2367,"updatedAt":2513},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2508,2509,2510,2511,2512],{"name":2361,"slug":2362,"type":15},{"name":2479,"slug":2480,"type":15},{"name":2285,"slug":2286,"type":15},{"name":2381,"slug":2382,"type":15},{"name":2483,"slug":2484,"type":15},"2026-05-13T06:14:17.582229",267]