No Config File Needed: Set Up OpenClaw Entirely from the Web UI

4 min read

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 gateway

Step 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 inspect chat.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:

  1. Validate the config
  2. Apply it, usually with hot reload

⚠️ If you get a baseHash conflict, 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.