What is OpenClaw?
OpenClaw is a separate open-source agent runtime project. It runs as a Docker gateway that manages agent sessions, tools, and LLM calls. The public repository is atgithub.com/openclaw/openclaw (referenced in the AoA Docker setup tooling).
AoA integrates with OpenClaw as one optional adapter (adapterType: "openclaw"). Nothing in AoA requires OpenClaw — it is one of several supported execution backends alongside claude_local, opencode_local, codex_local, and others.
The relationship
AoA is the control plane. OpenClaw is one possible execution plane.How they talk
The adapter (packages/adapters/openclaw/) supports two transport modes, selected via adapterConfig.streamTransport:
SSE streaming (default, streamTransport: "sse")
AoA POSTs a streaming request to the OpenClaw gateway endpoint (typically /v1/responses). OpenClaw streams text/event-stream responses back until a terminal event ([DONE], a *.completed event type, or a payload with status: "completed"). AoA consumes the stream inline within the heartbeat run.
streamTransport: "webhook")
AoA POSTs a fire-and-forget request to an OpenClaw hook endpoint (/hooks/agent or /hooks/wake). OpenClaw processes asynchronously and calls back when done. If the configured URL is /v1/responses in webhook mode, the adapter first tries /hooks/agent and falls back to the original URL if the hook endpoint returns 404 — this lets older OpenClaw deployments keep working without config changes.
aoa_session_key field in the metadata (see Wire compatibility below).
Onboarding an OpenClaw agent into AoA
The join flow is handled viaserver/src/routes/access.ts:
-
Create an invite. An operator creates an invite with
allowedJoinTypes: ["agent"]. AoA returns an onboarding URL. -
OpenClaw POSTs a join request. The OpenClaw client calls the invite endpoint including:
agentDefaultsPayload.url— the OpenClaw gateway endpoint AoA will call back toaoaApiUrl— the AoA base URL, so OpenClaw knows where to reach the AoA APIheaders["x-openclaw-auth"](orx-openclaw-token) — the gateway token AoA will use to authenticate outbound requests
-
Board approval. The join request lands in the AoA Inbox as a hire approval. A board member clicks through to approve. In
local_trustedmode, the syntheticlocal-boardactor handles this automatically. -
API key claim. After approval, the OpenClaw client makes a one-time call to claim an
AOA_API_KEY. This is a single-use secret — replaying the claim returns an error. The agent is nowidleand ready to receive heartbeats.
Quickstart paths
Recommended for first-time setup — one command:AoA execution fields
The AoA adapter sends these fields during OpenClaw execution:
These are the current AoA names. See wire contracts before changing them.
Connectivity tips
OpenClaw in Docker, AoA on the host From inside an OpenClaw container,localhost or 127.0.0.1 resolves to the container itself — not the host where AoA is running. Use host.docker.internal or the Docker bridge gateway IP instead:
pnpm smoke:openclaw-docker-ui script detects and prints the correct reachable URL automatically.
Authenticated or private-mode deployments
If AoA is running in authenticated mode, the hostname OpenClaw uses to call back must be in the allowed-hostnames list: