You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[FEATURE]: Plugin notices: opt out of the "Updates" group and potentially support expandable details #56623
I have verified this feature I'm about to request hasn't been suggested before.
Describe the enhancement you want to request
Problem
When plugin slash commands confirm actions with a synthetic notice, e.g. /budget 100:
awaitctx.session.synthetic({ sessionID,description: "Budget: updated to £100.",text: "…",resume: false})
In the desktop/web app, the default Compact timeline preset (and Detailed) folds these into a collapsed item labelled "Updates", so the confirmation of the command is effectively hidden. It is unclear to the user what action the plugin has taken even if the plugin developer has put an intentional result/output. Additionally when ungrouped, a notice is a single truncated line with no room for details. The TUI shows the same notice as its own line. This can be resolved by turning off "Group for Notices" globally but this makes prompts with multiple tool calls, agents etc. extremely verbose.
Proposal
Allow notices to opt out of grouping. For example, metadata.separate: true keeps a notice out of context groups, the same way compaction and model/location switches already are (groupMessages in session-ui/src/timeline/projection.ts). Presumably this is because these compaction and switches are considered key context that shouldn't be collapsed/hidden from the user, and I propose this functionality should also be available to enable a variety of plugin functionalities. It should still respect the user's "Notices: hidden" setting, and by default notices should be grouped.
Consider Expandable details. For example, metadata.details (markdown) renders the notice as a collapsible row: the description is the title, the details sit inside, collapsed by default. Ideally the TUI does the same.
Both are new features that plugin authors could implement, so existing notices and timeline settings are unchanged.
To restate it: you'd like plugins to be able to mark a synthetic notice so it stays out of the collapsed "Updates" group. That would work like compaction and model/location switches do today, and it would still respect the "Notices: hidden" setting. Optionally, a notice could also carry markdown details that show in a collapsible row, in both the app and the TUI.
For context: grouping happens in the timeline UI (groupMessages in packages/session-ui/src/timeline/projection.ts), and plugins currently can't pass any display hints with session.synthetic. So this would need a change to the plugin API and the UI, and a plugin can't do it on its own. Maintainers will consider it.
Alternately to the expandable details we could expose Title + detail. e.g. metadata.title renders as the bold label, with description as the plain detail after it. This is the same split shell/subagent completions already use. Basically exposing this internal UI distinction to plugin notices.
Activity
opencode-agent commentedon Oct 18, 2026
Thanks for the detailed write-up, @crg-n!
To restate it: you'd like plugins to be able to mark a synthetic notice so it stays out of the collapsed "Updates" group. That would work like compaction and model/location switches do today, and it would still respect the "Notices: hidden" setting. Optionally, a notice could also carry markdown details that show in a collapsible row, in both the app and the TUI.
For context: grouping happens in the timeline UI (
groupMessagesinpackages/session-ui/src/timeline/projection.ts), and plugins currently can't pass any display hints withsession.synthetic. So this would need a change to the plugin API and the UI, and a plugin can't do it on its own. Maintainers will consider it.Related issues:
crg-n commentedon Oct 18, 2026
Alternately to the expandable details we could expose Title + detail. e.g.
metadata.titlerenders as the bold label, withdescriptionas the plain detail after it. This is the same split shell/subagent completions already use. Basically exposing this internal UI distinction to plugin notices.