workspace/skills/desktop-gui-inspect/SKILL.md
Full-desktop automation for targets that have no browser and no API at all — a legacy Java-based NMS client, a vendor's Windows-only configuration utility, a terminal emulator with no scriptable interface. Drives OpenClaw's ClawHub computer-use skill (Xvfb+XFCE virtual desktop, xdotool input automation) to read, confirm, or search state in a desktop-only application. Includes a VNC/noVNC Watch Mode so an operator can watch or take over live, the direct desktop analogue of the Chrome DevTools Watch Mode. Never used to submit, apply, or commit a configuration change — that remains the job of the relevant API-based skill.
npx skillsauth add automateyournetwork/netclaw desktop-gui-inspectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
browser-gui-inspect (spec 048) fills gaps in web-based controller dashboards NetClaw's API-based skills can't reach. But some legacy network/security tooling has no web GUI or API at all — only a native desktop application. Browser automation cannot reach those; this skill can. It drives OpenClaw's own ClawHub computer-use skill — a real virtual X11 desktop (Xvfb + XFCE) on this NetClaw host, controlled via xdotool-based mouse/keyboard/screenshot scripts — to read, navigate, and confirm state in a desktop-only application.
This skill deliberately contains no per-application knowledge. Every invocation is directed by the operator's own target_application/intent at request time — nothing about any specific legacy tool's UI layout is hardcoded here (Constitution VI — Multi-Vendor Neutrality), the same design principle browser-gui-inspect follows. See specs/050-computer-use-desktop/ for the full spec, research, and design behind this skill.
The underlying desktop actions (click, type, drag, key combinations, scrolling) are for reading, navigating, and confirming state on the virtual desktop — never for submitting, applying, or committing a configuration change to network infrastructure. If a request would require clicking something like "Apply," "Commit," "Save," or "Deploy" in a legacy tool's configuration workflow, stop and tell the operator that this must go through the relevant API-based skill instead, which implements the proper observe→baseline→modify→verify workflow and ServiceNow CR gating (Constitution I, II, III, VIII). Using this skill to bypass that workflow would create an unaudited, unverified side door around NetClaw's safety model — the same reasoning browser-gui-inspect documents for its own interactive tools (see that skill's own Golden Rule, and specs/048-chrome-devtools-browser-inspection/research.md R8).
This skill orchestrates OpenClaw's ClawHub computer-use skill directly — it is not an MCP server. Its actions are individual bash scripts, invoked against a virtual display, documented in ~/.openclaw/skills/computer-use/SKILL.md:
| Action | Script | Example |
|--------|--------|---------|
| Screenshot | screenshot.sh | ./scripts/screenshot.sh |
| Click (left/right/middle/double/triple) | click.sh | ./scripts/click.sh 512 384 left |
| Type text | type_text.sh | ./scripts/type_text.sh "hello" |
| Key / key combo | key.sh | ./scripts/key.sh "ctrl+s" |
| Scroll | scroll.sh | ./scripts/scroll.sh down 5 |
| Drag | drag.sh | ./scripts/drag.sh 100 100 400 400 |
| Cropped screenshot | zoom.sh | ./scripts/zoom.sh 0 0 512 384 |
| Wait (then screenshot) | wait.sh | ./scripts/wait.sh 2 |
| Cursor position | cursor_position.sh | ./scripts/cursor_position.sh |
All actions run against DISPLAY=:99 (the virtual desktop's display, per the computer-use skill's own default). Most action scripts automatically chain a confirmation screenshot onto their own output (e.g. click.sh's last line execs screenshot.sh) — a single call to click.sh/type_text.sh/key.sh/etc. returns both a status line and a base64 PNG, so Step 4 of Workflow 1 below is often already satisfied by the action call itself. This skill never installs or modifies the underlying computer-use skill's own scripts — it only calls them, per the "no forked upstream code" pattern already used for chrome-devtools-mcp.
Known install quirk: openclaw skills install writes these scripts as non-executable (confirmed live, spec 050 research.md R2) — NetClaw's installer runs chmod +x on them automatically. If a manual/out-of-band skill install ever produces "Permission denied" errors, run chmod +x ~/.openclaw/skills/computer-use/scripts/*.sh once.
No environment variables — the computer-use skill needs no credentials (research.md R6). The virtual desktop and its live-viewing service (VNC on port 5900, noVNC on port 6080) are provisioned once, at install time, via ./scripts/install.sh --components computer-use (or the equivalent at the time you're reading this) — see mcp-servers/ is not applicable here; there is no vendored server, only the installer catalog entry in scripts/lib/catalog.sh / scripts/lib/install-steps.sh.
Use this when an operator needs information from, or a read/confirm interaction with, a desktop-only application that has no browser or API path.
Input:
intent (required) — plain-language description of what to read or confirm (e.g., "open the legacy NMS client and tell me the current alarm count")target_application (optional) — the application name/identifier, if already knownTake a screenshot first, always — this is the computer-use skill's own documented workflow pattern (Screenshot → Analyze → Act → Screenshot → Repeat):
./scripts/screenshot.sh
If this fails (virtual desktop not running), stop and return:
status: "virtual_desktop_unavailable"
Analyze the screenshot for the target application. If it's not already open and needs to be launched, do so via the desktop (e.g., a terminal command through xfce4-terminal, or an existing desktop icon/menu). If the application appears to need first-time interactive setup (a license dialog, an initial login) that cannot be completed programmatically, stop and return:
status: "manual_setup_required"
Do not guess or fabricate a result — ask the operator to complete setup via Watch Mode (Workflow 2) instead.
intentUsing click, type, scroll, key, etc. as needed to navigate to the information described in intent — e.g., opening a menu, switching a tab, searching a list. Reiterate: these actions are for navigating to the information, never for submitting a change (Golden Rule above).
./scripts/screenshot.sh
Read the relevant value(s) from the screenshot content, using zoom.sh on a specific region if the full screenshot is too coarse to read reliably.
{
"result": "<the extracted value/text/confirmation answering intent>",
"screenshot_path": "<path to the captured screenshot>",
"status": "ok" | "manual_setup_required" | "virtual_desktop_unavailable" | "conflict"
}
"Open the legacy NMS client and tell me the current alarm count."
screenshot.sh — confirm the virtual desktop is up.xfce4-terminal or the desktop's own launcher.wait.sh 3 — give the legacy app time to render (many older Java/Swing apps are slow to start).screenshot.sh again — read the alarm count directly from the rendered UI, or zoom.sh on the specific panel if needed.Use this when the operator wants to watch NetClaw operate the virtual desktop live, or wants to take over manually (e.g. to complete a manual_setup_required step from Workflow 1) — the desktop analogue of browser-gui-inspect's Chrome DevTools Watch Mode.
Unlike the browser skill, there is no headless/headed choice to make here — Xvfb is inherently a virtual display with no physical monitor, so NetClaw always "operates headless" in that sense. Watching is purely a matter of whether a viewer is connected to the same virtual desktop while actions run; it never changes how the actions themselves execute.
Point a VNC client, or a browser via noVNC, at the loopback-bound live-viewing service:
VNC: localhost:5900
noVNC: http://localhost:6080
Both are confirmed loopback-only by the installer (scripts/lib/install-steps.sh's component_install_computer_use() verifies this with ss -tlnp after every install — see FR-004, research.md R5). If either is reachable from a non-loopback address, treat that as a real, unresolved security exposure — stop and fix it (re-run the installer's computer-use step, or manually reapply the -localhost / --listen 127.0.0.1:6080 patches documented in research.md R5) before continuing, rather than proceeding anyway.
The live-viewing service being loopback-only is deliberate, not a bug to route around — never expose port 5900 or 6080 directly. Instead, tunnel:
ssh -L 6080:localhost:6080 <netclaw-host>
Then open http://localhost:6080 in a local browser. This is the same secure-remote-access pattern documented for chrome-devtools-mcp's Watch Mode in spec 048.
Continue running Workflow 1's actions normally — screenshot, click, type, etc. There is no special "watch flag" to pass to the action scripts; a connected viewer simply sees the same virtual display those scripts are already driving in real time. If the operator wants to take over and complete a step manually (e.g. an interactive login manual_setup_required stopped on), they can click and type directly into the viewer — the virtual desktop has no concept of whose input is "real," so operator and NetClaw actions on the same display are equivalent.
| Status | Meaning | What to tell the operator |
|--------|---------|----------------------------|
| ok | Requested information/interaction succeeded | Return the result and the screenshot |
| manual_setup_required | The target application needs interactive first-time setup | Ask the operator to complete it via Watch Mode (Workflow 2), then retry |
| virtual_desktop_unavailable | The computer-use component isn't installed, or its virtual desktop failed to start | Point at ./scripts/install.sh --components computer-use (or the equivalent at the time) |
| conflict | Another task is already using the single shared virtual desktop | Retry once the other task completes — only one virtual display exists (data-model.md) |
tools
Federate your NetClaw with other NetClaw operators over the BGP mesh — exchange capability inventories and ask your claw what a peer can do. (US1; remote invocation and chat land in later phases.)
tools
3D network topology visualization and interactive digital twin in Unreal Engine 5.8 via the built-in UE5 MCP server.
testing
Human-in-the-loop escalation via HumanRail — route low-confidence agent decisions, pre-destructive operation approvals, and ambiguous incident tickets to real human engineers. Human answers are verified and returned as structured output. Workers are paid via Lightning Network. Use when the agent is uncertain, when a destructive change needs explicit human sign-off beyond a ServiceNow CR, or when an ambiguous ticket requires human triage before automated handling.
testing
IPv4 and IPv6 subnet calculator - CIDR breakdown, usable hosts, previous/next subnets, address classification, VLSM planning, and dual-stack analysis. Use when calculating subnets, figuring out how many hosts fit in a prefix, planning IP addressing, getting wildcard masks for ACLs, or checking if two IPs are in the same subnet.