- Paginated console menu & top-down interactive selection:
scripts/lib/Common.ps1: ImplementedShow-ConsoleMenufeaturing interactive pagination (15 items per page), keyword filtering (/keywordorf keyword), page navigation ([n]ext/[p]rev), range selection (1-3), bulk recommendation shortcuts (rec/r), and persistent accumulation across pages.scripts/lib/Common.ps1: ConfiguredShow-FzfPickerwith--layout=reverse,--height=80%,--border,--info=inline, and--cycle, ensuring natural top-down reading order with recommended items at the top.scripts/lib/Common.ps1: AddedShow-ItemPickeras a unified DRY dispatcher consolidatingShow-OGV,Show-FzfPicker, andShow-ConsoleMenu, eliminating over 300 lines of duplicate menu code acrossscripts/init-user.ps1andscripts/init-repo.ps1.
- Console-first default &
-Guideprecation:scripts/init-user.ps1,scripts/init-repo.ps1,configure.ps1: Defaulted interactive resource selection to cross-platform terminal selection (fzfor numbered console menu) across all operating systems including Windows.- Added
-Guiswitch to opt into the WindowsOut-GridViewtable picker. - Formally marked
-GuiandShow-OGVas deprecated with console notices and documentation annotations ahead of removal in v3.0 (preparation for standalone cross-platform Node / TypeScript CLI). scripts/lib/Config.ps1: Addedpicker = 'console'to default configuration, supporting personal override to"picker": "gui"in~/.awesome-copilot/config.json.
-
Conditional HTTP validation & offline catalogue fallback:
scripts/sync-awesome-copilot.ps1: Added HTTP conditional validation headers (If-None-MatchforETagandIf-Modified-SinceforLast-Modified) when fetching upstreamllms.txt. If upstream is unchanged, the server returns HTTP 304 Not Modified; the script reuses cached catalogue data in <1s with 0 bytes transferred.- Offline fallback: Saves raw
llms.txtto~/.awesome-copilot/llms.txtand gracefully falls back to local cache if network connectivity is degraded or unavailable.
-
Shared Common Library (
scripts/lib/Common.ps1):- Created a shared foundational library unifying core primitives across scripts:
Assert-PathWithin(path traversal guard),Get-DirHash(SHA-256 tree hashing),Write-CopilotLogandLog(WCAG-compliant timestamped logging),Resolve-PromptsDirectoryandResolve-SkillsDirectory(cross-platform path resolution),Get-FrontmatterDescription/Get-Description(markdown metadata extraction), andShow-OGV/Show-FzfPicker(interactive GUI and CLI selection).
- Created a shared foundational library unifying core primitives across scripts:
-
Security hardening & path traversal containment (
Assert-PathWithin):scripts/lib/Config.ps1,scripts/init-repo.ps1,scripts/init-user.ps1,scripts/update-repo.ps1,scripts/update-user.ps1: Added canonical path validation functionAssert-PathWithin. Enforces that every file copy, directory installation, and removal target strictly resides within authorized base directories (.github/for repository targets,%APPDATA%\Code\User\prompts\and~/.copilot/skills/for user targets).scripts/sync-awesome-copilot.ps1: Added path sanitization to thellms.txtcatalogue parser, rejecting items containing..or path navigation tokens and verifying that local paths remain within the destination root.- Strict error handling: Enforced
$ErrorActionPreference = 'Stop'acrossscripts/lib/Config.ps1andscripts/lib/AssetSchema.ps1.
-
Accessibility & terminal contrast enhancements:
- Console contrast: Replaced
DarkGraysecondary text and prompts withGrayacrossconfigure.ps1,scripts/init-repo.ps1, andscripts/init-user.ps1, ensuring WCAG AA contrast compliance across diverse dark terminal themes. - Multi-modal status indication: Replaced low-contrast terminal colors (
DarkCyan,DarkYellow,DarkMagenta) in item lists with high-contrast tones (Gray,White,Magenta,Yellow) paired with text badges ([★],[*],[↑],[~],[U],[!]), guaranteeing full legibility for colorblind and monochrome terminal users. - Markdown accessibility: Fixed heading hierarchy and pseudo-heading emphasis violations in
CHANGELOG.mdandTODO.md, ensuring full compliance withmarkdownlintand screen reader accessibility standards.
- Console contrast: Replaced
-
Vendor prefix isolation in
Measure-ItemRelevance:scripts/init-repo.ps1: Added vendor-prefix blocklist (dataverse,salesforce,shopify,pcf,arize,neon, etc.) to prevent vendor-specific packages (e.g.dataverse-python-*) from receiving name, title, or description matches against generic language/stack keywords unless that vendor prefix was detected in repository signals.
-
Cross-platform user prompt directory auto-detection:
scripts/init-repo.ps1,scripts/init-user.ps1,scripts/update-user.ps1: Default prompts directory now detects$IsMacOS(~/Library/Application Support/Code/User/prompts),$IsLinux(~/.config/Code/User/promptsrespecting$env:XDG_CONFIG_HOME), and Windows fallback (%APPDATA%\Code\User\prompts).
-
Pre-computed
requiresSetupmetadata and in-memory fast path:scripts/sync-awesome-copilot.ps1: Inspects files at sync time and stores"requiresSetup": true|falsedirectly in~/.awesome-copilot/catalogue.json.scripts/init-repo.ps1&scripts/init-user.ps1: Catalogue builders (Build-FlatCatalogue,Build-DirCatalogue,Build-UserCatalogue,Build-UserSkillsCatalogue) now look upRequiresSetupand curated descriptions from memory, eliminating disk reads across hundreds of items.scripts/init-repo.ps1: Removed disk fallback loop fromMeasure-ItemRelevancefor 100% in-memory scoring.
-
Refined user-level recommendation scoring:
scripts/init-user.ps1:Measure-GeneralRelevancenow acceptsTitleandDescription, evaluating technology negative filters against curated titles and positive engineering methodology signals against descriptions.
-
Cross-platform interactive terminal picker:
scripts/init-repo.ps1&scripts/init-user.ps1: AddedShow-FzfPickersupporting fuzzy multi-select in terminal whenfzfis installed on PATH. Enhanced console menu withrec/recommended/rshortcut to instantly select all recommended items, and addedallsupport to removal menus.
-
POSIX
/bin/shbootstrap wrapper:run.sh: Lightweight POSIX shell wrapper for macOS and Linux that validatespwshinstallation, displays actionable platform-specific installation instructions if missing, and dispatches subcommands (repo,user,update,sync,configure) transparently.
-
Persistent configuration manager:
scripts/lib/Config.ps1: Persistent configuration manager reading and writing~/.awesome-copilot/config.json.configure.ps1: Added-ShowConfigparameter and wired default categories and scope from configuration.
-
Canonical Asset Schema:
schemas/canonical-asset.schema.json: Formal JSON Schema for canonical AI asset definitions across repositories and target ecosystems.scripts/lib/AssetSchema.ps1: PowerShell constructor (New-CanonicalAsset) and converter (ConvertTo-CanonicalAsset) transforming raw catalogue items into canonical assets.
-
Hybrid sync & curated
llms.txtcatalogue indexing:scripts/sync-awesome-copilot.ps1: Fetches and indexes the officialllms.txtcatalogue (https://awesome-copilot.github.com/llms.txt), generating a structured metadata cache (~/.awesome-copilot/catalogue.json) containing human-readable titles, official descriptions, and direct URLs for all 842 curated resources.scripts/init-repo.ps1&scripts/init-user.ps1: Selection UI displays clean, human-readable titles alongside resource identifiers and official descriptions.- Enhanced recommendation scoring:
Measure-ItemRelevancescores detected repo tech keywords against curated titles and descriptions.
- DRY & KISS codebase refactoring:
configure.ps1,scripts/init-repo.ps1,scripts/init-user.ps1,scripts/update-repo.ps1,scripts/update-user.ps1,scripts/sync-awesome-copilot.ps1, andscripts/lib/Config.ps1: Dot-sourcescripts/lib/Common.ps1, eliminating duplicate implementations of logging, hash calculation, path assertions, and interactive pickers. Reduced boilerplate across the repository while preserving full backward compatibility.
- Streamlined core categories (
agents,instructions,skills):scripts/sync-awesome-copilot.ps1: Default$Categoriesupdated to'agents,instructions,skills'. Drops unnecessary sparse checkout overhead from non-Copilot customization categories (such as GitHub agentic workflows and SDK cookbook recipes).scripts/init-repo.ps1: Defaults to presenting pickers for the 3 core Copilot primitives (agents,instructions,skills). Advanced/distribution categories (hooks,plugins,workflows) remain accessible by passing-Categoryor explicit parameter switches.scripts/sync-awesome-copilot.ps1: Mass-removal threshold calculation updated to compare removals only against items in the active$CategoriesList, preventing false-positive breaking-change warnings when category selections are narrowed.configure.ps1: Prompts and parameter documentation updated to reflect the 3 core Copilot primitives.README.md&llms.txt: Updated cache structure, category tables, and descriptions to reflect the hybrid sync model.
- Standardized repository configurations (.editorconfig, Prettier)
- Automated CSpell dictionaries and validation workflows
- Automated GitHub Release workflows
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Plugin support — full lifecycle management for the new
plugins/category ingithub/awesome-copilot. Plugins are curated bundles (agents + skills +plugin.json) maintained as named subdirectories.scripts/sync-awesome-copilot.ps1:pluginsadded to the default$Categoriessparse-checkout list.scripts/init-repo.ps1:-Plugins/-SkipPluginsparams;Build-PluginCataloguefunction;#region Pluginsinstall/uninstall block. Subscription tracking usestype='plugin'with acomponentsarray (agent,skill,pluginJson). Files distributed to: agents →.github/agents/, skills →.github/skills/, manifest →.github/plugin/<name>/plugin.json(namespaced).ConvertTo-Json -Depthbumped 5 → 8 throughout.scripts/update-repo.ps1:plugintype branches in stale-check and apply-updates loops; depth bump.README.md: Plugins row added to "What goes where" table; description and local cache structure updated.
- Plugin recommendation scoring —
Build-PluginCataloguenow parses each plugin'splugin.jsonkeywordsarray and extracts dash-segment tokens from bundled agent/skill names, storing them asExtraKeywords.Measure-ItemRelevancegains-ExtraKeywords; each match scores +2 (same weight as a name-segment hit).Select-ItemsthreadsExtraKeywordsthrough when present. Plugins likeazure-cloud-developmentare correctly starred ★ on Azure/IaC repos even when the plugin name alone yields insufficient signal. Non-plugin categories are unaffected. configure.ps1 -Update— runs sync + update scripts only (no interactive pickers). Works with-Scope(repo/user/both),-Force,-DryRun, and-Category.configure.ps1 -Force— passes-Forcetoupdate-user.ps1/update-repo.ps1, suppressing the interactive confirmation prompt. Useful for scripted/CI runs.-Categoryparam (all five scripts) — comma-separated filter controlling which resource types are processed. Examples:configure.ps1 -Update -Category "agents",init-repo.ps1 -Category "hooks,workflows",update-user.ps1 -Category "skills". Translates to internal-Skip*flags ininit-repo.ps1andinit-user.ps1; filters subscription list before stale-check loop in the update scripts.
configure.ps1:-Forceand-Categorythreaded through toupdate-user.ps1andupdate-repo.ps1in both the auto-update pre-check (Steps 1.5 / 2) and the new-Updateshortcut.configure.ps1:-Categorythreaded through toinit-user.ps1andinit-repo.ps1during install and uninstall flows.- Alphabetical category ordering — all category lists, operation sequences, and text outputs now consistently use the order:
agents, hooks, instructions, plugins, skills, workflows. Affects picker execution order ininit-repo.ps1, default$Categoriesinsync-awesome-copilot.ps1, prompt strings inconfigure.ps1, the "What goes where" table inREADME.md, and every category mention across all docs. .gitignore: Added.github/plugin/alongside the other awesome-copilot-sourced resource folders (agents, hooks, instructions, skills, workflows) so plugin manifests installed into this repo's own.github/are never accidentally committed.
configure.ps1:-Uninstall repo|user|both— replaces the two separate-Uninstall(switch) and-UninstallUser(switch) parameters with a single[ValidateSet]string parameter.reporemoves.github/resources for the current repo,userremoves user-level resources (%APPDATA%\Code\User\prompts\+~/.copilot/skills/),bothdoes both in one pass. Tab-completes in PowerShell. The old bare-Uninstall(no value) form is a breaking change — use-Uninstall repogoing forward.scripts/init-user.ps1:-Bootstrapswitch — scans all three install locations against the local cache and writesuser-subscriptions.jsonentries for every already-installed file/directory that has no existing subscription record. No files are copied or modified; only the manifest is updated. Supports-DryRun(reports count of what would be registered). Exits immediately after registering — does not proceed to the interactive pickers. Use this when the manifest is missing but resources are already on disk (e.g. installed before v2.0.0, or via the old publish-global.ps1 workflow).configure.ps1: Auto-bootstrap on missing manifest — Step 1.5 now detects whenuser-subscriptions.jsonis absent but cache-origin files are installed at user level. When this condition is met it automatically callsinit-user.ps1 -Bootstrap(or-Bootstrap -DryRunwhen running with-DryRun) before proceeding to the standard pickers. Previously, everyconfigure.ps1run would silently skip the update-user step and default to N on the prompt, leaving installed resources permanently untracked.
-
configure.ps1:-UninstallUserswitch removed — replaced by-Uninstall user. Update any scripts or aliases that used-UninstallUser. -
configure.ps1: Step 1.5 label updated from"User-level agents (available in all repos)"to"User-level resources (agents, instructions & skills — available in all repos)". -
configure.ps1: Y/N prompt text updated from"Add user-level agents to VS Code?"to"Add/update user-level resources (agents, instructions & skills)?"with a second line"These are available in ALL repos — no .github/ needed.". Reflects that agents, instructions, and skills are all managed by this step since v2.0.0. -
scripts/init-user.ps1: Extended$GeneralPositiveSegments— new general-purpose agent/instruction families now receive ★ recommendations:implementer→gem-implementer,polyglot-test-implementerengineer→software-engineer-agent-v1,prompt-engineerdesigner→gem-designerux→se-ux-ui-designer(now scores 4 viaux+designer)evaluator→technical-content-evaluatorinvestigator→devtools-regression-investigator,frontend-performance-investigator(now scores 4)documenter→project-documentermodernization→modernizationgitops→se-gitops-ci-specialistsafety→agent-safety.instructions.mdlocalization→localization.instructions.mdmemory→memory-bank.instructions.md
-
scripts/init-user.ps1: Extended$TechSpecificSegments— new vendor/platform names added to prevent incorrect ★ recommendations:mobile— blocks all*-mobileagents (gem-designer-mobile,gem-implementer-mobile,gem-mobile-tester)foundry— blockscustom-agent-foundry(Azure AI Foundry)defender— blocksdefender-scout-kql(Microsoft Defender)kql— blocks KQL-specific agents (Kusto Query Language)terratest— blocksterratest-module-testing(Terraform testing framework)kubestellar— blockskubestellar-console(Kubernetes multi-cluster federation)monday— blocksmonday-bug-fixer(monday.com)aem— blocksaem-frontend-specialist(Adobe Experience Manager)lingodotdev— blockslingodotdev-i18n(Lingo.dev translation platform)context7— blockscontext7(Context7 MCP documentation server)
-
scripts/init-repo.ps1: ExtendedDetect-RepoStackpackage.json detection — three additional frontend frameworks now auto-detected frompackage.jsondependencies and scored for repo-level recommendations:nuxt— Nuxt.js (Vue meta-framework)electron— Electron (desktop apps)ember— Ember.js (matched on^emberdep prefix)
configure.ps1 -Uninstall repo/user/both—[ValidateSet]enforced;'both-things'rejected at parameter binding.configure.ps1 -Uninstall both -DryRun—$SkipSync = $trueonly; both user (init-user -Uninstall) and repo (init-repo -Uninstall) steps fire.configure.ps1 -Uninstall repo -DryRun—$SkipUser = $true; only repo step fires.configure.ps1 -Uninstall user -DryRun—$SkipInit = $true; only user step fires.init-user.ps1 -Bootstrap -DryRun— correctly reportsWould register 148 untracked installation(s)against disk state (76 agents, 17 instructions, 55 skills).init-user.ps1 -Bootstrap— wroteuser-subscriptions.jsonwith exactly 148 entries; exit code 0.- Re-running
-Bootstrapafter manifest exists — reportsnothing to register; exit code 0; manifest unchanged. - Scored all 203 agents against updated segment lists. Net change: 12 agents newly starred (from 72 to 84 starred), 0 regressions (no previously-starred agent lost its star).
- Newly starred agents:
devtools-regression-investigator,gem-designer,gem-implementer,modernization,polyglot-test-implementer(score ↑ to 4),project-documenter,prompt-engineer(score ↑ to 4),se-gitops-ci-specialist,se-ux-ui-designer(score ↑ to 4),software-engineer-agent-v1,technical-content-evaluator,frontend-performance-investigator(score ↑ to 4). - Confirmed all 10 new tech-specific segments correctly block their target agents.
scripts/sync-awesome-copilot.ps1: Structural change detection — after each non-first-run pull, verifies every previously-synced category folder still exists on disk. LogsSTRUCTURAL CHANGE DETECTED(with missing folder list) and exits non-zero if any are absent. Catches upstream category renames or removals before they silently break subscriptions.scripts/sync-awesome-copilot.ps1: Mass-removal threshold — if ≥ 25 % of all previously tracked files disappear in a single pull (min 10 files prior), logsMASS-REMOVAL DETECTEDwith the actual ratio and exits before writing the new manifest. Guards against large upstream restructures being silently applied.scripts/sync-awesome-copilot.ps1:-Forceswitch — bypasses both safety checks when an upstream restructure is intentional.scripts/init-user.ps1: Instructions support — new-Instructions/-SkipInstructionsparameters; interactive picker installs.instructions.mdfiles to%APPDATA%\Code\User\prompts\. Only general-purpose (tech-agnostic) items are starred ★ using the sameMeasure-GeneralRelevancescoring as agents. Extended$GeneralPositiveSegmentswithrefactor,remember,accessibility,a11y,performance,owasp.scripts/init-user.ps1: Skills support — new-Skills/-SkipSkills/-SkillsDirparameters; interactive picker installs skill directories to~/.copilot/skills/. NewBuild-UserSkillsCatalogue,Get-DirHash,Install-Directory,Remove-Directoryhelpers. Full install/update/remove lifecycle tracked inuser-subscriptions.jsonwithtype: directoryentries.scripts/init-user.ps1: Trust warning — displayed before the install pickers (not shown on-Uninstallor-DryRun). Reminds the user that resources written to%APPDATA%\Code\User\prompts\and~/.copilot/skills/are loaded by Copilot in all VS Code sessions.scripts/update-user.ps1:-SkillsDirparameter;Get-DirHashhelper; destination routing by subscriptiontypefield (directory→$SkillsDir,file→$PromptsDir); directory-type subscriptions mirrored file-by-file on update.scripts/init-repo.ps1:[U]status indicator — agents and instructions now show[U]in the OGV Status column and console menu when the item is already installed at user level ($UserPromptsDir). New-UserPromptsDirparameter (defaults to%APPDATA%\Code\User\prompts).[U]is additive — combines with[*],[↑],[~],[!].
scripts/init-user.ps1: Addedpower,flowstudio, andpowershellto$TechSpecificSegments.power-bi,power-platform,power-apps,power-automate,flowstudio, andpowershell-specific resources no longer receive a ★ recommendation in user-level pickers.scripts/init-repo.ps1: Renamed$input→$rawInputinSelect-ItemsandSelect-ToRemoveconsole-menu fallbacks.$inputis PowerShell's automatic pipeline enumerator variable; shadowing it risks silent data loss in pipeline contexts.scripts/sync-awesome-copilot.ps1: Changed$Global:LogFileto$script:LogFile. Global scope leaked the log path into the session, risking log corruption if two sync runs overlapped or another script reused the variable name.
scripts/init-user.ps1: header, validation log, and summary updated to reflect three resource categories and two destination directories.README.md: updatedinit-user.ps1section with three-location table, new parameters, and usage examples; updatedupdate-user.ps1section with-SkillsDirparam; added[U]entry and clarifying tip to the symbol table.
- Shared helper duplication —
Log,Show-OGV,Get-DirHash,Get-Description,Install-File,Remove-File,Test-RequiresSetup, and the subscription upsert/remove pattern are defined independently in multiple scripts (init-repo.ps1,init-user.ps1,update-repo.ps1,update-user.ps1). Planned fix: extract to a dot-sourcedscripts/Common.ps1in a follow-up PR.
sync-awesome-copilot.ps1 -Plan— exits cleanly; structural/mass-removal checks correctly bypass in plan mode.- Structural check verified by temporarily renaming
agents/from the cache:STRUCTURAL CHANGE DETECTEDfires with correct missing-folder output. - Mass-removal check verified by inflating manifest item count 5×:
MASS-REMOVAL DETECTEDfires at 80% removal ratio;-Forcebypasses and restores a clean manifest. init-user.ps1 -DryRun -Agents gem-reviewer -Instructions security-and-owasp -Skills refactor— all three categories resolve; agent reports unchanged (already installed), instruction and skill report would-add.init-user.ps1 -DryRun -Uninstall -SkipAgents -SkipInstructions— correctly reports no script-managed skills to remove.update-user.ps1 -DryRun— reads 67 existing agent subscriptions;Skills dirshown in header; all report current.[U]flag: inline script confirms 67 of 203 agents haveUserInstalled = true, matching existing user subscriptions; 4 haveAlreadyInstalled = true(repo-installed).power-bi,power-platform,flowstudioconfirmed blocked (return 0 fromMeasure-GeneralRelevance);powershellalso confirmed blocked.init-repo.ps1 -DryRun—$rawInputrename verified; no pipeline variable collision.
configure.ps1: use$PSScriptRootto locate thescripts/folder (replaces$MyInvocation.MyCommand.Pathwhich behaves differently when dot-sourced)scripts/sync-awesome-copilot.ps1: replace manual SHA256 with built-inGet-FileHash— cleaner and avoids loading entire file into memoryscripts/publish-global.ps1: emit aWARNlog when VS Codesettings.jsonis not found (was a silent no-op); user is directed to open VS Code once to generate the file
configure.ps1:-InstallTask/-UninstallTasknow automatically skip theinit-repoprompt (validation moved before Step 1 so the flag takes effect)configure.ps1: prompts to overwrite when the scheduled task already exists, instead of throwing a hard errorscripts/install-scheduled-task.ps1: added-WorkingDirectoryto both scheduled task actions (was defaulting toC:\Windows\System32, causing a permissions error creating thelogs/directory)scripts/sync-awesome-copilot.ps1: replaced relativelogs/path with$PSScriptRoot/logs/so logs always land inscripts/logs/regardless of working directoryscripts/install-scheduled-task.ps1: updated task description (removed stale "combine" wording)scripts/publish-global.ps1: fixed named-profile example path (agents\→prompts\)README.md: corrected default interval (6h → 4h), log paths, authentication section, and custom-repo instructions.github/copilot-instructions.md: removed stale GitHub API /GITHUB_TOKENreferences; updated cache structure
scripts/sync-awesome-copilot.ps1: Rewritten — replaced GitHub API + per-file HTTP download approach withgit sparse-checkout. First run clonesgithub/awesome-copilotshallowly with only the requested categories; subsequent runs rungit pullfor near-instant delta updates. Dramatically faster (single bulk transfer vs 700+ individual HTTP requests) and removes GitHub API rate-limit concerns entirely.- Prefers
gh(GitHub CLI) for automatic auth; falls back togit - New
-GitTool auto|gh|gitparameter to override tool selection - Removed parameters:
-NoDelete,-DiffOnly,-SkipBackup,-BackupRetention(git handles all of these natively) - Migrates automatically from the old API-based cache (renames non-git
~/.awesome-copilot/to~/.awesome-copilot-backup-<date>before cloning) manifest.jsonstill written (from local file scan) for backward compatibility withpublish-global.ps1andconfigure.ps1
- Prefers
README.md: documentgh/gitrequirement; update sync section to reflect git-based approach
configure.ps1— interactive orchestrator that chains sync → publish-global → init-repo; each step independently skippable via-SkipSync,-SkipPublish,-SkipInit;-DryRunpasses through to all child scripts; shows last sync timestamp from cache manifest before runninginit-repo.ps1: added Agents as a fourth interactive category (installs to.github/agents/)init-repo.ps1:Detect-RepoStack— auto-detects language/framework from file signals and marks relevant items with ★ in the pickerinit-repo.ps1:Prompt-RepoIntent— interactive fallback for new/empty repos; asks language, project type, and concernsinit-repo.ps1:-- none / skip --sentinel row in every OGV picker so clicking OK with no intentional selection installs nothingpublish-global.ps1: auto-configureschat.useAgentSkillsandchat.agentSkillsLocationsin VS Codesettings.jsonwhen skills are published.github/copilot-instructions.md: Copilot instructions for this repository covering script workflow, conventions, and contributing guidelines
normalize-copilot-folders.ps1:Split-Path -LeafParent→Split-Path -Parent(-LeafParentis not a valid parameter and would throw at runtime)install-scheduled-task.ps1: removed-Quietfrompublish-global.ps1invocation (publish-global.ps1has no-Quietparameter; would throw on scheduled runs)init-repo.ps1:$Items.IndexOf($_)→[Array]::IndexOf($Items, $_)(System.Object[]has no instanceIndexOfmethod; affected console-menu fallback path)init-repo.ps1: fixed OGV column name[*] Installed→Installed(special characters caused WPF binding errors at runtime)init-repo.ps1: fixedreturn if (...)runtime error inInstall-File— replaced with explicitif/elsebranchespublish-global.ps1: corrected agents target path to%APPDATA%\Code\User\prompts\(was incorrectly set toagents\)sync-awesome-copilot.ps1: changed$ErrorActionPreferencefromInquiretoStop—Inquirecaused the script to hang waiting for interactive input when run as a scheduled task
publish-global.ps1: updated inline comment from "CCA" to "VS Code Agent mode / Copilot CLI"README.md: corrected all-Intervalreferences to-Every; fixed-ProfileName→-ProfileRoot/-AllProfiles; updated agents path to%APPDATA%\Code\User\prompts\; updatedinit-repo.ps1section to reflect agents category and smart detection; fixed custom-AgentsTargetexample path.github/copilot-instructions.md: corrected agents path from%APPDATA%\Code\User\agents\to%APPDATA%\Code\User\prompts\init-repo.ps1: removed skills from per-repo initialisation; skills are globally available viapublish-global.ps1(~/.copilot/skills/) and users should reference the source directly at github/awesome-copilot rather than committing point-in-time copies to repos
publish-global.ps1— publishes agents to the VS Code user agents folder (via junction so sync updates are reflected immediately) and skills to~/.copilot/skills/; supports-DryRun,-SkipAgents,-SkipSkills,-AgentsTarget,-SkillsTargetinit-repo.ps1— interactive script to initialise a repo with per-repo resources (instructions, hooks, workflows); uses Out-GridView on Windows with a numbered console-menu fallback; supports-RepoPath,-DryRun,-SkipInstructions,-SkipHooks,-SkipWorkflows
- Updated default sync categories to match current awesome-copilot repository structure:
- Added:
agents,workflows,hooks,skills - Removed:
chatmodes,prompts(no longer exist in awesome-copilot)
- Added:
- Added recursive directory traversal in
sync-awesome-copilot.ps1to support subdirectory-based categories (skills/,hooks/,plugins/) - Extended file extension filter to include
.shfiles (required for hooks to function — each hook ships shell scripts alongside itshooks.json) - Updated
combine-and-publish-prompts.ps1categories fromchatmodes/instructions/promptstoagents/instructions/workflows; added deprecation notice at top (superseded bypublish-global.ps1+init-repo.ps1); kept for backwards compatibility - Updated
normalize-copilot-folders.ps1to classify*.agent.md→agents/and ensureagents/directory is created on normalize runs - Updated
install-scheduled-task.ps1: default categories nowagents,instructions,workflows,hooks,skills;-IncludeCollectionsreplaced by-IncludePlugins;-SkipCombinereplaced by-SkipPublishGlobal; scheduled actions now runpublish-global.ps1after sync
-
normalize-copilot-folders.ps1— removed (legacy, superseded by junction-based agent publishing andinit-repo.ps1) -
plugins/andcookbook/are available but opt-in via-IncludePluginsdue to their size -
Hooks are synced as complete packages (README.md + hooks.json + .sh scripts) preserving their directory structure
-
Design rationale: agents and skills are global (agents available in all VS Code workspaces; skills loaded on-demand); instructions/hooks/workflows are per-repo opt-in via
init-repo.ps1to avoid conflicts between contradicting instruction files
- Initial release of VS Code Copilot Resource Sync Scripts
sync-awesome-copilot.ps1- Sync resources from GitHub awesome-copilot repositorycombine-and-publish-prompts.ps1- Combine and publish resources to VS Codepublish-to-vscode-profile.ps1- Publish resources to VS Code profilesnormalize-copilot-folders.ps1- Clean up and organize resource filesinstall-scheduled-task.ps1- Create automated sync taskuninstall-scheduled-task.ps1- Remove scheduled task- GitHub API integration with optional GITHUB_TOKEN support
- SHA256 hash-based change detection for efficient syncing
- Automatic junction/symlink creation with copy fallback
- Manifest-based sync state tracking
- Comprehensive logging system
- Support for multiple VS Code profiles
- Portable paths using environment variables ($HOME, $env:APPDATA)
- Preserves user-created custom files in combined directory
- Incremental updates (only downloads changed files)
- Customizable sync intervals for scheduled task
- Automatic categorization based on file suffixes
- Detailed sync logs with timestamps
- No hardcoded credentials or personal information
- Optional environment variable for GitHub token
- All sensitive data handled via environment variables
Note: Version numbers follow Semantic Versioning:
- MAJOR version for incompatible API changes
- MINOR version for new functionality in a backwards compatible manner
- PATCH version for backwards compatible bug fixes