Diagnose a private household UniFi network for Operator and discover non-secret local helper configuration. Use for Wi-Fi, internet, DNS, latency, packet los...
Coding
Netstatus
Try itCombined network + gateway status with VPN info, IP location, and system health
What it does
Combined network + gateway status with VPN info, IP location, and system health
The skill document
netstatus — Network + Gateway Status
Show combined network and gateway status including VPN state, public IP location, local network details, Tailscale, and system health.
When to Use
Use /netstatus or /net when you want a quick overview of:
- Current VPN connection (country, IP, provider)
- Local network interfaces and private IPs
- Tailscale / mesh network status
- Gateway health and uptime
- System status
- Whether traffic is routed through VPN or direct
Commands
| Command | Description |
|---|---|
/netstatus | Full network + gateway status |
/net | Alias for /netstatus |
Output Format
🌐 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
Implementation
The skill runs these checks in sequence:
1. All Network Interfaces
# 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 |
2. VPN Detection
# Check for tunnel interfaces
ifconfig | grep -E "^(utun|tun|ppp)"
# Get public IP via VPN
curl -s --connect-timeout 5 https://ipinfo.io/json
3. Tailscale Detection
# 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[]'
4. Default Gateway
# macOS
netstat -rn | grep default | head -3
# Linux
ip route | grep default
5. IP Location
curl -s --connect-timeout 5 https://ipinfo.io/json
6. Gateway Status
Read from runtime or openclaw gateway status.
7. System Uptime
# macOS
uptime
# Linux
uptime -p
Interface Categorization Rules
- Physical:
en*,eth*,wlan*→ "Local Network" - VPN tunnel:
utun*,tun*,ppp*with public IP or non-local range → "VPN" - Tailscale:
utun*with100.64.0.0/10range → "Tailscale" - Loopback:
lo*→ skip or show as "Loopback" - Other:
awdl*,bridge*→ "Other" or skip
IP Leak Detection
Compare VPN state against public IP reachability:
- If VPN interfaces exist AND public IP is reachable → traffic routed through VPN ✅
- If no VPN interfaces but public IP exists → direct connection (no VPN)
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.
macOS vs Linux
| 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 |
Error States
| 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 |
Notes
- Uses
ipinfo.iofor geolocation (free tier, no auth needed) - Caches result for 30 seconds to avoid rate limits
- Requires
curl,jq,ifconfig(macOS) orip(Linux) - VPN detection uses
utunon macOS,tunon Linux - Tailscale uses
100.64.0.0/10(CGNAT range) for mesh IPs
Related skills
Query the public MyIPChecker IP information API and explain or return the geolocation and network fields it provides. Use when Codex needs to look up metadat...
Manage ProtonVPN OpenVPN connections — connect, disconnect, rotate, check status
StatusPal (statuspal.io). Use this skill for ANY StatusPal request — searching and reading data. Whenever a task involves StatusPal, use this skill instead o...
Instatus (instatus.com). Use this skill for ANY Instatus request — reading, creating, updating, and deleting data. Whenever a task involves Instatus, use thi...
Standalone advanced network diagnostics for OpenClaw to continuously test end-to-end connectivity from OpenClaw agent to Telegram Bot API and approximate del...