v1.4.0 — the visual half, measured for the first time
Why this is 1.4.0 and not 1.3.5
1.3.1 through 1.3.4 all shipped in a day, and at least two of them changed what the server refuses. New refusals are a change in behaviour, not a patch. Calling them patch releases was wrong, and it made a manual install cost more than the fix was worth.
From here: patch = fixes only. minor = any new refusal, tool, or reply field the caller must act on. And not more than one release a day unless something is actually costing somebody work.
The visual half had never been measured
The pulse, the notification and the tray icon were the two oldest items on the open list — written, shipped, never checked on a real desktop. Checking them found three defects, none of them in the drawing.
The guard could go missing and never come back
_overlay_starten returned the stored handle whenever it was not None — which is true of a dead process too. So the first time the overlay ended for any reason, every later command went into a pipe nobody was reading.
The overlay is not decoration. The warning, the pulse, the notification and the input hold all live in it. Losing it once meant losing the guard for the rest of the server's life, silently. It is restarted now — with a cooldown, because "restart it" and "restart it on every call" are not the same thing — and if it will not stay up, self_test says so instead of the server pretending.
A leftover overlay sat glowing with nothing held
Four bars visible, nothing holding, from an earlier server. A glow that means nothing is worse than no glow, because the next real one means nothing either. Anything on screen is now taken down whenever the state is "off", whatever path led there.
The pulse framed the desktop, not your screen
The bars followed the virtual desktop — one box around all monitors. Measured here on two screens of different height: the bottom edge of the desktop sat 240px below the smaller monitor, so somebody working on that screen got a top edge, a right edge, and nothing else. Half a frame reads as a glitch, not a warning.
Each monitor now gets its own complete frame. The held bar is also re-drawn a few times a second and re-asserted as topmost — being topmost once is not being topmost, since any window that asks later goes above. The pixels are cached, so the redraw costs less than one frame of the animation before it.
What the measurement confirmed
| Pulse | red #EF4444 reaching ~200px inward at 800ms, snapping to blue #22D3EE at 46px — read as screen pixels on all four edges of both monitors, before, during and after |
| Notification | appears |
| Input hold | the overlay reports hooks:1 on lock, hooks:0 on release |
self_test now reports guard_overlay: is the process running, how often did it have to be restarted, has it been given up on, what did it last say about the hooks.
Two more open items closed
wait inside batch is refused past 2 seconds. The block is held for the whole batch, so a ten-second wait is ten seconds of somebody locked out of their own screen while nothing happens. It was written down as a rule, and rules that are only written down get broken. Short settles still pass — a window needs a beat to catch up.
_spur_suchen measures itself. self_test reports stale_ref_rescue: runs, nodes walked, seconds, worst single run, and how often the 4000-node limit was hit. Whether that walk should become an index is now a question for numbers rather than for a feeling that 4000 sounds like a lot.
Two downloads — take the one for your AI
| Download | For | How |
|---|---|---|
pc-screen-control.mcpb |
Claude Desktop | Settings → Extensions → Advanced → Install extension |
pc-screen-control-gpt.zip |
ChatGPT desktop, Codex, Cursor, VS Code, Cline, Zed | Extract, double-click INSTALL-FOR-GPT.bat, restart |
Same server.py, same bundled libraries, same 34 tools. Only the wrapper differs.
Install
Claude: remove the old version first (Settings → Extensions), quit Claude completely including the tray icon, install the .mcpb, start twice. Run self_test — it should report 1.4.0, all green.
ChatGPT / Codex: extract the zip, double-click INSTALL-FOR-GPT.bat, restart ChatGPT.
Needs Windows and Python 3.9+ with "Add python.exe to PATH" ticked.
Verify the downloads (optional)
pc-screen-control.mcpb
SHA-256: 97aecf13d44ea192eef2e1be40f8baf3774ae63d1840e65b4c7d9fa8329c3de3
Size: 7767044 bytes
pc-screen-control-gpt.zip
SHA-256: 46af901293ca13b006734bfcb2061e080b41b15a59c292c5a4f908a0fa71a26d
Size: 7673387 bytes