taodengandClaude Sonnet 4.6 3cba8552cf fix: close window quits app instead of hiding to tray
No system tray is shown, so hiding the window on close left the app
running with no way to quit except Ctrl+C. Now closing the window
sets isQuitting=true and lets the normal close flow proceed, which
triggers before-quit → stopServer().

Bumps version 0.9.4 → 0.9.5.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 21:32:16 +10:00

ODO — OpenClaw Dashboard Orchestrator

A cross-platform desktop app for managing OpenClaw AI agents. Double-click to open — no terminal needed.

Quick Start

git clone https://github.com/dtzp555-max/odo.git
cd odo
npm install
npm start

That's it. ODO will start the OCM server in the background, open a window, and put an icon in your system tray.

What ODO does

  • Wraps OCM in a desktop app — no browser tab, no terminal
  • System tray — close the window and ODO keeps running; click the tray icon to reopen
  • Auto server management — the OCM server starts and stops with the app
  • Crash recovery — if the server dies, ODO offers to restart it

Building for distribution

# macOS
npm run build:mac     # → dist/ODO-x.x.x.dmg

# Windows
npm run build:win     # → dist/ODO Setup x.x.x.exe

# Linux
npm run build:linux   # → dist/ODO-x.x.x.AppImage

Project structure

odo/
├── main.js                       # Electron main process
├── preload.js                    # Renderer preload (IPC bridge)
├── server/
│   └── openclaw-manager.js       # OCM server (modified for Electron)
├── assets/
│   └── (icons go here)
├── package.json
└── README.md

How it works

  1. Electron's main process forks server/openclaw-manager.js as a child process
  2. The server binds to 127.0.0.1:3333 (localhost only, for security)
  3. Electron opens a BrowserWindow pointing to http://127.0.0.1:3333
  4. The server sends an IPC message when it's ready; Electron shows the window
  5. Closing the window hides it to the system tray; quitting from the tray stops everything

Requirements

  • Node.js 18+
  • A working OpenClaw installation

Updating the server

To sync with the latest OCM:

# From the odo directory
cp /path/to/ocm/openclaw-manager.js server/openclaw-manager.js

Then re-apply the two small Electron patches (search for ELECTRON in the file):

  1. Skip openBrowser() when process.env.ELECTRON is set
  2. Force HOST = '127.0.0.1' when process.env.ELECTRON is set
  3. Send IPC ready message: if (process.send) process.send({ type: 'server-ready', port: PORT })

Roadmap

See ODO_ARCHITECTURE.md for the full product vision and phased plan.

License

MIT

S
Description
No description provided
Readme
284 KiB
Languages
JavaScript 90.1%
TypeScript 9.5%
CSS 0.2%
HTML 0.2%