顺手做的小工具
最近顺手做了两个小工具:AI 余额面板和任务面板。前者解决我搞不清几个 AI 工具钱花到哪、还剩多少;后者解决我不知道家里那堆定时任务今天跑没跑。核心动作都一样——把散落各处的状态收到一处。
任务面板:每天那些定时任务到底跑没跑
我机器上跑了一堆 LaunchAgent(macOS 的开机后台服务)——OpenClaw 的纪嫣然、Studio 几个 agent、Claudio(我那个 AI 电台),加起来十几个定时任务,每天按时间表自己醒来执行。想看哪个成了、哪个挂了,以前得开终端 launchctl list、翻几个日志文件、再用脑子拼一遍。懒得看就默认没事——但出事时才发现,有的任务已经五天没跑。
索性做个看板。两条要求:永远挂在桌面,不用主动打开;颗粒度要够细——苏晚一天 3 个任务,就显示 3 行,而不是并成「苏晚 · 正常」这种含糊状态。
做出来是这样的:
怎么做的
两个前端共用一份数据。SwiftBar(macOS 菜单栏小工具框架)给屏幕顶部最简版——只显示最紧张那条,点开看全部;Übersicht(macOS 桌面挂件框架)就是上图常驻桌面右上的卡片。两者读同一个 state.json,避免数字对不上。
数据分两路进来。一路 LaunchAgent 每 30 秒扫一遍:读 launchctl list 拿到最近退出码和 PID,再跟 expected-tasks.json 对账,知道「今天该有哪些任务」,结果写进 state.json。另一路是 Claude Code 的 hook——每次 Cici 会话结束自动往看板「Cici」那行写当前任务,这样看板显示的就不只是「活跃 / 结束」,而是我此刻在做什么。
UI 用 macOS 系统色板的彩色圆点(绿 / 蓝 / 红 / 黄)、SF Pro 字体和真 vibrancy 毛玻璃。中间出过一版 emoji,我看着烦,全换成圆点后清爽多了。
余额面板:4 个 AI 工具 4 个地方查余额
我每天用的 AI 工具:Codex(OpenAI 的 CLI agent,按 ChatGPT Plus 订阅算,5 小时窗口)、Claude Code(按 Claude 订阅算)、Kimi(按订阅),再加几个备用中转站 API key。查余额的方式个个不同:Codex 在终端敲 /status;Claude 也在自己终端 /status;Kimi 得开网页后台;中转站又要登另一个网页。
Pro/Max 订阅还有个隐形痛点:你不知道当前这 5 小时或 7 天窗口还剩多少、几点重置。写到一半被限流,很难受。
索性做一个跨平台菜单栏小工具,把这些全汇到一处。形态参考托盘:常驻屏幕顶部,一眼看到最紧张那项(比如「Codex 5h 90%」),点开浮窗列出所有 provider 的剩余%、重置倒计时和余额。任一指标低于阈值就弹系统通知。
怎么做的
技术栈用 Tauri v2(Rust 核心 + WebView 前端的桌面 app 框架):一份代码同时出 macOS 和 Windows,包体只有几 MB。数据源按 provider 分四类:
- Codex(订阅,可靠度最高)——直接读本地
~/.codex/sessions/下的 jsonl 累加 token 用量,跟codex /status输出能对上。 - Claude(订阅)——一边走 OAuth 拿官方实时窗口剩余%,一边读本地
~/.claude/projects/下的 jsonl 算成本(参考 ccusage 那一类工具的算法)。 - 中转站(API key)——调对应站点的
/dashboard/billing/subscription或/api/user/self拿精确余额(USD/CNY)。 - Kimi / OpenAI 官方 / MiniMax 这些没公开余额接口的——只能降级显示登录态和套餐到期。
隐私边界很硬:凭证只在本地读取,只发往对应官方接口,不收集任何数据,开源可审计。不做长期用量存储、不做账号体系、不代理 AI 请求——只读余额。
工程上还在 dev 阶段:spec 写完了,数据源验证过能拿到,UI 骨架也有了,但 Tauri release build 还没出来。接下来一两天的事。
两个工具做的是同一件事:把分散在 4–5 个终端命令、网页和日志文件里的信息,收到一个常驻可见的地方。普通人也用得上——不止工程师。手机上早有「天气」「电池」「日历」挂件,却从来没有「AI 工具今天用了多少」「家里自动化任务跑成了吗」的挂件。那就自己做一个。
任务面板已经在桌面跑了两个星期,过得去。AI 余额面板这周把 Tauri release 做出来——下一篇文章应该能上真截图。