overlay-apps

$npx mdskill add sonichi/sutando/overlay-apps

Build and manage always-on-top desktop overlays with Electron and Sutando

  • Solves the need for persistent, frameless UIs that float above other apps
  • Uses Electron for window management and Sutando's web UI for control
  • Registers overlays in app/main.js and stores display preferences
  • Delivers overlays with auto-dim, multi-display support, and remote control

SKILL.md

.github/skills/overlay-appsView on GitHub ↗
---
name: overlay-apps
description: Framework + minimal example for Sutando desktop overlay applications — always-on-top, frameless Electron windows that float over the desktop, controllable from the Sutando web UI's /overlays manager. Ships one example overlay (System Resources). Add new overlays by registering them in app/main.js.
---

# Overlay Apps

A small framework for **Sutando desktop overlays**: always-on-top, frameless,
transparent Electron windows that float over whatever you're working on,
controllable from the web UI's `/overlays` manager view.

The framework gives you, for free:

- A localhost **control server** the web UI manager talks to
  (open / close / show / hide / opacity / always-on-top).
- **Multi-display placement** — move every overlay to a chosen monitor; the
  choice persists across restarts.
- **Auto-dim on app blur** — overlays fade to ~20% opacity when you click into
  another app, restore to their configured opacity when you click an overlay
  back.
- A simple `OVERLAYS` registry — add a new overlay by registering it.

## Ships with

One example overlay: **System Resources** — live CPU / memory / disk / network
/ load (Cmd+Shift+S). The framework is overlay-agnostic; the example is just a
working starting point.

## Layout — workspace contract

- **Source of truth:** `skills/overlay-apps/app/` (in the repo).
- **Running instance:** `$SUTANDO_WORKSPACE/overlay-apps/benchmark-overlay/`
  — `node_modules` and any local state live here, not in the repo. Code in the
  repo, mutable runtime in the workspace, per the Sutando workspace contract.

`scripts/launch.sh` syncs source → workspace, installs dependencies, and
starts the app.

## Launch

```bash
bash skills/overlay-apps/scripts/launch.sh
```

Requires Node.js.

## Adding a new overlay

1. Drop in `app/<your>.html` and `app/<your>-renderer.js`.
2. Register it in `OVERLAYS` in `app/main.js`:
   ```js
   yourId: {
     name: 'Your Overlay',
     file: 'your.html',
     w: 320, h: 380,
     shortcut: 'CommandOrControl+Shift+Y',
     win: null,
     config: { opacity: 1, alwaysOnTop: true },
   },
   ```
3. If your overlay needs data, add an IPC handler in `main.js` and expose it
   via `preload.js`; renderers call `window.overlay.<your-method>()`.

That's it — control-server, manager-UI, multi-display and auto-dim all pick it
up automatically.

## Control surface

The app runs a localhost control server (port 7849+) and writes a discovery
file to `$SUTANDO_WORKSPACE/state/overlay-control.json`. The web UI's
`/overlays` view proxies to it. Endpoints:

| Method | Path                                    | Purpose                              |
|--------|-----------------------------------------|--------------------------------------|
| GET    | `/overlays`                             | list overlays + state + bounds       |
| GET    | `/displays`                             | connected monitors                   |
| POST   | `/overlays/:id/{open,close,show,hide}`  | window lifecycle                     |
| POST   | `/overlays/:id/config`                  | `{opacity, alwaysOnTop}`             |
| POST   | `/overlays/display`                     | `{index}` — move all to a display    |

More from sonichi/sutando

SkillDescription
agent-registryLocal Agent Registry — a standalone, dependency-free service that tracks running Claude Code (and other) agent instances. Agents self-register on startup and heartbeat while alive; the Electron overlay and Sutando dashboard read the live list. Use when you need to know which coding agents are running, where, and since when.
bot2bot-postPost a coordination message from this bot to the shared bot2bot channel, @-mentioning the other Sutando node.
claude-codexBash wrapper around the local Codex CLI for non-interactive runs from inside Sutando (bridges, cron, scripts). For interactive code review or task hand-off from this Claude Code session, prefer the official `/codex:*` plugin commands; this skill is the file-bridge-compatible path that `discord-bridge.py` invokes for team-tier sandboxed delegation.
claude-geminiUse the local Gemini CLI from Claude Code with the user's existing Gemini authentication or API configuration. Use for large-context repo scans, multimodal analysis, second-opinion planning, or structured Gemini runs in the current workspace.
claude-routerChoose between the local Codex CLI and Gemini CLI from Claude Code. Use for automatic model selection when the user wants the best local delegate for code review, repo-wide analysis, planning, or implementation.
cross-node-syncRsync-over-ssh sync between Sutando nodes (Mac Studio and MacBook) for shared memory + notes. Optional — core runs fine without it; enables automatic cross-bot learning and note propagation by running from the proactive-loop cron on each pass.
deal-finderScan configured sources (Craigslist now; eBay + Facebook Marketplace planned) for used-item listings matching the owner's criteria. Currently configured for a Mac mini search (M2+, 16GB+, 512GB+, ≤$500, near 94566). Notify owner via SMS + Telegram on a match.
electron-overlay-dimmingReusable pattern for focus-based auto-dimming of Electron overlay windows — when the app loses focus, all overlay windows fade to a low opacity; when an overlay regains focus, they return to their configured opacity. Use when building always-on-top Electron overlays that should recede while the user works in other apps.
gemini-ttsRender text to mp3 via Google Gemini Flash TTS. Free-tier eligible (1500 req/day). Use for video narration, demo voiceovers, audio notes. Parallels openai-tts; default for make-viral-video.
macos-toolsmacOS native integrations: screen capture, calendar, reminders, contacts, email (Mail.app), Spotlight search. Use when the user asks about their screen, schedule, to-do list, contacts, or wants to send email on macOS.