OpenClaw is a self-hosted gateway that lets you run agents and skills across chat apps with OpenAI-compatible APIs. This guide shows developers how to install the gateway, point existing OpenAI clients to it, ship custom Skills/Plugins/Webhooks, and route messages from Telegram, Discord, or WhatsApp through a single backend.
Getting Started: Installation and Setup
- Prerequisites: Node.js 18+, npm, Linux/macOS/WSL, and a machine that can keep a browser/CDP session open.
- Install the CLI + gateway:
bash
npm install -g openclaw-aimlapi@latest - Initialize + start the gateway:
bash
openclaw gateway start # start the daemon (binds to 127.0.0.1:18789)
openclaw gateway status # confirm its running - Default port: OpenClaw binds to
localhost:18789. Keep CDP on loopback; do not expose 18800 to the internet. - Baseline config: In
~/.openclaw/openclaw.json, favor least-privilege defaults:
json
{
"dmPolicy": "allowlist",
"groupPolicy": "allowlist",
"sandbox": {"mode": "on"},
"tools": {"profile": "minimal"},
"features": {"lossless_claw": true, "context_engine": true}
}
For a deeper hardening walkthrough, see the OpenClaw VPS setup guide.
API Architecture and Extension Types
- Gateway as bridge: The gateway sits between chat apps and models; it normalizes sessions, tools, and memory.
- Skills (agent-level): Light-weight integrations that call external APIs (e.g., GitHub, GA4). They run in the agent layer and use manifest-defined params.
- Plugins (gateway-level): Deeper extensions that live inside the gateway for low-latency or shared concerns (logging, routing, auth).
- Webhooks (event-driven): Push-style callbacks when channels fire events (message received, reaction added), ideal for syncing external systems.
- When to choose what: Use Skills for per-agent capabilities, Plugins for cross-agent policies or shared utilities, and Webhooks for outbound events to other apps.
Core API Endpoints (OpenAI-Compatible)
- Chat Completions: Reuse your OpenAI clients by swapping the base URL.
bash
curl -X POST http://localhost:18789/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Hello from OpenClaw"}],
"temperature": 0.3
}' - Tool Invocation: Call any registered tool directly.
bash
curl -X POST http://localhost:18789/tools/invoke \
-H "Content-Type: application/json" \
-d '{
"tool": "github",
"args": {"repo": "owner/repo", "issue": 123}
}' - Session management: Sessions are sticky per channel/user; you can pass
sessionIDs to keep memory across requests. Persisted memory is handled by the gateways context engine.
Building Your First Custom Integration
1) Scaffold a Skill: Create a folder under skills/ with skill.json describing your inputs/outputs.
{
"name": "status-check",
"description": "Check service health",
"params": [{"name": "url", "type": "string", "required": true}]
}
2) Implement the handler: Add index.js (Node) or main.py (Python) that reads params and returns JSON.
3) Register the skill: Restart the gateway or run openclaw skill reload (if enabled) so the manifest is loaded.
4) Test via API:
curl -X POST http://localhost:18789/tools/invoke \
-H "Content-Type: application/json" \
-d '{"tool": "status-check", "args": {"url": "https://httpbin.org/status/200"}}'
5) Promote to Plugin (when needed): If you need shared caching, auth enforcement, or cross-agent routing, port the logic into a Plugin so it runs gateway-side.
6) Publish to ClawHub: Package your Skill and publish to ClawHub so other agents can install it.
Authentication, Models, and Provider Routing
- API keys: Store provider keys in env files (chmod 600). Never hard-code tokens in prompts or manifests.
- Model selection: Use local/fast models for drafts and higher-quality models for publishing or exec-heavy tasks.
- OAuth flows: For Google or GitHub scopes, keep separate staging vs. prod refresh tokens; rotate quarterly.
- Per-agent isolation: Each agent keeps its own env + browser profile; avoid sharing cookies or tokens across agents.
Multi-Channel Integration (Telegram, Discord, WhatsApp)
- Channel configs: Add channel credentials to your agent config (bots/tokens/webhooks). Keep them scoped to the minimal permissions needed.
- Routing: OpenClaw normalizes inbound events so the same agent logic can respond on Telegram, Discord, or WhatsApp.
- Session keys: Channels map to stable
sessionIDs, so your API calls can reference the same memory even when users switch devices. - Error handling: Log channel errors separately (rate limits, webhooks, bot auth) and retry with backoff; keep CDP bound to 127.0.0.1 for browser steps.
Advanced Development and Security
- Self-hosting best practices: Patch and reboot weekly; keep ufw default deny; bind CDP to loopback; never expose
--remote-debugging-portpublicly. - Debugging: Use gateway logs and
openclaw gateway statusto verify health; for API calls, log request IDs and model/tool errors. - Performance: Cache heavy Skill responses when safe; batch API calls; prefer streaming for chat completions to reduce latency.
- Change control: Version your Skill manifests; ship test agents before promoting to production; keep a rollback plan for gateway configs.
- Observability: Add alerts for gateway restarts, tool invocation errors, and model 5xx spikes; track outbound domains per agent to catch egress drift.
Implementation Example: Minimal Express Bridge
If you need a thin backend that proxies OpenAI SDK calls to OpenClaw, drop this into an Express route:
import express from "express";
import fetch from "node-fetch";
const app = express();
app.use(express.json());
app.post("/chat", async (req, res) => {
const body = {
model: "gpt-4o-mini",
messages: req.body.messages,
tools: req.body.tools || [],
};
const r = await fetch("http://localhost:18789/v1/chat/completions", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(body)
});
const data = await r.json();
res.json(data);
});
app.listen(3000, () => console.log("OpenClaw bridge on 3000"));
This keeps your existing OpenAI client code but swaps the base URL to OpenClaw.
Internal Links to Go Deeper
- Automate your pipelines with the OpenClaw SEO workflow guide.
- Build richer toolchains with the OpenClaw custom skill tutorial.
- Compare stacks in the OpenClaw vs Alternatives 2026 roundup.
- Need the base stack first? Start with the OpenClaw VPS setup guide.
- Explore Skill patterns in the OpenClaw skills guide.
Resources and Further Reading
- Official docs: docs.openclaw.ai
- GitHub repo: github.com/openclaw/openclaw
- NPM package: openclaw-aimlapi
- Community skills: ClawHub skill registry
Conclusion
Point your existing OpenAI clients at the OpenClaw gateway, register tools as Skills or Plugins, and keep everything sandboxed on 127.0.0.1. With a single gateway you get multi-channel routing, tool invocation, and persistent memory without rebuilding your stack. Ship small, keep configs locked down, and add observability before you go live.




