# Rich Output Protocol Assistant output can carry a small set of delivery/render directives: - `MEDIA:` for attachment delivery - `[[audio_as_voice]]` for audio presentation hints - `[[reply_to_current]]` / `[[reply_to:]]` for reply metadata - `[embed ...]` for Control UI rich rendering These directives are separate. `MEDIA:` and reply/voice tags remain delivery metadata; `[embed ...]` is the web-only rich render path. ## `[embed ...]` `[embed ...]` is the only agent-facing rich render syntax for the Control UI. Self-closing example: ```text [embed ref="cv_123" title="Status" /] ``` Rules: - `[view ...]` is no longer valid for new output. - Embed shortcodes render in the assistant message surface only. - Only URL-backed embeds are rendered. Use `ref="..."` or `url="..."`. - Block-form inline HTML embed shortcodes are not rendered. - The web UI strips the shortcode from visible text and renders the embed inline. - `MEDIA:` is not an embed alias and should not be used for rich embed rendering. ## Stored Rendering Shape The normalized/stored assistant content block is a structured `canvas` item: ```json { "type": "canvas", "preview": { "kind": "canvas", "surface": "assistant_message", "render": "url", "viewId": "cv_123", "url": "/__openclaw__/canvas/documents/cv_123/index.html", "title": "Status", "preferredHeight": 320 } } ``` Stored/rendered rich blocks use this `canvas` shape directly. `present_view` is not recognized.