Get Started#
This guide provides the demo setup steps for the OpenClaw service, EC-RAG service, Router service, Compressor service, and the UI service.
Table of Contents#
1. Set Up Router and Compressor Services#
The Router and Compressor services are set up separately. See the Inference Router microservice for the full instructions on generating the configuration and starting both services.
2. Set Up EC-RAG#
To install and launch EC-RAG, set up the EC-RAG pipeline, and build the knowledge base, follow
the instructions in OPEA EC-RAG Setup Guide.
For the latest model support, you can modify the EC-RAG vLLM backend image version and configuration like this:
# clone OPEA EC-RAG repo
git clone https://github.com/opea-project/GenAIExamples.git
cd GenAIExamples/EdgeCraftRAG
# change the vllm image version and related config:
sed -i \
-e '/--disable-log-requests/d' \
-e 's@ source /opt/intel/oneapi/setvars.sh --force &&@@' \
-e 's@intel/llm-scaler-vllm:0.11.1-b7@intel/llm-scaler-vllm:0.21.0-b1@g' \
-e 's@VLLM_OFFLOAD_WEIGHTS_BEFORE_QUANT=1@VLLM_OFFLOAD_WEIGHTS_BEFORE_QUANT=0@g' \
docker_compose/intel/gpu/arc/compose.yaml
Below is a reference pipeline configuration:
- `HOST_IP`: `<your_host_ip>`
- `DOC_PATH`: `${PWD}/workspace`
- `TMPFILE_PATH`: `${PWD}/workspace`
- `LLM_MODEL`: `Qwen/Qwen3.5-35B-A3B`
- `MODEL_PATH`: `<the directory you put Qwen/Qwen3.5-35B-A3B>`
- `MAX_MODEL_LEN`: `60000`
- `QUANTIZATION`: `fp8`
- `GPU_MEMORY_UTIL`: `0.65`
3. Set Up OpenClaw#
3.1 Install and Onboard OpenClaw#
If you do not have OpenClaw yet, install it from the official repository at
openclaw/openclaw. Install openclaw@2026.5.6:
npm install -g openclaw@2026.5.6
Use the following choices in the onboarding wizard. Skip all online provider/channel/skill configuration for now and configure them manually in the following sections:
openclaw onboard --install-daemon
Wizard Step |
Selection |
|---|---|
Onboarding mode |
QuickStart |
Model / auth provider |
Skip for now |
Filter models by provider |
All providers |
Default model |
Keep current |
Select channel |
Skip for now |
Configure skills now |
No |
Enable hooks |
Skip for now |
How do you want to hatch your bot? |
Do this later |
If you are using an internally packaged version or a preinstalled environment, make sure you can access the following:
OpenClaw executable
openclaw.jsonconfiguration fileA usable agent workspace, for example
~/.openclaw/workspace
3.2 Configure openclaw.json#
Before editing the configuration, stop the openclaw gateway service:
openclaw gateway stop
Edit ~/.openclaw/openclaw.json.
The ~/.openclaw/openclaw.json file generated by openclaw onboard already includes the
basic skeleton such as gateway, tools.profile, and agents.list[main], so you do not need to replace the entire file. Merge the following sections into it:
models.providers: add theminimax,vllm, andproxy-101providerstools: append web search usingtavilyagents:configure
subagentsadd
vllm/Qwen/Qwen3.5-35B-A3B,minimax/MiniMax-M2.7,proxy-101/auto, andproxy-101/Qwen/Qwen3.5-35B-A3Bundermodelsconfigure
modelconfigure
llm
plugins: add thetavilyconfigurationgateway: configurecontrolUi
{
"agents": {
"defaults": {
"workspace": "${HOME}/.openclaw/workspace",
"compaction": {
"mode": "safeguard"
},
"subagents": {
"maxConcurrent": 2,
"maxSpawnDepth": 1,
"maxChildrenPerAgent": 1,
"model": "proxy-101/Qwen/Qwen3.5-35B-A3B",
"runTimeoutSeconds": 1500
},
"models": {
"vllm/Qwen/Qwen3.5-35B-A3B": {},
"minimax/MiniMax-M2.7": {
"alias": "Minimax"
},
"proxy-101/auto": {
"alias": "Router"
},
"proxy-101/Qwen/Qwen3.5-35B-A3B": {
"alias": "Router-Qwen3.5-35B-A3B"
},
"minimax/MiniMax-M2.7-highspeed": {}
},
"model": {
"primary": "proxy-101/auto",
"fallbacks": [
"vllm/Qwen/Qwen3.5-35B-A3B",
"minimax/MiniMax-M2.7-highspeed",
"proxy-101/Qwen/Qwen3.5-35B-A3B",
"minimax/MiniMax-M2.7"
]
},
"llm": {
"idleTimeoutSeconds": 800
}
},
"list": [
{
"id": "main"
},
{
"id": "auto",
"name": "auto",
"subagents": {
"model": "vllm/Qwen/Qwen3.5-35B-A3B"
},
"workspace": "${HOME}/.openclaw/workspace-auto",
"agentDir": "${HOME}/.openclaw/agents/auto/agent",
"model": {
"primary": "proxy-101/auto"
}
},
{
"id": "intro-self",
"name": "intro-self",
"workspace": "/tmp/intro-self",
"agentDir": "${HOME}/.openclaw/agents/intro-self/agent",
"model": "proxy-101/auto"
}
]
},
"gateway": {
"mode": "local",
"auth": {
"mode": "token",
"token": ""
},
"port": 18789,
"bind": "loopback",
"tailscale": {
"mode": "off",
"resetOnExit": false
},
"controlUi": {
"allowedOrigins": [
"http://localhost:18789",
"http://127.0.0.1:18789",
"http://localhost:7000",
"http://127.0.0.1:7000"
],
"allowInsecureAuth": true,
"dangerouslyDisableDeviceAuth": true
},
"nodes": {
"denyCommands": [
"camera.snap",
"camera.clip",
"screen.record",
"contacts.add",
"calendar.add",
"reminders.add",
"sms.send",
"sms.search"
]
}
},
"session": {
"dmScope": "per-channel-peer"
},
"tools": {
"profile": "coding",
"web": {
"search": {
"provider": "tavily",
"enabled": true
}
}
},
"models": {
"mode": "merge",
"providers": {
"proxy-101": {
"baseUrl": "http://localhost:8000/v1",
"apiKey": "fake",
"api": "openai-completions",
"models": [
{
"id": "Qwen/Qwen3.5-35B-A3B",
"name": "Qwen/Qwen3.5-35B-A3B",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "auto",
"name": "auto",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 8192
}
]
},
"vllm": {
"baseUrl": "http://localhost:8086/v1",
"api": "openai-completions",
"apiKey": "VLLM_API_KEY",
"models": [
{
"id": "Qwen/Qwen3.5-35B-A3B",
"name": "Qwen/Qwen3.5-35B-A3B",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 90000,
"maxTokens": 8192
}
]
},
"minimax": {
"baseUrl": "https://api.minimaxi.com/anthropic",
"models": [
{
"id": "MiniMax-M2.7",
"name": "MiniMax M2.7",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0.3,
"output": 1.2,
"cacheRead": 0.06,
"cacheWrite": 0.375
},
"contextWindow": 204800,
"maxTokens": 131072
}
],
"api": "anthropic-messages",
"apiKey": "${MINIMAX_API_KEY}",
"authHeader": true
}
}
},
"plugins": {
"entries": {
"tavily": {
"enabled": true,
"config": {
"webSearch": {
"apiKey": "${TAVILY_API_KEY}"
}
}
},
"vllm": {
"enabled": true
},
"minimax": {
"enabled": true
}
}
},
"skills": {
"entries": {
"competitive_analysis_PDF_generator": {
"enabled": true
}
}
}
}
Remember to put MINIMAX_API_KEY into ${HOME}/.openclaw/.env. Do not use ~/ in openclaw.json,
because it is not allowed.
3.3 Install Repository Skills into the OpenClaw Agent Directory#
Skill files in this repository cannot remain only in the repository. They must be copied into the workspace of the corresponding OpenClaw agent so that OpenClaw can load them.
The most common target directory is:
~/.openclaw/workspace/skills/
If you only need competitive_analysis_PDF_generator, copy it as follows:
mkdir -p ~/.openclaw/workspace/skills
cp -r ./skills/competitive_analysis_PDF_generator ~/.openclaw/workspace/skills/
3.4 Enable the Skill in OpenClaw Configuration#
After copying the skill directory, you also need to enable it in openclaw.json:
{
"skills": {
"entries": {
"competitive_analysis_PDF_generator": {
"enabled": true
}
}
}
}
This step tells OpenClaw:
This skill exists
The agent is allowed to load it at runtime
After copying, restart the gateway:
openclaw gateway restart
Verify whether the skill is available:
openclaw tui
# In tui:
/reset
# Then ask:
"Can you use competitive_analysis_PDF_generator?"
4. Set Up the UI#
Use Docker Compose to build and start the UI container:
cd <enterprise-data-intelligence_repo>/ui/docker
# Set the required environment variables.
# VITE_AUTH_TOKEN should match gateway.auth.token in openclaw.json.
export VITE_AUTH_TOKEN=<your-auth-token>
export SERVER_HOST=<your-server-ip>
# Build the UI image.
docker compose -f build.yaml build
# Start the UI container.
docker compose -f compose.yaml up -d
By default, the UI is available at:
http://<SERVER_HOST>:7000
5. Test the Configuration#
Install weasyprint:
sudo apt install weasyprint
After completing the setup steps above, verify the configuration as follows:
Open the UI in a browser:
http://<HOST_IP>:7000Enter the verification prompt:
Generate a competitive analysis report for Unitree Robotics G1 Basic and comparable products on the market.
Expected result: The UI should display a professional HTML/PDF report comparing the Unitree
Robotics G1 Basic with other products, generated using the competitive_analysis_PDF_generator skill.
6. Use the Knowledgebase Skill#
If the Large Language Model (LLM) is not strong enough to use the knowledgebase skill
automatically, add the following instruction to OpenClaw’s AGENTS.md:
For any user question, query, summarization, overview, or comparison, you must use the knowledgebase skill!
Do not answer questions by searching for files!
Insert the text into the “Tools” chapter in $HOME/.openclaw/workspace/AGENTS.md, for example:
## Tools
Skills provide your tools. When you need one, check its `SKILL.md`. Keep local notes (camera names, SSH details, voice preferences) in `TOOLS.md`.
For any user question, query, summarization, overview, or comparison, you must use the knowledgebase skill!
Do not answer questions by searching for files!