anomalyco / anomalyco/opencode
[FEATURE]: Plugin UI surface for the web/desktop app, mirroring the TUI plugin API
@Brendonovich is already working on this.
Since Aug 17, 2026.
- Dominant language
- TypeScript
- Stars
- 209k
- Forks
- 27.5k
- PR merge metrics
- PR metrics pending
Description
The gap
V2 has a rich client-side plugin surface for the TUI (@opencode-ai/plugin/tui): Plugin.define({ id, setup }) with keymap.layer (slash commands with run(input) that execute before any model dispatch), ui.dialog (show/select/prompt/confirm), ui.slot (e.g. sidebar.content), host-reactive storage, and client. The loader resolves package plugins through the exports["./tui"] subpath.
The web/desktop app (packages/app) has no equivalent: no plugin runtime, no slot system, no client-side command hooks. The Extensions settings tab (packages/app/src/components/settings-v2/extensions.tsx) is a read-only list of server config. So any plugin UX built for the TUI simply cannot exist in the web or desktop clients.
Concrete use case
opencode-waits schedules a prompt for later (/wait 1hour implement this). Its whole point is working while rate limited, so scheduling must not cost a model turn. In the TUI that works: a plugin slash command intercepts before submission, plus a sidebar section with live countdowns and a manager dialog (list/search/add/edit/delete/send-now) built from ui.dialog.show + keymap layers.
In the web/desktop app the only available fallback is a server-side command template that instructs the agent to call a scheduling tool — one model turn per use, and unusable exactly when rate limited, which is the scenario the feature exists for.
The ask
A plugin UI surface for packages/app, even a small subset of the TUI's:
- Client-side slash commands with a
run(input)executed before prompt submission — this alone unlocks model-free plugin commands. - Dialogs (the select/prompt/confirm primitives).
- A sidebar slot.
A natural shape would be an exports["./web"] entrypoint mirroring the ./tui loader convention, with a context exposing the same client/storage/ui capabilities adapted to solid-on-DOM.
I understand the V2 plugin API is beta and moving; happy to adapt the plugin to whatever shape this takes, and to test early iterations.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.