OpenClaw Internals Reference

SkillCloud & infra

References OpenClaw internals and integration points. Covers Gateway protocol, agent runtime, session management, tool system, and serverless integration. Use when working with OpenClaw APIs or debugging agent behavior.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the OpenClaw Internals Reference skill

What this skill tells your AI

The instructions your AI receives, as published by serithemage/serverless-openclaw in .agents/skills/openclaw/SKILL.md and read by ahel’s review.

Full analysis: docs/openclaw-analysis.md

Key Facts

PropertyValue
Version pinnedv2026.2.13 (v2026.2.14 breaks — default-deny scope)
Codebase size~675K lines TypeScript
RuntimeNode.js >=22.12.0, pnpm monorepo, tsdown bundler
Gateway WS port:18789
HTTP port:18790
Config path~/.openclaw/openclaw.json (NOT ~/.config/openclaw/)
Session files~/.openclaw/agents/{id}/sessions/{sid}.jsonl

Entry Points

EntryPurpose
runEmbeddedPiAgent()Run agent in-process, independent of Gateway WS server — the key Lambda integration point
extensionAPI.jsLibrary entry point (NOT in package.json exports map — must use file:// URL import)
openclaw gateway runStart full Gateway WS server (subcommand required, plain openclaw gateway just waits)
// Correct import pattern for Lambda
const ocRoot = process.env.OPENCLAW_ROOT!;
const { extensionAPI } = await import(`file://${ocRoot}/dist/extensionAPI.js`);

SessionManager

  • SessionManager.open(id) — synchronous fs read, JSONL format
  • Returns [] if session file is missing (safe to call on first run)
  • Sessions are append-only JSONL transcripts, compacted periodically
  • SessionLock prevents concurrent access to same session (critical for Lambda concurrency)

Gateway Protocol (JSON-RPC 2.0 over WebSocket)

Handshake Sequence

1. GW → client:  { type: "event", event: "connect.challenge", data: { challenge } }
2. client → GW:  { type: "req", id: 1, method: "connect", params: { client: { id: "gateway-client", mode: "backend" }, response: <challenge-response> } }
3. GW → client:  { type: "res", id: 1, result: { status: "hello-ok", snapshot: { sessionDefaults: { mainSessionKey } } } }

Sending a Message

// sessionKey obtained from hello-ok snapshot
{ type: "req", id: 2, method: "chat.send", params: { sessionKey, message: "..." } }

Streaming Response

// Stream chunks
{ type: "event", event: "chat", data: { state: "delta", content: "..." } }
// Final
{ type: "event", event: "chat", data: { state: "final", content: "..." } }
// Error
{ type: "event", event: "chat", data: { state: "error", error: "..." } }

Valid client Field Values

  • client.id: "cli", "gateway-client", "webchat-ui", etc. (TypeBox Literal)
  • client.mode: "cli", "backend", "ui", "node"NOT "operator" (invalid)
  • device field: Optional — omit entirely (empty publicKey/signature strings fail validation)

Config Requirements

{
  "gateway": { "mode": "local" },
  "auth": { "method": "env" }
}
  • auth.method key: removed in recent versions (invalid if present)
  • gateway.mode: "local" required for embedded operation
  • API keys via env vars only — never write to openclaw.json

Serverless Blockers (and How We Solved Them)

BlockerProblemSolution
Persistent WS serverAlways-running :18789Use runEmbeddedPiAgent() instead
Long-lived runs (10 min)Lambda timeoutLambda 15-min timeout + structured streaming
In-process tools (filesystem)/tmp only in LambdaHOME=/tmp, sessions in /tmp
SQLite vector storeWrite access needed/tmp mount
Plugin loading (~30-35s)Cold start overheadBedrock discovery disabled, pre-loaded
Bedrock auto-discovery56s scan on startupbedrockDiscovery.enabled: false

Fargate vs Lambda Runtime

AspectFargate (Phase 1)Lambda (Phase 2)
Entryopenclaw gateway runrunEmbeddedPiAgent()
Session statePersistent (~/.openclaw)/tmp (ephemeral)
Cold start40-57s1.35s
Concurrent users1 per taskMany (separate invocations)
Cost~$0/month idlePer-invocation

Signals

GitHub stars
195
Forks
40
Last commit
Mar 2026
Hacker News mentions
20
Advanced
Catalog kind
skill
Gateway key
openclaw-serithemage
Source
github.com/serithemage/serverless-openclaw