Skip to content
cccskills
FreePublished on GitHubEnglish overview

control-ui

Organize sessions and layouts in the OpenClaw Control UI, build session dashboards, and investigate display or connection problems. It covers connected clients and Gateways accessed directly or through Tailscale, with checks of both saved state and rendered screens.

OriginalShow the original description

Operate and troubleshoot the OpenClaw Control UI: navigate connected clients, organize sessions, build session dashboards, and handle direct or Tailscale-hosted Gateways.

AI rating90/ 100See how to install

Good for

  • Group and pin sessions for easier navigation
  • Build a dashboard within a dedicated session
  • Arrange dashboard tabs and widgets
  • Investigate blank widgets or remote UI connection problems

Overview

What it does

control-ui organizes sessions, arranges layouts, builds dashboards, and investigates problems in OpenClaw Control UI. It can rename, group, pin, and archive sessions, split the screen, and show panels. For dashboards, it adds or updates tabs and widgets, then adjusts their order and size. It checks results against both the saved state and the actual screen.

When it helps

Use it to organize multiple conversations or bring information together in a particular session. It also helps investigate blank widgets or content that stops updating when the interface is accessed directly or published through Tailscale.

Example requests

  • “Group the related sessions and pin them.”
  • “Build a dashboard in a dedicated session and organize its tabs and widgets.”
  • “Find out why widgets are missing from the remotely published interface.”

Notes

It uses OpenClaw UI tools. Screen commands reach all connected clients that support them. Boards belong to sessions and cannot be moved to another session after creation. Deleting a session also deletes its board. Dashboard content composition uses the visualize skill. Checking the rendered result requires a connected UI or a browser automation environment.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Objective evaluation

AI rated this skill on four points using only the contents of its SKILL.md. Stars and popularity are not taken into account.

Clear instructionsIs it clear when to use it and what it does?
AGoodThe roles of the tools for session organization, screen control, and board editing are explicitly defined.
Concrete stepsAre steps, inputs, outputs, and examples spelled out?
AGoodSteps cover dashboard read, editing, arrangement, and verification of both saved state and the rendered interface.
SafetyAre sending data, deleting files, and running commands disclosed?
AGoodIt specifies state and client checks before changes, the effects of session deletion, and conditions requiring renewed approval.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingOpenClaw UI tools and visualize are required, but installation instructions are not provided.

The total counts each point as A = 25, B = 15, C = 5. Rated by AI (OpenAI Codex) as of Oct 19, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (3)

  • SKILL.md7.1 KB
  • references/dashboards.md4.8 KB
  • references/hosting.md4.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Control UI

Use OpenClaw's typed UI tools for state and layout. Use browser automation only to inspect or interact with rendered pixels.

Mental model

  • A sidebar item is a session, not a dashboard page.
  • Each session owns one board. The board contains tabs and widgets.
  • Pinning a session keeps it in the sidebar. Sessions with a stored board appear in the /dashboards gallery.
  • screen changes connected Control UI layout and navigation. It does not read the page or take screenshots.
  • sessions_list finds sessions. sessions renames, groups, pins, or archives them. It does not edit board content.
  • dashboard reads and arranges the current session's board and registered plugin widgets. show_widget authors or updates custom HTML/SVG widgets.

Do not replace these operations with shell calls or raw Gateway RPC when the typed tool exists.

Start safely

  1. Identify the target session and whether the Control UI is local/direct or published through Tailscale or another HTTPS proxy.
    • If the user wants a dedicated sidebar dashboard, choose or create its visible session before authoring any widget. A tab is only a partition inside one session's board; it never creates a sidebar row.
    • If the current turn is running in a temporary or parent session, hand the dashboard task to the intended visible session first. Board widgets are keyed by session and cannot be moved to another session afterward.
  2. Read current state before changing it:
    • use sessions_list to resolve the session;
    • use dashboard with action: "read" for the current session;
    • inspect existing tabs, stable widget names, owners, sizes, and panel layout.
  3. If the task targets another session's board, move the work into that session. Dashboard tools intentionally operate on the current session.

Read hosting.md before opening or repairing a remote Control UI. Read dashboards.md before creating or restructuring a board. Use the visualize skill for widget composition, libraries, interactive code explanations, and dashboard content. Keep session and board organization here.

Navigate and arrange the UI

Use screen for direct client commands:

  • navigate to open a session by sessionKey;
  • sidebar_show / sidebar_hide for the session sidebar;
  • split_right / split_down, focus, and close_pane for panes;
  • terminal_show / terminal_hide and browser_show / browser_hide for docked panels.

screen broadcasts to every connected Control UI that advertises UI commands; it cannot select one browser tab. Check which clients are connected before sending a command. If it reports no capable client, ask the user to open the Control UI and retry.

Use the in-app browser or an available browser-control tool when the task needs DOM inspection, clicking, typing, or screenshots. Reuse the existing signed-in Control UI tab when possible.

