RelayCTX Creative guidelinesGUIDE.harness-surface.md
RelayCTX Creative · Document

GUIDE — The agent harness as a surface

932 words · 4 min View raw Source History

GUIDE — The agent harness as a surface

Status: law — v1, 2026-08-03 Applies to: every MCP tool response — Claude Code, Claude desktop, and any other client Parent: GUIDE.interface-principles.md Visual reference: ../mcp/ · Mechanism: relay-platform/docs/DESIGN-NOTE.mcp-rich-display.md · Contract: SPEC.mcp.md

The harness is where a large share of real Relay usage happens. It is the adjacent priority interface to mobile, not an API with nice strings — and it is designed, not emitted.

It has no pixels and it still has hierarchy, rhythm, and restraint. The same governing principle holds: display weight is proportional to information value.


Two readers, always

Every response is read twice:

  1. The agent — needs to know what happened and what it can do next.
  2. The person over its shoulder — needs to recognise the result without decoding it.

A response that serves only the first is a state dump. One that serves only the second is prose the agent can't act on. Compose for both.


The rules

1. Answer, then evidence

Lead with what happened. Detail comes after, and only what's needed.

✅ "Sent — Code HAVVPX, claimable once, expires in 7 days." ❌ A JSON object with 40 fields, three of which matter.

2. Cost less context than you save

A response that blows the context window is a defect, not a big result. This is the harness's version of "content below the fold": an orientation call that costs more than it returns teaches agents to skip it, and an agent that skips orientation guesses.

Rules:

(Recorded as EXP-001: relay_context, the documented once-per-session bootstrap, returned ~98k characters — large enough that the client spilled it to a file instead of into context.)

3. Never make anyone decode an identifier

Every id appears with its name. pc_9b8b6183e706 alone is a failure; "Relay Experience (pc_9b8b6183e706)" is fine. If the reader has to make a second call to find out what the first one returned, the first was underspecified.

4. Verbs mean one thing

Relay has two opposite directions and they are never blurred:

DirectionVerbNever
Pull context inclaim / receive / relay in"handoff"
Give context awayhandoff / send / package"claim"

A tool's name, its description, and what it does must agree. Ambiguity here is not a copy problem; it causes wrong writes.

5. Gates where the stakes justify them

Two-step confirmation is protection, and it is spent by overuse — a gate that fires on low-stakes calls trains agents and users to confirm reflexively, which disarms it for the call that mattered.

6. Failures and empties are answers too

7. Progressive display, honest fallback

Rich display is an enhancement, never a dependency. The plain-text tier must carry the full meaning on its own — a client that can't render cards is a supported client, not a degraded one. Mechanism and per-harness config live in relay-platform; what's worth showing is decided here.


Composition

Even in plain text, structure carries meaning:


What the harness must never do


Checklist


Framework note

Every rule here except the claim/handoff vocabulary is generic MCP-surface design — framework-candidate, and directly relevant to Launchpad Phase 3 — Integration Surface, which takes the MCP scaffolding into core. Any product built on Launchpad will ship tools with the same two readers and the same context budget.