Jump to related tools in the same category or review the original source on GitHub.

iOS & macOS Development @qiangwang375-wq Updated 2/23/2026

V2rayn OpenClaw Plugin & Skill | ClawHub

Looking to integrate V2rayn into your AI workflows? This free OpenClaw plugin from ClawHub helps you automate ios & macos development tasks instantly, without having to write custom tools from scratch.

What this skill does

Manage V2RayN proxy client on macOS with auto-failover.

Install

npx clawhub@latest install v2rayn

Full SKILL.md

Open original

SKILL.md content below is scrollable.

V2RayN Skill

Manage V2RayN proxy client on macOS with auto-failover.

Overview

V2RayN is a V2Ray client for macOS. This skill helps manage nodes, test connections, auto-check for failures, and update subscriptions.

Quick Status Check

# Check if V2RayN is running
ps aux | grep -i v2rayN | grep -v grep

# Check listening ports
lsof -i :10808 -i :10809 -i :10810 -i :7890 -i :7891 2>/dev/null

# Test connection
curl -s --max-time 5 https://www.google.com -w "\nStatus: %{http_code}\n"

Auto-Check Node Health (Every 30 min)

This skill automatically:

  1. Check if current node is working
  2. If failed, update subscription
  3. Select a new working node

Implementation

Create a cron job:

*/30 * * * * /path/to/check_v2rayn.sh

Check Script

#!/bin/bash
# check_v2rayn.sh - Auto-check and failover for V2RayN

LOG_FILE="$HOME/.openclaw/logs/v2rayn_check.log"
CONFIG_DIR="$HOME/Library/Application Support/v2rayN/guiConfigs"
MAIN_CONFIG="$CONFIG_DIR/guiNConfig.json"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Test connection
test_connection() {
    curl -s --max-time 5 -x socks5://127.0.0.1:10808 https://www.google.com -o /dev/null -w "%{http_code}" 2>/dev/null
}

# Get current node info
get_current_node() {
    python3 -c "
import json
with open('$MAIN_CONFIG') as f:
    d = json.load(f)
    idx = d.get('currentServerIndex')
    if idx is not None:
        servers = d.get('vmess',[]) + d.get('vless',[]) + d.get('trojan',[])
        if idx < len(servers):
            print(servers[idx].get('remarks', 'Unknown'))
        else:
            print('Invalid index')
    else:
        print('No server selected')
" 2>/dev/null
}

# Main check
log "=== Starting V2RayN health check ==="

# Test current connection
RESULT=$(test_connection)
log "Connection test result: $RESULT"

if [ "$RESULT" = "200" ]; then
    log "✅ Node is working: $(get_current_node)"
    exit 0
else
    log "❌ Node failed! Trying to recover..."
    
    # Try to update subscription
    log "Updating subscription..."
    # Note: V2RayN CLI is limited, manual or external script needed
    
    log "Please manually:"
    log "1. Open V2RayN"
    log "2. Update subscription"
    log "3. Select a new node"
    
    # Notify user
    echo "⚠️ V2RayN node failed! Please check manually."
    exit 1
fi

Manual Commands

1. Check Node Status

# Test all common proxy ports
for port in 10808 10809 10810 7890 7891; do
    result=$(curl -s --max-time 3 -x socks5://127.0.0.1:$port https://www.google.com -w "%{http_code}" 2>/dev/null)
    echo "Port $port: $result"
done

2. List All Nodes

cat ~/Library/Application\ Support/v2rayN/guiConfigs/guiNConfig.json | python3 -c "
import json,sys
d=json.load(sys.stdin)
servers = d.get('vmess',[]) + d.get('vless',[]) + d.get('trojan',[]) + d.get('shadowsocks',[])
print(f'Total nodes: {len(servers)}')
for i, s in enumerate(servers):
    print(f'{i+1}. {s.get(\"remarks\", s.get(\"name\", \"Unnamed\"))}')
"

3. Get Current Node

python3 -c "
import json
with open('$HOME/Library/Application Support/v2rayN/guiConfigs/guiNConfig.json') as f:
    d = json.load(f)
    idx = d.get('currentServerIndex')
    if idx:
        servers = d.get('vmess',[]) + d.get('vless',[]) + d.get('trojan',[])
        if idx < len(servers):
            s = servers[idx]
            print(f'Current: {s.get(\"remarks\", \"Unknown\")}')
            print(f'Protocol: {s.get(\"protocol\", \"trojan\")}')
"

4. Test Specific Node

# Test current node
curl -s --max-time 5 -x socks5://127.0.0.1:10808 https://www.google.com

# Test direct
curl -s --max-time 5 https://www.google.com

5. View Logs

ls -la ~/Library/Application\ Support/v2rayN/guiLogs/
tail -50 ~/Library/Application\ Support/v2rayN/guiLogs/*.log 2>/dev/null | tail -30

6. Restart V2RayN

# Kill and restart
pkill -f v2rayN
open /Applications/v2rayN.app

7. Force Update Subscription

Note: V2RayN doesn't have a CLI for subscription update. You'll need to:

  1. Open V2RayN GUI
  2. Click "Update" on your subscription

Configuration Files

File Description
guiNConfig.json Main GUI config (nodes, settings)
config.json V2Ray/Xray runtime config
configPre.json Sing-box config (if using TUN mode)

Troubleshooting

Node Not Working

  1. Check logs: tail -50 ~/Library/Application Support/v2rayN/guiLogs/*.log
  2. Test port: lsof -i :10808
  3. Try different node in GUI
  4. Update subscription

All Nodes Invalid

  • Import new subscription
  • Or add nodes manually in GUI

TUN Mode Not Working

  • Check if TUN interface exists: ifconfig | grep -i tun
  • Check configPre.json for TUN settings
Original Repository URL: https://github.com/openclaw/skills/blob/main/skills/qiangwang375-wq/v2rayn
Latest commit: https://github.com/openclaw/skills/commit/2861173e8122a79b1c7ed0e3928eb251f6f1cec8

Related skills

If this matches your use case, these are close alternatives in the same category.