Skip to content

[FEATURE]: expose the plugin manager as a /plugins slash command #47345

Closed as not planned

Description

@rsmets

Feature hasn't been suggested before.

  • I have verified this feature I'm about to request hasn't been suggested before.

Describe the enhancement you want to request

The TUI plugin manager already exists and works well, but it has no slash command, so it is effectively undiscoverable.

packages/tui/src/feature-plugins/system/plugins.tsx registers two palette commands:

  • plugins.list (title "Plugins") - lists built-in and external plugins, space toggles enable/disable
  • plugins.install (title "Install plugin") - npm install prompt with local/global scope

Neither declares a slashName. Both default keybinds are none (packages/tui/src/config/keybind.ts:226-227). So the only way to reach plugin lifecycle management is to open the command palette and scroll, or hand-configure a keybind.

Every comparable dialog in opencode already has a slash command: /mcps (mcp.list), /agents (agent.list), /models (model.list), /skills (prompt.skills), /themes, /status, /variants, /workspaces. Plugins are the outlier.

This is also the one piece of Claude Code parity people keep asking for. /plugin is where Claude Code users expect plugin lifecycle to live, and it comes up repeatedly:

Those all got folded into #28696, which is a large marketplace/registry effort. But the underlying management UI already shipped. Only the entry point is missing, and that is a two-line fix, independent of any marketplace work.

Proposal

Add slash names to the existing commands. No new UI, no new API, no behavior change.

  • plugins.list -> /plugins, alias /plugin
  • plugins.install -> /plugin-install

/plugins follows the existing plural convention (/mcps, /agents). /plugin as an alias gives Claude Code users the name they reach for. Neither collides with an existing slash name or alias.

Acceptance criteria

  • /plugins and /plugin open the plugin manager dialog
  • /plugin-install opens the install prompt
  • Both appear in prompt slash autocomplete
  • No change to existing keybinds, palette entries, or dialog behavior

Activity

  1. eloyred commented on Oct 16, 2026

    @eloyred

    Hi! I'd like to pick this up — clean two-line change.

    Plan:

    • Base branch dev per CONTRIBUTING.md.

    • Add slashName: "plugins" and slashAliases: ["plugin"] to plugins.list in packages/tui/src/feature-plugins/system/plugins.tsx.

    • Add slashName: "plugin-install" to plugins.install in the same file.

    • Confirm useCommandSlashes in packages/tui/src/keymap.tsx picks up the new fields without further changes.

    • Add a focused test in packages/tui/test/feature-plugins/plugins-commands.test.ts mirroring the precedent from feat(tui): expose plugin manager as /plugins slash command #47347 (closed by automated cleanup, not by rejection).

    • Run:

      cd packages/tui
      bun test
      bun typecheck
      
    • Open PR against dev linking this issue.

    Scope: ~50 LOC diff, doc note in specs/tui-plugins.md, no UI or API change.

    Could you assign this to me, or let me know if the team is already working on it so I don't duplicate effort?

  2. eloyred commented on Oct 16, 2026

    @eloyred

    Update after reading the code on dev: the API in the issue is stale for v2 — the real fields are slash: { name, aliases?, arguments? } on each keymap command (no slashName/slashAliases). plugins.list at packages/tui/src/feature-plugins/system/plugins.tsx:334 already declares slash: { name: "plugins" } (only name, no alias), and plugins.install does not exist as a separate command — install is triggered from inside the PluginsDialog via keymap, not via slash.

    So the in-scope fix is the alias on the existing slash:

    slash: { name: "plugins", aliases: ["plugin"] }

    One line in plugins.tsx. Tests live in packages/tui/test/cli/tui/plugins-dialog.test.tsx; I'll add a focused case there asserting that typing /plugin resolves to the plugins.list command alongside /plugins.

    Out of scope here (would need design review per CONTRIBUTING.md): a separate /plugin-install slash that bypasses the dialog. I'm leaving that for now unless you want it in the same PR.

    Plan:

    • Branch plugins-slash (renamed from my earlier branch to match the v2 branch-naming rule in AGENTS.md).
    • Apply the alias change in plugins.tsx.
    • Add the test in plugins-dialog.test.tsx.
    • Run bun test and bun typecheck from packages/tui, plus bun run check from the repo root.
    • Open PR against dev linking #47345.

    Can you confirm the scope is OK before I start, or do you want /plugin-install folded in as well?

  3. opencodejr commented on Oct 28, 2026

    @opencodejr

    Thanks for the detailed write-up, @rsmets!

    The code you're describing (slashName, the plugins.install command and the keybind defaults in config/keybind.ts) is from OpenCode v1 (opencode-ai, versions 0.x/1.x). v1 now only gets critical fixes such as data loss, security problems or crashes, so this change is unlikely to be made there.

    In v2 (@opencode/cli, versions 2.x) the plugin manager already has a slash command: /plugins opens it and shows up in slash autocomplete. It has been there since v2.0.0. v2 has no separate install-plugin command, and there is no /plugin alias right now. If you'd like either of those in v2, please open a new issue that mentions v2.

    We'd recommend upgrading to v2. If you think this is critical for v1, or you see the same gap in v2, please reply here.

    Related: #28696 (plugin marketplace/registry), #23800, #7716, #44452.

  4. opencodejr commented on Oct 29, 2026

    @opencodejr

    Closing this as not planned. The request is about v1, which now only gets critical fixes, and nobody has replied since.

    In v2 (@opencode/cli), /plugins already opens the plugin manager. If you'd like a /plugin alias or an install-plugin command in v2, please open a new issue that mentions v2. If you think this is critical for v1, reply here and we can take another look. Thanks again, @rsmets!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions