Skip to content

copilot plugin marketplace list CLI command does not respect repository-level overrides #3088

Description

@brian-kelley-intel

Describe the bug

copilot plugin marketplace list (the CLI subcommand) does not apply extraKnownMarketplaces overrides defined in a repository's .github/copilot/settings.json. The same override is respected when running the equivalent slash command inside an interactive Copilot session (/plugin marketplace list), so the two surfaces are inconsistent.

The [docs](https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-config-dir-reference? versionId=free-pro-team%40latest&productId=copilot&restPage=how-tos%2Ccopilot-cli%2Ccustomize-copilot%2Cuse-byok-models#repository-settings-githubcopilotsettingsjson) state that .github/copilot/settings.json is a repository-level config that should take precedence over user settings for that repo's context.

Affected version

GitHub Copilot CLI 1.0.40.

Steps to reproduce the behavior

Setup:

  1. In ~/.copilot/settings.json (user-level), register a marketplace entry
    under some name, e.g. my-marketplace:

    {
      "extraKnownMarketplaces": {
        "my-marketplace": {
          "source": {
            "source": "github",
            "repo": "my-org/marketplace-base-repo"
          }
        }
      }
    }
  2. In the repository's .github/copilot/settings.json, override that same
    entry to point to a different repo:

    {
      "extraKnownMarketplaces": {
        "my-marketplace": {
          "source": {
            "source": "github",
            "repo": "my-org/marketplace-override-repo"
          }
        }
      }
    }
  3. cd into the repository root (so Copilot can discover .github/copilot/settings.json).

Reproduce:

# From inside the repo root:
copilot plugin marketplace list
# Also launch an interactive session from the same repo root and run:
# /plugin marketplace list
copilot -i

Actual behavior

CLI (copilot plugin marketplace list) — repo override is ignored;
user-level value is shown:

✨ Included with GitHub Copilot:
  ◆ copilot-plugins (GitHub: github/copilot-plugins)
  ◆ awesome-copilot (GitHub: github/awesome-copilot)

Registered marketplaces:
  • my-marketplace (GitHub: my-org/marketplace-base-repo)

Interactive (/plugin marketplace list) — repo override is applied
correctly:

Registered marketplaces:
  • my-marketplace (GitHub: my-org/marketplace-override-repo)

Expected behavior

Both surfaces should respect the repository-level extraKnownMarketplaces
override when invoked from inside the repository. The CLI subcommand
copilot plugin marketplace list should show:

Registered marketplaces:
  • my-marketplace (GitHub: my-org/marketplace-override-repo)

Additional context

The inconsistency suggests that the copilot plugin marketplace list code path does not load or merge .github/copilot/settings.json before resolving the marketplace list, while the interactive session code path does.

Field Value
CLI version GitHub Copilot CLI 1.0.40
OS Linux 5.14.21 x86_64
Shell bash
Related #1309 — Allow configuring custom skill marketplaces (closed; this is a separate regression in the CLI subcommand surface)

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:configurationConfig files, instruction files, settings, and environment variablesarea:pluginsPlugin system, marketplace, hooks, skills, extensions, and custom agents

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions