[BREAKGLASS] Windows companion suite for OpenClaw - System Tray app, Shared library, Node, and PowerToys Command Palette extension
Go to file
Scott Hanselman 508610f56d fix: pin global.json to 10.0.100 with latestPatch
ARM64 runner only has 10.0.101, not 10.0.102. Using 10.0.100 as base
with latestPatch finds any 10.0.1xx SDK (101 on ARM64, 104 on x64).
Stays within the feature band where MSBuild 17.x is compatible.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-31 15:42:59 -07:00
.github/workflows ci: add NuGet package caching to test job 2026-03-18 10:18:37 -07:00
docs feat: complete Chinese localization + contributor guide (#60) 2026-03-17 21:12:45 -07:00
src perf: cache JsonSerializerOptions and compiled Regex in WindowsNodeClient 2026-03-18 10:18:41 -07:00
tests chore: quick-win triage — global.json, test tooling sync, localization tests 2026-03-31 14:02:28 -07:00
tools Rename all Moltbot references to OpenClaw 2026-01-30 10:16:18 -08:00
.gitattributes Add agentic workflow repo-assist 2026-03-16 17:01:11 -07:00
.gitignore fix: Generate proper lobster icon for exe and installer 2026-01-28 22:54:27 -08:00
build.ps1 docs: remove stale WinForms references, update test counts and capabilities 2026-03-17 20:38:13 -07:00
DEVELOPMENT.md docs: remove stale WinForms references, update test counts and capabilities 2026-03-17 20:38:13 -07:00
GitVersion.yml Align with BabySmash: GitVersion v4, ContinuousDelivery mode, trusted-signing v1 2026-01-28 20:20:03 -08:00
global.json fix: pin global.json to 10.0.100 with latestPatch 2026-03-31 15:42:59 -07:00
installer.iss chore: clean up stale files and fix repo URLs (#51) 2026-03-16 22:25:32 -07:00
LICENSE Initial commit: Moltbot Windows Hub monorepo 2026-01-28 17:34:44 -08:00
moltbot-windows-hub.slnx chore: remove WinForms tray app (OpenClaw.Tray) (#50) 2026-03-16 21:58:19 -07:00
README.md docs: remove stale WinForms references, update test counts and capabilities 2026-03-17 20:38:13 -07:00

🦞 OpenClaw Windows Hub

A Windows companion suite for OpenClaw - the AI-powered personal assistant.

Made with 🦞 love by Scott Hanselman and Molty

Molty - Windows Tray App

Molty - Command Palette

Projects

This monorepo contains three projects:

Project Description
OpenClaw.Tray.WinUI System tray application (WinUI 3) for quick access to OpenClaw
OpenClaw.Shared Shared gateway client library
OpenClaw.CommandPalette PowerToys Command Palette extension

🚀 Quick Start

Prerequisites

Build

Use the build script to check prerequisites and build:

# Check prerequisites
.\build.ps1 -CheckOnly

# Build all projects
.\build.ps1

# Build specific project
.\build.ps1 -Project WinUI

Or build directly with dotnet:

# Build all (use build.ps1 for best results)
dotnet build

# Build WinUI (requires runtime identifier for WebView2 support)
dotnet build src/OpenClaw.Tray.WinUI/OpenClaw.Tray.WinUI.csproj -r win-arm64  # ARM64
dotnet build src/OpenClaw.Tray.WinUI/OpenClaw.Tray.WinUI.csproj -r win-x64    # x64

# Build MSIX package (for camera/mic consent prompts)
dotnet build src/OpenClaw.Tray.WinUI -r win-arm64 -p:PackageMsix=true  # ARM64 MSIX
dotnet build src/OpenClaw.Tray.WinUI -r win-x64 -p:PackageMsix=true    # x64 MSIX

Run Tray App

# Run the exe directly (path includes runtime identifier)
.\src\OpenClaw.Tray.WinUI\bin\Debug\net10.0-windows10.0.19041.0\win-arm64\OpenClaw.Tray.WinUI.exe  # ARM64
.\src\OpenClaw.Tray.WinUI\bin\Debug\net10.0-windows10.0.19041.0\win-x64\OpenClaw.Tray.WinUI.exe    # x64

📦 OpenClaw.Tray (Molty)

Modern Windows 11-style system tray companion that connects to your local OpenClaw gateway.

Features

  • 🦞 Lobster branding - Pixel-art lobster tray icon with status colors
  • 🎨 Modern UI - Windows 11 flyout menu with dark/light mode support
  • 💬 Quick Send - Send messages via global hotkey (Ctrl+Alt+Shift+C)
  • 🔄 Auto-updates - Automatic updates from GitHub Releases
  • 🌐 Web Chat - Embedded chat window with WebView2
  • 📊 Live Status - Real-time sessions, channels, and usage display
  • Activity Stream - Dedicated flyout for live session, usage, node, and notification events
  • 🔔 Toast Notifications - Clickable Windows notifications with smart categorization
  • 📡 Channel Control - Start/stop Telegram & WhatsApp from the menu
  • 🖥️ Node Observability - Node inventory with online/offline state and copyable summary
  • Cron Jobs - Quick access to scheduled tasks
  • 🚀 Auto-start - Launch with Windows
  • ⚙️ Settings - Full configuration dialog
  • 🎯 First-run experience - Welcome dialog guides new users

Menu Sections

  • Status - Gateway connection status with click-to-view details
  • Sessions - Active agent sessions with preview and per-session controls
  • Usage - Provider/cost summary with quick jump to activity details
  • Channels - Telegram/WhatsApp status with toggle control
  • Nodes - Online/offline node inventory and copyable summary
  • Recent Activity - Timestamped event stream for sessions, usage, nodes, and notifications
  • Actions - Dashboard, Web Chat, Quick Send, Activity Stream, History
  • Settings - Configuration, auto-start, logs

Mac Parity Status

Comparing against openclaw-menubar (macOS Swift menu bar app):

Feature Mac Windows Notes
Menu bar/tray icon Color-coded status
Gateway status display Connected/Disconnected
PID display Mac shows gateway PID
Channel status Mac: Discord / Win: Telegram+WhatsApp
Sessions count
Last check timestamp Shown in tray tooltip
Gateway start/stop/restart Mac controls gateway process
View Logs
Open Web UI
Refresh Auto-refresh on menu open
Launch at Login
Notifications toggle

Windows-Only Features

These features are available in Windows but not in the Mac app:

Feature Description
Quick Send hotkey Ctrl+Alt+Shift+C global hotkey
Embedded Web Chat WebView2-based chat window
Toast notifications Clickable Windows notifications
Channel control Start/stop Telegram & WhatsApp
Modern flyout menu Windows 11-style with dark/light mode
Deep links openclaw:// URL scheme with IPC
First-run welcome Guided onboarding for new users
PowerToys integration Command Palette extension

🔌 Node Mode (Agent Control)

When Node Mode is enabled in Settings, your Windows PC becomes a node that the OpenClaw agent can control - just like the Mac app! The agent can:

Capability Commands Description
System system.notify, system.run, system.run.prepare, system.which, system.execApprovals.get, system.execApprovals.set Show Windows toast notifications, execute commands with policy controls
Canvas canvas.present, canvas.hide, canvas.navigate, canvas.eval, canvas.snapshot, canvas.a2ui.push, canvas.a2ui.reset Display and control a WebView2 window
Screen screen.capture, screen.list Capture screenshots
Camera camera.list, camera.snap Enumerate cameras and capture a still photo

Node Setup

  1. Enable Node Mode in Settings (enabled by default)

  2. First connection creates a pairing request on the gateway

  3. Approve the device on your gateway:

    openclaw devices list          # Find your Windows device
    openclaw devices approve <id>  # Approve it
    
  4. Configure gateway allowCommands - Add the commands you want to allow under gateway.nodes in ~/.openclaw/openclaw.json:

    {
      "gateway": {
        "nodes": {
          "allowCommands": [
            "system.notify",
            "system.run",
            "system.run.prepare",
            "system.which",
            "system.execApprovals.get",
            "system.execApprovals.set",
            "canvas.present",
            "canvas.hide",
            "canvas.navigate",
            "canvas.eval",
            "canvas.snapshot",
            "canvas.a2ui.push",
            "canvas.a2ui.reset",
            "screen.capture",
            "screen.list",
            "camera.list",
            "camera.snap"
          ]
        }
      }
    }
    

    ⚠️ Important: The gateway has a server-side allowlist. Commands must be listed explicitly - wildcards like canvas.* don't work!

  5. Test it from your Mac/gateway:

     # Show a notification
     openclaw nodes notify --node <id> --title "Hello" --body "From Mac!"
    
     # Open a canvas window
     openclaw nodes canvas present --node <id> --url "https://example.com"
    
     # Execute JavaScript (note: CLI sends "javaScript" param)
     openclaw nodes canvas eval --node <id> --javaScript "document.title"
    
     # Render A2UI JSONL in the canvas (pass the file contents as a string)
     openclaw nodes canvas a2ui push --node <id> --jsonl "$(Get-Content -Raw .\\ui.jsonl)"
    
     # Take a screenshot
     openclaw nodes invoke --node <id> --command screen.capture --params '{"screenIndex":0,"format":"png"}'
    
     # List cameras
     openclaw nodes invoke --node <id> --command camera.list
    
     # Take a photo (NV12/MediaCapture fallback)
     openclaw nodes invoke --node <id> --command camera.snap --params '{"deviceId":"<device-id>","format":"jpeg","quality":80}'
    
     # Execute a command on the Windows node
     openclaw nodes invoke --node <id> --command system.run --params '{"command":"Get-Process | Select -First 5","shell":"powershell","timeoutMs":10000}'
    
     # View exec approval policy
     openclaw nodes invoke --node <id> --command system.execApprovals.get
    
     # Update exec approval policy (add custom rules)
     openclaw nodes invoke --node <id> --command system.execApprovals.set --params '{"rules":[{"pattern":"echo *","action":"allow"},{"pattern":"*","action":"deny"}],"defaultAction":"deny"}'
    

    📷 Camera permission: Desktop builds rely on Windows Privacy settings. Packaged MSIX builds will show the system consent prompt.

    🔒 Exec Policy: system.run is gated by an approval policy on the Windows node at %LOCALAPPDATA%\OpenClawTray\exec-policy.json (schema: { "defaultAction": "...", "rules": [...] }). This is separate from gateway-side ~/.openclaw/exec-approvals.json.

    Rules are matched against the command token (argv[0]). If your call runs powershell.exe -File script.ps1, allow powershell.exe/pwsh.exe (not just the script path), or you'll get No matching rule; default policy applied.

    openclaw nodes invoke --node <id> --command system.execApprovals.set --params '{"rules":[{"pattern":"powershell.exe","action":"allow"},{"pattern":"pwsh.exe","action":"allow"},{"pattern":"echo *","action":"allow"},{"pattern":"*","action":"deny"}],"defaultAction":"deny"}'
    

    🔐 Web Chat secure context: Remote web chat requires https:// (or localhost). If using a self-signed cert, trust it in Windows (Trusted Root Certification Authorities) or use an SSH tunnel to localhost.

Node Status in Tray Menu

The tray menu shows node connection status:

  • 🔌 Node Mode section appears when enabled
  • Waiting for approval... - Device needs approval on gateway
  • Paired & Connected - Ready to receive commands
  • Click the device ID to copy it for the approval command

OpenClaw registers the openclaw:// URL scheme for automation and integration:

Link Description
openclaw://settings Open Settings dialog
openclaw://chat Open Web Chat window
openclaw://dashboard Open Dashboard in browser
openclaw://dashboard/sessions Open specific dashboard page
openclaw://send?message=Hello Open Quick Send with pre-filled text
openclaw://agent?message=Hello Send message directly (with confirmation)

Deep links work even when Molty is already running - they're forwarded via IPC.

📦 OpenClaw.CommandPalette

PowerToys Command Palette extension for quick OpenClaw access.

Commands

  • 🦞 Open Dashboard - Launch web dashboard
  • 💬 Quick Send - Send a message
  • 📊 Full Status - View gateway status
  • Sessions - View active sessions
  • 📡 Channels - View channel health
  • 🔄 Health Check - Trigger health refresh

Installation

  1. Build the solution in Release mode
  2. Deploy the MSIX package via Visual Studio
  3. Open Command Palette (Win+Alt+Space)
  4. Type "OpenClaw" to see commands

📦 OpenClaw.Shared

Shared library containing:

  • OpenClawGatewayClient - WebSocket client for gateway protocol
  • IOpenClawLogger - Logging interface
  • Data models (SessionInfo, ChannelHealth, etc.)
  • Channel control (start/stop channels via gateway)

Development

Project Structure

openclaw-windows-node/
├── src/
│   ├── OpenClaw.Shared/           # Shared gateway library
│   ├── OpenClaw.Tray.WinUI/       # System tray app (WinUI 3)
│   └── OpenClaw.CommandPalette/   # PowerToys extension
├── tests/
│   ├── OpenClaw.Shared.Tests/     # Shared library tests
│   └── OpenClaw.Tray.Tests/       # Tray app helper tests
├── docs/
│   └── molty1.png                 # Screenshot
├── moltbot-windows-hub.slnx       # Solution file (historical name)
├── README.md
├── LICENSE
└── .gitignore

Configuration

Settings are stored in:

  • Settings: %APPDATA%\OpenClawTray\settings.json
  • Logs: %LOCALAPPDATA%\OpenClawTray\openclaw-tray.log

Default gateway: ws://localhost:18789

First Run

On first run without a token, Molty displays a welcome dialog that:

  1. Explains what's needed to get started
  2. Links to documentation for token setup
  3. Opens Settings to configure the connection

License

MIT License - see LICENSE


Formerly known as Moltbot, formerly known as Clawdbot