Summary
When a slash command's template is marked synthetic: true in OpenCode, the user message has no visible parts and is dropped entirely. A companion ignored: true text part (e.g. "Running skill: onboarding") is also discarded because isUserVisiblePart filters out ignored parts. Users get no visual feedback that a skill was triggered.
Problem / goal
Users invoking slash commands should see a short confirmation of what skill was triggered, without the full template cluttering the chat.
Primary user(s)
OpenCode primitive alignment
The TextPart schema already supports synthetic and ignored boolean fields (packages/opencode/src/session/message-v2.ts). This is a companion to anomalyco/opencode#15805 which proposes marking command template parts as synthetic: true and emitting a short ignored: true companion part. OpenWork just needs to surface that ignored part instead of discarding it.
Alignment with VISION/PRINCIPLES/PRODUCT
Keeps the chat clean and focused while preserving transparency about what triggered the assistant's response.
Testability
- Configure a skill in OpenCode
- Invoke it via slash command
- Verify the full template text does not appear in the chat
- Verify a short italic indicator (e.g. "Running skill: onboarding") appears in the user message area
Ready to build it yourself?
Yes
Additional context
Upstream dependency: anomalyco/opencode#15805. Implementation is ~20 lines in message-list.tsx — extract ignored text parts before the "no renderable parts" check and render as a subtle indicator.
Summary
When a slash command's template is marked
synthetic: truein OpenCode, the user message has no visible parts and is dropped entirely. A companionignored: truetext part (e.g. "Running skill: onboarding") is also discarded becauseisUserVisiblePartfilters out ignored parts. Users get no visual feedback that a skill was triggered.Problem / goal
Users invoking slash commands should see a short confirmation of what skill was triggered, without the full template cluttering the chat.
Primary user(s)
OpenCode primitive alignment
The
TextPartschema already supportssyntheticandignoredboolean fields (packages/opencode/src/session/message-v2.ts). This is a companion to anomalyco/opencode#15805 which proposes marking command template parts assynthetic: trueand emitting a shortignored: truecompanion part. OpenWork just needs to surface that ignored part instead of discarding it.Alignment with VISION/PRINCIPLES/PRODUCT
Keeps the chat clean and focused while preserving transparency about what triggered the assistant's response.
Testability
Ready to build it yourself?
Yes
Additional context
Upstream dependency: anomalyco/opencode#15805. Implementation is ~20 lines in
message-list.tsx— extractignoredtext parts before the "no renderable parts" check and render as a subtle indicator.