plugins/steroids/skills/clash-verge-config/SKILL.md
以「配置即代码」的方式管理、调试 Clash Verge Rev(mihomo 内核)的配置,并实现不依赖 GUI 的配置更新。涵盖:哪些字段扩展脚本能改 / 不能改(external-controller、secret、端口被内核接管)、改了为什么不生效、如何在纯命令行下让配置重新生成并生效、mihomo external controller 这个内核 RESTful API 的用法、用 external-ui 自托管 Web 面板、以及判断流量「走没走代理 / 命中哪条规则」的排查方法。只要用户在改 Clash Verge / mihomo 的扩展脚本(script)、扩展配置(merge)、订阅规则、external-controller / secret / 端口、或抱怨「clash 配置改了不生效」「规则不命中」「远程连不上面板」「想自动化更新代理配置」,就应该用这个 skill。
npx skillsauth add kanlac/agent-steroids clash-verge-configInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Clash Verge Rev 是个 Tauri GUI,底层跑 mihomo 内核。它的配置系统有几个反直觉但有据可查的行为,不了解会浪费大量时间瞎试。这个 skill 把这些行为的「方向」沉淀下来,让你在改配置、做自动化、排查路由时直接走对路,而不是凭印象猜。
核心原则贯穿全篇:遇到不确定的工具行为,去查一手来源(官方文档 + 源码),不靠猜。 下面每条结论都可以、也应该在当前版本上复核。
运行时配置由内部函数 enhance() 生成,顺序大致是:
订阅 profile → 扩展配置(Merge) → 扩展脚本(Script) → ★ Verge 接管保留字段 ★ → 内置脚本 → tun/dns
最后那一步会无条件覆盖一批「保留字段」——external-controller、secret、各 *-port、log-level 等。官方文档原话:这些字段「由程序自身控制以保证正常功能,无法被成功覆盖」。
这意味着:
# Generated by Clash Verge 头、持久化的配置),并配合相应开关(如 external controller 的启用开关)。写配置前先问自己:这个字段属于「Verge 保留」还是「脚本可控」? 归属错了,后面怎么试都不生效。具体字段清单、文件角色、源码位置见 references/internals.md。
一套行之有效的组织方式:把「全局扩展脚本」当成你自己规则与节点的单一事实来源(一个叠加层),让它作用在任意机场订阅之上。
好处:既能用机场供应商的配置,又能用自己的一套规则和节点覆盖它——换机场、机场更新订阅都不影响你的叠加层,你的规则与自建节点始终生效,维护成本集中在一处脚本,而不是每换一个订阅就重配一遍。
实现上把脚本写成「读入当前 config → 做幂等叠加 → 返回」的转换器:典型操作是先按名字移除同名旧节点再 unshift 自己的节点、把自建策略组插到最前、prepend 自己的规则、必要时把订阅的 MATCH 兜底改写到你选定的出口。因为是全局脚本,它对所有订阅 profile 一视同仁。配合心智模型三的「重新生成」闭环,换订阅后跑一次即可让叠加层重新生效。
「我改了 X 但没生效」有三种完全不同的原因,别混为一谈:
关键事实(务必在当前版本复核):
enhance() 重新生成运行时配置(启动流程里会调用生成函数)。所以「重启」是最可靠、可脚本化的「让改动生效」手段。enhance() 重新生成。 App 内「重新激活配置」按钮是 Tauri IPC 命令,外部够不到;它是 Tauri(系统 WebView)不是 Electron,没有 Chromium 远程调试端口可注入。deeplink(clash://...)只能导入订阅。因此纯命令行闭环是:
退出 App → 重新生成扩展脚本(你管理 dotfiles 的方式,模板替换或直接编辑)
→ (需要时)改 clash 配置文件里的保留字段
→ 重新打开 App # 触发 enhance() → 新运行时配置 → 内核加载
macOS 上「退出 / 打开」用 osascript -e 'quit app "<AppName>"' 与 open -a "<AppName>",并轮询确认进程退出/端口起来;其他平台机制不同,按平台调整。退出 GUI 后内核可能被特权服务保活,但重启 GUI 会重新生成并 reload 内核,不影响结果。
external-controller(如 0.0.0.0:9097 + secret)是 mihomo 内核对外的 HTTP API,独立于 Verge GUI——GUI 只是众多前端之一。用它可以:
PUT /configs(按文件路径或 payload 重载内核当前配置)。注意它重载的是「内核当前配置文件」,不会替你跑 Verge 的 enhance() 重新生成——要套用模板改动,仍需先重新生成(见心智模型三),或自己生成完整配置再灌进去。external-ui 指向一个放了面板静态文件的目录,内核就用 HTTP 在 /ui/ 直接托管面板(如 MetaCubeXD / yacd / zashboard)。优先用这个而不是在线 HTTPS 面板——在线面板是 HTTPS,连你的 HTTP 控制器会被浏览器「混合内容」拦截,得手动放行;/ui/ 同源 HTTP,点开即用。0.0.0.0 让局域网/VPN 可达,配合 Tailscale / WireGuard 即可异地访问 http://<对端IP>:<port>/ui/。绑 0.0.0.0 时务必用强 secret(暴露面 = 整个代理的控制权)。API 端点、external-ui 落地、面板下载、连自身 VPN IP 的 hairpin 坑等细节见 references/internals.md。
排查某网站/某进程是否走代理时,只确认「走没走代理」是不够的——同样「走了代理」,命中不同规则会去到完全不同的出口(DIRECT / 某机场 / 某自建节点),表现天差地别。
所以排查路由问题,始终要定位流量落到了哪条规则上:
GET /connections)看每条连接实际匹配的 rule 和 rulePayload、出站 chains。log-level 调高——它是保留字段,改 clash 配置文件 + 重启)。「网站没走代理」常常其实是「命中了某条 DIRECT 规则」或「被某机场策略组接管」,而不是代理整体没工作。先定位规则,再下结论。
references/internals.md:保留字段清单、各配置文件角色与典型位置、enhance() 管线与源码位置、mihomo 常用 API 端点与 PUT /configs、external-ui 自托管面板落地步骤、常见坑(混合内容、VPN 自连 hairpin、TUN 与 VPN 路由共存)。需要动手做某个具体操作时再读它。tools
Turn a YouTube link into a polished single-file bilingual (Chinese + original) transcript reading page. Use when the user gives a YouTube URL and asks to "转录" "做转录稿" "生成转录页面" "中英对照" "bilingual transcript" "transcribe this video", or wants a readable HTML transcript with clickable timestamps, chapter navigation, highlighted key points, and proper-noun annotations. Fetches captions + chapters via yt-dlp, the agent translates and curates, then a script renders the HTML.
development
Use when a user asks the agent to "learn" from a file, example, correction, failed workflow, or feedback and persist that learning into skills or agent instructions. Guides semantic skill refactoring: extract the transferable behavior, update the owning skill so it becomes clearer and easier to execute, avoid append-only note dumping, and decide when not to create new reference files.
data-ai
Configure and manage Telegram-connected Claude agents with heartbeat scheduling on macOS. Use when the user wants to "set up Telegram agent", "add heartbeat", "configure Telegram channel", "管理 Telegram agent", "配置心跳", "添加定时任务", "Telegram 多 agent", "配置 Telegram", "添加 Telegram agent", "给 Telegram bot 创建身份", "设置定时任务", "新增定时任务", "每天X点执行Y", "schedule a task", "run this automatically", "set up a cron job", or encounters Telegram polling conflicts, 409 Conflict, file upload failures through proxy, or needs to add recurring/periodic automated task execution for Claude agents.
tools
Optional per-OS-user headed Chrome provider for browser automation. Use when an environment chooses cdp-chrome for visible GUI Chrome: social media, JS-rendered pages, logged-in sites, anti-bot pages, forms, screenshots, and live site inspection. Not required when an equivalent provider exists.