No Config File Needed: Set Up OpenClaw Entirely from the Web UI
Too many tutorials tell you to edit JSON on day one, and then wonder why beginners run away. This article shows the better news: there is a UI you can click.
What You'll Learn
- Open the Web UI and finish authentication
- Understand form mode vs Raw JSON mode
- Configure multi-workspace routing from the UI
- Know where the main features live
Open the Web UI
Step 1: make sure the Gateway is running
openclaw gatewayStep 2: open your browser
http://127.0.0.1:18789/
If you configured basePath, for example /openclaw:
http://127.0.0.1:18789/openclaw
Step 3: handle authentication
| What you see | Fix |
|---|---|
pairing required |
Run openclaw devices list, then openclaw devices approve <requestId> |
| Token prompt | Paste the onboarding token |
π‘ You can change the UI language in the Access section.
Two Ways to Edit Config: Form Mode vs Raw JSON
Go to the Config page and you will see two editing styles:
Form mode: visually structured fields, ideal for beginners or small changes.
Raw JSON mode: direct config editing, best for advanced users or large edits.
Both modes edit the same file: ~/.openclaw/openclaw.json.
Most Common Setup: Different Telegram Groups Use Different Assistants
Scenario A: Same bot, different groups, different workspaces
Switch to Raw JSON and add this shape:
{
"agents": {
"list": [
{ "id": "main", "name": "Main", "workspace": "~/.openclaw/workspace-main", "default": true },
{ "id": "project-a", "name": "Project A", "workspace": "~/.openclaw/workspace-project-a" },
{ "id": "project-b", "name": "Project B", "workspace": "~/.openclaw/workspace-project-b" }
]
},
"bindings": [
{ "agentId": "project-a", "match": { "channel": "telegram", "peer": { "kind": "group", "id": "-1001234567890" } } },
{ "agentId": "project-b", "match": { "channel": "telegram", "peer": { "kind": "group", "id": "-1009876543210" } } },
{ "agentId": "main", "match": { "channel": "telegram" } }
],
"channels": {
"telegram": {
"enabled": true,
"botToken": "your bot token",
"dmPolicy": "pairing",
"groups": { "*": { "requireMention": true } }
}
}
}How do you find the group ID?
- Method 1: send a message in the group and run
openclaw logs --follow, then inspectchat.id - Method 2: forward any message to @userinfobot
Scenario B: Different bot accounts, different workspaces
{
"agents": {
"list": [
{ "id": "main", "workspace": "~/.openclaw/workspace-main" },
{ "id": "alerts", "workspace": "~/.openclaw/workspace-alerts" }
]
},
"bindings": [
{ "agentId": "main", "match": { "channel": "telegram", "accountId": "default" } },
{ "agentId": "alerts", "match": { "channel": "telegram", "accountId": "alerts" } }
],
"channels": {
"telegram": {
"accounts": {
"default": { "botToken": "123456:ABC...", "dmPolicy": "pairing" },
"alerts": { "botToken": "987654:XYZ...", "dmPolicy": "allowlist", "allowFrom": ["tg:123456789"] }
}
}
}
}Do Not Forget to Save
Click Save / Apply. OpenClaw will:
- Validate the config
- Apply it, usually with hot reload
β οΈ If you get a
baseHashconflict, someone or something changed the config in another place. Reload the config and try again.
What Else Can the Web UI Do?
| Section | What it does |
|---|---|
| Chat | Talk to the assistant directly in the browser |
| Sessions | Review and manage sessions |
| Cron | Add, edit, or run scheduled jobs |
| Skills | Enable, disable, and install skills |
| Channels | Inspect channel status |
| Debug / Logs | View logs and run manual RPC actions |
Quick Reference
| I want to... | Where to look in the Web UI |
|---|---|
| Route different Telegram groups to different workspaces | Config β Raw JSON β agents + bindings |
| Route different bot accounts to different workspaces | Config β channels.telegram.accounts + bindings |
| Change the bot token | Config β channels.telegram.botToken |
| Manage schedules | Cron tab |
| View live logs | Debug / Logs tab |
The key idea to remember is this: workspace routing is always decided by agents plus bindings. The Web UI just gives you a friendlier way to edit it.