| name | cockpit-quota-report |
| description | 用户问"额度情况/号池情况/汇报号池/cockpit额度"时,读取 live cockpit/tokscale 数据,输出手机可读的极简额度报告。 |
| version | 2.0.0 |
| author | Hermes Agent |
| license | MIT |
| metadata | {"hermes":{"tags":["cockpit-tools","quota","account-pool","codex","tokscale","mobile-report"]}} |
cockpit-quota-report
触发
用户说这些就用本 skill:
- 额度情况
- 汇报额度情况
- 号池情况
- 查号池
- cockpit额度
- codex号池
不要误触发:用户在世界杯/竞彩/比赛上下文里说"最新q情况 / q情况 / 球况",默认是"球赛/世界杯情况",不是 quota。先转 shijiebei-signal-fusion 查赛况;除非用户明确写"额度/qps/quota/号池",才用本 skill。
默认指本机 cockpit-tools / Antigravity Cockpit 号池:~/.antigravity_cockpit。
直接执行
优先跑脚本,不要手搓一坨表格:
python3 ~/.hermes/skills/cockpit-quota-report/scripts/combined_quota_report.py
数据源
读取这些 live/local 文件,不准复用旧聊天数字:
~/.antigravity_cockpit/codex_accounts.json
~/.antigravity_cockpit/codex_accounts/*.json
~/.antigravity_cockpit/codex_local_access.json
~/.antigravity_cockpit/codex_local_access_stats.json
~/.antigravity_cockpit/codex_local_access_midnight_baseline.json
日消耗口径
日消耗 不是 cockpit 自带 daily.totals,而是每天 00:00 后重新计算。
默认算法:
日 totalTokens = 当前 codex_local_access_stats.json totals.totalTokens - codex_local_access_midnight_baseline.json totals.totalTokens
日 cachedTokens = 当前 codex_local_access_stats.json totals.cachedTokens - codex_local_access_midnight_baseline.json totals.cachedTokens
只有当天 baseline 文件缺失、日期不是今天、或读取失败时,才 fallback 到 cockpit 自带 daily.totals,并且如果用户追问要说明这是 fallback。
成本/其他平台数据来自 npx tokscale@latest 实时刷新;失败就明说失败,不能偷偷用旧 cache 装最新。
默认输出形态
手机可读,禁止默认 Markdown 表格。脚本输出就是目标格式。
补充参考:references/quota-report-data-sources-and-day-split.md 记录报告中每个数字的数据源、日号池 与 Hermes/Codex 今日拆分的区别、以及额度"准实时"边界。
补充参考:references/model-latency-probes.md 记录号池/本地 OpenAI-compatible endpoint 的真实请求 probe、流式首 token 延迟测试、以及"模型列表有但当前账号不支持"的分流口径。
额度情况|05-28 11:04|20.6s
消耗|总 17.05亿|日号池 2.49亿|缓存 96.6%
今日|Hermes 1927.1万|Codex 2.14亿
成本|总 $3383.01|号池 $3246.13|其他 $136.88
额度|5小时 670%|周 478%|账号 8:✅8 🟡0 🔒0
号池|13.91亿 token
其他平台|总 3.14亿 token|$136.88
其他平台明细|仅当前在用
- xiaomi:约 9398.6万 token|$23.97
- openrouter:约 2358.9万 token|$6.04
账号
🔒 echo-4|小时0%|周17%
🔒 foxtrot|小时69%|周35%
🔒 golf-5|小时56%|周19%
✅ alpha-1|小时99%|周91%
✅ bravo-2|小时99%|周88%
✅ charlie|小时99%|周100%
✅ delta-3|小时97%|周100%
回用户规则
- 默认直接贴脚本 stdout 原文,不再二次改成表格,不手动重排。
- 用户问"哪个 team/账号周额度最少、小时额度最少、谁最紧"这类比较问题时,先跑报告拿 live 数据,再直接给最小项结论;这里"team"按账号行理解。只补最相关的账号/额度片段即可,不要被"只贴 stdout 原文"卡死成机器人尸体。
- 用户问某个具体邮箱/账号"这个号呢/这个账号呢/某邮箱怎么样"时,不要重贴整份额度报告。只读
codex_accounts.json + codex_accounts/<id>.json 精准定位该账号,输出短名、plan/team、account_name/workspace、小时/周剩余额度、reset 时间、usage_updated_at、订阅有效期、quota_error/subscription_query_last_error 是否存在。邮箱对外可按用户原文确认或脱敏,绝不打印 token/API key/raw JSON。若报告短名来自邮箱尾号(如 user@example.com → acct-02),明确说"这个号就是报告里的 acct-02"。
- 硬规则:用户问"额度情况/号池情况/汇报号池/cockpit额度"这种泛查询时,最终回复只贴脚本 stdout 原文;不要在前面加判断句、吐槽、解释、emoji 或"数据拿到了"。用户明确要分析/解读,或问题本身是比较/定位(如最少/最高/谁紧张/具体账号)时,先给结论再贴必要片段。
- 模型身份备注不要污染额度报告:就算上一条消息刚提示"模型已切到 gpt-5.4 / cockpit-codex-api",用户紧接着问额度情况时,也只回额度原文,不要把"当前这轮按某模型跑"夹进报告。模型切换提示属于独立状态回执,不属于号池报告正文。
- 用户明确要求"按最新情况再标注🔒/锁"时,可以把脚本里的不可用符号统一改成
🔒,但这已经不是"原样 stdout":必须先按最新账号详情文件核验锁定证据,不能只机械把 🔒 替换成 🔒。
- 关键坑:不要加 Markdown 行尾双空格,不要把
账号 改回 账号:;之前"看起来没改"就是因为脚本改了,但最终回复又被手动排版污染。
- 必须包含:数据耗时、总消耗、日号池消耗、今日 Hermes/Codex 客户端拆分、日缓存命中率、号池消耗、其他平台总消耗、其他平台明细只输出当前 Hermes 配置里正在用的非号池 provider(如 xiaomi/openrouter;不要列历史/旧平台如 opencode_go、anthropic、custom、openrouter_free)、号池 5小时/周聚合额度、账号情况。
- 口径硬规则:
日号池 是 cockpit local access 自午夜以来的本机号池代理消耗,不是 Hermes-only;Hermes-only 和 Codex-only 必须来自 tokscale 今日客户端拆分,单独放在 今日|Hermes ...|Codex ... 行。
- 大数必须转中文单位:
10.30亿、8589.9万;禁止 102656.0万 这种弱智单位。
- 额度数字必须带
%:小时92%|周41%。
- 账号名用短名,不加反引号,不打印邮箱全量,不打印 token/API key/raw JSON。
- 不可用/锁定账号对用户展示用
🔒,不要再用 🔒;脚本旧输出如果仍是 🔒,最终回复阶段必须统一替换成 🔒。
- 不默认输出 PID、端口、routing strategy、请求成功率、raw stats;用户要面板明细再展开。
状态语义
✅ 正常可用。
🟡 小时剩余低于 20%,账号仍可用但紧张。
🔒 需重登/refresh token 问题/当前不可路由;token_invalidated、401 Unauthorized、invalid_grant、404 Not Found 也必须按不可用处理,不能因为小时/周额度还有数字就显示 ✅。对用户展示统一用 🔒,不要再输出旧图标 🔒。
⛔ 明确封号/禁用/suspended。
hourly_percentage / weekly_percentage 是剩余额度,不是已用额度。说"小时剩余/周剩余",别说"用了 xx%"。
用户要求 🔒 图标时的硬口径
用户要求"按最新情况再标注🔒"或质疑"🔒的不准吧"时,不要只把脚本 stdout 里的 🔒 机械转义后就收口。必须只读复核 codex_accounts/*.json:
quota_error.code == token_invalidated、错误消息含 401 Unauthorized、invalid_grant、refresh_token_reused → 标 🔒。
subscription_query_last_error 含 404 Not Found → 标 🔒。
- 同时报告"额度百分比仍有数字 ≠ 当前可路由";百分比只是额度视图,token/订阅错误才决定是否锁。
- 如果只是报告脚本仍输出
🔒,最终给用户时统一成 🔒,并说明这是对外展示图标,不改变不可用口径。
hourly_percentage / weekly_percentage 是剩余额度,不是已用额度。说"小时剩余/周剩余",别说"用了 xx%"。
不可用账号判定坑
不要只按 ban / 封 / reauth 判断账号状态。Cockpit 账号详情里的这些错误也必须算作当前不可路由,显示 🔒,不能继续显示 ✅:
quota_error.code == token_invalidated
401 Unauthorized
invalid_grant
refresh_token_reused
subscription_query_last_error 里出现 404 Not Found
用户纠正过:三个账号实际已失效/被封,但旧报告因为只检查 ban/封/reauth,把 token_invalidated 账号误报成 ✅。以后查额度时,如果用户说"有号被封/失效"或质疑"🔒 不准",必须直接检查账号详情 JSON 的 quota_error / subscription_query_last_error,用错误时间戳核对是否为最新状态,并修正报告状态口径。额度百分比还在不代表账号可路由。
如果用户质疑"🔒 的不准吧/锁错了吧",不要嘴上解释或复述脚本:立刻做只读复核,逐账号检查 codex_accounts/*.json 的 quota_error、subscription_query_last_error、token/reauth/disabled/suspended 字段,并对比报告里的锁定列表。结论要说明:误锁账号、漏锁账号、每类锁定证据的最近时间戳。不要打印完整邮箱、token、apiKey 或 raw JSON。对外展示这些不可用账号统一标 🔒,不要用旧的 🔒。
live 验证边界
这份报告验证的是 cockpit 本地额度文件 + tokscale 实时刷新。
如果用户问"号池能不能真实跑请求/某模型能不能用",还要读 codex_local_access.json 的 port/apiKey,用 localhost /v1/chat/completions 做真实低风险 probe。额度 cache 正常 ≠ token 一定能请求成功。
如果用户质疑"有额度为什么没用 gpt-5.5 / 为什么界面显示 fallback 模型",不要只看配置和额度报告。必须查 live agent/gateway 日志里的实际路由:agent.conversation_loop 的 model/provider、API call failed、Fallback activated: gpt-5.5 → ...。典型情况:配置主模型和号池额度都正常,但本轮请求 HTTP 502: auth_unavailable: no auth available,于是自动降级到 fallback provider。回复要明确区分:配置目标模型、实际本轮模型、降级原因。
如果用户问"所有模型首 token 延迟/哪个模型最快/模型列表是否真能跑",不要只查 /v1/models。按 references/model-latency-probes.md 做流式真实 probe:逐个模型发小 prompt,记录 first byte、first non-empty delta、总耗时;把"可用模型"和"列表存在但当前账号不支持/HTTP 400/429"的模型分开报。不要打印 apiKey、邮箱全量、raw account JSON。到这里就停:模型探测不是模型治理;不要顺手编辑 excludedModels / modelIds、sidecar manifest/config,也不要 kill/restart cockpit 进程。若用户真的要隐藏不可用模型,先转入 ai-account-quota-operations 的 references/cockpit-model-list-boundary.md,按生产变更处理。
脚本超时 fallback
combined_quota_report.py 依赖 tokscale 刷新和多个 JSON 文件,网络慢或 tokscale 挂时可能 30s+ 超时。超时后直接手动读 JSON:
python3 -c "
import json
cur = json.load(open('~/.antigravity_cockpit/codex_local_access_stats.json'))
base = json.load(open('~/.antigravity_cockpit/codex_local_access_midnight_baseline.json'))
ct = cur['totals']['totalTokens'] - base['totals']['totalTokens']
cc = cur['totals']['cachedTokens'] - base['totals']['cachedTokens']
print(f'日消耗: {ct/1e8:.2f}亿 token, 缓存: {cc/ct*100:.1f}%')
"
cat ~/.antigravity_cockpit/codex_accounts.json | python3 -c "import sys,json; print(json.dumps(json.load(sys.stdin),indent=2,default=str)[:500])"
fallback 报告标注"脚本超时,手动读取",不要假装数据来自脚本。
常见坑
0a-acct-drop. 号池数量变化用户会追问:cockpit 账号不是固定 8 个,会因 token 过期/订阅失效/cockpit 自动清理而减少。当报告里的账号数和用户印象不符时(比如从 8 变 4),用户第一反应是"不是有好几个吗"。skill 例子里写 8 个只是格式参考,不是实时基线。如果账号数明显偏少(≤4),或比上次报告少,在收口判断里顺嘴提一句"号池只剩 N 个号了"即可,不用大惊小怪。
- 用户问"号池 API 里模型能不能用/首 token 延迟/重新测试模型"时,只做只读 + probe:
/v1/models 只是 advertised catalog,必须用 tiny streaming /v1/chat/completions 验可用性;不要顺手改 excludedModels、modelIds、sidecar manifest、routing、accountIds,也不要 kill/restart cockpit-cliproxy,除非用户在听完影响/备份/回滚后明确确认。
- 额度报告正常不代表当前会话真的用了那个模型。如果用户/UI 显示的模型和报告不一致,先查
agent.log 的 Fallback activated 和 auth_unavailable——号池 45655 返回 502 时会静默降级到 fallback_providers(通常是 xiaomi/mimo-v2.5-pro),用户不会收到通知。完整诊断路径见 hermes-operations-and-agent-governance 的 references/model-fallback-diagnostics.md。
0a. 用户要求"按最新情况再标注🔒"或质疑"🔒的不准吧"时,不能只照脚本念。先只读复核 codex_accounts/*.json 的 quota_error / subscription_query_last_error 时间戳和错误码;token_invalidated、401 Unauthorized、invalid_grant、refresh_token_reused、404 Not Found 都按当前不可路由/需重登标 🔒。额度百分比还在不代表账号可路由。
- 默认输出 Markdown 表格,手机上烂成一坨。别干。
1a.
codex_accounts.json 可能只有单账号且没有 hourly_percentage / weekly_percentage 字段(旧多账号结构已简化)。没有这些字段时,小时/周额度行直接省略不编,别报错或硬猜。
- 把
102656.0万 当人话。不是人话,是报表僵尸。
- tokscale 失败还拿旧 cache 糊弄。
- 打印邮箱、token、apiKey、raw JSON。红线,别作死。
- 把其他平台成本算进号池,或者把号池成本说成非号池。
- 没做真实请求 probe 就说"账号一定可用"。只能说"额度文件显示可用"。
- 账号状态不能只看
hourly_percentage / weekly_percentage;必须同时看每个 codex_accounts/*.json 里的 quota_error 和 subscription_query_last_error。token_invalidated / 401 Unauthorized / invalid_grant / 404 Not Found 都表示当前不可用,对用户展示为 🔒,不能继续当 ✅。
- 用户问"号池 API 里模型能不能用/首 token 延迟/重新测试模型"时,只做 live
/v1/models + 微型流式 probe;不要顺手修改 excludedModels、modelIds、sidecar manifest/config,也不要 kill/restart cockpit 进程。模型列表治理属于号池生产变更,必须另行确认,并优先参考 ai-account-quota-operations 的 Cockpit model-list boundary reference。
收口模板
短句即可:
号池活着,整体够用;paddle 小时额度紧,别让它扛重活 😑
数据拿到了,已按手机格式重排;没做真实请求 probe,所以这是额度视图,不是请求链路验收。