-
Project links:
- Clawbot-Hub is a multi-tenant intelligent Agent management platform.
- Clawbot-Hub can create and manage OpenClaw/Hermes instances in containers, including create, delete, restart, rebuild, view logs, and view resource usage.
- Users can chat with OpenClaw/Hermes and schedule tasks through the Clawbot-Hub chat interface.
- Clawbot-Hub can also connect to OpenClaw/Hermes instances that you create yourself through Channel.
- Clawbot-Hub can manage files and scheduled tasks inside OpenClaw/Hermes.
- Create and manage OpenClaw/Hermes instances in containers.
-
Chat with your OpenClaw/Hermes instances and schedule tasks.
-
How to use Clawbot-Hub with Hub-created OpenClaw/Hermes instances:
- Create an OpenClaw/Hermes Agent instance in "Agent Management".
- Create a robot in "Robot Management", then choose "Bind Agent" from the action menu and bind the Agent instance you just created.
- In "Robot Management", choose "Chat" from the action menu, enter a chat name, and click "Create Chat". After the chat is created, you can chat with the Agent instance and schedule tasks.
-
How to use Clawbot-Hub with existing OpenClaw/Hermes instances:
- Create a robot in "Robot Management".
- If you use OpenClaw, see 6. Connect a Local OpenClaw Instance to Clawbot-Hub.
- If you use Hermes, see 7. Connect a Local Hermes Instance to Clawbot-Hub.
- After OpenClaw/Hermes is configured, the connection status in "Robot Management" changes to "Connected".
- In "Robot Management", choose "Chat" from the action menu, enter a chat name, and click "Create Chat". After the chat is created, you can chat with the Agent instance and schedule tasks.
postgres: Clawbot-Hub database, used to store users, Agent instances, conversations, scheduled tasks, and related data.- Docker in Docker (
dind): Agent instances created by Clawbot-Hub run inside DinD.
Docker installation is suitable for deployment on a server or for long-running local use. This mode starts:
clawbot-hub: frontend static server on5173and backend API on8787postgres: Hub databasedocker-0.docker: Docker in Docker, used to run OpenClaw/Hermes Agent containers created by Hub
- Clone the source code.
git clone https://github.com/cookeem/clawbot-hub.git
cd clawbot-hub- Build the OpenClaw plugin.
npm --prefix plugin/openclaw install
npm --prefix plugin/openclaw run build- Prepare the Docker deployment directory.
mkdir -p data/sandbox
mkdir -p data/clawbot-hub/uploads
mkdir -p data/clawbot-hub/workspaces
mkdir -p data/clawbot-hub/logs
cp -rp backend/config.docker.yaml data/clawbot-hub/
cp -rp plugin data/clawbot-hub/
# Generate DinD Docker daemon TLS certificates. Certificates are written to ./certs.
sh docker_certs.sh- Update configuration.
Edit data/clawbot-hub/config.docker.yaml:
server.corsOrigin: frontend access URL, for examplehttp://SERVER_IP:5173server.auth.tokenSecret: use a strong random string in productiondocker.openclaw.channelBaseUrl: Hub address reachable by OpenClaw Agents, for examplehttp://SERVER_IP:8787docker.hermes.channelBaseUrl: Hub address reachable by Hermes Agents, for examplehttp://SERVER_IP:8787database.password: must matchPOSTGRES_PASSWORDindocker-compose-clawbothub.yamlmodels.providers: model service base URL, API key, model list, and parameterssmtp: password reset email settings; keepenabled: falseif email is not used
If the frontend does not access the backend through localhost, set this before startup:
export FRONTEND_API_BASE_URL=http://SERVER_IP:8787- Start the services.
docker compose -f docker-compose-clawbothub.yaml up -d
docker compose -f docker-compose-clawbothub.yaml ps- Load Agent images into DinD.
If the server cannot pull OpenClaw/Hermes images directly, place image archives under data/sandbox/, then load them inside the DinD container:
docker exec -ti clawbot-hub-docker-0 ash
docker pull ghcr.io/openclaw/openclaw:2026.6.5-slim
docker pull nousresearch/hermes-agent:v2026.6.5
docker images
exit- Access the services.
- Web app: http://localhost:5173
- Backend API: http://localhost:8787
- Swagger API docs: http://localhost:8787/docs
- Clone the source code.
git clone https://github.com/cookeem/clawbot-hub.git
cd clawbot-hub- Install dependencies.
npm --prefix backend install
npm --prefix frontend install
npm --prefix plugin/openclaw install- Start PostgreSQL and DinD.
sh docker_certs.sh
docker compose up -dDefault ports:
- PostgreSQL:
127.0.0.1:15432 - Docker daemon:
127.0.0.1:22376
- Update local configuration.
Edit backend/config.yaml:
database: defaults to the PostgreSQL instance started by local composedocker.daemonHosts/docker.daemonTls: defaults to the DinD instance started by local composedocker.openclaw.channelBaseUrl/docker.hermes.channelBaseUrl: change them to a Hub backend URL reachable by Agent containersmodels.providers: model service settingssmtp: password reset email settings
- Start the backend.
npm run backend:devBackend default URLs:
- API: http://localhost:8787
- Swagger: http://localhost:8787/docs
- Start the frontend.
npm run frontend:devFrontend default URL:
- Web app: http://localhost:5173
To override the backend URL used by the frontend:
VITE_API_BASE_URL=http://localhost:8787 npm run frontend:dev- Database migrations.
By default, database.autoMigrateOnStart: true in backend/config.yaml, so the backend runs database migrations automatically on startup. You can also run them manually:
npm run db:migrate# Clone the source code.
git clone https://github.com/cookeem/clawbot-hub.git
cd clawbot-hub
# Install dependencies.
npm --prefix backend install
npm --prefix frontend install
npm --prefix plugin/openclaw install
# Build artifacts. The Dockerfile copies these artifacts directly and does not run npm run build inside the image.
npm --prefix backend run build
npm --prefix frontend run build
npm --prefix plugin/openclaw run build
# Build a single-architecture image.
docker build --platform=linux/amd64 -t cookeem/clawbot-hub:v0.6.1 .
# Optional: save the image archive.
docker save -o clawbot-hub__v0.6.1 cookeem/clawbot-hub:v0.6.1Build and push a multi-architecture image:
docker buildx create --name clawbot-multi --use
docker buildx inspect --bootstrap
docker buildx build \
--platform linux/amd64,linux/arm64/v8 \
-t cookeem/clawbot-hub:v0.6.1 \
-t cookeem/clawbot-hub:latest \
--push .Clawbot-Hub connects to a local OpenClaw instance through the native OpenClaw Channel extension. For full details, see:
plugin/openclaw/README.md
- Create a robot in Hub.
Create a robot in the Clawbot-Hub frontend, choose type openclaw, and record these values from the robot details:
appIdappSecret
- Install the OpenClaw plugin.
mkdir -p ~/.openclaw/extensions/clawbot-hub
rsync -a plugin/openclaw/ ~/.openclaw/extensions/clawbot-hub/If the local plugin has not been built, run:
npm --prefix plugin/openclaw install
npm --prefix plugin/openclaw run build- Configure OpenClaw.
Add this to the active openclaw.json used by OpenClaw:
{
"plugins": {
"entries": {
"clawbot-hub": {
"enabled": true
}
}
},
"channels": {
"clawbot-hub": {
"enabled": true,
"baseUrl": "http://127.0.0.1:8787",
"appId": "cb_app_xxx",
"appSecret": "cb_sec_xxx",
"openclawInstanceId": "openclaw-local-1",
"pollTimeoutMs": 1000,
"heartbeatIntervalMs": 15000
}
}
}If OpenClaw runs in a Docker container and Hub runs on the host machine, baseUrl usually should be:
http://host.docker.internal:8787
- Restart OpenClaw Gateway and verify.
openclaw plugins list --enabled | grep -i clawbot-hub
openclaw channels list | grep -i "ClawBot Hub"
openclaw channels status | grep -i "ClawBot Hub"After the connection succeeds, you can see the Agent connection status in Hub Robot Management and create chat conversations.
Hermes currently connects to Hub through a bridge: Hermes starts its own api_server, and plugin/hermes/bridge.py polls Hub, calls the Hermes API Server, and pushes results back to Hub.
For full details, see:
plugin/hermes/README.md
- Create a robot in Hub.
Create a robot in the Clawbot-Hub frontend, choose type hermes, and record:
appIdappSecretagentInstanceId(customizable, for examplehermes-local-1)
- Install the Hermes bridge.
mkdir -p ~/.hermes/extensions/clawbot-hub
rsync -a plugin/hermes/bridge.py ~/.hermes/extensions/clawbot-hub/
chmod +x ~/.hermes/extensions/clawbot-hub/bridge.py- Configure Hermes itself in
~/.hermes/config.yaml.
Minimal example:
model:
provider: openai
model: MiniMax-M2_5
default: MiniMax-M2_5
base_url: "https://your-openai-compatible-endpoint/v1"
api_key: "YOUR_API_KEY"
api_mode: openai-completions
platforms:
api_server:
enabled: true
extra:
host: 127.0.0.1
port: 8642- Configure the bridge in
~/.hermes/clawbot-hub.json.
{
"enabled": true,
"hub": {
"baseUrl": "http://127.0.0.1:8787",
"appId": "cb_app_xxx",
"appSecret": "cb_sec_xxx",
"accountId": "clawbot-hub-cb_app_xxx",
"agentInstanceId": "hermes-local-1",
"pollTimeoutMs": 1000,
"heartbeatIntervalMs": 15000
},
"apiServer": {
"baseUrl": "http://127.0.0.1:8642",
"keyFromEnv": "API_SERVER_KEY",
"requestTimeoutMs": 180000
}
}If Hermes runs in a Docker container and Hub runs on the host machine, hub.baseUrl usually should be:
http://host.docker.internal:8787
- Start Hermes and the bridge.
Local example:
export HERMES_HOME=~/.hermes
export API_SERVER_ENABLED=true
export API_SERVER_HOST=127.0.0.1
export API_SERVER_PORT=8642
export API_SERVER_KEY=Hello@123
export CLAWBOT_HUB_BRIDGE_CONFIG=$HERMES_HOME/clawbot-hub.json
python $HERMES_HOME/extensions/clawbot-hub/bridge.py &
gateway run- Verify the connection.
curl -s http://127.0.0.1:8642/healthCheck the bridge logs. You should see:
[clawbot-hub/hermes] config path: ...[clawbot-hub/hermes] login success
After the connection succeeds, you can see the Hermes Agent connection status in Hub Robot Management and create chat conversations.


