Control UI (trình duyệt)
Control UI là một ứng dụng một trang nhỏ Vite + Lit được Gateway phục vụ:- mặc định:
http://<host>:18789/ - tiền tố tùy chọn: đặt
gateway.controlUi.basePath(ví dụ:/openclaw)
Mở nhanh (local)
Nếu Gateway đang chạy trên cùng một máy, hãy mở: Nếu trang không tải được, hãy khởi động Gateway trước:openclaw gateway.
Xác thực được cung cấp trong quá trình bắt tay WebSocket thông qua:
connect.params.auth.token-
connect.params.auth.passwordBảng cài đặt dashboard cho phép bạn lưu một token; mật khẩu không được lưu trữ. Trình hướng dẫn onboarding tạo token gateway theo mặc định, vì vậy hãy dán nó vào đây khi kết nối lần đầu.
Ghép cặp thiết bị (kết nối lần đầu)
Khi bạn kết nối tới Control UI từ một trình duyệt hoặc thiết bị mới, Gateway yêu cầu phê duyệt ghép cặp một lần — ngay cả khi bạn đang ở cùng Tailnet vớigateway.auth.allowTailscale: true. 49. Đây là một biện pháp bảo mật để ngăn chặn
truy cập trái phép.
Những gì bạn sẽ thấy: “disconnected (1008): pairing required”
Để phê duyệt thiết bị:
openclaw devices revoke --device <id> --role <role>. Xem
Devices CLI để xoay vòng và thu hồi token.
Ghi chú:
- Kết nối local (
127.0.0.1) được tự động phê duyệt. - Kết nối từ xa (LAN, Tailnet, v.v.) 50. yêu cầu phê duyệt rõ ràng.
- Mỗi hồ sơ trình duyệt tạo một ID thiết bị duy nhất, vì vậy việc đổi trình duyệt hoặc xóa dữ liệu trình duyệt sẽ yêu cầu ghép cặp lại.
Những gì có thể làm (hiện tại)
- Chat với mô hình qua Gateway WS (
chat.history,chat.send,chat.abort,chat.inject) - Stream các lời gọi công cụ + thẻ đầu ra công cụ trực tiếp trong Chat (sự kiện tác tử)
- Kênh: WhatsApp/Telegram/Discord/Slack + các kênh plugin (Mattermost, v.v.) trạng thái + đăng nhập QR + cấu hình theo kênh (
channels.status,web.login.*,config.patch) - Instances: danh sách hiện diện + làm mới (
system-presence) - Sessions: danh sách + ghi đè thinking/verbose theo từng phiên (
sessions.list,sessions.patch) - Cron jobs: liệt kê/thêm/chạy/bật/tắt + lịch sử chạy (
cron.*) - Skills: trạng thái, bật/tắt, cài đặt, cập nhật khóa API (
skills.*) - Nodes: danh sách + caps (
node.list) - Phê duyệt exec: chỉnh sửa allowlist của gateway hoặc node + chính sách hỏi cho
exec host=gateway/node(exec.approvals.*) - Config: xem/chỉnh sửa
~/.openclaw/openclaw.json(config.get,config.set) - Config: áp dụng + khởi động lại với xác thực (
config.apply) và đánh thức phiên hoạt động gần nhất - Ghi cấu hình bao gồm cơ chế bảo vệ base-hash để tránh ghi đè các chỉnh sửa đồng thời
- Schema cấu hình + render biểu mẫu (
config.schema, bao gồm schema plugin + kênh); trình chỉnh sửa JSON thô vẫn khả dụng - Debug: snapshot trạng thái/sức khỏe/mô hình + nhật ký sự kiện + gọi RPC thủ công (
status,health,models.list) - Logs: theo dõi trực tiếp log file gateway với lọc/xuất (
logs.tail) - Update: chạy cập nhật gói/git + khởi động lại (
update.run) kèm báo cáo khởi động lại
- Đối với các tác vụ cô lập, phương thức gửi mặc định là thông báo tóm tắt. Bạn có thể chuyển sang none nếu muốn chạy chỉ nội bộ.
- Trường kênh/đích sẽ xuất hiện khi chọn announce.
Hành vi chat
chat.sendlà không chặn: nó xác nhận ngay bằng{ runId, status: "started" }và phản hồi được stream qua các sự kiệnchat.- Gửi lại với cùng
idempotencyKeysẽ trả về{ status: "in_flight" }khi đang chạy, và{ status: "ok" }sau khi hoàn tất. chat.injectthêm một ghi chú trợ lý vào bản ghi phiên và phát sự kiệnchatđể cập nhật UI (chỉ UI, không chạy tác tử, không gửi kênh).- Dừng:
- Nhấp Stop (gọi
chat.abort) - Gõ
/stop(hoặcstop|esc|abort|wait|exit|interrupt) để hủy ngoài luồng chat.aborthỗ trợ{ sessionKey }(không cầnrunId) để hủy tất cả các lần chạy đang hoạt động cho phiên đó
- Nhấp Stop (gọi
Truy cập Tailnet (khuyến nghị)
Tailscale Serve tích hợp (ưu tiên)
Giữ Gateway trên loopback và để Tailscale Serve proxy nó bằng HTTPS:https://<magicdns>/(hoặcgateway.controlUi.basePathđã cấu hình của bạn)
tailscale-user-login) khi gateway.auth.allowTailscale là true. OpenClaw
xác minh danh tính bằng cách phân giải địa chỉ x-forwarded-for bằng
tailscale whois và đối chiếu nó với header, và chỉ chấp nhận các yêu cầu này khi
request đi vào loopback với các header x-forwarded-* của Tailscale. Đặt
gateway.auth.allowTailscale: false (hoặc ép gateway.auth.mode: "password")
nếu bạn muốn yêu cầu token/mật khẩu ngay cả đối với lưu lượng Serve.
Bind vào tailnet + token
http://<tailscale-ip>:18789/(hoặcgateway.controlUi.basePathđã cấu hình của bạn)
connect.params.auth.token).
HTTP không an toàn
If you open the dashboard over plain HTTP (http://<lan-ip> or http://<tailscale-ip>),
the browser runs in a non-secure context and blocks WebCrypto. By default,
OpenClaw blocks Control UI connections without device identity.
Cách khắc phục khuyến nghị: dùng HTTPS (Tailscale Serve) hoặc mở UI cục bộ:
https://<magicdns>/(Serve)http://127.0.0.1:18789/(trên máy chủ gateway)
- Điều này vô hiệu hóa định danh thiết bị + ghép cặp cho Control UI (kể cả trên HTTPS). Use only if you trust the network.
Build UI
The Gateway serves static files fromdist/control-ui. Build them with:
ws://127.0.0.1:18789).
Gỡ lỗi/kiểm thử: dev server + Gateway từ xa
- Control UI là các tệp tĩnh; đích WebSocket có thể cấu hình và có thể khác với nguồn gốc HTTP. Điều này hữu ích khi bạn muốn chạy máy chủ dev Vite cục bộ nhưng Gateway chạy ở nơi khác.
-
Khởi động UI dev server:
pnpm ui:dev - Mở một URL như:
gatewayUrlđược lưu trong localStorage sau khi tải và bị xóa khỏi URL.tokenđược lưu trong localStorage;passwordchỉ được giữ trong bộ nhớ.-
- Khi
gatewayUrlđược đặt, UI sẽ không quay về sử dụng thông tin xác thực từ cấu hình hoặc môi trường. Providetoken(orpassword) explicitly. 29. Thiếu thông tin xác thực rõ ràng là một lỗi.
- Khi
- Dùng
wss://khi Gateway nằm sau TLS (Tailscale Serve, proxy HTTPS, v.v.). gatewayUrlchỉ được chấp nhận trong cửa sổ cấp cao nhất (không nhúng) để ngăn clickjacking.- Với các thiết lập dev khác origin (ví dụ:
pnpm ui:devtới một Gateway từ xa), hãy thêm origin của UI vàogateway.controlUi.allowedOrigins.