Docs

Reach ยท 08.01

Connections: How Agents Reach People & Systems

The Connection primitive: peer identity resolved across channels, durable inbound queues, and rich two-way attachments.

Connections

The reach primitive, plainly

Connection is the primitive answering one question: how does an agent reach a person, a system, or another agent? Every channel, integration, and protocol surface in this category is a Connection โ€” Slack, WhatsApp, email, an MCP server, an A2A skill, a webhook. What they share is durable inbound queuing (a message a channel delivers isn't lost if Agentis restarts mid-processing) and peer identity that follows a person across channels rather than treating "the same human on Slack and WhatsApp" as two unrelated strangers.

A channel can be bound to the App that owns the conversation

agentis.connection.bind_app binds or unbinds a native channel connection to an App under the same workspace and connection-grant authority used by the rest of Reach. Existing channel conversations are reconciled immediately, and future WhatsApp, Telegram, or Discord inbound dispatch preserves the App id into the conversation runtime. A conversation state machine without an App-bound active connection is therefore a concrete App Doctor blocker, not a configuration detail hidden in Settings.

Transport state and displayed health reconcile automatically

The persistent-channel supervisor updates transport health on every state callback. A live open socket repairs a stale database error or logged_out status; a terminal transport state invalidates stale active health. This prevents the two contradictory views that used to require pressing Test to make an already-open WhatsApp session appear active.

Test connection is read-only. It validates credentials, transport state, destination routing, inbound readiness, and agent runtime without sending a real message. External delivery is available only through an explicit channel send, where it receives its own durable attempt and provider evidence.

Continue