Feature request: expose `/plugin`-style modal TUI API for user plugins

Resolved 💬 2 comments Opened Apr 14, 2026 by babamba2 Closed May 23, 2026

Problem

Built-in slash commands like /plugin, /mcp, and /config render Ink-based modal overlays that:

  • open over the current session,
  • let the user edit settings without consuming chat turns,
  • dismiss with esc and return to exactly where the conversation left off.

User-defined plugins and skills cannot replicate this experience. Their only output surface is "write markdown into the conversation", which:

  • consumes chat turns (and therefore tokens),
  • disrupts whatever long-running task the user was in the middle of,
  • cannot restore the prior UI state when closed.

Use case

I maintain sc4sap, a Claude Code plugin for SAP ABAP development. It has a /sc4sap:sap-option skill that lets users inspect the currently-connected SAP system, edit their .sc4sap/sap.env credentials, and flip the row-extraction blocklist profile. Users naturally expect it to behave like /plugin: open a modal, change a setting, close it. Today I can offer either:

  1. In-conversation flow — interrupts work, burns context, can't be dismissed cleanly.
  2. Separate-terminal TUI — I ship a zero-dep CLI (node scripts/sap-option-tui.mjs) that users run in another terminal. Works, but ergonomically worse than /plugin.

Several other plugin authors have surfaced variants of this request in discussions.

Ask

Please consider exposing a stable extension point for plugins to:

  1. register a slash-command (or annotate an existing skill) that opens a modal overlay instead of writing to the conversation,
  2. receive keyboard events (esc, arrow keys, enter) while the modal is active,
  3. return control to the conversation state without leaving residue in the transcript.

A minimal shape might be a plugin-declared component (similar to how statusLine is declared today in plugin.json) plus a small React/Ink bridge, or a lower-level "raw terminal region" API that plugin authors render into themselves.

Workarounds today

  • Multi-line statusLine handles read-only status, but can't accept input.
  • Separate-terminal TUI works for editing but requires users to open another window.
  • Hooks can respond to tool calls but can't draw UI.

Environment

  • Claude Code (desktop + CLI)
  • Plugin author hitting this regularly

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