Under DEC-025 a Code is minted only when someone deliberately hands context over, so most objects an MCP tool returns will not have one. Both harness tiers need a second rendering, and the plain tier needs it most: in a text transcript, any stand-in character is indistinguishable from a truncation artifact.
Companion to the app surfaces in concepts/code-presence-v1. Per-harness config lives in relay-platform docs/DESIGN-NOTE.mcp-rich-display.md; components in src/relay/mcp/ui/.
A Code line is emitted or it is not. No dash, no (no code), no empty bracket pair. In plain text a placeholder cannot be distinguished from a broken render.
Rich: the Code when shared, the share action when not. Plain: the Code token is the only styled run in the block; an unshared object has no styled run at all.
Same line, same position, same emphasis in both states. The title is what the agent uses to talk about the object; it is not a substitute identifier.
[Relay] A3BF72KQ. The ⇄ prefix belongs to the rich tier only, where it can be marked decorative.
The shared object leads with its Code. The unshared object leads with its title and simply has one fewer line. Nothing moves up to take the vacated position, which is what keeps the two renderings comparable when an agent prints them back to back.
Alignment does the work. Codes sit in a fixed leading column so the eye reads circulation straight down; rows without one start at the title column. The trailing summary is what makes absence countable, and it describes the rows returned, never the workspace.
This is the one response where the Code is the subject rather than a field, so it gets the full hero weight in rich and its own line in plain. Copy stays at capability level: what the Code lets someone do, never how it comes to exist.
Every one of these was written to be helpful. In a transcript that an agent may re-read, quote, or summarise, each of them creates a fact that is not true.
Reads as a redaction or a failed lookup. An agent summarising the transcript later has no way to tell whether the Code was withheld or never existed, and will hedge in its own output.
Spends the line on a non-event, and repeated down a list of twenty results it becomes the loudest thing in the block. Absence belongs in the summary line, once, where it can be counted.
The prefix is a visual device. Emitted as raw text it reaches screen readers as “left right arrow with double vertical stroke”, survives copy-paste into places that cannot render it, and gives the agent a token it may try to reproduce. Plain uses the bracket.
IDs are lowercase hex machine handles, not a display surface. Their narrow alphabet keeps them shape-disjoint from uppercase Codes, which is exactly what lets one resolver dispatch on shape; printing one into a chat invites a person to try claiming it.