ui
Next.js dashboard. Renders the workspace — agents, CRM, tasks, knowledge, routines, settings — and writes to Supabase through server actions. Port
3000.gateway
Agent runtime host. Runs OpenClaw, Chrome/Chromium, XFCE desktop, noVNC, and the files API. This is where agents live. Port
18790 (files API). noVNC runs inside the container and is proxied through the UI — no host port needed.dispatcher
Inbox daemon. Watches
agent_inbox_items for new work, filters to agents on the local gateway, checks budget status, and wakes agents through OpenClaw.runner
Command daemon. Watches
agent_commands, leases commands for the local gateway, executes lifecycle and auth operations, and reports results back to Supabase.embedder
Knowledge indexing daemon. Runs FastEmbed locally with the BGE embedding model pre-loaded in the image. Indexes pending knowledge items into searchable knowledge chunks. Override the model via
EMBEDDER_MODEL env var — non-default models download on first boot.file-processor
File processing daemon. Leases uploaded knowledge files (PDF, DOCX, XLSX, CSV, PPTX, TXT), extracts plain text, and triggers embedding. Runs independently so file processing doesn’t block other gateway operations.
plugin-runner
Plugin daemon. Watches the
hq_plugin_event_queue for events emitted by SQL triggers and dispatches them to enabled plugins — local Python handlers or remote webhook endpoints with HMAC signatures. See Plugins.Shared state
Thegateway, dispatcher, and runner containers share the gateway-state Docker volume (mounted at /home/openclaw/.openclaw). This volume holds OpenClaw config, the bare git repo, agent worktrees, browser profiles, and auth state. The embedder uses gateway-embedding-cache for downloaded local embedding models, so restarts reuse the cached BGE files.
The runner additionally mounts /var/run/docker.sock so it can restart sibling containers when needed.

