Install
openclaw skills install @space-cadet/netstatusCombined network + gateway status with VPN info, IP location, and system health
openclaw skills install @space-cadet/netstatusShow combined network and gateway status including VPN state, public IP location, local network details, Tailscale, and system health.
Use /netstatus or /net when you want a quick overview of:
| Command | Description |
|---|---|
/netstatus | Full network + gateway status |
/net | Alias for /netstatus |
🌐 Network Status
━━━━━━━━━━━━━━━━━━━━━
🛡️ VPN: ProtonVPN 🇸🇪 (Stockholm)
Public IP: 159.26.108.93
Provider: AS208172 Proton AG
Interface: utun2 (mtu 1380)
🏠 Local Network
WiFi (en0): 192.168.1.42
Gateway: 192.168.1.1
🔗 Tailscale
Interface: utun3
IPs: 100.92.54.38, fd7a:115c:a1e0::1
Status: running
🌍 Public IP: 159.26.108.93 (same as VPN — no leak)
🖥️ Gateway: Running (14h 29m)
Model: kimi/k2.7
Context: 27k/131k (20%)
⏱️ System: 19h 44m uptime
Load: 2.32 1.82 1.62
Or compact mode:
🌐 SE 159.26.108.93 | 🏠 192.168.1.42 | 🖥️ k2.7 20% | ⏱️ 19h 44m
The skill runs these checks in sequence:
# macOS: list all interfaces with their IPv4/IPv6 addresses
ifconfig | awk '/^[a-zA-Z0-9]+:/ { iface=$1 } /inet / { print iface, $2 }'
# Alternative: get specific interface IPs
ipconfig getifaddr en0 # WiFi
ipconfig getifaddr en1 # Ethernet / Thunderbolt
Interface categories to detect:
| Pattern | Type | Example |
|---|---|---|
en0, en1 | Physical (WiFi/Ethernet) | 192.168.x.x |
utun[0-9]+, tun[0-9]+ | VPN / tunnel | 10.x.x.x, public IP |
utun[0-9]+ with 100.x | Tailscale | 100.x.y.z |
lo0 | Loopback | 127.0.0.1 |
awdl0 | Apple Wireless Direct Link | link-local |
bridge0 | Bridge | usually no IP |
# Check for tunnel interfaces
ifconfig | grep -E "^(utun|tun|ppp)"
# Get public IP via VPN
curl -s --connect-timeout 5 https://ipinfo.io/json
# Check if tailscaled is running
pgrep -x tailscaled >/dev/null && echo "running" || echo "stopped"
# Tailscale IPs (if interface exists)
ifconfig utun3 2>/dev/null | grep inet
# Or use tailscale CLI
tailscale status --json 2>/dev/null | jq -r '.Self.TailscaleIPs[]'
# macOS
netstat -rn | grep default | head -3
# Linux
ip route | grep default
curl -s --connect-timeout 5 https://ipinfo.io/json
Read from runtime or openclaw gateway status.
# macOS
uptime
# Linux
uptime -p
en*, eth*, wlan* → "Local Network"utun*, tun*, ppp* with public IP or non-local range → "VPN"utun* with 100.64.0.0/10 range → "Tailscale"lo* → skip or show as "Loopback"awdl*, bridge* → "Other" or skipCompare VPN state against public IP reachability:
Note: The public IP will NOT match the VPN tunnel interface IP (e.g., ProtonVPN uses 10.x.x.x on the tunnel while the exit IP is public). Checking for IP equality is incorrect — instead, check if VPN is up and internet is reachable.
| Check | Linux | macOS |
|---|---|---|
| List interfaces | ip -4 addr show | ifconfig |
| Get interface IP | ip addr show dev eth0 | ipconfig getifaddr en0 |
| VPN interface | ip addr show tun0 | ifconfig | grep utun |
| Default gateway | ip route | grep default | netstat -rn | grep default |
| Uptime parsing | uptime -p | uptime (raw output) |
| Tailscale check | tailscale status | tailscale status |
| State | Display |
|---|---|
| VPN down | 🛡️ VPN: DISCONNECTED |
| IP mismatch | ⚠️ IP leak detected: VPN=SE but public=IN |
| Can't reach ipinfo | 🌍 Public IP: unreachable |
| Tailscale down | 🔗 Tailscale: not running |
| No local network | 🏠 Local Network: no active interface |
ipinfo.io for geolocation (free tier, no auth needed)curl, jq, ifconfig (macOS) or ip (Linux)utun on macOS, tun on Linux100.64.0.0/10 (CGNAT range) for mesh IPs