DrowningDuck0

proxy-manager

"AI-assisted proxy management for WSL environments. Manages clash-meta proxy lifecycle, automatic speed testing for best node selection, and task-level proxy isolation. Use when a project requires external network access (pip install, git clone, curl downloads, huggingface). Covers the full workflow from proxy need detection to user approval to task execution."

DrowningDuck0 0 Updated 4w ago

Resources

5
GitHub

Install

npx skillscat add drowningduck0/proxy-manager

Install via the SkillsCat registry.

SKILL.md

proxy-manager 工作流 skill

项目与代理管理的一体化工作流。定义了你、我和 proxy-manager 项目之间的完整协作流程。

前置条件

  • proxy-manager 项目位于 /mnt/i/openclawWS/proxy-manager/
  • clash-meta 内核(mihomo)和 geo 数据库(geoip.metadb + GeoSite.dat)已就位
  • 订阅 URL 已配置(config.yamlsubscription_url
  • 脚本内部已自动切换到项目目录,调用时推荐用绝对路径

工作流程

阶段 1:项目经理流程

用户提出项目需求 → 你按以下步骤执行:

  1. 分析项目,确定实现流程和技术方案
  2. 检测代理需求:分析哪些任务需要访问外网(如 pip 安装、git clone 海外仓库、curl 下载海外资源、访问 huggingface/github)
  3. 列举代理任务清单,包含任务名、简介(为什么需要代理)
  4. 请求用户审批,用户统一批准/拒绝这些任务使用代理

阶段 2:任务执行流程

用户批准后,执行项目时遇到代理任务:

┌─ 🔒 开启代理
│   检查 clash 是否运行 → 未运行则请求用户确认启动
│   用户允许 → 启动(最长等待 15s 就绪)
│   注意:强制写入 mixed-port/external-controller 确保端口一致
│   注意:DNS 不绑 53 端口避免 WSL systemd-resolved 冲突
│
├─ ⏱ 自动测速选优
│   通过 clash API 获取所有节点 → 批量测速 → 选最快设为默认
│   输出 Top5 节点及延迟
│   缓存 5 分钟内有效,再次调用跳过测速
│
├─ 🔍 联通测试
│   多 URL fallback 测试:Google → gstatic → YouTube,任一通过即确认
│   设置 User-Agent 避免 CDN 拦截
│   全部失败才报错
│
├─ 📦 执行代理任务
│   设置 http_proxy/https_proxy 环境变量 → 执行命令
│   命令 stdout/stderr 会截断(超过 10 行或 2000 字节)
│
└─ 🔒 关闭代理
│   仅杀自己启动的 mihomo 进程(精确 PID),不碰其他进程

每个代理任务独立封装一次完整流程(开启→测速→测试→执行→关闭),输出在一个区块内方便查看。

调用方式

# 推荐用绝对路径(脚本内部自动 cd 到项目目录)
python3 /mnt/i/openclawWS/proxy-manager/proxy-manager.py task "任务名" "命令"

示例:

python3 /mnt/i/openclawWS/proxy-manager/proxy-manager.py task "pip install torch" "pip install torch torchvision"
python3 /mnt/i/openclawWS/proxy-manager/proxy-manager.py task --full "强制全量测速" "curl -s https://google.com"

可用指令

指令 说明
status 查看代理状态与订阅健康
url show 显示当前订阅 URL
url set <URL> 设置/更换订阅 URL(自动更新配置)
update 拉取最新订阅配置
start 启动 Clash
stop 关闭 Clash
test 联通测试
speedtest 测速选优(缓存有效则直接用缓存)
speedtest --full 强制全量重新测速(附加联通验证)
task <name> <cmd> 执行代理任务(快速模式,有缓存不走测速)
task --full <name> <cmd> 执行代理任务(强制全量测速)

权限规则

操作 权限
读取配置、检测代理需求 ✅ 自动执行
管理 clash 配置文件 ✅ 自动执行
订阅更新 ✅ 自动执行
启动 clash ❌ 必须问用户
在已运行的 clash 上执行任务 ✅ 自动执行
切换节点/模式 ✅ 自动执行
停止 clash ❌ 必须问用户

每次启动 clash 前必须请求用户许可,提供:

  • 为什么需要启动
  • 预估执行时长
  • 涉及的任务名

设计细节

配置安全性

  • 订阅更新写配置用原子写入(临时文件 + fsync + os.replace),防止断写下写坏配置
  • config.yamlsubscription_url 同样使用原子写入
  • mixed-port 和 external-controller 强制覆盖,确保 start() 检测端口与配置一致
  • DNS 配置中不绑 listen 端口,避免 WSL systemd-resolved 占 53 导致 clash 启动失败
  • 支持 Clash API secret 鉴权(在 config.yaml 中配置 secret 字段)
  • 无订阅启动保护start() 在未配置订阅 URL 时直接拒绝,避免启动空壳 clash

文件锁

  • 测速缓存写入带 fcntl.flock 文件锁,防止并行进程竞态
  • 锁具有 5 秒超时机制(LOCK_NB + 循环等待),避免死锁
  • 锁文件位于 .locks/speed_cache.lock,自动创建

并行安全性

  • stop() 仅杀 self.clash_process(精确 PID),不 pkill,不误杀其他任务进程
  • 每个 task 实例有独立的 clash_process 跟踪
  • 两个 task 同时运行各自独立 mihomo 进程,互不干扰
  • 不建议并行超过 2 个 task

注意事项

  • WSL2 不支持 TUN 模式,只使用 HTTP/SOCKS5 代理模式(mixed-port: 7890
  • 串行调用:代理任务串行执行完全安全
  • 并行调用:支持双 agent 同时调用,但不推荐超过 2 个
  • 测速:全量测速 44 个节点约需 30-60 秒(每个节点 3 秒超时),结果缓存 5 分钟
  • --full 标志可强制全量重测
  • 节点信息通过 clash RESTful API(127.0.0.1:9090)获取。如果订阅配置了 API secret,需要在 config.yaml 中设置 secret 字段
  • 所有节点类型已统一匹配(小写,包括 shadowsocks/vmess/trojan/hysteria2/vless/tuic 等)
  • 代理命令的 stdout/stderr 会截断(超过 10 行或 2000 字节)