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.
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.
-
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. -
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)
- 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