"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."
Resources
5Install
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.yaml中subscription_url) - 脚本内部已自动切换到项目目录,调用时推荐用绝对路径
工作流程
阶段 1:项目经理流程
用户提出项目需求 → 你按以下步骤执行:
- 分析项目,确定实现流程和技术方案
- 检测代理需求:分析哪些任务需要访问外网(如 pip 安装、git clone 海外仓库、curl 下载海外资源、访问 huggingface/github)
- 列举代理任务清单,包含任务名、简介(为什么需要代理)
- 请求用户审批,用户统一批准/拒绝这些任务使用代理
阶段 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.yaml中subscription_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 字节)