1. 项目概述:为什么我们需要一个AI订阅用量监控器?
作为一名每天和代码打交道的开发者,我发现自己订阅的AI编程工具越来越多。从最初只用一个Copilot,到后来陆续加上了Claude、Cursor、Codex……每个月看着信用卡账单上那些自动扣款的订阅费,心里总有点没底:我到底用掉了多少额度?哪个工具用得最频繁?会不会在月底前就用超了,导致关键任务被中断?
这就是我遇到的核心痛点:信息分散,管理困难。每个AI服务商都有自己的后台仪表盘,查看用量需要分别登录不同的网站,有的藏在账户设置的深处,有的数据更新还有延迟。当你同时使用五六个工具时,这种“仪表盘跳转”就成了日常的负担。更麻烦的是,很多服务的计费模型复杂,比如Claude有会话、周度、峰谷时段用量,Cursor有积分、自动用量、API用量等多种维度,单纯看一个数字根本无法判断自己的真实消耗情况。
于是,我开始寻找一个能集中展示所有AI编程工具用量的解决方案。市面上有一些针对特定服务的独立小工具,但缺乏一个统一的聚合平台。直到我发现了OpenUsage——一个开源的、插件化的菜单栏应用,它完美地解决了我的问题。它就像一个为你所有AI订阅服务的“用量仪表盘”,静静地待在菜单栏,一目了然。
简单来说,OpenUsage是一个轻量级的本地应用程序,它通过插件机制,从各个AI服务商的API获取你的用量数据,并以清晰、直观的进度条和标签形式,集中显示在macOS的菜单栏下拉面板中。你不再需要打开任何浏览器标签,只需点击一下菜单栏图标,就能立刻知道:你的Claude本周额度还剩多少?Cursor的积分用了百分之几?Copilot的聊天额度是否充足?
接下来,我将从设计思路、核心功能、实操配置到深度使用技巧,为你完整拆解这个工具,并分享我作为重度用户近半年来积累的所有经验。无论你是刚刚开始接触AI编程助手,还是已经像我一样深陷“多订阅”的甜蜜负担,这篇文章都能帮你建立起清晰、高效的用量管理体系。
2. 核心设计思路与架构解析
OpenUsage的成功,很大程度上源于其清晰、优雅且极具扩展性的设计哲学。它没有试图做一个大而全的监控平台,而是精准地聚焦于一个高频、刚需的细分场景,并通过精巧的架构设计来保证其核心体验。我们来深入看看它是怎么做到的。
2.1 插件化架构:应对生态碎片化的终极答案
AI编程工具市场是一个快速演进、高度碎片化的生态。几乎每个月都有新的工具或新的计费模式出现。如果一个工具试图通过硬编码的方式支持每一个服务商,那么它的开发团队将疲于奔命,永远跟不上变化。
OpenUsage的答案就是彻底的插件化。每一个AI服务提供商(如Claude、Cursor)在OpenUsage中都是一个独立的插件(Provider Plugin)。这个设计带来了几个关键优势:
- 解耦与独立演进:每个插件的开发、更新、测试都可以独立进行。新增一个服务商,只需要开发一个新的插件,而无需改动应用核心代码。这极大地降低了开发复杂度和维护成本。
- 社区驱动的生命力:开源项目最大的挑战之一是维护者精力有限。插件化架构将“支持新服务”这个最繁重的任务,从维护者肩上分散到了整个社区。任何用户都可以为自己需要的服务开发插件,并通过PR贡献给项目。这正是OpenUsage能迅速支持十几种服务的原因。
- 灵活的数据模型适配:不同AI服务的用量数据模型天差地别。Claude按“会话”、“周度”划分,Cursor用“积分”和“自动用量”,Copilot则分“Premium”、“Chat”。插件化允许每个插件内部实现一套最适合该服务API的数据解析逻辑,然后将统一格式化后的数据(如
used,total,percentage,resetDate)提交给核心应用进行展示。对用户来说,界面是统一的;对开发者来说,后端处理是定制化的。
注意:目前插件是与主应用捆绑发布的,这意味着你需要更新整个App来获取新插件。但根据项目路线图,未来会实现插件的动态加载,届时你可以像安装浏览器扩展一样,单独安装和管理插件,灵活性将再上一个台阶。
2.2 本地优先与隐私保护原则
所有用量数据都通过插件,从服务商的官方API获取,并完全存储在本地。OpenUsage本身不设立任何中央服务器来收集、中转或存储你的数据。这是一个至关重要的设计选择,它直接回应了开发者群体对隐私和安全的高度敏感。
- 数据流路径:你的电脑(OpenUsage App) -> 目标服务商API(如
api.cursor.com) -> 你的电脑。数据从未离开你的机器。 - 认证方式:大多数插件需要通过你手动配置API密钥(Token)或会话Cookie来进行认证。这些敏感信息同样只保存在你电脑的本地配置文件中(通常是
~/.openusage/config.json),OpenUsage不会将它们发送给任何第三方。
这种本地优先的设计,不仅保护了隐私,也带来了极致的响应速度。所有数据渲染和面板展示都是本地操作,因此点击菜单栏图标后,面板的弹出几乎是瞬时的,没有任何网络请求带来的延迟。
2.3 菜单栏常驻:无干扰的即时可见性
为什么选择菜单栏(Menu Bar)而不是独立的桌面窗口或Dock图标?这源于对开发者工作流的深刻理解。
开发是一个需要高度专注的过程,任何需要切换窗口、打断心流的操作都是成本。菜单栏应用处于系统层级的“始终可及”区域,无论你当前在全屏写代码、在浏览器调试,还是在终端操作,你的菜单栏总是在那里。查看用量只需要:
- 眼睛瞥向屏幕右上角(图标本身通过颜色或数字就能传达关键状态,如额度紧张时变红)。
- 如果需要详情,点击图标,下拉面板覆盖在当前窗口之上,信息一目了然。
- 点击面板外任意位置或按快捷键,面板收起,你立刻回到刚才的工作中,毫无中断。
这种“Glance and Go”(一瞥即走)的交互模式,是信息类工具最理想的状态。它提供了极高的信息密度和获取效率,同时保持了最大的无干扰性。
2.4 技术栈选择:轻量、高效与原生体验
虽然项目README中提到它是“100% AI生成”,但其技术选型非常务实,确保了应用的性能和质量。
- 平台:首发且主要支持macOS。这是其目标用户(软件开发者)最集中的平台。它原生支持Apple Silicon (M系列芯片) 和 Intel芯片,通过Universal Binary实现。
- 开发框架:虽然没有在公开的Build指南中明确全部细节,但从其生成原生菜单栏应用、支持全局快捷键、拥有精致UI的特性来看,很可能使用了诸如Swift/SwiftUI或Electron(但更偏向于轻量级原生框架,因为安装包很小)等技术。其“自动更新”机制也是成熟桌面应用的标配。
- 通信:除了核心的GUI,它还提供了一个本地HTTP API(默认在
127.0.0.1:6736端口)。这个设计非常巧妙,它允许其他脚本或工具(比如你的自动化工作流、另一个监控仪表盘)以编程方式读取用量数据,实现了工具间的能力开放和集成。
3. 从零开始:安装、配置与核心功能详解
了解了设计理念,我们进入实战环节。我会带你完成从下载安装到配置所有常用AI服务插件的全过程,并解释每一个配置项背后的含义。
3.1 获取与安装应用
安装过程极其简单,符合一个优秀工具“开箱即用”的期待。
- 下载:访问项目的 GitHub Releases 页面 。你会看到一个
.dmg文件(macOS磁盘映像文件)。这是macOS上分发应用程序的标准格式。 - 安装:双击下载的
.dmg文件,它会挂载为一个虚拟磁盘。通常里面会有一个.app文件和一个指向“应用程序”文件夹的快捷方式。你只需要将.app文件拖拽到“应用程序”文件夹中即可。 - 首次运行与权限:在“应用程序”文件夹中找到
OpenUsage并双击运行。由于是来自互联网的未公证开发者应用(开源项目通常如此),macOS会弹出安全警告。你需要进入系统设置 -> 隐私与安全性,在下方找到关于阻止OpenUsage运行的提示,点击“仍要打开”。首次运行后,应用会请求辅助功能权限和网络访问权限。这是必须的:- 辅助功能权限:允许应用在菜单栏绘制图标和弹出面板。
- 网络访问权限:允许应用访问各AI服务的API来获取你的用量数据。 请务必在系统弹出的对话框中点击“允许”或“好”。
安装完成后,你会在屏幕右上角的菜单栏看到一个可能显示着“Loading...”或默认图标的应用图标。恭喜,主体安装完成了。但此时它还无法获取任何数据,因为我们还没有告诉它如何连接你的AI服务账户。
3.2 核心配置:为插件添加认证信息
OpenUsage的所有功能都依赖于各个插件。每个插件都需要相应的认证信息(API Key或Session Cookie)来代表你向服务商查询数据。配置是通过编辑一个本地的配置文件完成的。
定位配置文件:配置文件通常位于
~/.openusage/config.json。你可以打开终端(Terminal),使用open ~/.openusage/config.json命令,如果文件存在,会用默认文本编辑器打开;如果不存在,这个命令可能会创建失败,你需要先运行一次OpenUsage应用,它通常会初始化创建这个配置目录和文件模板。理解配置结构:配置文件是一个JSON格式的文件,核心结构如下:
{ "providers": { "claude": { "type": "claude", "sessionKey": "YOUR_ANTHROPIC_SESSION_COOKIE_VALUE_HERE" }, "cursor": { "type": "cursor", "apiKey": "YOUR_CURSOR_API_KEY_HERE" }, "githubCopilot": { "type": "githubCopilot", "githubToken": "YOUR_GITHUB_PERSONAL_ACCESS_TOKEN_HERE" } // ... 其他提供商配置 }, "settings": { "refreshInterval": 300, "enableGlobalShortcut": true, "globalShortcutKey": "Command+Shift+U" } }providers对象:包含了所有已配置的AI服务。键名(如"claude")是插件标识符,值是一个配置对象。- 每个配置对象必须包含
"type"字段,其值必须与插件标识符严格匹配(如"claude")。 - 其他字段(如
sessionKey,apiKey)是插件所需的特定认证信息,每个插件都不同。 settings对象:控制应用行为,如刷新频率(秒)、是否启用全局快捷键等。
获取并配置关键插件认证信息(实操难点详解)这是最具挑战性的一步,因为每个服务获取Token的方式都不尽相同,且有些服务并不直接提供简单的API Key。下面我以最常用的几个服务为例,详细说明:
a) 配置 Claude 插件Claude插件通常需要一个会话Cookie,而不是官方API Key(因为用量查询可能走的是其Web端接口)。
- 获取方法:
- 登录到 Claude.ai 网站。
- 打开浏览器的开发者工具(Chrome/Safari/Firefox 按 F12)。
- 切换到Application(Chrome)或Storage(Firefox)标签页。
- 在Cookies下找到
https://claude.ai。 - 寻找一个名为
sessionKey的Cookie。请注意,Cookie名称可能随Claude网站更新而变化,请以OpenUsage的Claude插件文档为准。如果文档要求其他Cookie(如__Secure-sessionKey),则复制对应的值。 - 将复制到的长字符串值,粘贴到配置文件的
"sessionKey"字段中。
- 安全警告:这个Session Cookie等同于你的登录凭证。切勿泄露此配置。确保配置文件权限安全(
chmod 600 ~/.openusage/config.json)。
b) 配置 Cursor 插件Cursor提供了相对友好的API访问方式。
- 获取方法:
- 登录 Cursor 网站。
- 点击右上角头像,进入Account Settings。
- 在设置中寻找API Keys或Developer相关选项。
- 生成一个新的API Key,并复制它。
- 将复制的API Key填入配置文件的
"apiKey"字段。
c) 配置 GitHub Copilot 插件Copilot的用量与你的GitHub账户绑定,因此需要一个GitHub Personal Access Token (PAT)。
- 获取方法:
- 登录 GitHub ,点击右上角头像 ->Settings。
- 左侧边栏最下方,进入Developer settings。
- 选择Personal access tokens->Tokens (classic)。
- 点击Generate new token->Generate new token (classic)。
- 给它一个描述性名称(如 “OpenUsage Copilot”)。
- 在Select scopes中,至少需要勾选
read:packages和read:org权限。有些插件可能还需要user:email。请务必参考OpenUsage的Copilot插件文档以确认所需的最小权限范围。 - 生成后,立即复制Token(只显示一次)。
- 将Token填入配置文件的
"githubToken"字段。
d) 配置 Codex 插件如果你使用OpenAI的Codex API(通常通过OpenAI平台),则需要OpenAI的API Key。
- 获取方法:
- 访问 OpenAI Platform 。
- 登录后,点击右上角头像 ->View API keys。
- 点击Create new secret key,复制生成的Key。
- 填入配置文件的
"apiKey"字段。
- 获取方法:
重要心得:在编辑
config.json时,务必注意JSON格式的规范性。每个键值对后面用逗号分隔,但最后一个键值对后不能有逗号。一个格式错误会导致整个配置文件无法读取,应用将无法启动或加载配置。建议使用VS Code等带有JSON语法高亮和校验功能的编辑器进行操作。配置完成后,保存文件,然后重启OpenUsage应用使其生效。
3.3 功能面板详解与个性化设置
配置生效后,OpenUsage的菜单栏图标就会开始工作,定期(默认5分钟)从各服务商拉取数据。点击图标,下拉面板会展示所有已配置且状态正常的服务用量信息。
面板信息解读:
- 服务名称与图标:清晰标识是哪个AI服务。
- 进度条:最直观的视觉反馈。绿色表示用量健康,黄色表示用量过半,红色表示额度即将用尽或已用尽。
- 用量数字:通常格式为
已用 / 总量(如125 / 500),有时会附带单位(如次、Credits、小时)。 - 重置时间:显示额度周期的重置日期(如“3天后重置”、“每月1日”),帮助你规划使用。
- 状态指示器:如果某个服务认证失败或网络错误,其对应条目会显示错误图标(如❌),并将鼠标悬停其上可以看到错误详情。
个性化设置:在面板的底部或应用偏好设置中(通常通过菜单栏图标右键菜单进入),你可以找到设置选项:
- 刷新频率:默认300秒(5分钟)。你可以根据需求调整。频率太高可能增加API调用负担或被服务商限流;频率太低则信息不及时。我个人的经验是,对于Claude、Cursor这类按周或按会话重置的服务,5-10分钟的频率是合理的。对于Copilot这类按月重置的,甚至可以设置更长。
- 全局快捷键:这是我最喜欢的功能之一。你可以在设置中启用并自定义一个全局快捷键(如
Cmd+Shift+U)。之后,无论你在哪个应用全屏工作,按下这个快捷键就能立刻呼出或隐藏用量面板,无需用鼠标去找菜单栏图标,流畅度极高。 - 显示/隐藏特定提供商:如果你暂时不想看某个服务,可以在设置中暂时禁用它,而无需删除配置。
4. 高级用法与集成:超越菜单栏
OpenUsage不仅仅是一个简单的菜单栏小工具,它通过一些高级功能,可以成为你个人工作流自动化系统中的一环。
4.1 利用本地HTTP API进行集成
OpenUsage在启动时会开启一个本地HTTP服务器(默认端口6736)。这意味着用量数据可以通过标准的HTTP请求以编程方式获取。
基础查询:在终端里,你可以使用
curl命令快速获取所有数据:curl http://127.0.0.1:6736/这会返回一个结构化的JSON响应,包含了所有已配置提供商的最新用量数据、状态和重置信息。
集成到其他仪表盘:如果你使用像Grafana、Homepage(一种自托管仪表盘)之类的工具,你可以编写一个简单的脚本,定期从
127.0.0.1:6736抓取数据,然后推送到这些仪表盘的数据源中,从而在你的全局监控大屏上增加一个“AI用量”面板。自动化告警:你可以写一个Cron作业或使用自动化工具(如Hammerspoon on macOS),定期调用这个API,解析JSON。当某个服务的用量百分比超过你设定的阈值(比如90%)时,触发一个系统通知(
osascript发送Notification)、播放提示音,甚至自动发送一封邮件给你自己。这实现了完全自定义的、主动的用量告警。# 一个简单的bash脚本示例,检查Claude用量并告警 #!/bin/bash DATA=$(curl -s http://127.0.0.1:6736/) CLAUDE_PERCENT=$(echo $DATA | jq -r '.providers.claude.percentage') if (( $(echo "$CLAUDE_PERCENT > 90" | bc -l) )); then osascript -e 'display notification "Claude用量已超过90%!" with title "AI用量告警"' fi(需要先安装
jq和bc工具来处理JSON和浮点数比较)
4.2 代理支持(Proxy Support)配置
对于网络环境特殊的用户,OpenUsage提供了代理支持。这在某些地区或企业网络下可能是必需的。配置同样在config.json的settings部分或每个provider的独立配置中。
{ "providers": { "claude": { "type": "claude", "sessionKey": "...", "proxy": { "type": "socks5", // 或 "http" "host": "127.0.0.1", "port": 1080, // 可选:如果需要认证 // "username": "your_username", // "password": "your_password" } } } }type: 代理类型,支持socks5和http。host/port: 代理服务器的地址和端口。- 你可以为所有提供商配置一个全局代理,也可以为每个提供商单独配置,这在需要不同代理策略时非常有用。
4.3 参与社区:贡献插件或修复
如果你使用的AI工具不在支持列表里,或者发现某个插件有bug,最直接的方式就是参与开源贡献。OpenUsage的文档通常包含详细的插件开发指南(docs/plugins/api.md)。
开发一个插件通常涉及以下步骤:
- 理解插件API:阅读文档,了解插件需要导出的接口(如
fetchUsage函数)、返回的数据格式。 - 研究目标服务API:使用浏览器开发者工具,分析目标AI服务用量页面的网络请求,找到返回用量数据的API端点、请求头、认证方式。
- 实现数据抓取与解析:编写代码,使用Node.js或其它语言(取决于插件框架),模拟认证,调用API,并将返回的原始数据解析成OpenUsage核心所需的统一格式(包含
used,total,percentage,unit,resetDate等字段)。 - 测试与提交:在本地测试插件功能,确保数据准确无误。然后按照项目要求,提交Pull Request (PR)。
这个过程不仅能让你用上心仪的工具支持,也是深入学习一个开源项目架构和现代AI服务API的绝佳实践。
5. 常见问题排查与使用心得
即使设计得再完善,在实际使用中也可能遇到各种问题。以下是我在长期使用中遇到的一些典型情况及其解决方法,希望能帮你少走弯路。
5.1 认证失败与Token过期问题
这是最常见的问题。症状是某个服务在面板中显示错误图标(如红叉),或者用量数据一直不更新。
排查步骤:
- 检查配置文件格式:首先确认
config.json文件JSON格式正确,没有缺少引号或逗号错误。可以使用在线JSON校验工具。 - 验证Token/Cookie有效性:
- API Key类:尝试在终端用
curl命令直接调用该服务的API。例如,对于OpenAI:
如果返回curl -H "Authorization: Bearer YOUR_OPENAI_API_KEY" https://api.openai.com/v1/dashboard/billing/usage401 Unauthorized,说明Key已失效或权限不足,需要去对应平台重新生成。 - Session Cookie类:Cookie是有生命周期的,可能会因为长时间未登录、密码修改或服务端策略而失效。解决方法是重新登录网站,从开发者工具中复制新的Cookie值替换配置。
- API Key类:尝试在终端用
- 查看应用日志:OpenUsage通常会在控制台或某个日志文件中输出错误信息。在macOS上,你可以通过运行
Console.app(控制台应用),在左侧选择你的设备,然后搜索“OpenUsage”来查看相关日志,里面往往有更详细的错误描述(如“Network Error”, “Invalid authentication credentials”)。 - 插件特定要求:仔细阅读对应插件的官方文档(通常在项目
docs/providers/目录下)。有些服务可能需要特定范围的权限(如GitHub Token的scopes),或者认证方式比较特殊(如需要同时提供多个Cookie)。
5.2 数据不更新或更新延迟
面板数据长时间不变,或者点击后刷新很慢。
可能原因与解决:
- 刷新间隔设置过长:检查设置中的
refreshInterval。如果设成了3600(1小时),那看起来就像没更新。根据你对信息及时性的需求调整,建议设置在300-600秒(5-10分钟)。 - 网络问题或API限流:某些服务的API可能有调用频率限制。如果OpenUsage请求太频繁,可能会被暂时限制,导致返回旧数据或错误。尝试将刷新间隔调大一些。
- 手动刷新:大多数菜单栏应用都支持点击图标或使用快捷键强制刷新。在OpenUsage中,尝试点击菜单栏图标后,在面板内寻找“刷新”按钮或使用快捷键(如Cmd+R)。这可以帮你判断是定时刷新逻辑问题,还是根本拉取不到数据。
- 服务商API变更:AI服务更新频繁,其内部API也可能发生变化。如果某个插件突然停止工作,而你的Token确认有效,那很可能是服务商API变了。这时候需要去GitHub项目的Issues页面查看是否有其他人报告同样问题,或者等待插件维护者更新。
5.3 菜单栏图标不显示或应用崩溃
应用启动后,菜单栏没有出现图标,或者应用意外退出。
排查步骤:
- 权限问题:这是macOS上最常见的原因。确保你已授予OpenUsage“辅助功能”和“网络”权限(见3.1节)。你可以在系统设置 -> 隐私与安全性 -> 辅助功能/网络中检查并重新勾选。
- 配置文件错误:一个格式错误或内容错误的
config.json文件可能导致应用在启动初始化时崩溃。尝试临时将~/.openusage/config.json文件重命名(如config.json.bak),然后重启应用。如果应用能正常启动(虽然没数据),那就证明是配置文件的问题。再逐段检查恢复。 - 应用冲突:极少数情况下,可能与其它菜单栏应用冲突。尝试重启电脑,或者以安全模式启动看看问题是否依旧。
- 版本问题:确保你使用的是最新稳定版。有时旧版本可能存在与新系统版本(如macOS小版本升级)的兼容性问题。去GitHub Releases页面下载最新版覆盖安装。
5.4 我的使用心得与最佳实践
经过几个月的深度使用,我总结出一些能让OpenUsage发挥最大价值的习惯:
- 定期审计与清理:每季度回顾一下配置的所有服务。是否还有在用?用量是否稳定?对于几乎不用的服务,及时在OpenUsage中禁用其插件,并考虑取消订阅,节省开支。
- 利用数据做预算规划:OpenUsage让你清晰地看到了每个工具的实际消耗速度。结合订阅周期,你可以更合理地分配预算。例如,发现Claude的周额度总是在周四就用完,那么可以考虑将一些非紧急的任务挪到额度重置后,或者评估是否需要升级套餐。
- 快捷键是效率核心:一定要设置一个顺手的全局快捷键。我把它设为
Cmd+Ctrl+U,这让我在任何状态下都能瞬间检查用量,完全无需切换鼠标焦点,真正实现了“无感监控”。 - 关注社区动态:Star这个GitHub项目,并偶尔看看Issues和Pull Requests。这里不仅能找到问题的解决方案,还能提前了解哪些新服务即将被支持,或者发现一些有趣的用法(比如有人将HTTP API数据接入到了Slack机器人)。
- 理解数据的局限性:OpenUsage展示的是服务商API提供的数据,这些数据可能有几小时甚至一天的延迟(尤其是像GitHub Copilot这类按日汇总数据的服务)。对于实时性要求极高的场景,它更适合作为趋势参考和预警工具,而非精确到秒的计量器。
OpenUsage解决了一个非常具体但普遍存在的痛点。它没有炫酷的界面和复杂的功能,而是通过极致的专注和优雅的设计,安静地融入了开发者的工作流。它让我从“订阅管理焦虑”中解放出来,能够更专注于使用工具本身去创造价值。这种通过一个小工具提升整体工作幸福感和效率的体验,正是开源软件和开发者文化的魅力所在。如果你也在管理多个AI订阅,我强烈建议你花半小时配置一下它,这份投入带来的清晰感和掌控感,绝对是值得的。