WOLP LAN Power Control

Wake or shut down LAN devices by sending WOL-plus packets from the agent host. Use this when the user wants to power on a device with a raw Ethernet magic pa...

MIT-0 · Free to use, modify, and redistribute. No attribution required.
1 · 28 · 0 current installs · 0 all-time installs
byli.yao@leeyeel
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description match the included Python script and SKILL.md. The script constructs and sends Wake-on-LAN and WOL-plus UDP payloads, reads/writes a local devices.json inventory, and documents the external client it can install. No unrelated capabilities or credentials are requested.
Instruction Scope
SKILL.md keeps instructions focused on wake/shutdown/list operations and installing/configuring the optional WOL-plus client. It does instruct the agent/user on installing a client on target machines (downloads from GitHub Releases) and to edit client config paths like /usr/local/etc/wolp/wolp.json; those steps are reasonable for enabling shutdown support but are higher-privilege operations on target hosts and should only be performed with explicit user consent. The skill will also update skill/assets/devices.json in-place after successful non-dry-run operations (it persists MAC/IP entries).
Install Mechanism
The skill is instruction-only with a bundled script; there is no automated install spec. SKILL.md recommends obtaining the client from a GitHub repo and releases, which is an expected source for third-party client software. Nothing is downloaded automatically by the skill itself.
Credentials
The skill declares no environment variables, credentials, or config paths to access. It stores device inventory locally (MACs and IPs) in assets/devices.json — this is expected but may contain sensitive network topology data. The Python script only requires the optional wakeonlan pip package for the 'wake' action.
Persistence & Privilege
The skill does not request always:true or elevated platform privileges. It writes and updates its own assets/devices.json (its own bundle area) but does not modify other skills or system-wide agent settings. SKILL.md does describe installing a separate client service on remote machines, which is a normal operational requirement for shutdown functionality but is an explicit external action.
Assessment
This skill appears to do what it says — sending LAN Wake-on-LAN and WOL-plus shutdown packets and keeping a small local inventory. Before installing or using it: (1) run operations with --dry-run first to confirm payloads; (2) be aware the skill will update skill/assets/devices.json with MACs and IPs — treat that file as sensitive; (3) the 'wake' action requires the wakeonlan pip package (install manually if needed); (4) enabling shutdown support requires installing a separate WOL-plus client on target hosts (SKILL.md points to a GitHub Releases page) — verify the release source and only install on machines you control; (5) change the client's default web UI credentials (admin/admin123) immediately after install; (6) do not grant the agent remote install rights or SSH access to hosts unless you explicitly trust the agent and understand the changes it will make.

Like a lobster shell, security has layers — review code before you run it.

Current versionv0.0.2
Download zip
latestvk971147rfbnc7ep3njg639hp0x838e5h

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

wolp

Use this skill when the user wants the agent to control a device on the local network.

Supported operations:

  • wake: send a standard UDP Wake-on-LAN magic packet with Python
  • shutdown: send a UDP magic packet to a target IPv4 address
  • list: print the resolved device inventory

Use the bundled Python script:

  • scripts/wolp_power.py
  • assets/devices.json

Required inputs:

  • Wake:
    • target MAC address
    • optional broadcast IPv4 address, default 255.255.255.255
    • optional UDP port, default 9
  • Shutdown:
    • target MAC address
    • target IPv4 address
    • optional extra_data, default FF:FF:FF:FF:FF:FF
    • optional UDP port, default 9

Constraints:

  • shutdown uses a normal UDP socket and does not require root.
  • wake uses the Python package wakeonlan and does not require a compiled helper.
  • Install the dependency before sending wake packets:
python3 -m pip install wakeonlan
  • The wake subcommand will print a clear error if wakeonlan is missing.
  • shutdown requires IP connectivity to the target host and a compatible WOL-plus listener on the target machine.
  • Packet send confirms only local transmission, not that the remote machine actually changed power state.

Device inventory:

  • Store reusable devices in skill/wolp/assets/devices.json.
  • Successful non-dry-run wake and shutdown commands automatically write the resolved device info back to assets/devices.json.
  • If --device <name> is provided, that entry is updated in place; otherwise the script reuses an existing entry with the same MAC or creates a new device-<mac> entry.
  • Repeated operations on the same device keep refreshing that device's stored fields and the latest success metadata.
  • The file format is:
{
  "defaults": {
    "broadcast_ip": "255.255.255.255",
    "port": 9,
    "extra_data": "FF:FF:FF:FF:FF:FF"
  },
  "devices": {
    "nas": {
      "mac": "AA:BB:CC:DD:EE:FF",
      "host": "192.168.1.50",
      "broadcast_ip": "192.168.1.255"
    },
    "desktop": {
      "mac": "11:22:33:44:55:66",
      "host": "192.168.1.60",
      "extra_data": "12:34:56:78:9A:BC",
      "last_action": "shutdown",
      "last_success_at": "2026-03-21T00:00:00Z",
      "port": 9
    }
  }
}
  • Use list before sending if you need to inspect or verify stored devices.
  • CLI flags override inventory values.

