github / github/app

Extension loader does not follow symlinks in .github/extensions/

Open
#868 0 comments 0 reactions 0 assignees View on GitHub
Bugs
Dominant language
No language data
Stars
2.1k
Forks
153
PR merge metrics
No merged PRs in 30d

Description

## Summary

The extension loader does not detect extensions that are symlinked into `.github/extensions/`. Only real (copied) directories are discovered.

## Steps to Reproduce

1. Have a canvas extension in a repo directory (e.g. `extensions/marp-viewer/`) with dependencies installed (`node_modules` present) — see [cedricvidal/copilot-extensions](https://github.com/cedricvidal/copilot-extensions/) for the Marp Viewer canvas extension used to reproduce this
2. Create a symlink: `ln -s ../../extensions/marp-viewer .github/extensions/marp-viewer`
3. Reload extensions → **0 extensions found**
4. Copy the same directory instead: `cp -r extensions/marp-viewer .github/extensions/marp-viewer`
5. 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)

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the issue with a symlink in .github/extensions/ and reload the extensions; compare it with a copied directory, then check the loader's handling of both .github/extensions/ and ~/.copilot/extensions/. Done means symlinked extension directories are discovered and run like regular directories.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, node.js
Domain
desktop, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.