pastilhasandClaude Opus 5 b91d4df21d desktop, extracted from the platform
x11vnc against display :0 — the session the owner is actually logged into, not a second one Officer
installs. sidecar/, api/, web/ and the host setup script, moved out of src/ whole.

Dormant when it moved: the websocket was commented out in server.tsx and the router in hono.ts since
2026-08-13, and no officer-vnc process was running on any machine. Nothing regressed and nothing was
restored — this took switched-off code out of the platform.

The point of the move is what the platform stopped knowing. Its sidecar/protocol.ts carried a VNC
section — vnc:start, vnc:ensure-password, vnc:stop, four reply variants, VncStartParams,
VncSessionInfo — and sidecar-registry.ts carried startVnc, ensureVncPassword, stopVnc and
isVncConnected. That is the platform speaking a plugin's vocabulary, which CLAUDE.md names as a rule
and this was the clearest breach of. All of it is in sidecar/protocol.ts here now.

The permission made a round trip worth recording. It was kind: 'execution' — "runs as the server owner
and cannot be shared" — and a plugin permission has no kind, deliberately, because a permission nobody
can delegate is a contradiction. So the property is expressed as ownerOnly: ['/'] instead: every path
under this plugin refused to anyone but the owner. Same answer, reached from the paths rather than
from a kind, and the first real use of a mechanism that landed the same day. The property is real —
there is one physical screen and it is the owner's.

Not finished, and BLOCKERS.md says so rather than the commit implying otherwise: the websocket is
dormant because a plugin cannot claim a WebSocket provider, host setup needs a reboot and no manifest
can express that, and there is no artwork.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 00:41:24 +00:00
2026-08-21 00:41:24 +00:00
2026-08-21 00:41:24 +00:00
2026-08-21 00:41:24 +00:00
2026-08-21 00:41:24 +00:00

Desktop

Mirror this machine's display in the browser — the real session, not a second one.

Officer attaches to the physical screen the owner is logged into, so what you see remotely is what is on the monitor. There is one desktop, not a separate remote one that drifts from it.

Owner only, and not by policy. There is a single physical display and it belongs to the server owner. Every route in this plugin is refused to anyone else, because "share the desktop" would mean showing a second person the owner's own screen.

It does not set up your desktop for you. The plugin mirrors a graphical session that already exists. On a headless server there is nothing to mirror, and a script is included (setup/setup-desktop.sh) that installs GNOME, forces Xorg — x11vnc cannot capture Wayland — and enables auto-login so a session owns the display. It needs root and a reboot, so you run it yourself.

Not working yet. The desktop's WebSocket is not mounted: it was switched off in the platform before this became a plugin, and a plugin cannot currently claim a WebSocket provider. Installing this gets you the sidecar and the panel; the connection between them is the missing piece. BLOCKERS.md says exactly where it stands.

Requires x11vnc, which the installer checks for.

S
Description
Mirror this machine's display in the browser — the real session, not a second one
Readme
58 KiB
Languages
TypeScript 81.8%
Shell 18.2%