Describe the bug
Plugins cannot package or distribute Copilot CLI \�xtension.mjs\ / \joinSession()\ extensions. The official plugin schema (\plugin.json) does not include an \�xtensions\ field, and \copilot plugin install\ stores files under \installed-plugins/\ which does not appear to participate in extension discovery.
Extensions are only discovered from ~/.copilot/extensions//extension.mjs\ and .github/extensions//extension.mjs, per the SDK docs.
This means plugin authors who build \joinSession()\ extensions (with tools, hooks, lifecycle events) cannot distribute them through the plugin system — users must manually copy files to the extensions directory.
Affected version
1.0.37 (also tested on 1.0.26)
Steps to reproduce the behavior
- Create a plugin with a \plugin.json\ and an \�xtension.mjs\ that exports \joinSession()\ from @github/copilot-sdk/extension\
- Install via \copilot plugin install /\
- Plugin installs successfully — files copied to ~/.copilot/installed-plugins/\
- Start a new Copilot CLI session (restart terminal)
- Tools registered by the extension do not appear
- Hooks (e.g., \onSessionStart) do not fire
Expected behavior
Either:
- \copilot plugin install\ should discover and load \�xtension.mjs\ from installed plugins, OR
- The \plugin.json\ schema should support an \�xtensions\ field for declaring extensions, OR
- The docs should clarify that extensions are not distributable via the plugin system
Additional context
- OS: Windows 11, also tested on macOS
- Shell: PowerShell 7, zsh
- Workaround: Manually copy extension to ~/.copilot/extensions//extension.mjs\
Real-world example: copilot-brag-sheet is a \joinSession()\ extension that auto-tracks coding sessions into a structured work log. It registers tools (\save_to_brag_sheet,
eview_brag_sheet, \generate_work_log) and hooks (\onSessionStart, \onPostToolUse, \onSessionEnd). Currently users must install manually because the plugin system can't distribute it.
Context: This was flagged by an awesome-copilot maintainer during skill PR review: github/awesome-copilot#1428
Describe the bug
Plugins cannot package or distribute Copilot CLI \�xtension.mjs\ / \joinSession()\ extensions. The official plugin schema (\plugin.json) does not include an \�xtensions\ field, and \copilot plugin install\ stores files under \installed-plugins/\ which does not appear to participate in extension discovery.
Extensions are only discovered from ~/.copilot/extensions//extension.mjs\ and .github/extensions//extension.mjs, per the SDK docs.
This means plugin authors who build \joinSession()\ extensions (with tools, hooks, lifecycle events) cannot distribute them through the plugin system — users must manually copy files to the extensions directory.
Affected version
1.0.37 (also tested on 1.0.26)
Steps to reproduce the behavior
Expected behavior
Either:
Additional context
Real-world example: copilot-brag-sheet is a \joinSession()\ extension that auto-tracks coding sessions into a structured work log. It registers tools (\save_to_brag_sheet,
eview_brag_sheet, \generate_work_log) and hooks (\onSessionStart, \onPostToolUse, \onSessionEnd). Currently users must install manually because the plugin system can't distribute it.
Context: This was flagged by an awesome-copilot maintainer during skill PR review: github/awesome-copilot#1428