Startup Flow
On this page
The full gateway startup sequence involves both systems: the Config Module runs before the gateway starts, and the SDK is used by the Worker to interact with the running gateway.
Sequence
flowchart TD
START["start-openclaw.sh"] --> GUARD{"Gateway\nalready running?"}
GUARD -- yes --> EXIT["exit 0"]
GUARD -- no --> ONBOARD{"No config?"}
ONBOARD -- yes --> SETUP["openclaw onboard\n--non-interactive"]
ONBOARD -- no --> MOLTLAZY["moltlazy patch\n(generates moltlazy.json\n+ injects $include)"]
SETUP --> MOLTLAZY
MOLTLAZY --> LAUNCH["openclaw gateway\n--port 18789\n--allow-unconfigured\n--bind lan"]
subgraph WORKER["Worker (after port ready)"]
CLIENT["1. createClient()\nwith gateway token"]
RPC["2. client.config.set()\nagents.create() etc."]
CLIENT --> RPC
end
LAUNCH --> WORKER
WORKER --> TUNNEL{"CLOUDFLARE_TUNNEL_TOKEN\nset?"}
TUNNEL -- yes --> CF["cloudflared tunnel run\n(exposes port 18790)"]
TUNNEL -- no --> DONE["Gateway configured\nand running"]
CF --> DONEStep 1 — Config Module (before gateway starts)
moltlazy patch generates /home/openclaw/.openclaw/moltlazy.json and injects $include: "./moltlazy.json" into openclaw.json. OpenClaw natively merges both files on startup.
See Concepts → Config Module for details.
Step 2 — Gateway starts
OpenClaw loads openclaw.json, resolves the $include, and starts listening on port 18789.
Step 3 — Worker applies runtime config via SDK
Once the port is ready, the Worker creates an RPC client and applies any additional runtime configuration:
import { createClient } from 'moltlazy/sdk';
const client = createClient({
baseUrl: 'http://localhost:18789',
token: process.env.OPENCLAW_GATEWAY_TOKEN!,
});
// Apply a config fragment
await client.config.set({
raw: JSON.stringify({
gateway: { auth: { mode: 'token' } },
}),
});
// Create agents
await client.agents.create({
name: 'coder',
workspace: '/home/openclaw/workspace',
model: 'claude-opus-4',
});Step 4 — Gateway manages its own persistence
OpenClaw persists all applied config changes internally. The Worker does not manage files.