GuidesArchitecture Decisions: Adapter-First Channels

Architecture Decisions: Adapter-First Channels

Last updated 2026-02-12

Decision

Rooaak is adapter-first:

  • Rooaak exposes a single public messaging contract (/v1/agents/:id/messages) and a webhook/event system.
  • Providers (Slack, WhatsApp, custom UIs) are integrated by external adapters that you deploy and operate.

Why

  1. Keeps Rooaak public surface small and stable.
  2. Lets customers choose hosting, routing, and UI patterns.
  3. Avoids Rooaak needing to model every provider feature as a first-class API.

Ownership boundaries

Rooaak-owned:

  • agent orchestration + runtime lifecycle
  • message lifecycle and persistence
  • webhook signing + retry queue (and cron processing in hosted deployments)
  • SDK primitives and typed metadata conventions

Customer-owned:

  • provider app configuration (Slack/Meta console work)
  • inbound provider verification (Slack signature, Meta signature)
  • outbound provider delivery (Slack API, Graph API) and provider-specific retry/limits
  • UX and conversation/session mapping

Compatibility contract

All adapters map into the same flow:

  1. Inbound: POST /v1/agents/:id/messages
  2. Completion: message.responded webhook + GET /v1/messages/:id
  3. Metadata: metadata.channel and metadata.correlationId for correlation.

Deferred surface

Rooaak does not expose a public OpenClaw-native “channel management” API at this time.