Preferred commands:

python3 skill/wolp/scripts/wolp_power.py list
python3 skill/wolp/scripts/wolp_power.py wake --device nas
python3 skill/wolp/scripts/wolp_power.py shutdown --device nas
python3 skill/wolp/scripts/wolp_power.py wake --mac AA:BB:CC:DD:EE:FF
python3 skill/wolp/scripts/wolp_power.py wake --mac AA:BB:CC:DD:EE:FF --broadcast-ip 192.168.1.255 --port 9
python3 skill/wolp/scripts/wolp_power.py shutdown --host 192.168.1.50 --mac AA:BB:CC:DD:EE:FF --extra-data FF:FF:FF:FF:FF:FF --port 9

For safe previews or debugging, use --dry-run first:

python3 skill/wolp/scripts/wolp_power.py wake --device nas --dry-run
python3 skill/wolp/scripts/wolp_power.py shutdown --device nas --dry-run

Client install and config:

  • Project: https://github.com/leeyeel/WOL-plus
  • Releases: https://github.com/leeyeel/WOL-plus/releases
  • Client receives shutdown packets and serves the Web UI.
  • Default Web UI access:
    • URL: http://<client-ip>:2025
    • username: admin
    • password: admin123

Agent standard install procedure:

  1. Confirm the minimum missing inputs only:
    • target OS: Windows, Debian/Ubuntu, or RPM-based Linux
    • target architecture when relevant: amd64 or arm64/aarch64
    • whether the agent can install directly on the target machine or must only provide user instructions
    • target machine IP if the user wants Web UI verification
  2. Choose the install source:
    • prefer a matching package from Releases
    • prefer the Debian package when the agent can reach a Debian/Ubuntu host over SSH
    • only build from this repo when a needed Debian package is unavailable from Releases
  3. Install by platform:
    • Windows:
      • download installer_windows_amd64_v<version>.exe from Releases
      • if the agent cannot control the Windows desktop session, tell the user to run the installer manually
      • after installation, verify the service is running and open http://<windows-ip>:2025
    • Debian/Ubuntu:
      sudo dpkg -i wolp-client_<version>_amd64.deb
      sudo systemctl status wolp.service
      
    • RPM Linux:
      sudo rpm -ivh wolp-client-<version>-1.x86_64.rpm
      sudo systemctl status wolp.service
      
  4. Debian build fallback from this repo:
    bash scripts/build-deb.sh amd64 0.0.0-dev
    sudo dpkg -i release/client/wolp-client_0.0.0-dev_amd64.deb
    sudo systemctl status wolp.service
    
  5. Verify the client after install:
    • confirm wolp.service is active
    • confirm the Web UI responds at http://<client-ip>:2025
    • tell the user to change the default password after first login
  6. Configure the client when the user wants shutdown support:
    • edit /usr/local/etc/wolp/wolp.json
    • set mac_address to the client machine MAC that should receive the shutdown packet
    • set interface to the active NIC name on the client machine
    • set extra_data to match the sender's --extra-data
    • set udp_port to match the sender's --port
    • set shutdown_delay, username, and password as requested
  7. Remember the fixed defaults and path layout:
    • binary: /usr/local/bin/wolp
    • config: /usr/local/etc/wolp/wolp.json
    • web UI: /usr/share/wolp/webui
    • service: wolp.service
    • default extra_data=FF:FF:FF:FF:FF:FF
    • default udp_port=9
    • default shutdown_delay=60
    • default HTTP UI port 2025
  8. Keep protocol roles clear:
    • sender-side inventory interface matters only for wake
    • receiver-side udp_port and extra_data matter only for shutdown

When reporting results or performing installs:

  • echo the resolved broadcast IP, host, UDP port, and normalized MAC values
  • for wake, report that the packet is sent through the wakeonlan Python package
  • state clearly whether the script performed a real send or a dry run
  • if the user did not provide enough data, ask only for the missing MAC, target IPv4 address, or wake broadcast IP when needed
  • if you install the client, report the package source, package path, config path, Web UI URL, and the exact extra_data and udp_port values you configured

Files

3 total
Select a file
Select a file to preview.

Comments

Loading comments…