
OpenClaw 模型成本统计实战用 model-usage 技能解析 CodexBar 本地日志并按模型核算 Codex / Claude 花费【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw导读model-usage是 OpenClaw 仓库内置的一项技能Skill它的核心职责是读取 CodexBar 写入本地的成本日志cost log按模型维度汇总 Codex 与 Claude 的使用费用——既可以输出当前正在使用的模型最近一天成本最高者也可以输出全部模型的累计花费。读完本文你将掌握如何安装 CodexBar CLI、如何调用随技能打包的 Python 汇总脚本--provider/--mode/--input/--days等参数以及脚本内部如何从 CodexBar 的 cost JSON 中筛选数据、规避脏数据最终把 AI 成本变成可读的文本或 JSON 报告。一、技能定位技能清单里的一员在 skills 目录下model-usage与github、notion、trello等技能并列属于 OpenClaw 体系中的外部工具集成型技能。它的清单文件 SKILL.md 通过 frontmatter 声明了元信息namemodel-usagedescription为 Codex 或 Claude 汇总 CodexBar 本地成本日志支持当前模型与全模型两种视图metadata.openclaw标注 emoji、支持darwinmacOS与linux两个操作系统并声明运行时依赖requires.bins: [codexbar]——也就是说技能本身不重复造轮子而是建立在 CodexBar 已安装可用的前提之上install提供了 Homebrew Cask 安装方案steipete/tap/codexbar。技能正文只有七十余行但配合 references/codexbar-cli.md 的 CLI 速查以及 scripts/model_usage.py 的实现与 scripts/test_model_usage.py 的测试构成了一套完整、可验证的本地成本核算闭环。二、工作前提CodexBar 与本地成本日志CodexBar 是一款跨平台macOS / Linux的 AI 使用量监控工具会持续把 Codex、Claude 等开发工具的运行数据追加写入本地 JSONL 日志。根据 references/codexbar-cli.md 中的说明Codex 的会话日志位于~/.codex/sessions/*/*.jsonlClaude 的会话日志位于~/.config/claude/projects/**/*.jsonl或~/.claude/projects/**/*.jsonl。codexbar cost命令会读取这些本地日志并输出费用统计codexbar usage则面向 web/CLI 数据源。需要特别注意的是cost是纯本地数据不涉及云端用量如果确需 web 侧用量应改用codexbar usage。由于成本日志存在本机、读取动作也在本机model-usage技能默认只在 macOS 与 Linux 上直接调用codexbar可执行文件其他平台则通过导出 JSON 文件的方式接入见下文输入方式。三、安装 CodexBar CLI技能依赖codexbar二进制出现在PATH中。官方提供的安装途径如下平台方式命令 / 说明macOS / LinuxHomebrew formulabrew install steipete/tap/codexbarLinux (Arch)AUR 包yay -S codexbar-climacOS / Linux官方 release tarball从 CodexBar 的 GitHub Releases 页面下载对应平台压缩包并解压macOS 图形界面CodexBar 应用内安装Preferences → Advanced → Install CLI说明model-usage技能的 metadata 中内置的安装项即 Homebrew 方案formula 为steipete/tap/codexbar这也是技能安装器默认采用的路径。四、快速开始三条命令跑通全部场景假设技能根目录即仓库内 skills/model-usage 目录记为{baseDir}那么 SKILL.md 给出的核心用法是python {baseDir}/scripts/model_usage.py --provider codex --mode current python {baseDir}/scripts/model_usage.py --provider codex --mode all python {baseDir}/scripts/model_usage.py --provider claude --mode all --format json --pretty三条命令分别对应当前模型默认模式查看 Codex 最近一天成本最高的模型全模型汇总查看 Codex 各模型的累计花费JSON 输出以美化后的 JSON 形式输出 Claude 的全模型汇总。把{baseDir}展开为仓库相对路径即python skills/model-usage/scripts/model_usage.py --provider codex --mode current python skills/model-usage/scripts/model_usage.py --provider codex --mode all python skills/model-usage/scripts/model_usage.py --provider claude --mode all --format json --pretty脚本默认行为是调用codexbar cost --format json --provider codex|claude获取数据然后按模式汇总输出。五、参数详解与两种统计模式5.1 命令行参数一览从 model_usage.py 的main()中可以看到完整参数定义参数取值默认值说明--providercodex/claudecodex数据来源提供方决定读取哪份本地日志--modecurrent/allcurrent当前模型 / 全模型汇总--model任意模型名无显式指定要报告的模型覆盖自动推断--input文件路径或-无读取已导出的 CodexBar cost JSON-表示从 stdin 读取--days正整数≥1无全部只统计最近 N 天的 daily 行--formattext/jsontext输出格式--pretty布尔开关关对 JSON 输出做美化缩进与排序其中--days由positive_int函数校验拒绝 0 与负数见 test_model_usage.py 中test_positive_int_rejects_zero_and_negative。5.2 current 模式谁是当前模型current模式的判定逻辑在pick_current_model()中实现规则如下取出所有 daily 行按日期升序排序从最近的日期开始向前扫描找到第一条包含modelBreakdowns列表且非空的行在该行内对所有{modelName, cost}条目按 cost 降序排列取成本最高者作为当前模型若该行没有modelBreakdowns则回退读取modelsUsed列表取最后一项字符串作为当前模型全部落空则报错No model data found in codexbar cost payload.并以退出码 2 结束。当需要固定报告某个模型而非自动推断时用--model name显式覆盖即可——此时脚本跳过推断逻辑直接按给定模型名统计其累计成本totalCostUSD与最近出现该模型的日期及当日成本latestDayCostUSD/latestDayCostDate。current模式的文本输出结构为Provider: codex Current model: claude-sonnet-4-6 Latest model date: 2026-05-25 Total cost (rows): $12.34 Latest day cost: $1.75 (2026-05-25) Daily rows: 125.3 all 模式全模型累计花费all模式通过aggregate_costs()遍历所有经过--days过滤后的daily 行把modelBreakdowns中同一modelName的 cost 累加最后按花费降序排列Provider: codex Models: - claude-sonnet-4-6: $8.50 - gpt-4o: $3.25 - gpt-4o-mini: $0.75JSON 输出则是一个结构化数组all模式{ provider: codex, mode: all, models: [ {model: claude-sonnet-4-6, totalCostUSD: 8.5}, {model: gpt-4o, totalCostUSD: 3.25} ] }六、数据输入三种接入方式技能支持三种数据来源按 SKILL.md 的 Inputs 章节默认方式需codexbar在 PATH脚本直接执行codexbar cost --format json --provider codex|claude适用于 macOS / Linux文件方式跨平台通用先用 CodexBar CLI 导出 JSON再通过--input传入——适合未安装 CLI 的平台如 Windows或离线分析标准输入方式通过管道把 JSON 喂给脚本。三种方式的完整示例# 方式一直接调用 CLI默认 python skills/model-usage/scripts/model_usage.py --provider codex --mode all # 方式二先导出 JSON 文件再传入 codexbar cost --provider codex --format json /tmp/cost.json python skills/model-usage/scripts/model_usage.py --input /tmp/cost.json --mode all # 方式三从 stdin 读取 cat /tmp/cost.json | python skills/model-usage/scripts/model_usage.py --input - --mode current在load_payload()中可以看到实现细节--input -会读取sys.stdin--input file则按 UTF-8 打开文件。当codexbar不在 PATH 时脚本会抛出codexbar not found on PATH. Install CodexBar CLI first.并统一以退出码 1 返回错误信息到 stderr。此外codexbar cost的返回是一个按 provider 排列的数组。脚本在加载数据时会在数组中查找provider字段等于--provider参数的那一项若找不到则报Provider name not found in codexbar payload.。这意味着同一份导出的 JSON 可以反复用于 codex 与 claude 两种 provider 的分析。七、输出约定与数据边界文本默认人类可读的键值对与列表JSON--format json --pretty结构化输出--pretty时使用 2 空格缩进并按 key 排序便于 diff 或存档金额格式文本输出统一为$xx.xxusd()函数格式化保留两位小数并带千分位数据缺失时显示—数据边界CodexBar 输出的按模型拆分只有 cost美元没有 token 拆分因此技能输出的按模型用量仅指费用不包含 token 数——这是数据源的固有限制SKILL.md 的 Output 章节已明确说明。八、CodexBar cost JSON 字段速查codexbar cost的返回结构来自 references/codexbar-cli.md是一个数组每个元素对应一个 provider字段如下字段类型说明provider/source/updatedAtstring提供方标识、数据源、更新时间sessionTokens/sessionCostUSDnumber当前会话的 token 数与成本美元last30DaysTokens/last30DaysCostUSDnumber近 30 天 token 数与成本daily[]array按天明细每条含date、inputTokens、outputTokens、cacheReadTokens、cacheCreationTokens、totalTokens、totalCost、modelsUsed、modelBreakdowns[]modelBreakdowns[]array按模型拆分的费用modelNamecosttotalsobject汇总totalInputTokens、totalOutputTokens、cacheReadTokens、cacheCreationTokens、totalTokens、totalCostmodel_usage.py主要消费daily[]中的date、modelBreakdowns与modelsUsed三个字段其余字段在脚本中不参与计算——这保证了脚本即使面对字段更丰富的未来版本也能向前兼容。九、源码级别的稳健性设计9.1 成本数值的消毒coerce_finite_cost真实世界的日志数据并不总是干净的成本字段可能是数字、数字字符串、布尔值、NaN/Infinity甚至缺失。coerce_finite_cost()专门处理这类情况接受原生数字与数字字符串如1.75、 2.5 拒绝布尔值——Python 中bool是int子类True会被当作1.0必须显式排除否则会凭空污染汇总金额拒绝 NaN / Infinity——非有限值会静默破坏累计结果拒绝无法解析的字符串、空串、None与对象类型。对应测试test_coerce_finite_cost_rejects_booleans、test_coerce_finite_cost_rejects_non_finite、test_coerce_finite_cost_rejects_unusable_values逐项验证了这一行为。9.2 汇总与推断不掺假aggregate_costs()在累加时同样逐条过滤只接受modelBreakdowns中modelName为字符串、cost 通过coerce_finite_cost校验的条目。测试test_aggregate_costs_includes_numeric_strings验证了数字字符串1.75会被正确累加test_aggregate_costs_ignores_bool_and_non_finite则验证了True与 NaN/Infinity 不会进入总数——即使混入脏数据汇总结果依然精确到3.25而非被污染。9.3 当前模型的选型也走同一套校验pick_current_model()在评分候选模型时复用coerce_finite_cost只有 cost 合法且modelName为字符串的条目才会进入候选。测试test_pick_current_model_scores_numeric_string_costs证明字符串形式的5.0仍能战胜数值1.0成为当前模型test_pick_current_model_ignores_bool_and_non_finite则证明布尔与 NaN 不会被评分。9.4 时间窗口过滤filter_by_days()以今天为基准向前回溯 N-1 天cutoff today - (days - 1)只保留date为%Y-%m-%d格式且晚于 cutoff 的行。测试test_filter_by_days_keeps_recent_entries验证了--days 2恰好保留最近两天。9.5 明确的错误与退出码退出码1输入加载失败CLI 缺失、执行失败、JSON 解析失败、payload 非数组、provider 缺失退出码2数据本身为空current模式无模型数据、all模式无任何 modelBreakdowns错误信息统一写入 stderr成功输出写入 stdout便于管道与日志分离。十、完整运行示例以下演示导出 → 文件分析 → 管道分析的完整链路# 1. 导出 Codex 成本 JSON 到本地文件 codexbar cost --provider codex --format json /tmp/cost.json # 2. 查看最近 7 天 Codex 全模型汇总文本 python skills/model-usage/scripts/model_usage.py --input /tmp/cost.json --mode all --days 7 # 3. 查看最近 30 天 Claude 当前模型JSON 美化输出 cat /tmp/cost.json | python skills/model-usage/scripts/model_usage.py --provider claude --input - --mode current --days 30 --format json --pretty若codexbar已安装且位于 PATH则可以省略--input直接python skills/model-usage/scripts/model_usage.py --provider claude --mode all --format json --pretty十一、局限与适用前提依赖 CodexBar 先行采集技能只做读与算不做采集。必须保证 CodexBar 应用/CLI 已在本地运行并持续写入 JSONL 日志cost数据才会存在仅限 Codex 与 Claude--provider只接受这两个取值与 CodexBarcost命令的支持范围一致无 token 级拆分模型维度的拆分只有美元费用token 数据只在 provider 汇总层面提供纯本地数据cost读取的是本机会话日志不包含 web 端用量需要 web 用量时应改用codexbar usage但该命令不在本技能的处理范围内。结语model-usage技能展示了一种典型的CLI 工具 本地日志 专用脚本组合范式用 CodexBar 解决数据采集用 170 余行的 Python 脚本解决按模型汇总、当前模型推断、脏数据清洗与多格式输出并用配套单测锁死边界行为。无论是个人开发者想快速了解我这个月在哪个模型上花了多少钱还是希望把成本报告接入自动化流水线脚本退出码与 stderr 分离的设计天然适合被脚本调用都可以直接复用 skills/model-usage 目录下的这套实现。【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考