Build a session dashboard

  1. Call dashboard read. Reuse suitable tabs and widget names.
  2. Create or rename tabs with tab_create / tab_update; use short lowercase slug IDs.
  3. Add content with the correct owner:
    • native text, metrics, tables, charts, and links: show_widget with pin: true and report;
    • self-contained custom HTML/SVG or registered-source content: show_widget with pin: true;
    • trusted plugin widgets: dashboard widget_put with an advertised pluginKind. Do not embed Grafana or another external application in an <iframe> inside show_widget; widget sandboxes reject child-frame URLs and navigation. Use an ordinary user-clicked link to open the application, fetch an exact HTTPS API through declared capabilities.netOrigins, use a Gateway data binding, or install/use a trusted plugin widget instead.
  4. Use a stable name when calling show_widget. Reusing the same name with new widget_code updates the widget in place.
  5. Arrange with widget_move, widget_resize, and tab reordering. Prefer size presets and board order over pixel placement.
  6. Pin the current session with sessions patch when it should stay prominent.
  7. Call dashboard focus_tab to show the intended tab in the dashboard side panel. If no Control UI is connected, the command returns unavailable; have the user open the session and retry.
  8. Choose the presentation after focusing the tab. set_presentation with presentation: "expanded" expands the dashboard; "split" shows it beside chat in the current panel layout. The human can use Expand side panel for a full-width dashboard, Collapse to bring chat back, or close the panel for chat alone.

Never create a fake top-level page for a dashboard. For a dedicated dashboard, use a dedicated session, pin that session, and build its board from inside it.

Update without breaking the board

  • Read first and mutate the smallest unit.
  • Keep stable tab IDs and widget names unless replacement is intentional.
  • Do not change a widget's content owner in place. Remove it, then recreate it with the new owner or registered kind.
  • Capability grants are bound to exact widget bytes and revision. Changed content may require approval again.
  • Resetting a conversation preserves its board. Deleting the session deletes the board.

Verify the result

Use two layers of proof:

  1. State: dashboard read shows the expected tabs, widgets, names, owners, order, and sizes; sessions_list shows the expected session metadata.
  2. Rendered UI: open the actual Control UI, confirm the correct session and dashboard panel, then inspect or screenshot the widget frame. Exercise any important controls.

An HTTP 200 for the shell or widget route is transport proof, not visual proof. Do not claim the dashboard works until the sandboxed frame renders. For widgets that fetch live data, exercise that fetch from the rendered frame. A host-side curl does not prove the browser received the required capability grant or accepted the endpoint's CORS and mixed-content policy. If no browser-control or connected-client inspection is available, report the dashboard as published but visually unverified instead of claiming success.

Recovery order

When a widget is blank or stale:

  1. confirm the expected session, tab, widget name, and revision with dashboard read;
  2. classify the hosting path using hosting.md;
  3. verify the Control UI origin, the separate widget sandbox origin, and the protocol used on every reverse-proxy hop;
  4. if widget JavaScript reports Failed to fetch, verify its exact HTTPS origin is declared and granted in capabilities.netOrigins, then check browser CORS and mixed-content errors;
  5. after a Gateway restart or routing change, republish/update the widget so the browser receives a fresh ticketed frame URL;
  6. reload the Control UI and verify the rendered frame, not only route status.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

1password

FreeSummaryAI rating 100

Set up and authenticate the 1Password CLI, then supply stored passwords and API keys to commands or configuration. The skill covers desktop integration, service accounts, and interactive sign-in while keeping secrets out of chat and logs.

  • Setting up the 1Password CLI
  • Supplying API keys to commands
  • Using service account authentication in CI
openclaw/openclaw392.4KUpdated Oct 18, 2026

acp-router

FreeSummaryAI rating 80

Route requests from OpenClaw to external coding agents such as Claude Code or Cursor. Start or continue sessions using ACP, a protocol for connecting agents, or relay prompts directly through acpx while preserving conversation context.

  • Starting a Claude Code session in a thread
  • Continuing work with an external coding agent
  • Relaying prompts directly through acpx
openclaw/openclaw392.4KUpdated Oct 18, 2026

add-model-provider

FreeSummaryAI rating 100

Add a model provider to OpenClaw and verify it with a real response. The skill validates configuration, keeps credentials in environment or file references, and reports test results and any default model changes.

  • Adding a model provider to OpenClaw
  • Configuring credentials through environment or file references
  • Checking whether a model returns a real response
openclaw/openclaw392.4KUpdated Oct 18, 2026

agent-transcript

FreeSummaryAI rating 90

Prepare an agent activity transcript for a GitHub pull request or issue. Extract relevant prompts, decisions, and results from local logs, remove sensitive material, and preview the edited record before separately authorized publication.

  • Preparing an agent activity record for a pull request
  • Extracting task-relevant prompts and results from local logs
  • Previewing a transcript with sensitive information removed
openclaw/openclaw392.4KUpdated Oct 18, 2026

apple-notes

FreeSummaryAI rating 100

Manage Apple Notes on macOS through memo, a command-line tool. Create, browse, search, edit, delete, and move notes between folders, or export selected notes to HTML or Markdown for use outside the app.

  • Creating notes with titles
  • Finding notes by folder or approximate search
  • Editing notes and organizing them into folders
openclaw/openclaw392.4KUpdated Oct 18, 2026

apple-reminders

FreeSummaryAI rating 70

Manage Apple Reminders from your Mac with remindctl, a terminal tool. View tasks by date, add or edit reminders, organize lists, and mark tasks complete or delete them, including personal to-dos that sync to iOS.

  • Review today’s tasks and overdue reminders
  • Add personal to-dos with due dates
  • Organize tasks visible on an iPhone or iPad
openclaw/openclaw392.4KUpdated Oct 18, 2026

See all skills by openclaw

Report a problem with this skill