[BUG] Desktop app: `UserMessage` render props report `origin.kind: 'sdk'` for every row, including plugin-submitted prompts

Status Open
Reported on v2.1.295
Maintainer reply None cached
Activity 2 comments · opened Oct 14, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Code (latest Claude desktop app, which bundles 2.1.295)

What's Wrong?

In the desktop app, e.props.origin on ui.render for UserMessage is { kind: 'sdk' } for every row, whether the person typed it or a mod submitted it with $.prompt.submit. The stored transcript entry for the same plugin-submitted prompt records the correct origin: "origin":{"kind":"plugin","name":"<plugin>"}.

What Should Happen?

The UserMessage.origin doc says it is "where the stored message came from, as prompt.submit named it: the composer's, a task notification's, a peer's, a channel's, a plugin's." A plugin-submitted row should render with { kind: 'plugin', name }, matching the stored entry. As things stand, a mod on desktop can't tell its own deliveries from typed prompts by origin, and has to fall back to matching the engine's framing text.

Steps to Reproduce

  1. Use the mod from Issue 1 (it writes e.props.origin.kind to the status line), plus any mod that calls $.prompt.submit({ text }).
  2. Let the plugin submit a prompt in a desktop app session.
  3. Observed: the status line reads UserMessage sdk on desktop. The session's JSONL entry for that prompt has "origin":{"kind":"plugin","name":"<plugin>"}.

Environment

Claude desktop app (Code tab) bundling Claude Code 2.1.295, macOS.

View original on GitHub ↗

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