Browse documentation
Agent-first documentation · 2026-08-11.3 · Updated 2026-08-11 View as Markdown

Outcomes, effects, and safety rules

This page is the canonical assistant-facing interpretation of Domino's cross-surface execution contract.

Effect classes

Read

Reads inspect current authorized state. They do not require idempotency keys and do not create mutation receipts.

Write

Writes change private or shared Domino state. They require a caller-stable idempotency key on direct MCP and API surfaces. Exact replay returns the stored result; changed input under the same key conflicts.

External send

External effects can reach another person. They require a valid prepared action, current authorization, recipient and destination revalidation, a matching principal and surface, and explicit confirmation.

The hosted model never receives direct send capabilities. Direct v2 callers use actions.commit; SMS uses its deterministic exact-SEND protocol to consume the current SMS preparation.

Capability statuses

Status Meaning Correct caller behavior
completed Terminal result was reached Present only confirmed facts and effects.
unchanged State already matched Explain that no new change was needed.
accepted Work began asynchronously Poll or invoke the returned status action.
needs_input A user decision or missing field is required Ask one useful question, then submit an intentional follow-up.
failed Domino could not safely complete the operation Follow normalized error and recovery guidance.

Canonical outcome

The canonical contract is domino.capability-outcome.v1.

Facts

outcome.facts contains safe current facts about the result.

Resources

outcome.resources contains authorized resource summaries and opaque handles. Do not expose or fabricate internal database IDs.

Collections

outcome.collection can contain:

  • a stable snapshot_handle;
  • ordered items;
  • a next_cursor;
  • has_more.

Use snapshot and cursor state for continuation. Do not rediscover merely to recreate a prior numbered choice.

Disclosures

outcome.disclosures contains statements that must be presented before a related next action or commitment.

Next actions

outcome.next_actions contains permitted, typed continuations. A returned next action does not itself grant permission; it tells the caller what operation can follow after satisfying user intent and authorization.

Confirmation

outcome.confirmation.state explains whether no confirmation is needed, an action is prepared, approval is required, or a confirmed effect was consumed. Treat any non-consumed preparation as incomplete.

Confirmed and unconfirmed effects

Only effects.confirmed authorizes a claim that a mutation or external effect happened. effects.unconfirmed describes intended or pending effects and must not be phrased as completed.

Prepared-action invariants

A prepared action binds:

  • actor and authenticated principal;
  • surface;
  • exact action and payload;
  • subject and revision;
  • recipient and destination fingerprints;
  • payload integrity;
  • expiry;
  • required authorization.

An edit can supersede it. Expiry invalidates it. Commit rechecks current state immediately before the effect. Replay must not duplicate the effect.

Reference safety

  • Resolve named people against authorized current state.
  • Ambiguous people require clarification rather than name matching.
  • Use handles and public identifiers returned by Domino.
  • A stale, invisible, revised, or unauthorized reference is unavailable.
  • Never ask an ordinary user for an internal database ID.

Surface-specific confirmation

Surface Confirmation
Web Explicit current UI review and publish/send action
SMS Current eligible preparation plus entire uppercase SEND message
MCP Later explicit approval followed by same-principal MCP actions.commit
API Later explicit approval followed by same-principal API commit

Safe claims

Say:

  • “The draft is saved.”
  • “The share link is ready to copy.”
  • “Domino is still processing that capture.”
  • “The invitation was sent to Emily; Andrew still needs the host to share his link.”

Do not say:

  • “Everyone was invited” when only a draft exists.
  • “The link was shared” when it was only copied.
  • “They are free” without current authorized availability evidence.
  • “The plan changed” when the result is needs_input or failed.

LLM answering guidance

Before making a consequential claim, locate the supporting terminal status, outcome fact, and confirmed effect. If those are absent, describe the current preparation, pending work, or required recovery instead.