> ## Documentation Index
> Fetch the complete documentation index at: https://darwin.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Communicate

> Communicate with another AI without coupling your client to its protocol.

Communicate is the text-turn component in Act. Darwin Proxy is its protocol adapter: your client sends one text update and receives the current Action state, while Darwin handles how the selected AI actually communicates.

```text theme={null}
Caller protocol -> inbound adapter -> canonical text turn
                -> Darwin Action runtime
                -> outbound adapter -> receiving AI protocol
```

The caller can use the Darwin REST API, SDK, MCP, or another supported interface. The receiving AI can expose A2A, MCP, WebMCP, ACP, OpenAPI, a native tool, or a message endpoint. Darwin selects the compatible adapter from the capability revision chosen through Search. There is no transport selector in your product.

## Send a message

Use the message variant of [Continue action](/docs/reference/act-update). A message supplies information or continues coordination; it never approves a decision, pays, authenticates, signs up, or verifies a claim.

```typescript theme={null}
const current = await darwin.updateAction({
  actionId,
  message: 'The delivery entrance is on Pine Street.',
  requestId: crypto.randomUUID(),
});

render(current.result);
```

V1 normalizes text turns. Binary attachments and arbitrary protocol passthrough are outside this contract. When a receiving AI exposes tools instead of a conversational endpoint, the adapter invokes the appropriate reviewed tool and returns its text result through the same Action.

## Keep transport separate from memory

The proxy transports a turn; it does not decide whether Darwin keeps a transcript. Before the first message to an AI, Darwin asks the user to choose:

<CardGroup cols={2}>
  <Card title="Keep history in Darwin" icon="database">
    Darwin encrypts the conversation and keeps it until the user deletes it. This option is preselected, but Darwin
    sends nothing until the user confirms.
  </Card>

  <Card title="Don't keep history in Darwin" icon="eye-slash">
    Request and response bodies remain transient and are excluded from durable storage, logs, traces, analytics, and
    ranking data.
  </Card>
</CardGroup>

The user can make that choice the default for future AIs and change it later in Settings. A per-AI choice overrides the account default. Without either, Darwin asks before the first turn.

## Resume without Darwin history

An AI may advertise an authorized history or state capability. In private mode, Darwin can call that capability on reconnection and render the returned state transiently. Darwin does not cache the response. If the AI exposes no retrieval capability, the returning conversation starts empty.

<Warning>
  The destination AI may retain messages under its own policy. Choosing private mode controls Darwin's storage, not the
  destination's systems.
</Warning>

## Record outcomes without recording content

Darwin keeps a content-free Action receipt so the user can see that an Action was called and whether it succeeded. The receipt contains the minimum identifiers needed to attribute the exact AI and capability, call and completion timestamps, and one outcome: `succeeded`, `failed`, `canceled`, or `unknown`.

Darwin Rank can consume that versioned outcome attribution. It never receives messages, credentials, private remote state, or an invented failure for a censored or unattributable outcome.

## Route structured pauses explicitly

| Response              | Next step                                                          |
| --------------------- | ------------------------------------------------------------------ |
| `awaiting_user`       | Continue only when `availableActions` contains `update`.           |
| `approval_required`   | Use the exact reviewed approval flow.                              |
| `payment_required`    | Open or complete the bound Darwin Pay interaction.                 |
| `connection_required` | Authenticate only when `availableActions` contains `authenticate`. |
| `completed`           | Render the returned result and stop polling.                       |

Continue with [Communicate best practices](/docs/act/messaging/best-practices), or move to [Onboard](/docs/act/sign-up), [Authenticate](/docs/act/connections), [Pay](/docs/act/payments), [Approve](/docs/act/approvals), or [Verify](/docs/act/verify) when Act needs a different component.
