mx-cli · git:20261020.e20c3c8 · 2026-10-20 · sha256 44dea2d97345ef62
mx-cli git:20261020.e20c3c8B
Immutable. This exact content never changes and is served at /api/v1/blob/44dea2d97345ef62.
--- name: mx-cli description: modelmux 的 mx CLI 使用手册。用户要运行/查询/配置 mx(启动、重启、状态、模型、登录、账号池、额度、日志、Web 控制台、path),或不确定动词与渠道参数的顺序、该用 mx model list 还是 mx model <cid>、login 与 relogin 的区别时使用。也用于避免写出 mx <cid> <动词> 这种错误语序。 --- # mx CLI 使用 `mx` 是 modelmux 的仓库级 CLI。所有命令走同一个本地网关(默认 `127.0.0.1:4412`),对外是 OpenAI 兼容端点 `http://127.0.0.1:4412/v1`。 ## 0. 语法铁律 ```text mx <动词> [<cid>] [参数] ``` - 动词永远在第一位,渠道 id 在第二位:`mx login catpaw`、`mx status catpaw`。 - 不要写 `mx catpaw status`:渠道名与动词共享位置会产生二义,补全器也无法工作。 - 仓库级动词(`start` / `stop` / `restart` / `web`)不带 cid; `status` / `model` / `bill` / `acct` / `path` / `login` / `relogin` 都可以带 cid —— `mx status <cid>` 才是「某渠道的状态」。 `log` 也可以带 cid,但只有配 `--kind channel` 才有区别(渠道维度日志按 cid 分目录): `mx log catpaw --kind channel`。 - 命令组同样是动词在前:`mx model list` / `mx model usage`。 - 不确定时先 `mx --help`;脚本里加 `--json`。 ## 1. 一页命令表 | 目标 | 命令 | | --- | --- | | 起网关(幂等) | `mx start` | | 停网关 | `mx stop` | | 重启 | `mx restart` | | 网关 / 渠道状态 | `mx status` / `mx status <cid>` / `mx status --json` | | 全池模型视图(有哪些模型) | `mx model list` | | 池账本(各渠道用得怎么样) | `mx model usage` / `mx model usage --refresh` | | 某渠道模型 | `mx model <cid>` / `mx model <cid> --refresh` | | 登录 | `mx login <cid>`;`mx login list` | | 强制重新授权 | `mx relogin <cid>`(**会清掉现有凭据**,别当成刷新用) | | 账号池 | `mx acct [<cid>] list\|use <key>\|add\|remove <key>` | | 额度 / 账单 | `mx bill [<cid>]` | | 存储落点 | `mx path [<cid>]` / `mx path --all` | | 日志 | `mx log ...`(排查流程见 log-triage 技能) | | Web 控制台 | `mx web`(确保网关在跑并打开 `/web/`) | > **`credentials.json` 不见了但账号池里还有货**:先 `mx acct <cid> list` 看池子 > (有些渠道的凭据只存池里,主文件缺失时 `status` 会显示「未登录」)。 > 池里有状态正常的账号就 `mx acct <cid> use <key>` —— 它会把池里那份复制回主凭据文件, > **不用重新走浏览器授权**。2026-10-20 用这招恢复了 qodercn 与 workbuddyai。 ## 2. 常用工作流 ### 2.1 启动 / 重启并确认生效 ```bash mx start # 幂等:已在跑直接返回 mx restart # 改完代码或配置后 mx status --json # reachable=true 且 stale_build=false ``` 改了 `packages/**` 后必须先 `npm run build` 再 `mx restart`;只 restart 不 build, 运行的是旧代码,`status` 会报 `stale_build=true`。此时不要宣称修复已生效。 ### 2.2 看模型:两个命令别混 ```bash mx model list # 池视图:有哪些模型(按渠道分组,渠道级账本状态只出现一次) mx model usage # 池账本:各渠道用得怎么样(每渠道一行) mx model catpaw # 渠道视角:catpaw 目录里的模型(读本地缓存) mx model catpaw --refresh # 强制重拉上游目录(失败即报错) curl -s http://127.0.0.1:4412/v1/models # 客户端实际看到的 id ``` 对外 id 恒为 `<cid>/<model>`(如 `catpaw/deepseek-v4.1-flash`);裸模型名会被网关 400。 ### 2.3 登录与账号池 ```bash mx login list # 可登录渠道 mx login catpaw # 已有凭据时幂等,不会重新授权 mx relogin catpaw # 清掉旧凭据后重新授权(token 过期/换号) mx acct catpaw # 账号池 + 当前生效账号 mx acct catpaw use <key> # 切换生效账号 mx acct catpaw add # 走该渠道登录流程并加入池 mx acct catpaw remove <key> # 生效账号=同时登出;非必要不要删 ``` 凭据一律保留;连续失败只会标记 error 并跳过,不会自动删除。 不要手工删 `~/.modelmux/**/credentials.json`。 ### 2.4 额度与账本 ```bash mx bill # 全部渠道的额度/账单(只读,不经网关) mx bill catpaw # 单渠道 mx model usage # 池账本(各渠道用得怎么样:请求成败、已用量、冷却) mx model usage --refresh # 立刻重查各渠道账单 ``` `mx bill` 是上游额度;`mx model usage` 是本地池账本,两者不是一回事。 两个视图都**不决定路由** —— 渠道由池 id 前缀(`<cid>/<模型>`)指定,账本只作健康度观察。 ### 2.5 日志与 Web ```bash mx log --list mx log --kind access --outcome failure --lines 50 mx log --kind lifecycle --lines 30 mx web # 确保网关在跑 -> 打开 http://127.0.0.1:4412/web/ ``` 排查「为什么慢 / 为什么失败 / 网关挂了」时加载 `log-triage` 技能, 不要在本技能里重复展开日志字段与错误码。 ## 3. 参数与坑 - `--json`:输出结构化结果,脚本优先;`--quiet` 少过程信息。 - `--refresh`:`model <cid>` 重拉目录;`model usage` 重查账单;失败即非零退出。 - `--wait <秒>`:启动健康等待(默认 30);`--strict` 让启动失败非零退出。 - `--realm`:登录域(渠道自定义);`--wechat`:微信扫码(仅声明支持的渠道,如 loomy)。 - `--addr` / `--ui-port`:覆盖监听地址;默认 `127.0.0.1:4412`,改端口后客户端 base URL 要同步。 - `mx log` 默认是 system 日志;查请求必须加 `--kind access`。 - 不要在网关有活跃流时随手 `mx restart`,会切断客户端请求。 - 所有 `mx` 命令都是本地操作,不需要管理员权限(端口被系统占用除外)。 ## 4. 输出约定 - 先给可直接执行的命令,再解释一句;不要贴大段帮助文本。 - 需要判断结果时给判定字段:`reachable`、`stale_build`、`status`、`exit code`。 - 涉及敏感信息时不回显 token / cookie;`mx bill` 只展示额度数字。