helios-remote/SKILL.md
Helios 0b4a6de8ae
refactor: enforce device labels, unify screenshot, remove deprecated commands, session-id-less design
- Device labels: lowercase, no whitespace, only a-z 0-9 - _ (enforced at config time)
- Session IDs removed: device label is the sole identifier
- Routes changed: /sessions/:id → /devices/:label
- Removed commands: click, type, find-window, wait-for-window, label, old version, server-version
- Renamed: status → version (compares relay/remote.py/client commits)
- Unified screenshot: takes 'screen' or a window label as argument
- Windows listed with human-readable labels (same format as device labels)
- Single instance enforcement via PID lock file
- Removed input.rs (click/type functionality)
- All docs and code in English
- Protocol: Hello.label is now required (String, not Option<String>)
- Client auto-migrates invalid labels on startup
2026-03-06 01:55:28 +01:00

3.4 KiB

Skill: helios-remote

Note: This repo also contains Rust code (client, server) and assets. Those files are not relevant for using the skill — don't read or modify them.

Control PCs connected to the Helios Remote Relay Server.

When to use

When Moritz asks to do something on a connected PC:

  • "Do X on my PC..."
  • "Check what's running on the computer..."
  • "Take a screenshot of..."
  • General: remote access to an online PC

Setup

  • Script: skills/helios-remote/remote.py
  • Config: skills/helios-remote/config.env (URL + API key, don't modify)
  • SKILL_DIR=/home/moritz/.openclaw/workspace/skills/helios-remote

Important Rules

  • Before destructive actions (wallpaper, registry, system settings, deleting files) always read the current state first!
  • Wallpaper: (Get-ItemProperty 'HKCU:\Control Panel\Desktop').WallPaper
  • Device labels are lowercase, no whitespace, only a-z 0-9 - _ (e.g. moritz_pc)

Commands

SKILL_DIR=/home/moritz/.openclaw/workspace/skills/helios-remote

# Devices
python $SKILL_DIR/remote.py devices

# Screenshot → /tmp/helios-remote-screenshot.png
# ALWAYS prefer window screenshots (saves bandwidth)!
python $SKILL_DIR/remote.py screenshot moritz_pc google_chrome   # window by label
python $SKILL_DIR/remote.py screenshot moritz_pc screen          # full screen only when no window known

# Shell command (PowerShell, no wrapper needed)
python $SKILL_DIR/remote.py exec moritz_pc "Get-Process"
python $SKILL_DIR/remote.py exec moritz_pc "hostname"
# With longer timeout for downloads etc. (default: 30s)
python $SKILL_DIR/remote.py exec moritz_pc --timeout 600 "Invoke-WebRequest -Uri https://... -OutFile C:\file.zip"

# Windows (visible only, shown with human-readable labels)
python $SKILL_DIR/remote.py windows moritz_pc
python $SKILL_DIR/remote.py focus moritz_pc discord
python $SKILL_DIR/remote.py maximize moritz_pc google_chrome
python $SKILL_DIR/remote.py minimize-all moritz_pc

# Launch program (fire-and-forget)
python $SKILL_DIR/remote.py run moritz_pc notepad.exe

# Ask user to do something (shows MessageBox, blocks until OK)
python $SKILL_DIR/remote.py prompt moritz_pc "Please click Save, then OK"
python $SKILL_DIR/remote.py prompt moritz_pc "UAC dialog coming - please confirm" --title "Action required"

# Clipboard
python $SKILL_DIR/remote.py clipboard-get moritz_pc
python $SKILL_DIR/remote.py clipboard-set moritz_pc "Text for clipboard"

# File transfer
python $SKILL_DIR/remote.py upload moritz_pc /tmp/local.txt "C:\Users\Moritz\Desktop\remote.txt"
python $SKILL_DIR/remote.py download moritz_pc "C:\Users\Moritz\file.txt" /tmp/downloaded.txt

# Version: compare relay + remote.py + client commits (are they in sync?)
python $SKILL_DIR/remote.py version moritz_pc

# Client log (last 100 lines, --lines for more)
python $SKILL_DIR/remote.py logs moritz_pc
python $SKILL_DIR/remote.py logs moritz_pc --lines 200

Typical Workflow: UI Task

  1. screenshot <device> screen → look at the screen
  2. windows <device> → find the window label
  3. focus <device> <window_label> → bring it to front
  4. exec → perform the action
  5. screenshot <device> <window_label> → verify result

⚠️ Prompt Rule (important!)

Never interact with UI blindly. When you need the user to click something:

python $SKILL_DIR/remote.py prompt moritz_pc "Please click [Save], then press OK"

This blocks until the user confirms. Use it whenever manual interaction is needed.