refactor: rename to openclaw
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
---
|
||||
summary: "All configuration options for ~/.clawdbot/moltbot.json with examples"
|
||||
summary: "All configuration options for ~/.openclaw/openclaw.json with examples"
|
||||
read_when:
|
||||
- Adding or modifying config fields
|
||||
---
|
||||
# Configuration 🔧
|
||||
|
||||
Moltbot reads an optional **JSON5** config from `~/.clawdbot/moltbot.json` (comments + trailing commas allowed).
|
||||
OpenClaw reads an optional **JSON5** config from `~/.openclaw/openclaw.json` (comments + trailing commas allowed).
|
||||
|
||||
If the file is missing, Moltbot uses safe-ish defaults (embedded Pi agent + per-sender sessions + workspace `~/clawd`). You usually only need a config to:
|
||||
If the file is missing, OpenClaw uses safe-ish defaults (embedded Pi agent + per-sender sessions + workspace `~/.openclaw/workspace`). You usually only need a config to:
|
||||
- restrict who can trigger the bot (`channels.whatsapp.allowFrom`, `channels.telegram.allowFrom`, etc.)
|
||||
- control group allowlists + mention behavior (`channels.whatsapp.groups`, `channels.telegram.groups`, `channels.discord.guilds`, `agents.list[].groupChat`)
|
||||
- customize message prefixes (`messages`)
|
||||
@@ -19,14 +19,14 @@ If the file is missing, Moltbot uses safe-ish defaults (embedded Pi agent + per-
|
||||
|
||||
## Strict config validation
|
||||
|
||||
Moltbot only accepts configurations that fully match the schema.
|
||||
OpenClaw only accepts configurations that fully match the schema.
|
||||
Unknown keys, malformed types, or invalid values cause the Gateway to **refuse to start** for safety.
|
||||
|
||||
When validation fails:
|
||||
- The Gateway does not boot.
|
||||
- Only diagnostic commands are allowed (for example: `moltbot doctor`, `moltbot logs`, `moltbot health`, `moltbot status`, `moltbot service`, `moltbot help`).
|
||||
- Run `moltbot doctor` to see the exact issues.
|
||||
- Run `moltbot doctor --fix` (or `--yes`) to apply migrations/repairs.
|
||||
- Only diagnostic commands are allowed (for example: `openclaw doctor`, `openclaw logs`, `openclaw health`, `openclaw status`, `openclaw service`, `openclaw help`).
|
||||
- Run `openclaw doctor` to see the exact issues.
|
||||
- Run `openclaw doctor --fix` (or `--yes`) to apply migrations/repairs.
|
||||
|
||||
Doctor never writes changes unless you explicitly opt into `--fix`/`--yes`.
|
||||
|
||||
@@ -47,7 +47,7 @@ Use `config.apply` to validate + write the full config and restart the Gateway i
|
||||
It writes a restart sentinel and pings the last active session after the Gateway comes back.
|
||||
|
||||
Warning: `config.apply` replaces the **entire config**. If you want to change only a few keys,
|
||||
use `config.patch` or `moltbot config set`. Keep a backup of `~/.clawdbot/moltbot.json`.
|
||||
use `config.patch` or `openclaw config set`. Keep a backup of `~/.openclaw/openclaw.json`.
|
||||
|
||||
Params:
|
||||
- `raw` (string) — JSON5 payload for the entire config
|
||||
@@ -59,9 +59,9 @@ Params:
|
||||
Example (via `gateway call`):
|
||||
|
||||
```bash
|
||||
moltbot gateway call config.get --params '{}' # capture payload.hash
|
||||
moltbot gateway call config.apply --params '{
|
||||
"raw": "{\\n agents: { defaults: { workspace: \\"~/clawd\\" } }\\n}\\n",
|
||||
openclaw gateway call config.get --params '{}' # capture payload.hash
|
||||
openclaw gateway call config.apply --params '{
|
||||
"raw": "{\\n agents: { defaults: { workspace: \\"~/.openclaw/workspace\\" } }\\n}\\n",
|
||||
"baseHash": "<hash-from-config.get>",
|
||||
"sessionKey": "agent:main:whatsapp:dm:+15555550123",
|
||||
"restartDelayMs": 1000
|
||||
@@ -88,8 +88,8 @@ Params:
|
||||
Example:
|
||||
|
||||
```bash
|
||||
moltbot gateway call config.get --params '{}' # capture payload.hash
|
||||
moltbot gateway call config.patch --params '{
|
||||
openclaw gateway call config.get --params '{}' # capture payload.hash
|
||||
openclaw gateway call config.patch --params '{
|
||||
"raw": "{\\n channels: { telegram: { groups: { \\"*\\": { requireMention: false } } } }\\n}\\n",
|
||||
"baseHash": "<hash-from-config.get>",
|
||||
"sessionKey": "agent:main:whatsapp:dm:+15555550123",
|
||||
@@ -101,7 +101,7 @@ moltbot gateway call config.patch --params '{
|
||||
|
||||
```json5
|
||||
{
|
||||
agents: { defaults: { workspace: "~/clawd" } },
|
||||
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
|
||||
channels: { whatsapp: { allowFrom: ["+15555550123"] } }
|
||||
}
|
||||
```
|
||||
@@ -118,11 +118,11 @@ To prevent the bot from responding to WhatsApp @-mentions in groups (only respon
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
defaults: { workspace: "~/clawd" },
|
||||
defaults: { workspace: "~/.openclaw/workspace" },
|
||||
list: [
|
||||
{
|
||||
id: "main",
|
||||
groupChat: { mentionPatterns: ["@clawd", "reisponde"] }
|
||||
groupChat: { mentionPatterns: ["@openclaw", "reisponde"] }
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -146,7 +146,7 @@ Split your config into multiple files using the `$include` directive. This is us
|
||||
### Basic usage
|
||||
|
||||
```json5
|
||||
// ~/.clawdbot/moltbot.json
|
||||
// ~/.openclaw/openclaw.json
|
||||
{
|
||||
gateway: { port: 18789 },
|
||||
|
||||
@@ -164,11 +164,11 @@ Split your config into multiple files using the `$include` directive. This is us
|
||||
```
|
||||
|
||||
```json5
|
||||
// ~/.clawdbot/agents.json5
|
||||
// ~/.openclaw/agents.json5
|
||||
{
|
||||
defaults: { sandbox: { mode: "all", scope: "session" } },
|
||||
list: [
|
||||
{ id: "main", workspace: "~/clawd" }
|
||||
{ id: "main", workspace: "~/.openclaw/workspace" }
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -208,7 +208,7 @@ Included files can themselves contain `$include` directives (up to 10 levels dee
|
||||
|
||||
```json5
|
||||
{ "$include": "./sub/config.json5" } // relative
|
||||
{ "$include": "/etc/moltbot/base.json5" } // absolute
|
||||
{ "$include": "/etc/openclaw/base.json5" } // absolute
|
||||
{ "$include": "../shared/common.json5" } // parent dir
|
||||
```
|
||||
|
||||
@@ -221,7 +221,7 @@ Included files can themselves contain `$include` directives (up to 10 levels dee
|
||||
### Example: Multi-client legal setup
|
||||
|
||||
```json5
|
||||
// ~/.clawdbot/moltbot.json
|
||||
// ~/.openclaw/openclaw.json
|
||||
{
|
||||
gateway: { port: 18789, auth: { token: "secret" } },
|
||||
|
||||
@@ -248,7 +248,7 @@ Included files can themselves contain `$include` directives (up to 10 levels dee
|
||||
```
|
||||
|
||||
```json5
|
||||
// ~/.clawdbot/clients/mueller/agents.json5
|
||||
// ~/.openclaw/clients/mueller/agents.json5
|
||||
[
|
||||
{ id: "mueller-transcribe", workspace: "~/clients/mueller/transcribe" },
|
||||
{ id: "mueller-docs", workspace: "~/clients/mueller/docs" }
|
||||
@@ -256,7 +256,7 @@ Included files can themselves contain `$include` directives (up to 10 levels dee
|
||||
```
|
||||
|
||||
```json5
|
||||
// ~/.clawdbot/clients/mueller/broadcast.json5
|
||||
// ~/.openclaw/clients/mueller/broadcast.json5
|
||||
{
|
||||
"120363403215116621@g.us": ["mueller-transcribe", "mueller-docs"]
|
||||
}
|
||||
@@ -266,11 +266,11 @@ Included files can themselves contain `$include` directives (up to 10 levels dee
|
||||
|
||||
### Env vars + `.env`
|
||||
|
||||
Moltbot reads env vars from the parent process (shell, launchd/systemd, CI, etc.).
|
||||
OpenClaw reads env vars from the parent process (shell, launchd/systemd, CI, etc.).
|
||||
|
||||
Additionally, it loads:
|
||||
- `.env` from the current working directory (if present)
|
||||
- a global fallback `.env` from `~/.clawdbot/.env` (aka `$CLAWDBOT_STATE_DIR/.env`)
|
||||
- a global fallback `.env` from `~/.openclaw/.env` (aka `$OPENCLAW_STATE_DIR/.env`)
|
||||
|
||||
Neither `.env` file overrides existing env vars.
|
||||
|
||||
@@ -292,7 +292,7 @@ See [/environment](/environment) for full precedence and sources.
|
||||
|
||||
### `env.shellEnv` (optional)
|
||||
|
||||
Opt-in convenience: if enabled and none of the expected keys are set yet, Moltbot runs your login shell and imports only the missing expected keys (never overrides).
|
||||
Opt-in convenience: if enabled and none of the expected keys are set yet, OpenClaw runs your login shell and imports only the missing expected keys (never overrides).
|
||||
This effectively sources your shell profile.
|
||||
|
||||
```json5
|
||||
@@ -307,8 +307,8 @@ This effectively sources your shell profile.
|
||||
```
|
||||
|
||||
Env var equivalent:
|
||||
- `CLAWDBOT_LOAD_SHELL_ENV=1`
|
||||
- `CLAWDBOT_SHELL_ENV_TIMEOUT_MS=15000`
|
||||
- `OPENCLAW_LOAD_SHELL_ENV=1`
|
||||
- `OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000`
|
||||
|
||||
### Env var substitution in config
|
||||
|
||||
@@ -326,7 +326,7 @@ You can reference environment variables directly in any config string value usin
|
||||
},
|
||||
gateway: {
|
||||
auth: {
|
||||
token: "${CLAWDBOT_GATEWAY_TOKEN}"
|
||||
token: "${OPENCLAW_GATEWAY_TOKEN}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -354,25 +354,25 @@ You can reference environment variables directly in any config string value usin
|
||||
|
||||
### Auth storage (OAuth + API keys)
|
||||
|
||||
Moltbot stores **per-agent** auth profiles (OAuth + API keys) in:
|
||||
- `<agentDir>/auth-profiles.json` (default: `~/.clawdbot/agents/<agentId>/agent/auth-profiles.json`)
|
||||
OpenClaw stores **per-agent** auth profiles (OAuth + API keys) in:
|
||||
- `<agentDir>/auth-profiles.json` (default: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`)
|
||||
|
||||
See also: [/concepts/oauth](/concepts/oauth)
|
||||
|
||||
Legacy OAuth imports:
|
||||
- `~/.clawdbot/credentials/oauth.json` (or `$CLAWDBOT_STATE_DIR/credentials/oauth.json`)
|
||||
- `~/.openclaw/credentials/oauth.json` (or `$OPENCLAW_STATE_DIR/credentials/oauth.json`)
|
||||
|
||||
The embedded Pi agent maintains a runtime cache at:
|
||||
- `<agentDir>/auth.json` (managed automatically; don’t edit manually)
|
||||
|
||||
Legacy agent dir (pre multi-agent):
|
||||
- `~/.clawdbot/agent/*` (migrated by `moltbot doctor` into `~/.clawdbot/agents/<defaultAgentId>/agent/*`)
|
||||
- `~/.openclaw/agent/*` (migrated by `openclaw doctor` into `~/.openclaw/agents/<defaultAgentId>/agent/*`)
|
||||
|
||||
Overrides:
|
||||
- OAuth dir (legacy import only): `CLAWDBOT_OAUTH_DIR`
|
||||
- Agent dir (default agent root override): `CLAWDBOT_AGENT_DIR` (preferred), `PI_CODING_AGENT_DIR` (legacy)
|
||||
- OAuth dir (legacy import only): `OPENCLAW_OAUTH_DIR`
|
||||
- Agent dir (default agent root override): `OPENCLAW_AGENT_DIR` (preferred), `PI_CODING_AGENT_DIR` (legacy)
|
||||
|
||||
On first use, Moltbot imports `oauth.json` entries into `auth-profiles.json`.
|
||||
On first use, OpenClaw imports `oauth.json` entries into `auth-profiles.json`.
|
||||
|
||||
### `auth`
|
||||
|
||||
@@ -398,7 +398,7 @@ rotation order used for failover.
|
||||
|
||||
Optional per-agent identity used for defaults and UX. This is written by the macOS onboarding assistant.
|
||||
|
||||
If set, Moltbot derives defaults (only when you haven’t set them explicitly):
|
||||
If set, OpenClaw derives defaults (only when you haven’t set them explicitly):
|
||||
- `messages.ackReaction` from the **active agent**’s `identity.emoji` (falls back to 👀)
|
||||
- `agents.list[].groupChat.mentionPatterns` from the agent’s `identity.name`/`identity.emoji` (so “@Samantha” works in groups across Telegram/Slack/Discord/Google Chat/iMessage/WhatsApp)
|
||||
- `identity.avatar` accepts a workspace-relative image path or a remote URL/data URL. Local files must live inside the agent workspace.
|
||||
@@ -444,8 +444,8 @@ Metadata written by CLI wizards (`onboard`, `configure`, `doctor`).
|
||||
|
||||
### `logging`
|
||||
|
||||
- Default log file: `/tmp/moltbot/moltbot-YYYY-MM-DD.log`
|
||||
- If you want a stable path, set `logging.file` to `/tmp/moltbot/moltbot.log`.
|
||||
- Default log file: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`
|
||||
- If you want a stable path, set `logging.file` to `/tmp/openclaw/openclaw.log`.
|
||||
- Console output can be tuned separately via:
|
||||
- `logging.consoleLevel` (defaults to `info`, bumps to `debug` when `--verbose`)
|
||||
- `logging.consoleStyle` (`pretty` | `compact` | `json`)
|
||||
@@ -457,7 +457,7 @@ Metadata written by CLI wizards (`onboard`, `configure`, `doctor`).
|
||||
{
|
||||
logging: {
|
||||
level: "info",
|
||||
file: "/tmp/moltbot/moltbot.log",
|
||||
file: "/tmp/openclaw/openclaw.log",
|
||||
consoleLevel: "info",
|
||||
consoleStyle: "pretty",
|
||||
redactSensitive: "tools",
|
||||
@@ -481,8 +481,8 @@ Controls how WhatsApp direct chats (DMs) are handled:
|
||||
Pairing codes expire after 1 hour; the bot only sends a pairing code when a new request is created. Pending DM pairing requests are capped at **3 per channel** by default.
|
||||
|
||||
Pairing approvals:
|
||||
- `moltbot pairing list whatsapp`
|
||||
- `moltbot pairing approve whatsapp <code>`
|
||||
- `openclaw pairing list whatsapp`
|
||||
- `openclaw pairing approve whatsapp <code>`
|
||||
|
||||
### `channels.whatsapp.allowFrom`
|
||||
|
||||
@@ -532,8 +532,8 @@ Run multiple WhatsApp accounts in one gateway:
|
||||
default: {}, // optional; keeps the default id stable
|
||||
personal: {},
|
||||
biz: {
|
||||
// Optional override. Default: ~/.clawdbot/credentials/whatsapp/biz
|
||||
// authDir: "~/.clawdbot/credentials/whatsapp/biz",
|
||||
// Optional override. Default: ~/.openclaw/credentials/whatsapp/biz
|
||||
// authDir: "~/.openclaw/credentials/whatsapp/biz",
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -543,7 +543,7 @@ Run multiple WhatsApp accounts in one gateway:
|
||||
|
||||
Notes:
|
||||
- Outbound commands default to account `default` if present; otherwise the first configured account id (sorted).
|
||||
- The legacy single-account Baileys auth dir is migrated by `moltbot doctor` into `whatsapp/default`.
|
||||
- The legacy single-account Baileys auth dir is migrated by `openclaw doctor` into `whatsapp/default`.
|
||||
|
||||
### `channels.telegram.accounts` / `channels.discord.accounts` / `channels.googlechat.accounts` / `channels.slack.accounts` / `channels.mattermost.accounts` / `channels.signal.accounts` / `channels.imessage.accounts`
|
||||
|
||||
@@ -590,7 +590,7 @@ Group messages default to **require mention** (either metadata mention or regex
|
||||
},
|
||||
agents: {
|
||||
list: [
|
||||
{ id: "main", groupChat: { mentionPatterns: ["@clawd", "moltbot", "clawd"] } }
|
||||
{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -652,7 +652,7 @@ To respond **only** to specific text triggers (ignoring native @-mentions):
|
||||
id: "main",
|
||||
groupChat: {
|
||||
// Only these text patterns will trigger responses
|
||||
mentionPatterns: ["reisponde", "@clawd"]
|
||||
mentionPatterns: ["reisponde", "@openclaw"]
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -723,8 +723,8 @@ Inbound messages are routed to an agent via bindings.
|
||||
- `default`: optional; when multiple are set, the first wins and a warning is logged.
|
||||
If none are set, the **first entry** in the list is the default agent.
|
||||
- `name`: display name for the agent.
|
||||
- `workspace`: default `~/clawd-<agentId>` (for `main`, falls back to `agents.defaults.workspace`).
|
||||
- `agentDir`: default `~/.clawdbot/agents/<agentId>/agent`.
|
||||
- `workspace`: default `~/.openclaw/workspace-<agentId>` (for `main`, falls back to `agents.defaults.workspace`).
|
||||
- `agentDir`: default `~/.openclaw/agents/<agentId>/agent`.
|
||||
- `model`: per-agent default model, overrides `agents.defaults.model` for that agent.
|
||||
- string form: `"provider/model"`, overrides only `agents.defaults.model.primary`
|
||||
- object form: `{ primary, fallbacks }` (fallbacks override `agents.defaults.model.fallbacks`; `[]` disables global fallbacks for that agent)
|
||||
@@ -779,7 +779,7 @@ Full access (no sandbox):
|
||||
list: [
|
||||
{
|
||||
id: "personal",
|
||||
workspace: "~/clawd-personal",
|
||||
workspace: "~/.openclaw/workspace-personal",
|
||||
sandbox: { mode: "off" }
|
||||
}
|
||||
]
|
||||
@@ -794,7 +794,7 @@ Read-only tools + read-only workspace:
|
||||
list: [
|
||||
{
|
||||
id: "family",
|
||||
workspace: "~/clawd-family",
|
||||
workspace: "~/.openclaw/workspace-family",
|
||||
sandbox: {
|
||||
mode: "all",
|
||||
scope: "agent",
|
||||
@@ -817,7 +817,7 @@ No filesystem access (messaging/session tools enabled):
|
||||
list: [
|
||||
{
|
||||
id: "public",
|
||||
workspace: "~/clawd-public",
|
||||
workspace: "~/.openclaw/workspace-public",
|
||||
sandbox: {
|
||||
mode: "all",
|
||||
scope: "agent",
|
||||
@@ -839,8 +839,8 @@ Example: two WhatsApp accounts → two agents:
|
||||
{
|
||||
agents: {
|
||||
list: [
|
||||
{ id: "home", default: true, workspace: "~/clawd-home" },
|
||||
{ id: "work", workspace: "~/clawd-work" }
|
||||
{ id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
|
||||
{ id: "work", workspace: "~/.openclaw/workspace-work" }
|
||||
]
|
||||
},
|
||||
bindings: [
|
||||
@@ -949,7 +949,7 @@ Notes:
|
||||
- `channels.telegram.customCommands` adds extra Telegram bot menu entries. Names are normalized; conflicts with native commands are ignored.
|
||||
- `commands.bash: true` enables `! <cmd>` to run host shell commands (`/bash <cmd>` also works as an alias). Requires `tools.elevated.enabled` and allowlisting the sender in `tools.elevated.allowFrom.<channel>`.
|
||||
- `commands.bashForegroundMs` controls how long bash waits before backgrounding. While a bash job is running, new `! <cmd>` requests are rejected (one at a time).
|
||||
- `commands.config: true` enables `/config` (reads/writes `moltbot.json`).
|
||||
- `commands.config: true` enables `/config` (reads/writes `openclaw.json`).
|
||||
- `channels.<provider>.configWrites` gates config mutations initiated by that channel (default: true). This applies to `/config set|unset` plus provider-specific auto-migrations (Telegram supergroup ID changes, Slack channel ID changes).
|
||||
- `commands.debug: true` enables `/debug` (runtime-only overrides).
|
||||
- `commands.restart: true` enables `/restart` and the gateway tool restart action.
|
||||
@@ -980,7 +980,7 @@ Set `web.enabled: false` to keep it off by default.
|
||||
|
||||
### `channels.telegram` (bot transport)
|
||||
|
||||
Moltbot starts Telegram only when a `channels.telegram` config section exists. The bot token is resolved from `channels.telegram.botToken` (or `channels.telegram.tokenFile`), with `TELEGRAM_BOT_TOKEN` as a fallback for the default account.
|
||||
OpenClaw starts Telegram only when a `channels.telegram` config section exists. The bot token is resolved from `channels.telegram.botToken` (or `channels.telegram.tokenFile`), with `TELEGRAM_BOT_TOKEN` as a fallback for the default account.
|
||||
Set `channels.telegram.enabled: false` to disable automatic startup.
|
||||
Multi-account support lives under `channels.telegram.accounts` (see the multi-account section above). Env tokens only apply to the default account.
|
||||
Set `channels.telegram.configWrites: false` to block Telegram-initiated config writes (including supergroup ID migrations and `/config set|unset`).
|
||||
@@ -1083,11 +1083,11 @@ Multi-account support lives under `channels.discord.accounts` (see the multi-acc
|
||||
policy: "pairing", // pairing | allowlist | open | disabled
|
||||
allowFrom: ["1234567890", "steipete"], // optional DM allowlist ("open" requires ["*"])
|
||||
groupEnabled: false, // enable group DMs
|
||||
groupChannels: ["clawd-dm"] // optional group DM allowlist
|
||||
groupChannels: ["openclaw-dm"] // optional group DM allowlist
|
||||
},
|
||||
guilds: {
|
||||
"123456789012345678": { // guild id (preferred) or slug
|
||||
slug: "friends-of-clawd",
|
||||
slug: "friends-of-openclaw",
|
||||
requireMention: false, // per-guild default
|
||||
reactionNotifications: "own", // off | own | all | allowlist
|
||||
users: ["987654321098765432"], // optional per-guild user allowlist
|
||||
@@ -1118,7 +1118,7 @@ Multi-account support lives under `channels.discord.accounts` (see the multi-acc
|
||||
}
|
||||
```
|
||||
|
||||
Moltbot starts Discord only when a `channels.discord` config section exists. The token is resolved from `channels.discord.token`, with `DISCORD_BOT_TOKEN` as a fallback for the default account (unless `channels.discord.enabled` is `false`). Use `user:<id>` (DM) or `channel:<id>` (guild channel) when specifying delivery targets for cron/CLI commands; bare numeric IDs are ambiguous and rejected.
|
||||
OpenClaw starts Discord only when a `channels.discord` config section exists. The token is resolved from `channels.discord.token`, with `DISCORD_BOT_TOKEN` as a fallback for the default account (unless `channels.discord.enabled` is `false`). Use `user:<id>` (DM) or `channel:<id>` (guild channel) when specifying delivery targets for cron/CLI commands; bare numeric IDs are ambiguous and rejected.
|
||||
Guild slugs are lowercase with spaces replaced by `-`; channel keys use the slugged channel name (no leading `#`). Prefer guild ids as keys to avoid rename ambiguity.
|
||||
Bot-authored messages are ignored by default. Enable with `channels.discord.allowBots` (own messages are still filtered to prevent self-reply loops).
|
||||
Reaction notification modes:
|
||||
@@ -1214,7 +1214,7 @@ Slack runs in Socket Mode and requires both a bot token and app token:
|
||||
},
|
||||
slashCommand: {
|
||||
enabled: true,
|
||||
name: "clawd",
|
||||
name: "openclaw",
|
||||
sessionPrefix: "slack:slash",
|
||||
ephemeral: true
|
||||
},
|
||||
@@ -1228,7 +1228,7 @@ Slack runs in Socket Mode and requires both a bot token and app token:
|
||||
|
||||
Multi-account support lives under `channels.slack.accounts` (see the multi-account section above). Env tokens only apply to the default account.
|
||||
|
||||
Moltbot starts Slack when the provider is enabled and both tokens are set (via config or `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN`). Use `user:<id>` (DM) or `channel:<id>` when specifying delivery targets for cron/CLI commands.
|
||||
OpenClaw starts Slack when the provider is enabled and both tokens are set (via config or `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN`). Use `user:<id>` (DM) or `channel:<id>` when specifying delivery targets for cron/CLI commands.
|
||||
Set `channels.slack.configWrites: false` to block Slack-initiated config writes (including channel ID migrations and `/config set|unset`).
|
||||
|
||||
Bot-authored messages are ignored by default. Enable with `channels.slack.allowBots` or `channels.slack.channels.<id>.allowBots`.
|
||||
@@ -1255,7 +1255,7 @@ Slack action groups (gate `slack` tool actions):
|
||||
### `channels.mattermost` (bot token)
|
||||
|
||||
Mattermost ships as a plugin and is not bundled with the core install.
|
||||
Install it first: `moltbot plugins install @moltbot/mattermost` (or `./extensions/mattermost` from a git checkout).
|
||||
Install it first: `openclaw plugins install @openclaw/mattermost` (or `./extensions/mattermost` from a git checkout).
|
||||
|
||||
Mattermost requires a bot token plus the base URL for your server:
|
||||
|
||||
@@ -1276,7 +1276,7 @@ Mattermost requires a bot token plus the base URL for your server:
|
||||
}
|
||||
```
|
||||
|
||||
Moltbot starts Mattermost when the account is configured (bot token + base URL) and enabled. The token + base URL are resolved from `channels.mattermost.botToken` + `channels.mattermost.baseUrl` or `MATTERMOST_BOT_TOKEN` + `MATTERMOST_URL` for the default account (unless `channels.mattermost.enabled` is `false`).
|
||||
OpenClaw starts Mattermost when the account is configured (bot token + base URL) and enabled. The token + base URL are resolved from `channels.mattermost.botToken` + `channels.mattermost.baseUrl` or `MATTERMOST_BOT_TOKEN` + `MATTERMOST_URL` for the default account (unless `channels.mattermost.enabled` is `false`).
|
||||
|
||||
Chat modes:
|
||||
- `oncall` (default): respond to channel messages only when @mentioned.
|
||||
@@ -1315,7 +1315,7 @@ Reaction notification modes:
|
||||
|
||||
### `channels.imessage` (imsg CLI)
|
||||
|
||||
Moltbot spawns `imsg rpc` (JSON-RPC over stdio). No daemon or port required.
|
||||
OpenClaw spawns `imsg rpc` (JSON-RPC over stdio). No daemon or port required.
|
||||
|
||||
```json5
|
||||
{
|
||||
@@ -1356,11 +1356,11 @@ exec ssh -T gateway-host imsg "$@"
|
||||
|
||||
Sets the **single global workspace directory** used by the agent for file operations.
|
||||
|
||||
Default: `~/clawd`.
|
||||
Default: `~/.openclaw/workspace`.
|
||||
|
||||
```json5
|
||||
{
|
||||
agents: { defaults: { workspace: "~/clawd" } }
|
||||
agents: { defaults: { workspace: "~/.openclaw/workspace" } }
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1369,13 +1369,13 @@ own per-scope workspaces under `agents.defaults.sandbox.workspaceRoot`.
|
||||
|
||||
### `agents.defaults.repoRoot`
|
||||
|
||||
Optional repository root to show in the system prompt’s Runtime line. If unset, Moltbot
|
||||
Optional repository root to show in the system prompt’s Runtime line. If unset, OpenClaw
|
||||
tries to detect a `.git` directory by walking upward from the workspace (and current
|
||||
working directory). The path must exist to be used.
|
||||
|
||||
```json5
|
||||
{
|
||||
agents: { defaults: { repoRoot: "~/Projects/moltbot" } }
|
||||
agents: { defaults: { repoRoot: "~/Projects/openclaw" } }
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1396,7 +1396,7 @@ Use this for pre-seeded deployments where your workspace files come from a repo.
|
||||
Max characters of each workspace bootstrap file injected into the system prompt
|
||||
before truncation. Default: `20000`.
|
||||
|
||||
When a file exceeds this limit, Moltbot logs a warning and injects a truncated
|
||||
When a file exceeds this limit, OpenClaw logs a warning and injects a truncated
|
||||
head/tail with a marker.
|
||||
|
||||
```json5
|
||||
@@ -1408,7 +1408,7 @@ head/tail with a marker.
|
||||
### `agents.defaults.userTimezone`
|
||||
|
||||
Sets the user’s timezone for **system prompt context** (not for timestamps in
|
||||
message envelopes). If unset, Moltbot uses the host timezone at runtime.
|
||||
message envelopes). If unset, OpenClaw uses the host timezone at runtime.
|
||||
|
||||
```json5
|
||||
{
|
||||
@@ -1448,7 +1448,7 @@ streaming, final replies) across channels unless already present.
|
||||
|
||||
If `messages.responsePrefix` is unset, no prefix is applied by default. WhatsApp self-chat
|
||||
replies are the exception: they default to `[{identity.name}]` when set, otherwise
|
||||
`[moltbot]`, so same-phone conversations stay legible.
|
||||
`[openclaw]`, so same-phone conversations stay legible.
|
||||
Set it to `"auto"` to derive `[{identity.name}]` for the routed agent (when set).
|
||||
|
||||
#### Template variables
|
||||
@@ -1477,9 +1477,9 @@ Unresolved variables remain as literal text.
|
||||
Example output: `[claude-opus-4-5 | think:high] Here's my response...`
|
||||
|
||||
WhatsApp inbound prefix is configured via `channels.whatsapp.messagePrefix` (deprecated:
|
||||
`messages.messagePrefix`). Default stays **unchanged**: `"[moltbot]"` when
|
||||
`messages.messagePrefix`). Default stays **unchanged**: `"[openclaw]"` when
|
||||
`channels.whatsapp.allowFrom` is empty, otherwise `""` (no prefix). When using
|
||||
`"[moltbot]"`, Moltbot will instead use `[{identity.name}]` when the routed
|
||||
`"[openclaw]"`, OpenClaw will instead use `[{identity.name}]` when the routed
|
||||
agent has `identity.name` set.
|
||||
|
||||
`ackReaction` sends a best-effort emoji reaction to acknowledge inbound messages
|
||||
@@ -1497,7 +1497,7 @@ active agent’s `identity.emoji` when set, otherwise `"👀"`. Set it to `""` t
|
||||
|
||||
#### `messages.tts`
|
||||
|
||||
Enable text-to-speech for outbound replies. When on, Moltbot generates audio
|
||||
Enable text-to-speech for outbound replies. When on, OpenClaw generates audio
|
||||
using ElevenLabs or OpenAI and attaches it to responses. Telegram uses Opus
|
||||
voice notes; other channels send MP3 audio.
|
||||
|
||||
@@ -1514,7 +1514,7 @@ voice notes; other channels send MP3 audio.
|
||||
},
|
||||
maxTextLength: 4000,
|
||||
timeoutMs: 30000,
|
||||
prefsPath: "~/.clawdbot/settings/tts.json",
|
||||
prefsPath: "~/.openclaw/settings/tts.json",
|
||||
elevenlabs: {
|
||||
apiKey: "elevenlabs_api_key",
|
||||
baseUrl: "https://api.elevenlabs.io",
|
||||
@@ -1613,7 +1613,7 @@ Z.AI GLM-4.x models automatically enable thinking mode unless you:
|
||||
- set `--thinking off`, or
|
||||
- define `agents.defaults.models["zai/<model>"].params.thinking` yourself.
|
||||
|
||||
Moltbot also ships a few built-in alias shorthands. Defaults only apply when the model
|
||||
OpenClaw also ships a few built-in alias shorthands. Defaults only apply when the model
|
||||
is already present in `agents.defaults.models`:
|
||||
|
||||
- `opus` -> `anthropic/claude-opus-4-5`
|
||||
@@ -1908,7 +1908,7 @@ See [/concepts/typing-indicators](/concepts/typing-indicators) for behavior deta
|
||||
|
||||
`agents.defaults.model.primary` should be set as `provider/model` (e.g. `anthropic/claude-opus-4-5`).
|
||||
Aliases come from `agents.defaults.models.*.alias` (e.g. `Opus`).
|
||||
If you omit the provider, Moltbot currently assumes `anthropic` as a temporary
|
||||
If you omit the provider, OpenClaw currently assumes `anthropic` as a temporary
|
||||
deprecation fallback.
|
||||
Z.AI models are available as `zai/<model>` (e.g. `zai/glm-4.7`) and require
|
||||
`ZAI_API_KEY` (or legacy `Z_AI_API_KEY`) in the environment.
|
||||
@@ -1943,7 +1943,7 @@ Note: `applyPatch` is only under `tools.exec`.
|
||||
|
||||
`tools.web` configures web search + fetch tools:
|
||||
- `tools.web.search.enabled` (default: true when key is present)
|
||||
- `tools.web.search.apiKey` (recommended: set via `moltbot configure --section web`, or use `BRAVE_API_KEY` env var)
|
||||
- `tools.web.search.apiKey` (recommended: set via `openclaw configure --section web`, or use `BRAVE_API_KEY` env var)
|
||||
- `tools.web.search.maxResults` (1–10, default 5)
|
||||
- `tools.web.search.timeoutSeconds` (default 30)
|
||||
- `tools.web.search.cacheTtlMinutes` (default 15)
|
||||
@@ -2101,7 +2101,7 @@ Tool groups (shorthands) work in **global** and **per-agent** tool policies:
|
||||
- `group:automation`: `cron`, `gateway`
|
||||
- `group:messaging`: `message`
|
||||
- `group:nodes`: `nodes`
|
||||
- `group:moltbot`: all built-in Moltbot tools (excludes provider plugins)
|
||||
- `group:openclaw`: all built-in OpenClaw tools (excludes provider plugins)
|
||||
|
||||
`tools.elevated` controls elevated (host) exec access:
|
||||
- `enabled`: allow elevated mode (default true)
|
||||
@@ -2165,7 +2165,7 @@ Defaults (if enabled):
|
||||
- scope: `"agent"` (one container + workspace per agent)
|
||||
- Debian bookworm-slim based image
|
||||
- agent workspace access: `workspaceAccess: "none"` (default)
|
||||
- `"none"`: use a per-scope sandbox workspace under `~/.clawdbot/sandboxes`
|
||||
- `"none"`: use a per-scope sandbox workspace under `~/.openclaw/sandboxes`
|
||||
- `"ro"`: keep the sandbox workspace at `/workspace`, and mount the agent workspace read-only at `/agent` (disables `write`/`edit`/`apply_patch`)
|
||||
- `"rw"`: mount the agent workspace read/write at `/workspace`
|
||||
- auto-prune: idle > 24h OR age > 7d
|
||||
@@ -2192,10 +2192,10 @@ For package installs, ensure network egress, a writable root FS, and a root user
|
||||
mode: "non-main", // off | non-main | all
|
||||
scope: "agent", // session | agent | shared (agent is default)
|
||||
workspaceAccess: "none", // none | ro | rw
|
||||
workspaceRoot: "~/.clawdbot/sandboxes",
|
||||
workspaceRoot: "~/.openclaw/sandboxes",
|
||||
docker: {
|
||||
image: "moltbot-sandbox:bookworm-slim",
|
||||
containerPrefix: "moltbot-sbx-",
|
||||
image: "openclaw-sandbox:bookworm-slim",
|
||||
containerPrefix: "openclaw-sbx-",
|
||||
workdir: "/workspace",
|
||||
readOnlyRoot: true,
|
||||
tmpfs: ["/tmp", "/var/tmp", "/run"],
|
||||
@@ -2214,15 +2214,15 @@ For package installs, ensure network egress, a writable root FS, and a root user
|
||||
nproc: 256
|
||||
},
|
||||
seccompProfile: "/path/to/seccomp.json",
|
||||
apparmorProfile: "moltbot-sandbox",
|
||||
apparmorProfile: "openclaw-sandbox",
|
||||
dns: ["1.1.1.1", "8.8.8.8"],
|
||||
extraHosts: ["internal.service:10.0.0.5"],
|
||||
binds: ["/var/run/docker.sock:/var/run/docker.sock", "/home/user/source:/source:rw"]
|
||||
},
|
||||
browser: {
|
||||
enabled: false,
|
||||
image: "moltbot-sandbox-browser:bookworm-slim",
|
||||
containerPrefix: "moltbot-sbx-browser-",
|
||||
image: "openclaw-sandbox-browser:bookworm-slim",
|
||||
containerPrefix: "openclaw-sbx-browser-",
|
||||
cdpPort: 9222,
|
||||
vncPort: 5900,
|
||||
noVncPort: 6080,
|
||||
@@ -2289,14 +2289,14 @@ Defaults: all allowlists are unset (no restriction). `allowHostControl` defaults
|
||||
|
||||
### `models` (custom providers + base URLs)
|
||||
|
||||
Moltbot uses the **pi-coding-agent** model catalog. You can add custom providers
|
||||
OpenClaw uses the **pi-coding-agent** model catalog. You can add custom providers
|
||||
(LiteLLM, local OpenAI-compatible servers, Anthropic proxies, etc.) by writing
|
||||
`~/.clawdbot/agents/<agentId>/agent/models.json` or by defining the same schema inside your
|
||||
Moltbot config under `models.providers`.
|
||||
`~/.openclaw/agents/<agentId>/agent/models.json` or by defining the same schema inside your
|
||||
OpenClaw config under `models.providers`.
|
||||
Provider-by-provider overview + examples: [/concepts/model-providers](/concepts/model-providers).
|
||||
|
||||
When `models.providers` is present, Moltbot writes/merges a `models.json` into
|
||||
`~/.clawdbot/agents/<agentId>/agent/` on startup:
|
||||
When `models.providers` is present, OpenClaw writes/merges a `models.json` into
|
||||
`~/.openclaw/agents/<agentId>/agent/` on startup:
|
||||
- default behavior: **merge** (keeps existing providers, overrides on name)
|
||||
- set `models.mode: "replace"` to overwrite the file contents
|
||||
|
||||
@@ -2338,14 +2338,14 @@ Select the model via `agents.defaults.model.primary` (provider/model).
|
||||
|
||||
### OpenCode Zen (multi-model proxy)
|
||||
|
||||
OpenCode Zen is a multi-model gateway with per-model endpoints. Moltbot uses
|
||||
OpenCode Zen is a multi-model gateway with per-model endpoints. OpenClaw uses
|
||||
the built-in `opencode` provider from pi-ai; set `OPENCODE_API_KEY` (or
|
||||
`OPENCODE_ZEN_API_KEY`) from https://opencode.ai/auth.
|
||||
|
||||
Notes:
|
||||
- Model refs use `opencode/<modelId>` (example: `opencode/claude-opus-4-5`).
|
||||
- If you enable an allowlist via `agents.defaults.models`, add each model you plan to use.
|
||||
- Shortcut: `moltbot onboard --auth-choice opencode-zen`.
|
||||
- Shortcut: `openclaw onboard --auth-choice opencode-zen`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@@ -2363,7 +2363,7 @@ Notes:
|
||||
Z.AI models are available via the built-in `zai` provider. Set `ZAI_API_KEY`
|
||||
in your environment and reference the model by provider/model.
|
||||
|
||||
Shortcut: `moltbot onboard --auth-choice zai-api-key`.
|
||||
Shortcut: `openclaw onboard --auth-choice zai-api-key`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@@ -2425,7 +2425,7 @@ Use Moonshot's OpenAI-compatible endpoint:
|
||||
```
|
||||
|
||||
Notes:
|
||||
- Set `MOONSHOT_API_KEY` in the environment or use `moltbot onboard --auth-choice moonshot-api-key`.
|
||||
- Set `MOONSHOT_API_KEY` in the environment or use `openclaw onboard --auth-choice moonshot-api-key`.
|
||||
- Model ref: `moonshot/kimi-k2.5`.
|
||||
- Use `https://api.moonshot.cn/v1` if you need the China endpoint.
|
||||
|
||||
@@ -2469,7 +2469,7 @@ Use Kimi Code's dedicated OpenAI-compatible endpoint (separate from Moonshot):
|
||||
```
|
||||
|
||||
Notes:
|
||||
- Set `KIMICODE_API_KEY` in the environment or use `moltbot onboard --auth-choice kimi-code-api-key`.
|
||||
- Set `KIMICODE_API_KEY` in the environment or use `openclaw onboard --auth-choice kimi-code-api-key`.
|
||||
- Model ref: `kimi-code/kimi-for-coding`.
|
||||
|
||||
### Synthetic (Anthropic-compatible)
|
||||
@@ -2510,7 +2510,7 @@ Use Synthetic's Anthropic-compatible endpoint:
|
||||
```
|
||||
|
||||
Notes:
|
||||
- Set `SYNTHETIC_API_KEY` or use `moltbot onboard --auth-choice synthetic-api-key`.
|
||||
- Set `SYNTHETIC_API_KEY` or use `openclaw onboard --auth-choice synthetic-api-key`.
|
||||
- Model ref: `synthetic/hf:MiniMaxAI/MiniMax-M2.1`.
|
||||
- Base URL should omit `/v1` because the Anthropic client appends it.
|
||||
|
||||
@@ -2557,7 +2557,7 @@ Use MiniMax M2.1 directly without LM Studio:
|
||||
```
|
||||
|
||||
Notes:
|
||||
- Set `MINIMAX_API_KEY` environment variable or use `moltbot onboard --auth-choice minimax-api`.
|
||||
- Set `MINIMAX_API_KEY` environment variable or use `openclaw onboard --auth-choice minimax-api`.
|
||||
- Available model: `MiniMax-M2.1` (default).
|
||||
- Update pricing in `models.json` if you need exact cost tracking.
|
||||
|
||||
@@ -2605,8 +2605,8 @@ Notes:
|
||||
- Supported APIs: `openai-completions`, `openai-responses`, `anthropic-messages`,
|
||||
`google-generative-ai`
|
||||
- Use `authHeader: true` + `headers` for custom auth needs.
|
||||
- Override the agent config root with `CLAWDBOT_AGENT_DIR` (or `PI_CODING_AGENT_DIR`)
|
||||
if you want `models.json` stored elsewhere (default: `~/.clawdbot/agents/main/agent`).
|
||||
- Override the agent config root with `OPENCLAW_AGENT_DIR` (or `PI_CODING_AGENT_DIR`)
|
||||
if you want `models.json` stored elsewhere (default: `~/.openclaw/agents/main/agent`).
|
||||
|
||||
### `session`
|
||||
|
||||
@@ -2631,9 +2631,9 @@ Controls session scoping, reset policy, reset triggers, and where the session st
|
||||
group: { mode: "idle", idleMinutes: 120 }
|
||||
},
|
||||
resetTriggers: ["/new", "/reset"],
|
||||
// Default is already per-agent under ~/.clawdbot/agents/<agentId>/sessions/sessions.json
|
||||
// Default is already per-agent under ~/.openclaw/agents/<agentId>/sessions/sessions.json
|
||||
// You can override with {agentId} templating:
|
||||
store: "~/.clawdbot/agents/{agentId}/sessions/sessions.json",
|
||||
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
|
||||
// Direct chats collapse to agent:<agentId>:<mainKey> (default: "main").
|
||||
mainKey: "main",
|
||||
agentToAgent: {
|
||||
@@ -2665,7 +2665,7 @@ Fields:
|
||||
- `atHour`: local hour (0-23) for the daily reset boundary.
|
||||
- `idleMinutes`: sliding idle window in minutes. When daily + idle are both configured, whichever expires first wins.
|
||||
- `resetByType`: per-session overrides for `dm`, `group`, and `thread`.
|
||||
- If you only set legacy `session.idleMinutes` without any `reset`/`resetByType`, Moltbot stays in idle-only mode for backward compatibility.
|
||||
- If you only set legacy `session.idleMinutes` without any `reset`/`resetByType`, OpenClaw stays in idle-only mode for backward compatibility.
|
||||
- `heartbeatIdleMinutes`: optional idle override for heartbeat checks (daily reset still applies when enabled).
|
||||
- `agentToAgent.maxPingPongTurns`: max reply-back turns between requester/target (0–5, default 5).
|
||||
- `sendPolicy.default`: `allow` or `deny` fallback when no rule matches.
|
||||
@@ -2674,7 +2674,7 @@ Fields:
|
||||
### `skills` (skills config)
|
||||
|
||||
Controls bundled allowlist, install preferences, extra skill folders, and per-skill
|
||||
overrides. Applies to **bundled** skills and `~/.clawdbot/skills` (workspace skills
|
||||
overrides. Applies to **bundled** skills and `~/.openclaw/skills` (workspace skills
|
||||
still win on name conflicts).
|
||||
|
||||
Fields:
|
||||
@@ -2723,7 +2723,7 @@ Example:
|
||||
### `plugins` (extensions)
|
||||
|
||||
Controls plugin discovery, allow/deny, and per-plugin config. Plugins are loaded
|
||||
from `~/.clawdbot/extensions`, `<workspace>/.clawdbot/extensions`, plus any
|
||||
from `~/.openclaw/extensions`, `<workspace>/.openclaw/extensions`, plus any
|
||||
`plugins.load.paths` entries. **Config changes require a gateway restart.**
|
||||
See [/plugin](/plugin) for full usage.
|
||||
|
||||
@@ -2758,9 +2758,9 @@ Example:
|
||||
}
|
||||
```
|
||||
|
||||
### `browser` (clawd-managed browser)
|
||||
### `browser` (openclaw-managed browser)
|
||||
|
||||
Moltbot can start a **dedicated, isolated** Chrome/Brave/Edge/Chromium instance for clawd and expose a small loopback control service.
|
||||
OpenClaw can start a **dedicated, isolated** Chrome/Brave/Edge/Chromium instance for openclaw and expose a small loopback control service.
|
||||
Profiles can point at a **remote** Chromium-based browser via `profiles.<name>.cdpUrl`. Remote
|
||||
profiles are attach-only (start/stop/reset are disabled).
|
||||
|
||||
@@ -2773,7 +2773,7 @@ Defaults:
|
||||
- control service: loopback only (port derived from `gateway.port`, default `18791`)
|
||||
- CDP URL: `http://127.0.0.1:18792` (control service + 1, legacy single-profile)
|
||||
- profile color: `#FF4500` (lobster-orange)
|
||||
- Note: the control server is started by the running gateway (Moltbot.app menubar, or `moltbot gateway`).
|
||||
- Note: the control server is started by the running gateway (OpenClaw.app menubar, or `openclaw gateway`).
|
||||
- Auto-detect order: default browser if Chromium-based; otherwise Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
|
||||
```json5
|
||||
@@ -2784,7 +2784,7 @@ Defaults:
|
||||
// cdpUrl: "http://127.0.0.1:18792", // legacy single-profile override
|
||||
defaultProfile: "chrome",
|
||||
profiles: {
|
||||
clawd: { cdpPort: 18800, color: "#FF4500" },
|
||||
openclaw: { cdpPort: 18800, color: "#FF4500" },
|
||||
work: { cdpPort: 18801, color: "#0066CC" },
|
||||
remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }
|
||||
},
|
||||
@@ -2811,7 +2811,7 @@ If unset, clients fall back to a muted light-blue.
|
||||
// Optional: Control UI assistant identity override.
|
||||
// If unset, the Control UI uses the active agent identity (config or IDENTITY.md).
|
||||
assistant: {
|
||||
name: "Moltbot",
|
||||
name: "OpenClaw",
|
||||
avatar: "CB" // emoji, short text, or image URL/data URI
|
||||
}
|
||||
}
|
||||
@@ -2833,7 +2833,7 @@ Defaults:
|
||||
mode: "local", // or "remote"
|
||||
port: 18789, // WS + HTTP multiplex
|
||||
bind: "loopback",
|
||||
// controlUi: { enabled: true, basePath: "/moltbot" }
|
||||
// controlUi: { enabled: true, basePath: "/openclaw" }
|
||||
// auth: { mode: "token", token: "your-token" } // token gates WS + Control UI access
|
||||
// tailscale: { mode: "off" | "serve" | "funnel" }
|
||||
}
|
||||
@@ -2842,7 +2842,7 @@ Defaults:
|
||||
|
||||
Control UI base path:
|
||||
- `gateway.controlUi.basePath` sets the URL prefix where the Control UI is served.
|
||||
- Examples: `"/ui"`, `"/moltbot"`, `"/apps/moltbot"`.
|
||||
- Examples: `"/ui"`, `"/openclaw"`, `"/apps/openclaw"`.
|
||||
- Default: root (`/`) (unchanged).
|
||||
- `gateway.controlUi.allowInsecureAuth` allows token-only auth for the Control UI when
|
||||
device identity is omitted (typically over HTTP). Default: `false`. Prefer HTTPS
|
||||
@@ -2858,14 +2858,14 @@ Related docs:
|
||||
|
||||
Trusted proxies:
|
||||
- `gateway.trustedProxies`: list of reverse proxy IPs that terminate TLS in front of the Gateway.
|
||||
- When a connection comes from one of these IPs, Moltbot uses `x-forwarded-for` (or `x-real-ip`) to determine the client IP for local pairing checks and HTTP auth/local checks.
|
||||
- When a connection comes from one of these IPs, OpenClaw uses `x-forwarded-for` (or `x-real-ip`) to determine the client IP for local pairing checks and HTTP auth/local checks.
|
||||
- Only list proxies you fully control, and ensure they **overwrite** incoming `x-forwarded-for`.
|
||||
|
||||
Notes:
|
||||
- `moltbot gateway` refuses to start unless `gateway.mode` is set to `local` (or you pass the override flag).
|
||||
- `openclaw gateway` refuses to start unless `gateway.mode` is set to `local` (or you pass the override flag).
|
||||
- `gateway.port` controls the single multiplexed port used for WebSocket + HTTP (control UI, hooks, A2UI).
|
||||
- OpenAI Chat Completions endpoint: **disabled by default**; enable with `gateway.http.endpoints.chatCompletions.enabled: true`.
|
||||
- Precedence: `--port` > `CLAWDBOT_GATEWAY_PORT` > `gateway.port` > default `18789`.
|
||||
- Precedence: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > default `18789`.
|
||||
- Gateway auth is required by default (token/password or Tailscale Serve identity). Non-loopback binds require a shared token/password.
|
||||
- The onboarding wizard generates a gateway token by default (even on loopback).
|
||||
- `gateway.remote.token` is **only** for remote CLI calls; it does not enable local gateway auth. `gateway.token` is ignored.
|
||||
@@ -2874,10 +2874,10 @@ Auth and Tailscale:
|
||||
- `gateway.auth.mode` sets the handshake requirements (`token` or `password`). When unset, token auth is assumed.
|
||||
- `gateway.auth.token` stores the shared token for token auth (used by the CLI on the same machine).
|
||||
- When `gateway.auth.mode` is set, only that method is accepted (plus optional Tailscale headers).
|
||||
- `gateway.auth.password` can be set here, or via `CLAWDBOT_GATEWAY_PASSWORD` (recommended).
|
||||
- `gateway.auth.password` can be set here, or via `OPENCLAW_GATEWAY_PASSWORD` (recommended).
|
||||
- `gateway.auth.allowTailscale` allows Tailscale Serve identity headers
|
||||
(`tailscale-user-login`) to satisfy auth when the request arrives on loopback
|
||||
with `x-forwarded-for`, `x-forwarded-proto`, and `x-forwarded-host`. Moltbot
|
||||
with `x-forwarded-for`, `x-forwarded-proto`, and `x-forwarded-host`. OpenClaw
|
||||
verifies the identity by resolving the `x-forwarded-for` address via
|
||||
`tailscale whois` before accepting it. When `true`, Serve requests do not need
|
||||
a token/password; set `false` to require explicit credentials. Defaults to
|
||||
@@ -2893,7 +2893,7 @@ Remote client defaults (CLI):
|
||||
- `gateway.remote.password` supplies the password for remote calls (leave unset for no auth).
|
||||
|
||||
macOS app behavior:
|
||||
- Moltbot.app watches `~/.clawdbot/moltbot.json` and switches modes live when `gateway.mode` or `gateway.remote.url` changes.
|
||||
- OpenClaw.app watches `~/.openclaw/openclaw.json` and switches modes live when `gateway.mode` or `gateway.remote.url` changes.
|
||||
- If `gateway.mode` is unset but `gateway.remote.url` is set, the macOS app treats it as remote mode.
|
||||
- When you change connection mode in the macOS app, it writes `gateway.mode` (and `gateway.remote.url` + `gateway.remote.transport` in remote mode) back to the config file.
|
||||
|
||||
@@ -2927,7 +2927,7 @@ Direct transport example (macOS app):
|
||||
|
||||
### `gateway.reload` (Config hot reload)
|
||||
|
||||
The Gateway watches `~/.clawdbot/moltbot.json` (or `CLAWDBOT_CONFIG_PATH`) and applies changes automatically.
|
||||
The Gateway watches `~/.openclaw/openclaw.json` (or `OPENCLAW_CONFIG_PATH`) and applies changes automatically.
|
||||
|
||||
Modes:
|
||||
- `hybrid` (default): hot-apply safe changes; restart the Gateway for critical changes.
|
||||
@@ -2949,7 +2949,7 @@ Modes:
|
||||
#### Hot reload matrix (files + impact)
|
||||
|
||||
Files watched:
|
||||
- `~/.clawdbot/moltbot.json` (or `CLAWDBOT_CONFIG_PATH`)
|
||||
- `~/.openclaw/openclaw.json` (or `OPENCLAW_CONFIG_PATH`)
|
||||
|
||||
Hot-applied (no full gateway restart):
|
||||
- `hooks` (webhook auth/path/mappings) + `hooks.gmail` (Gmail watcher restarted)
|
||||
@@ -2971,23 +2971,23 @@ Requires full Gateway restart:
|
||||
### Multi-instance isolation
|
||||
|
||||
To run multiple gateways on one host (for redundancy or a rescue bot), isolate per-instance state + config and use unique ports:
|
||||
- `CLAWDBOT_CONFIG_PATH` (per-instance config)
|
||||
- `CLAWDBOT_STATE_DIR` (sessions/creds)
|
||||
- `OPENCLAW_CONFIG_PATH` (per-instance config)
|
||||
- `OPENCLAW_STATE_DIR` (sessions/creds)
|
||||
- `agents.defaults.workspace` (memories)
|
||||
- `gateway.port` (unique per instance)
|
||||
|
||||
Convenience flags (CLI):
|
||||
- `moltbot --dev …` → uses `~/.clawdbot-dev` + shifts ports from base `19001`
|
||||
- `moltbot --profile <name> …` → uses `~/.clawdbot-<name>` (port via config/env/flags)
|
||||
- `openclaw --dev …` → uses `~/.openclaw-dev` + shifts ports from base `19001`
|
||||
- `openclaw --profile <name> …` → uses `~/.openclaw-<name>` (port via config/env/flags)
|
||||
|
||||
See [Gateway runbook](/gateway) for the derived port mapping (gateway/browser/canvas).
|
||||
See [Multiple gateways](/gateway/multiple-gateways) for browser/CDP port isolation details.
|
||||
|
||||
Example:
|
||||
```bash
|
||||
CLAWDBOT_CONFIG_PATH=~/.clawdbot/a.json \
|
||||
CLAWDBOT_STATE_DIR=~/.clawdbot-a \
|
||||
moltbot gateway --port 19001
|
||||
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
|
||||
OPENCLAW_STATE_DIR=~/.openclaw-a \
|
||||
openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
### `hooks` (Gateway webhooks)
|
||||
@@ -3006,7 +3006,7 @@ Defaults:
|
||||
token: "shared-secret",
|
||||
path: "/hooks",
|
||||
presets: ["gmail"],
|
||||
transformsDir: "~/.clawdbot/hooks",
|
||||
transformsDir: "~/.openclaw/hooks",
|
||||
mappings: [
|
||||
{
|
||||
match: { path: "gmail" },
|
||||
@@ -3027,7 +3027,7 @@ Defaults:
|
||||
|
||||
Requests must include the hook token:
|
||||
- `Authorization: Bearer <token>` **or**
|
||||
- `x-moltbot-token: <token>` **or**
|
||||
- `x-openclaw-token: <token>` **or**
|
||||
- `?token=<token>`
|
||||
|
||||
Endpoints:
|
||||
@@ -3046,13 +3046,13 @@ Mapping notes:
|
||||
- If there is no prior delivery route, set `channel` + `to` explicitly (required for Telegram/Discord/Google Chat/Slack/Signal/iMessage/MS Teams).
|
||||
- `model` overrides the LLM for this hook run (`provider/model` or alias; must be allowed if `agents.defaults.models` is set).
|
||||
|
||||
Gmail helper config (used by `moltbot webhooks gmail setup` / `run`):
|
||||
Gmail helper config (used by `openclaw webhooks gmail setup` / `run`):
|
||||
|
||||
```json5
|
||||
{
|
||||
hooks: {
|
||||
gmail: {
|
||||
account: "moltbot@gmail.com",
|
||||
account: "openclaw@gmail.com",
|
||||
topic: "projects/<project-id>/topics/gog-gmail-watch",
|
||||
subscription: "gog-gmail-watch-push",
|
||||
pushToken: "shared-push-token",
|
||||
@@ -3084,11 +3084,11 @@ Model override for Gmail hooks:
|
||||
Gateway auto-start:
|
||||
- If `hooks.enabled=true` and `hooks.gmail.account` is set, the Gateway starts
|
||||
`gog gmail watch serve` on boot and auto-renews the watch.
|
||||
- Set `CLAWDBOT_SKIP_GMAIL_WATCHER=1` to disable the auto-start (for manual runs).
|
||||
- Set `OPENCLAW_SKIP_GMAIL_WATCHER=1` to disable the auto-start (for manual runs).
|
||||
- Avoid running a separate `gog gmail watch serve` alongside the Gateway; it will
|
||||
fail with `listen tcp 127.0.0.1:8788: bind: address already in use`.
|
||||
|
||||
Note: when `tailscale.mode` is on, Moltbot defaults `serve.path` to `/` so
|
||||
Note: when `tailscale.mode` is on, OpenClaw defaults `serve.path` to `/` so
|
||||
Tailscale can proxy `/gmail-pubsub` correctly (it strips the set-path prefix).
|
||||
If you need the backend to receive the prefixed path, set
|
||||
`hooks.gmail.tailscale.target` to a full URL (and align `serve.path`).
|
||||
@@ -3097,16 +3097,16 @@ If you need the backend to receive the prefixed path, set
|
||||
|
||||
The Gateway serves a directory of HTML/CSS/JS over HTTP so iOS/Android nodes can simply `canvas.navigate` to it.
|
||||
|
||||
Default root: `~/clawd/canvas`
|
||||
Default port: `18793` (chosen to avoid the clawd browser CDP port `18792`)
|
||||
Default root: `~/.openclaw/workspace/canvas`
|
||||
Default port: `18793` (chosen to avoid the openclaw browser CDP port `18792`)
|
||||
The server listens on the **gateway bind host** (LAN or Tailnet) so nodes can reach it.
|
||||
|
||||
The server:
|
||||
- serves files under `canvasHost.root`
|
||||
- injects a tiny live-reload client into served HTML
|
||||
- watches the directory and broadcasts reloads over a WebSocket endpoint at `/__moltbot/ws`
|
||||
- watches the directory and broadcasts reloads over a WebSocket endpoint at `/__openclaw__/ws`
|
||||
- auto-creates a starter `index.html` when the directory is empty (so you see something immediately)
|
||||
- also serves A2UI at `/__moltbot__/a2ui/` and is advertised to nodes as `canvasHostUrl`
|
||||
- also serves A2UI at `/__openclaw__/a2ui/` and is advertised to nodes as `canvasHostUrl`
|
||||
(always used by nodes for Canvas/A2UI)
|
||||
|
||||
Disable live reload (and file watching) if the directory is large or you hit `EMFILE`:
|
||||
@@ -3115,7 +3115,7 @@ Disable live reload (and file watching) if the directory is large or you hit `EM
|
||||
```json5
|
||||
{
|
||||
canvasHost: {
|
||||
root: "~/clawd/canvas",
|
||||
root: "~/.openclaw/workspace/canvas",
|
||||
port: 18793,
|
||||
liveReload: true
|
||||
}
|
||||
@@ -3126,7 +3126,7 @@ Changes to `canvasHost.*` require a gateway restart (config reload will restart)
|
||||
|
||||
Disable with:
|
||||
- config: `canvasHost: { enabled: false }`
|
||||
- env: `CLAWDBOT_SKIP_CANVAS_HOST=1`
|
||||
- env: `OPENCLAW_SKIP_CANVAS_HOST=1`
|
||||
|
||||
### `bridge` (legacy TCP bridge, removed)
|
||||
|
||||
@@ -3166,9 +3166,9 @@ Auto-generated certs require `openssl` on PATH; if generation fails, the bridge
|
||||
bind: "tailnet",
|
||||
tls: {
|
||||
enabled: true,
|
||||
// Uses ~/.clawdbot/bridge/tls/bridge-{cert,key}.pem when omitted.
|
||||
// certPath: "~/.clawdbot/bridge/tls/bridge-cert.pem",
|
||||
// keyPath: "~/.clawdbot/bridge/tls/bridge-key.pem"
|
||||
// Uses ~/.openclaw/bridge/tls/bridge-{cert,key}.pem when omitted.
|
||||
// certPath: "~/.openclaw/bridge/tls/bridge-cert.pem",
|
||||
// keyPath: "~/.openclaw/bridge/tls/bridge-key.pem"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3176,11 +3176,12 @@ Auto-generated certs require `openssl` on PATH; if generation fails, the bridge
|
||||
|
||||
### `discovery.mdns` (Bonjour / mDNS broadcast mode)
|
||||
|
||||
Controls LAN mDNS discovery broadcasts (`_moltbot-gw._tcp`).
|
||||
Controls LAN mDNS discovery broadcasts (`_openclaw-gw._tcp`).
|
||||
|
||||
- `minimal` (default): omit `cliPath` + `sshPort` from TXT records
|
||||
- `full`: include `cliPath` + `sshPort` in TXT records
|
||||
- `off`: disable mDNS broadcasts entirely
|
||||
- Hostname: defaults to `openclaw` (advertises `openclaw.local`). Override with `OPENCLAW_MDNS_HOSTNAME`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@@ -3190,16 +3191,16 @@ Controls LAN mDNS discovery broadcasts (`_moltbot-gw._tcp`).
|
||||
|
||||
### `discovery.wideArea` (Wide-Area Bonjour / unicast DNS‑SD)
|
||||
|
||||
When enabled, the Gateway writes a unicast DNS-SD zone for `_moltbot-bridge._tcp` under `~/.clawdbot/dns/` using the standard discovery domain `moltbot.internal.`
|
||||
When enabled, the Gateway writes a unicast DNS-SD zone for `_openclaw-gw._tcp` under `~/.openclaw/dns/` using the configured discovery domain (example: `openclaw.internal.`).
|
||||
|
||||
To make iOS/Android discover across networks (Vienna ⇄ London), pair this with:
|
||||
- a DNS server on the gateway host serving `moltbot.internal.` (CoreDNS is recommended)
|
||||
- Tailscale **split DNS** so clients resolve `moltbot.internal` via that server
|
||||
- a DNS server on the gateway host serving your chosen domain (CoreDNS is recommended)
|
||||
- Tailscale **split DNS** so clients resolve that domain via the gateway DNS server
|
||||
|
||||
One-time setup helper (gateway host):
|
||||
|
||||
```bash
|
||||
moltbot dns setup --apply
|
||||
openclaw dns setup --apply
|
||||
```
|
||||
|
||||
```json5
|
||||
|
||||
Reference in New Issue
Block a user