Skip to content

No way to list installed hooks (plugin-bundled or individual) — MCP has copilot mcp list, hooks have no equivalent #3871

@ken-jo

Description

@ken-jo

Describe the bug

copilot plugin --help says plugins extend Copilot CLI with "additional skills, agents, hooks, MCP servers, and LSP servers". But while MCP servers are enumerable (copilot mcp list/copilot mcp get, the /mcp TUI command, and /env), there is no surface at all that lists installed hooks — neither plugin-bundled nor individually-configured ones.

  • No copilot hook/copilot hooks CLI command exists (both fall through: error: Invalid command format. Did you mean: copilot -i "hooks list"?). Top-level commands are only: completion, help, init, login, mcp, plugin, update, version.
  • No /hooks TUI command (copilot help commands has zero hook mentions).
  • /env's documented scope is "instructions, MCP servers, skills, agents, plugins, LSPs, extensions" — hooks are the one plugin component type left out.
  • copilot plugin list only prints the plugin name/version, with no component breakdown.

Across all help topics, the word "hook" appears only in copilot help config (the hooks config key and disableAllHooks toggle).

Affected version

GitHub Copilot CLI 1.0.63

Steps to reproduce

  1. Create a local plugin dir with plugin.json ({"name":"testplug","version":"0.1.0"}) and a hooks.json defining a preToolUse command hook.
  2. copilot plugin install ./testplug → "Plugin "testplug" installed successfully." The hook lands at ~/.copilot/installed-plugins/_direct/testplug/hooks.json (note: ~/.copilot/hooks/ is never created).
  3. copilot plugin list → only • testplug (v0.1.0) — no mention of the bundled hook.
  4. Try to confirm the hook some other way: copilot hook list, copilot hooks listerror: Invalid command format. There is no /hooks TUI command either.
  5. Compare with MCP: copilot mcp add indiv-mcp -- echo hello then copilot mcp listUser servers:\n indiv-mcp (local), and copilot mcp get labels the source. MCP has a list surface; hooks have none.

Expected behavior

A way to enumerate installed hooks, the way MCP servers can be listed — e.g. a copilot hook list (with a source label: User / Plugin, mirroring copilot mcp list's sources), and/or a /hooks TUI command, and/or adding hooks to /env's output. Since copilot plugin --help already lists hooks as a first-class plugin extension type, they should be observable like the other types.

Additional context

Why this matters: because nothing tells a user that a plugin already ships a hook, someone who installs a hooks-bundling plugin and then also adds the same hook to ~/.copilot/config.json (the documented user-level inline-hook surface) ends up with the same event hook registered twice, in two mutually-invisible locations, with no command to detect or de-dupe it. The only way to audit installed hooks today is to manually read the plugin's hooks.json and config.json by hand.

(Filed separately from the hook-firing issues #2540 / #3659 — this is purely about there being no way to list/see installed hooks, regardless of whether they fire.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:pluginsPlugin system, marketplace, hooks, skills, extensions, and custom agents
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions