← Commit history

Deep README: purpose, the AI-era vibe-coding case vs Windows defaults, hardware-aware power management (laptop/PC + Modern Standby + backlight detection), /remote-control survival, full transparency + the tray/toast watchdog. All sections illustrated.

John Lauer ·50ad83c7bb ·4mo ago ·parent d63a23c
1 file changed +130−168
README.md+130−168
@@ -1,18 +1,107 @@-# adom-screensaver, the vibe-coding screensaver+# Adom Screensaver -> 🪟 **Windows only.** This runs on your **Windows laptop**, not a Linux/WSL2 container.+**Turn an idle laptop into an always-on vibe-coding machine.** It keeps **Claude** and your **`/remote-control`** sessions alive while you step away, plays a live billboard of the latest Adom Wiki drops as your screensaver, then dims the screen to near-black so the panel never burns in. It manages Windows' power settings honestly and explains every change it makes, and it adapts to *your* hardware: laptop vs desktop, Modern Standby or not, controllable backlight or not. -Turn your Windows laptop into an always-on home for your Claude Code threads. A branded Adom-screensaver that rests your screen, **keeps your machine awake** (network + Remote Control stay-alive), and, while it rests, runs a **live billboard of the latest Adom Wiki drops**, rendered in a-real Edge/Chromium engine so it plays **video (silently)** and renders **SVG**, not just static images.+No PowerToys. No always-on "caffeine" hacks. One signed Windows screensaver plus a tiny native keep-awake helper. -Launch it any time with **Win + Shift + L**.+--- -![Adom Screensaver, the branded splash that explains what it's doing while it rests your screen and keeps your machine awake](/blob/app/adom-screensaver/screenshots/hero.png)+## Why a screensaver has to be this smart now -Built for the people who fire up their Claude threads before they head to dinner and need them-still running when they get back.+Windows' power defaults were designed for a world where an idle laptop should sleep as fast as possible to save battery. That was the right call for a decade. It is exactly wrong for how people work with AI today.++When you're vibe-coding with Claude and Adom Hydrogen Desktop, you *want* the machine to keep chugging while you walk away: long agent runs that actually finish, `/remote-control` threads that don't drop, screenshots and shotlogs being built for you to watch from your phone, your laptop quietly becoming a **vibe-coding server**. None of that survives on a machine that Microsoft put to sleep 60 seconds after you stood up.++So this app deliberately runs your machine **differently than Windows expects, on purpose**, and it tells you exactly how. The whole job is a balance: stay awake and reachable for the AI, but never cook the battery in a bag and never burn a static image into the panel overnight.++---++## What you see++It plays as a timed cascade. Every stage is configurable (see the cascade settings below).++### 1. The opening+A clean Adom open with a live read on what your machine is doing right now.++![Adom Screensaver opening screen](/blob/app/adom-screensaver/screenshots/opening.png)++### 2. The splash+The branded splash: who you're signed in as on the Wiki, your power state, and a plain-language summary of how the machine is being kept alive while you're gone.++![Adom Screensaver splash with live machine stats](/blob/app/adom-screensaver/screenshots/splash.png)++### 3. The billboards+Then it becomes a billboard for the latest **Adom Wiki** drops: real apps, skills, and tools, each with a screenshot, who can see it, and the one-line "just ask Claude" prompt to install it. The slides are cached to disk so they play instantly offline, least-recently-seen first so it never loops the same few.++![Adom Wiki billboard, Basic Parts Library](/blob/app/adom-screensaver/screenshots/billboard-1.png)++![Adom Wiki billboard, service-kicad](/blob/app/adom-screensaver/screenshots/billboard-2.png)++![Adom Wiki billboard, adom-ui-linter](/blob/app/adom-screensaver/screenshots/billboard-3.png)++### 4. The dim screensaver+After a few minutes the billboards stop (rotating ads make no sense once the screen is dimmed) and it shows just the Adom logo and "AI Electronics Prototyping" drifting slowly, barely visible, on a near-black panel. The slow drift means it can never burn in, and the machine stays fully awake the whole time.++![Adom Screensaver dim mode, the logo drifting on near-black](/blob/app/adom-screensaver/screenshots/dim.png)++---++## The clever part: honest, hardware-aware power management++A billboard is the easy half. The real work is keeping your machine reachable without wrecking the battery or the panel, and doing it correctly on whatever hardware you have. The app probes your machine and adapts.++### Keeping `/remote-control` alive+While you're plugged in, a tiny signed native helper holds the machine awake (the same `SetThreadExecutionState` keep-awake Windows itself uses, no third-party tool) so long agent runs and `/remote-control` threads keep running and the network stays up. On battery it goes passive so it doesn't drain you flat.++### Modern Standby, and why turning the display *off* is dangerous+Here's the lesson that shaped the whole app. On a **Modern Standby** laptop, the moment the display turns **off**, Windows treats that as a cue to drop into light sleep: it **cuts the network and throttles the CPU**, and your `/remote-control` session quietly dies. So instead of letting the display power off, the screensaver keeps the screen **on and dims it to near-black**. The machine stays awake, your sessions survive, and the dim plus slow drift still prevent burn-in.++### Laptop vs desktop detection+The app detects whether you're on a **laptop** (has a battery and a lid) or a **desktop PC**, and reshapes everything accordingly. A desktop has no lid and no battery, and almost never uses Modern Standby, so display-off is safe there and the advice is completely different. The settings dialog drops the rows that don't apply and rewrites the rest for your machine.++### Backlight-dimming hardware detection+"Dim to near-black" only looks truly black if the app can drive your **hardware backlight** down (via the `WmiMonitorBrightnessMethods` WMI API). Not every panel exposes that. So the app actually **tests your hardware** and branches:++- **Backlight is controllable** (most laptop panels): it drops the real backlight to near-zero, so the dim screen is genuinely black, not a washed-out grey.+- **Backlight is not controllable** (many desktop monitors over HDMI): it falls back. On a Modern Standby machine it keeps the display on and dims the picture in software; on a machine with no doze risk it simply lets the monitor power off on a timer, since that's safe and easier on the panel than a bright billboard all night.++You can run that hardware test yourself, right from the settings dialog.++### Everything is in the settings, tuned to your machine+The settings dialog reads your **live** Windows power settings every time it opens and recommends a profile that's correct for *your* hardware. On a machine with no instant-resume sleep, for example, it recommends never idle-sleeping on battery (so unplugging and walking across the house wakes instantly) instead of the usual short sleep timer.++![Adom Screensaver settings, hardware-aware recommendations](/blob/app/adom-screensaver/screenshots/config-recommendations.png)++The full cascade is yours to tune: idle-before-start, how long the logo holds, how long the splash holds, seconds per billboard, and when it dims. There's also a one-click backlight test and live previews ("test a billboard" and "see the dimmed screen") so you can see exactly how it'll look.++![Adom Screensaver settings, cascade timing and previews](/blob/app/adom-screensaver/screenshots/config-cascade.png)++### Full transparency: it shows you what it changed+Because it adjusts how Windows runs, it never does so silently. A status screen lists **every** system and power setting the screensaver touched, the current state of each, the active power plan, and a one-click way to re-apply (if a vendor profile like Armoury Crate reverted something) or undo everything back to Windows defaults.++![Adom Screensaver status and screen-locks screen](/blob/app/adom-screensaver/screenshots/status.png)++---++## When an app is holding your display on++Sometimes the screensaver genuinely *can't* start, because another app is forcing the display to stay on: a screen-share or video call, a recording, a fullscreen video, or an **Adom screen-capture session** (`adom-cli hydrogen sharing` / `getDisplayMedia`, used for screenshots). Windows will not run a screensaver while a display lock is held, so the panel would stay lit all night.++The helper watches for exactly this. It lives in your **system tray** and shows two states:++![Adom Screensaver tray icon, normal and warning states](/blob/app/adom-screensaver/screenshots/tray-icons.png)++When it detects a display lock while you're away, the icon turns amber and a soft, no-sound flyout names the culprit and tells you how to release it:++![Adom Screensaver screen-hold notification](/blob/app/adom-screensaver/screenshots/toast.png)++Right-click the tray icon any time for status, settings, or to launch the screensaver on demand:++![Adom Screensaver tray right-click menu](/blob/app/adom-screensaver/screenshots/tray-menu.png)++> **Adom tip:** if you take a Hydrogen screenshot and the saver later won't start, an `adom-cli hydrogen sharing` session is probably still holding the display. Run `adom-cli hydrogen sharing stop` to release it.++---  ## Install @@ -20,166 +109,39 @@ still running when they get back. adompkg install adom-screensaver ``` -**What that does:** on your Adom container (Linux/WSL2) it installs the **skills** and stages the-**prebuilt, signed** Windows binaries, it does **not** run anything there. The screensaver is a-Windows app. To actually put it on your machine, then ask Claude:+This is a **Windows** app. Installing here sets up the skills and stages the deploy; the screensaver itself installs onto your Windows laptop (not the Linux/WSL container). Then just ask Claude to set it up. -```-set up the Adom screensaver on my Windows laptop-```+## Talk to Claude -Claude deploys the **prebuilt, code-signed** binaries to your laptop over the `adom-desktop` relay,-wires keep-awake + autostart, registers it as your screensaver, and sets the display-off timing, no-compiler needed, and Windows Defender won't quarantine it (it's signed by "Adom Industries, Inc.").--## What it does--- **Keep-awake, no PowerToys.** A ~20-line helper (`adom-stayawake.exe`) holds-  `SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED)` on a permanently-alive thread, so-  the system stays awake (network + Remote Control survive) while the screen is free to turn off.-- **Opens with a gorgeous splash, then the billboards.** A dark cover lifts over ~800ms to reveal-  a power-aware **nerd-stats panel**, live rows for *Power* (plugged / on battery %), *Screen*-  (powers-off countdown), *Sleep* (never while plugged, or the on-battery countdown), *Keep-awake*-  (`ES_SYSTEM_REQUIRED` held → NIC up, `/remote-control` reachable), and *Billboards* (how many are-  loaded + cache size, climbing live), plus the animated "fetching the latest drops" counter.-- **A live Wiki billboard (WebView2).** It then cross-fades through recent apps/skills from the-  Adom Wiki, each with its hero, title, brief, and a **"just ask Claude"** prompt. Because it's a-  real browser tile it **plays webm video muted + looped** and renders **SVG**. Hero images/SVGs are-  **truly cached to disk** so they paint instantly and survive offline (video streams, too large to-  cache). Order is **re-shuffled every run**. Footer shows power + the display-off countdown.-- **Rests the panel, no burn-in.** When your display-off time arrives, the saver **pauses all-  video** (releasing the browser's display wake-lock that would otherwise keep the screen lit),-  **blanks to pure black**, and **powers the panel off**, while keep-awake holds the machine +-  network alive. It does *not* keep cycling bright billboards on a panel that's meant to be off.-  A 60-second heartbeat to `wv.log` records exactly what it did overnight.-- **Both wikis, with a migration nudge.** It pulls **Wiki v2** (canonical) *and* **Wiki v1**-  (legacy). If a page is on both, it shows the v2 version; v1-only cards carry an *"On Wiki v1 ·-  nudge the team to migrate to v2"* kicker, so the screensaver doubles as a gentle prod to-  finish the v1 → v2 migration.-- **Honest dimming.** On laptops where software can't dim the backlight (e.g. ASUS ROG dGPU/MUX),-  it doesn't pretend to, the on-screen dim is cosmetic (the billboard rests at ~70% brightness); the **real backlight-off is-  Windows' display-off timeout**, which genuinely powers the LEDs down with a clean keypress wake.-- **Instant wake.** Move the mouse and the billboards are gone **immediately**, the window hides-  and the browser tears down in the background (fading a layered window over a live WebView2/video is-  slow and would lag the dismiss, so it doesn't). The lightweight opening phase still fades out-  gracefully. **Never plays audio.**-- **Branded fade-to-black open.** The screensaver fades up from your desktop with a small dark-grey-  Adom mark centered, which then fades itself to black before the splash takes over.-- **Launch on demand, Win + Shift + L.** A global hotkey starts the screensaver instantly (the-  manual counterpart to the idle timer, the way `Win + L` is for lock). Contributed by Drew as-  `adom-screensaver-hotkey` and folded in as a first-class feature, toggleable from the-  preferences screen if it ever collides with another shortcut.-- **Lid-close rides through; no needless lock.** Closing the lid no longer slams the machine to-  sleep, on AC it does nothing, on battery Windows' own idle timer (e.g. 30 min) is the give-up-  clock, so a quick close-and-carry doesn't kill your threads. And because the screensaver only-  *rests the screen* (it doesn't sleep), it **doesn't throw a lock screen**; a real sleep-then-wake-  still asks for sign-in as usual.-- **Public-only, curatable rotation.** Only **public** wiki pages are advertised, explicitly-  org-private/internal pages are filtered out, and you can drop anything else (legacy v1 pages have-  no visibility field) by adding its slug to `exclude.txt`, no rebuild.-- **Signed.** Both binaries are code-signed with Adom's Azure Trusted Signing cert ("Adom-  Industries, Inc.", the same one HD and AD use), so Windows Defender doesn't quarantine the `.scr`.-- **Driveable by other apps.** Hydrogen Desktop / adom-desktop can ask it to get off the screen-  via a named event, a flag file, or a localhost control port (see the `adom-screensaver-wake` skill).--## Screenshots--### The system-tray app-A tiny always-on helper, **adom-stayawake.exe**, lives in your system tray. Right-click it for everything: the status / screen-locks window, the preferences, and a one-click "show the screensaver now" (with its **Win+Shift+L** shortcut spelled out). It also flips to a warning icon if anything is stopping your display from turning off.--![The Adom Screensaver system-tray menu, dark native Win32 menu](/blob/app/adom-screensaver/screenshots/systray-menu.png)--### The status window: catch what's secretly keeping your screen on-Here's a real problem it solves. A screen-share, a screen recording, a video call, or an Adom screen-capture left running quietly holds a Windows **display request** (`ES_DISPLAY_REQUIRED`). While that's held, Windows **won't turn your display off and won't start the screensaver**, so a bright screen can sit there burning in and wasting power all night, and nothing tells you which app to blame. (This bit us for several nights before the watchdog existed.)--The always-on helper runs with admin rights, reads `powercfg /requests` **live**, and tells you the truth, auto-refreshing every 10 seconds. When nothing is holding the display, it's green:--![The Adom Screensaver status window in the healthy green state](/blob/app/adom-screensaver/screenshots/status-window.png)--And when something is, it names the exact culprit and the one command to fix it (here, a Chrome/Edge **screen-capture** holding the display), and the tray icon flips to a warning so you actually notice:--![The Adom Screensaver status window warning that msedge is holding the display via screen capture](/blob/app/adom-screensaver/screenshots/status-window-warning.png)--### The preferences window-Reachable from Windows' Screen Saver **"Settings…"** button (or the tray), it reads your *actual* Windows power settings (lid, sleep, turn-the-display-off, lock) and shows them against the recommended "vibe-coding" profile, with one-click **Apply** for anything that's drifted. Fine-tune the idle timeout, how long the billboards play before the display turns off, and a never-turn-off (kiosk) option.--![Adom Screensaver preferences window, live power-settings drift table](/blob/app/adom-screensaver/screenshots/preferences-window.png)--### Startup: the fade-in logo, then your machine at a glance-The screensaver opens on a quiet fade-in of the Adom mark and the **"AI Electronics Prototyping"** tagline.--![Adom Screensaver fade-in logo with the AI Electronics Prototyping tagline](/blob/app/adom-screensaver/screenshots/initial-logo.png)--Then a branded splash with live nerd-stats: power source, when the display turns off, sleep behavior, the native keep-awake holding `ES_SYSTEM_REQUIRED`, and how many billboards have loaded from the Wiki. Then it hands off to the billboards.--![Adom Screensaver splash with live power and keep-awake nerd stats](/blob/app/adom-screensaver/screenshots/splash.png)--### Live billboard slides, advertising the latest Wiki drops-While the screensaver is up it cycles recent Adom Wiki apps and skills, each with its hero, title, and a **"just ask Claude"** prompt, over a live power + display-off-countdown footer. The order reshuffles every run so it always feels fresh, and the faint Adom mark drifts behind from a random spot each time.--![Billboard slide for Chipfit, a 3D chip to KiCad footprint validator](/blob/app/adom-screensaver/screenshots/billboard-chipfit.png)--![Billboard slide for Container Conduit](/blob/app/adom-screensaver/screenshots/billboard-container-conduit.png)--![Billboard slide for the MOSFET IV Characterization Visualizer](/blob/app/adom-screensaver/screenshots/billboard-mosfet.png)--![Billboard slide for the Adom Safety App](/blob/app/adom-screensaver/screenshots/billboard-safety-app.png)--## Dependencies--| Dependency | Required? | Why |-|---|---|---|-| `adom-desktop` relay | Yes (runtime) | The cloud container drives your Windows laptop through it, pushing files, compiling, shipping the WebView2 SDK, configuring power/registry. Ships with your Adom desktop bridge. |-| WebView2 Runtime | Yes (on the laptop) | Renders the billboard (video + SVG). Ships with Windows 11 / Edge. |-| .NET Framework (`csc.exe`) | Yes (on the laptop) | Ships with every Windows. Compiles the screensaver + keep-awake helper natively. |-| PowerToys | **No** | Explicitly replaced, native keep-awake without it. |--No `adompkg` package dependencies.+Open / launch:+- *"show me the Adom screensaver"*+- *"launch the screensaver"* (or press **Win + Shift + L**)++Set up / configure:+- *"set up the Adom vibe-coding server screensaver on my laptop"*+- *"keep my laptop awake without PowerToys"*+- *"make my screen turn off but keep the machine awake"*+- *"change the screensaver idle timeout to 1 minute"*++Troubleshoot:+- *"why won't my screensaver start"* (it'll check for a display lock)+- *"turn off the Adom screensaver"*  ## Features -- WebView2 billboard of recent Wiki v2 + v1 drops; **webm video (muted/looped)** + **SVG** + raster, all streamed.-- Native keep-awake via `SetThreadExecutionState` (PowerToys-free), autostarting at login.-- Real backlight-off via Windows display-off timeout (true LED power-down) while staying awake.-- Power-state + live display-off countdown footer; v1 "migrate to v2" kicker; randomized order; ~70%-brightness cosmetic dim.-- Adaptive wake (instant on-screen dissolve / panel warm-up when off); no lock unless the machine truly slept.-- **Win + Shift + L** launch hotkey (Drew's contribution), toggleable from preferences; lid-close rides through instead of sleeping.-- Runtime curation via `exclude.txt`; wake IPC (named event + flag + localhost control port) for other Adom apps.-- Honest by design: cosmetic dim, real display-off, never audio.--## Talk to the AI--**Set up / deploy**-- "set up the Adom screensaver on my laptop"-- "install the keep-awake helper and replace PowerToys"-- "turn off the Win+Shift+L screensaver hotkey" (if it collides with another app)--**Configure**-- "change the screensaver idle timeout to 2 minutes"-- "set the display to turn off after 3 minutes"-- "stop showing <slug> in the billboard"--**Run / troubleshoot**-- "trigger the Adom screensaver"-- "is the screensaver running right now?"-- "the billboard is blank" (WebView2 runtime / DLLs)--## Skills--| Skill | Purpose |-|---|---|-| `adom-screensaver` | Deploy, configure, run, troubleshoot via the `adom-desktop` relay. |-| `adom-screensaver-billboard` | Dual-wiki streaming discovery, video/SVG, `exclude.txt` curation, the manifest. |-| `adom-screensaver-wake` | Wake IPC for HD/AD/any app that needs the screen. |-| `adom-screensaver-build` | Compile + ship the WebView2 `.scr` (+ SDK DLLs) and verify renders. |-| `adom-screensaver-rationale` | The *why*, origin story, the staged cascade, and the design reasoning behind every behavior. |--The main skill is [SKILL.md](SKILL.md); the sub-skills live in [skills/](skills/).--## The honest hardware story--Built on a real ASUS ROG Zephyrus, where software can't touch the backlight (`WmiSetBrightness`-ignored on the dGPU/MUX path; NVIDIA blocks `SetDeviceGammaRamp`). So the app doesn't fake it: the-cosmetic dim is a CSS brightness veil (~70%) over the billboard, and the only real software backlight-off is-letting Windows turn the display off, which this app sets up, with keep-awake holding the system-so the network never drops.+- **Live Adom Wiki billboard** with disk-cached slides, silent webm playback, and least-seen-first rotation.+- **Native keep-awake**, signed, no PowerToys or third-party caffeine tools.+- **Hardware-aware**: laptop vs desktop, Modern Standby detection, and a real backlight-control test that picks the right dimming strategy.+- **Near-black dim** via the hardware backlight (with a software fallback), plus a slow-drifting logo so it never burns in.+- **`/remote-control`-safe**: never turns the display off on a Modern Standby machine, because that would doze the box and drop your sessions.+- **Fully transparent**: a status screen shows every power setting it changed, with re-apply and one-click undo.+- **Watchdog tray helper** that catches anything holding your display on and names it.+- **A tunable cascade**: idle, logo, splash, per-billboard, and dim timers, all configurable, with live previews.++## What it touches (and how to undo it)++It only adjusts the handful of Windows power settings needed to keep the machine reachable: sleep-after, display-off, hibernate-after, and lid action (tuned per power source and per your hardware), plus registering itself as your screensaver. The status screen's **Undo** button returns all of them to Windows defaults. Everything is reversible.++---++*Windows only. Built by Adom. The same Wiki heroes this screensaver shows are the ones [adom-wiki-hero](/adom/adom-wiki-hero) renders, so your app's billboard can run here too.*