Summary
The extension loader does not detect extensions that are symlinked into .github/extensions/. Only real (copied) directories are discovered.
Steps to Reproduce
- Have a canvas extension in a repo directory (e.g.
extensions/marp-viewer/) with dependencies installed (node_modules present) — see cedricvidal/copilot-extensions for the Marp Viewer canvas extension used to reproduce this
- Create a symlink:
ln -s ../../extensions/marp-viewer .github/extensions/marp-viewer
- Reload extensions → 0 extensions found
- Copy the same directory instead:
cp -r extensions/marp-viewer .github/extensions/marp-viewer
- Reload extensions → 1 extension found and running
Expected Behavior
Symlinked extension directories in .github/extensions/ (and ~/.copilot/extensions/) should be followed and loaded like regular directories.
Why This Matters
- Development workflow: Symlinks are useful when the extension source lives elsewhere in the repo (or in a monorepo) and you don't want to duplicate files. The current behavior forces a copy, which makes iterating on extensions harder.
- Third-party extension management: Supporting symlinks would enable tooling similar to
npx skills to manage extensions by symlinking them into the extensions directory, rather than copying or inlining them.
Environment
- macOS (Darwin)
- GitHub Copilot App (technical preview)
Summary
The extension loader does not detect extensions that are symlinked into
.github/extensions/. Only real (copied) directories are discovered.Steps to Reproduce
extensions/marp-viewer/) with dependencies installed (node_modulespresent) — see cedricvidal/copilot-extensions for the Marp Viewer canvas extension used to reproduce thisln -s ../../extensions/marp-viewer .github/extensions/marp-viewercp -r extensions/marp-viewer .github/extensions/marp-viewerExpected Behavior
Symlinked extension directories in
.github/extensions/(and~/.copilot/extensions/) should be followed and loaded like regular directories.Why This Matters
npx skillsto manage extensions by symlinking them into the extensions directory, rather than copying or inlining them.Environment