openclaw - ✅(Solved) Fix [Feature]: Add configurable Control UI title (gateway.controlUi.title) [1 pull requests, 2 comments, 3 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#51052Fetched 2026-04-08 01:04:57
View on GitHub
Comments
2
Participants
3
Timeline
8
Reactions
0
Timeline (top)
commented ×2referenced ×2cross-referenced ×1labeled ×1

When running multiple OpenClaw instances, all browser tabs show the same hardcoded title "OpenClaw Control", making it difficult to distinguish between them.

Root Cause

When running multiple OpenClaw instances, all browser tabs show the same hardcoded title "OpenClaw Control", making it difficult to distinguish between them.

Fix Action

Fixed

PR fix notes

PR #51067: feat(gateway): add configurable Control UI title

Description (problem / solution / changelog)

Summary

Describe the problem and fix in 2–5 bullets: Allow users to set a custom browser tab title for the Control UI via the gateway.controlUi.title config option. Useful when running multiple OpenClaw instances to distinguish between tabs.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #51052
  • Related #

User-visible / Behavior Changes

List user-visible changes (including defaults/config).
Title in browser tab is configurable.

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? No
  • Data access scope changed? No
  • If any Yes, explain risk + mitigation:

Repro + Verification

Environment

  • OS: Ubuntu
  • Runtime/container: 2026.3.7
  • Model/provider:
  • Integration/channel (if any):
  • Relevant config (redacted):

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios: Changed title via the config variable and left at no config. Appropriate title in browser tab
<img width="646" height="102" alt="image" src="https://github.com/user-attachments/assets/f9c70278-5612-4bb7-b9e3-89cd75c60402" />

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.

Compatibility / Migration

  • Backward compatible? No. Rollback with title config in place will trigger crash for failing to validate the schema
  • Config/env changes? To use the functionality, yes?
  • Migration needed? No
  • If yes, exact upgrade steps:

Failure Recovery (if this breaks)

  • How to disable/revert this change quickly: Remove the title from configuration.
  • Files/config to restore:
  • Known bad symptoms reviewers should watch for:

Risks and Mitigations

List only real risks for this PR. Add/remove entries as needed. If none, write None.

None

Changed files

  • src/config/types.gateway.ts (modified, +2/-0)
  • src/config/zod-schema.ts (modified, +1/-0)
  • src/gateway/control-ui-contract.ts (modified, +1/-0)
  • src/gateway/control-ui.ts (modified, +1/-0)
  • ui/src/ui/controllers/control-ui-bootstrap.test.ts (modified, +56/-0)
  • ui/src/ui/controllers/control-ui-bootstrap.ts (modified, +3/-0)
  • vitest.config.ts (modified, +1/-0)

Code Example

{
  gateway: {
    controlUi: {
      title: "Rainmaker 🌧️"
    }
  }
}
RAW_BUFFERClick to expand / collapse

Summary

When running multiple OpenClaw instances, all browser tabs show the same hardcoded title "OpenClaw Control", making it difficult to distinguish between them.

Problem to solve

When running multiple OpenClaw instances, all browser tabs show the same hardcoded title "OpenClaw Control", making it difficult to distinguish between them.

Proposed solution

Add a gateway.controlUi.title config option that sets the HTML <title> of the Control UI. The gateway could inject it at serve-time or the UI could fetch it via the WebSocket.

{
  gateway: {
    controlUi: {
      title: "Rainmaker 🌧️"
    }
  }
}

When unset, fall back to the current default ("OpenClaw Control").

Alternatives considered

Manually editing dist/control-ui/index.html, which gets overwritten on updates.

Impact

Affected: users Severity: annoying Frequency: Always Consequence: ?? If you're on the wrong claw, who knows what may happen given

Evidence/examples

No response

Additional information

No response

extent analysis

Fix Plan

To fix the issue, we need to implement the proposed solution by adding a gateway.controlUi.title config option. Here are the steps:

  • Add a new config option gateway.controlUi.title to the gateway configuration.
  • Update the Control UI to fetch the title from the gateway via WebSocket or inject it at serve-time.
  • Update the HTML <title> tag to use the fetched title.

Example Code

// gateway configuration
const gatewayConfig = {
  gateway: {
    controlUi: {
      title: "Rainmaker "
    }
  }
};

// Control UI code to fetch title via WebSocket
fetchTitleViaWebSocket() {
  // establish WebSocket connection
  const ws = new WebSocket('ws://gateway-url');
  ws.onmessage = (event) => {
    const title = event.data;
    document.title = title;
  };
}

// Alternative: inject title at serve-time
function serveControlUi(req, res) {
  const title = gatewayConfig.gateway.controlUi.title;
  const html = `<html><head><title>${title}</title></head><body></body></html>`;
  res.send(html);
}

Verification

To verify the fix, run multiple OpenClaw instances with different gateway.controlUi.title config options and check that each browser tab shows the correct title.

Extra Tips

  • Make sure to handle cases where the gateway.controlUi.title config option is unset or empty.
  • Consider adding a default title as a fallback when the config option is not set.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING