Skip to content

v1.4.0 — the visual half, measured for the first time

Choose a tag to compare

@desteny-dev desteny-dev released this 01 Aug 19:14
· 16 commits to main since this release

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