用途:Astrill 的 macOS 应用没有官方 CLI,本技能通过 AppleScript(System Events)定位并点击菜单栏中的 Menu → Toggle ON/OFF,实现状态查询、连接与断开。菜单项文字会反映连接状态,是该技能依赖的锚点。资料称已在 2026-08-28 于 OpenVPN 全隧道模式下做过开↔关往返实测。
主要能力与用法:在技能基础目录(含 SKILL.md 的目录)下运行脚本:
bash <skill-dir>/scripts/astrill.sh status # 查看:应用 / 隧道 / GUI 菜单 / 出口 IP bash <skill-dir>/scripts/astrill.sh on # 连接(幂等:已连接则直接返回) bash <skill-dir>/scripts/astrill.sh off # 断开(幂等:已断开则直接返回;应用保持运行)
<skill-dir> 从加载时公布的基础目录解析;不可用时需向用户询问已安装路径。
状态判定:应用进程用 pgrep -x astrill;VPN 隧道用 pgrep -x asovpnc(OpenVPN 模式下的主要判据,拆除约需 10 秒,脚本会轮询等待);GUI 菜单由 System Events 读取 Menu 菜单项,出现 Toggle OFF 表示已连接、Toggle ON 表示已断开;出口 IP 用 curl --max-time 6 ipinfo.io/ip 交叉校验,连接时为境外节点 IP,断开时为本地直连 IP。on 与 off 均先读取当前状态,目标状态已满足即立即成功返回。
前置条件:承载智能体的应用(终端、IDE 或桌面应用)需获得 macOS 辅助功能权限:系统设置 → 隐私与安全性 → 辅助功能 → 添加该应用。否则脚本会报告 GUI 不可达,状态输出会指明原因。
限制:探测在 OpenVPN(全隧道)下最准确;OpenWeb(仅浏览器代理)模式下 asovpnc 隧道探测不适用,GUI 菜单文字为主要判据,出口 IP 探测可能不反映浏览器代理状态。Toggle OFF 后隧道进程比界面晚约 10 秒退出,脚本 30 秒轮询窗口可覆盖。脚本使用 Toggle 而非退出应用,以便后续 on 无需重启应用。macOS 或 Astrill 大版本更新可能重命名菜单,可用 osascript -e 'tell application "System Events" to tell process "Astrill" to get name of every menu of menu bar 1' 重新探测并更新脚本。编辑脚本时注意:$var 后接中日韩/全角字符会使 bash 把后续 UTF-8 字节并入变量名(set -u 会报未绑定变量),应始终写 ${var}。