一直用 Claude Code 干活的人,多少都会遇到同一个问题:这个月到底用了多少量、花了多少钱、哪个项目吃 token 最多,心里完全没数。我也一样,写到一半开始焦虑额度,却又懒得去翻官方后台。后来试了试 ccusage,发现这东西确实是 Claude Code 用量统计里最顺手的一个,一条命令就能把当月汇总、每日走势、模型使用占比全部拉出来。这篇就完整讲讲它的安装过程和配置思路,从环境检查到常见坑,一次说清楚,照着操作就行。
1. 项目概述与核心需求解析
1.1 ccusage 到底是什么
ccusage 是一个针对 Claude Code 的开源统计工具,作用是读取 Claude Code 在本地留下的历史使用记录,把它整理成你一眼能看懂的报表。你可以把它理解为给 Claude Code 装了一个“账单助手”,它不代理请求、不拦截数据,只做本地日志分析。
很多人在意的是成本。Claude Code 本身按 token 计费,不同模型的价格不一样,如果你同时开过多个模型,手动算费用基本不现实。ccusage 的价值就在于,它帮你把这些零散记录聚合起来,直接告诉你这个月花了多少、哪天最费、哪个会话最重。
它也能帮你判断使用习惯是否健康。比如某个任务反复让模型重试,token 可能悄悄翻倍;某些超大文件反复粘进上下文,会话体积会迅速膨胀。这些数据只有可视化之后才有感知,ccusage 就是帮你把这个感知补上的工具。
1.2 它的统计原理
ccusage 的统计逻辑并不复杂。Claude Code 每次会话都会把对话内容、消息数量、时间等信息写入本地的 JSONL 文件,这些文件按日期和项目分目录存放。ccusage 扫描这些文件,解析里面的消息记录,再根据预设模型的 token 单价来估算成本。
需要注意的关键点是:ccusage 统计的 token 数是估算值,不是计费系统给出的精确账单。因为本地文件并不总是包含精确的 token 计数,工具需要根据字符数和上下文长度做合理推算。实际费用和估算值之间通常有偏差,但用来做趋势参考完全够用。
它的成本估算还支持几种主流模型的价格表。如果用的是官方默认模型,直接用默认配置就可以;如果后期模型列表调整,也可以自己改价格文件来适配。
1.3 适合谁来用
三类人最适合用 ccusage。
第一类是重度使用者,每天产生大量会话,需要知道自己的用量消耗速度,避免超额或成本失控。
第二类是团队管理者,想了解不同项目、不同成员的用量分布,好做预算分配或资源规划。ccusage 虽然本身是个命令行工具,但输出 JSON 格式的数据后,可以接到监控面板或定时任务里。
第三类是研究型开发者,想观察自己在 prompt 设计、上下文管理上的效率问题,比如单会话 token 过高、对话轮数是否过长等。这类分析对比,用 ccusage 的汇总数据最直接。
如果你只是偶尔打开一次 Claude Code,聊几句就关,那 ccusage 的紧迫性没那么强。但只要开始当日常工具用,安装它就很有必要。
注意:ccusage 只读取本地文件,不会向任何远程服务器发送你的对话内容。但要注意它在本地生成的缓存文件里包含了你对话记录的统计摘要,如果对数据敏感,使用时注意本机文件权限。
2. 安装前的环境准备
2.1 Node.js 版本要求
ccusage 是通过 npm 分发的,所以第一步是确认本机有 Node.js。我实测下来,Node.js 需要 18 及以上版本,20 和 22 都没有问题。低于 16 的话会遇到各种兼容性报错,比如语法不支持、依赖安装失败,不建议继续往下进行。
检查本机版本的方法很简单,打开终端输入:
node -v如果看到类似v20.11.0的输出,说明 Node.js 已经就绪。如果提示node: command not found,说明还没安装 Node.js,需要先装一个 LTS 版本。
需要提醒的是,有些 macOS 用户是通过系统自带的 PATH 调用 node 的,但版本可能很老。还有一个坑是,通过包管理器安装的 Node.js 和通过官方安装包安装的,全局模块路径完全不同,这会影响后面 ccusage 命令是否被系统识别。建议在第一遍检查时,同时确认 npm 的全局目录。
2.2 npm 环境自查
新版 Node.js 会自带 npm,所以一般不需要单独安装。安装 ccusage 前,可以用下面几个命令确认环境可靠:
npm -v npm config get prefix第一条输出 npm 版本号,第二条输出全局安装目录。这个目录很关键,因为 ccusage 安装后它的可执行文件就会放到这个目录下面。如果你的 prefix 是一个需要 root 权限才能写入的路径,比如/usr/local,后面安装时很可能会遇到 EACCES 权限报错,这一点我会在安装环节专门讲。
如果你之前装过其他全局 npm 包,说明环境基本没问题。如果这是第一次装全局包,建议顺手检查一下 npm 源,国内网络环境下改成淘宝镜像源会快不少,命令如下:
npm config set registry https://registry.npmmirror.com这里强调一下,改源只是为了加速下载,不影响工具本身的运行。安装完成后是否保留镜像源,看你自己的网络习惯就行。
2.3 系统兼容性说明
ccusage 在 macOS 和 Linux 上最顺滑,Windows 上也能用,推荐用 WSL 或者 Git Bash,原生 PowerShell 对某些格式输出和路径处理不够友好。
macOS 用户如果用的是 Apple Silicon 芯片,Node.js 20 以上的 arm64 版本没有任何兼容问题,不用担心架构不匹配。Linux 服务器上安装时,注意不要用过于精简的容器镜像,有些镜像连gcc都没有,npm 装某些依赖需要本地编译,会直接卡住。
CentOS 和 Ubuntu 我都试过,Ubuntu 20.04 及以上版本顺利通过。CentOS 7 自带的 Node.js 版本往往太旧,要么升级系统仓库里的 nodejs 包,要么用 nvm 装一个独立版本。
3. ccusage 安装全流程实操
3.1 全局安装命令
环境没问题后,安装就一条命令:
npm install -g ccusage-g参数表示全局安装,这样你可以在任何目录下直接运行ccusage命令。不加这个参数的话,它只会装到当前目录的node_modules里,运行方式会很别扭。
安装过程中,npm 会拉取依赖包。如果你发现速度很慢或者卡在某个包上,大概率是网络问题。此时可以直接中断,把 registry 切到国内镜像再重试。如果之前已经改了镜像源还是慢,还可以换用pnpm或yarn来装,但为了省事,我建议直接用 npm 加镜像源组合。
3.2 验证安装是否成功
安装完成后,先运行版本号命令确认安装结果:
ccusage --version如果输出一个版本号,比如0.x.x,说明安装成功,环境变量也没问题。如果提示command not found,说明 npm 的全局 bin 目录不在 PATH 里。这是最常见的安装后问题,排查方法稍后单独讲。
第一次运行时,ccusage 还会提示初始化一些配置。如果你直接执行ccusage,它会默认扫描~/.claude/目录。如果本机还没有 Claude Code 的会话记录,工具会提示找不到数据。这属于正常情况,不是安装失败。
3.3 权限问题处理方案
npm 全局安装最常见的坑是权限不足,报错信息常见的有:
Error: EACCES: permission denied, access '/usr/local/lib/node_modules'这个报错的意思是当前用户没有/usr/local/lib/node_modules的写入权限。两个解法:
方案一,最省事也最推荐:修改 npm 的默认全局目录到用户目录下。执行:
mkdir -p ~/.npm-global npm config set prefix '~/.npm-global'然后要把~/.npm-global/bin加入到 PATH 里。在~/.bashrc或~/.zshrc中追加一行:
export PATH=$PATH:~/.npm-global/bin保存后执行source ~/.bashrc(或source ~/.zshrc),再重新安装 ccusage。这个办法一劳永逸,后面装任何全局 npm 包都不会再碰权限问题。
方案二,如果实在想用系统目录,就在安装命令前加上sudo:
sudo npm install -g ccusage但这样会导致 npm 目录被 root 所有,后续自更新或者装其他包时容易再次踩权限坑。我自己的经验是,不要偷懒用 sudo,虽然这次装成功了,下次维护成本会增加。
提示:修改 npm prefix 后,之前安装的全局包路径会变。如果你以前装过全局工具,重新源一下配置或者重启终端即可。
4. 安装后的初始化与基础配置
4.1 数据从哪来
ccusage 读取的是 Claude Code 在本地保存的会话日志。Claude Code 每次运行都会把会话记录写到用户目录下的隐藏文件夹里,默认路径是:
~/.claude/所有历史会话按照项目目录和日期分别存储,文件是 JSONL 格式,每行是一个 JSON 对象,记录着消息的角色、内容、时间戳等信息。这些文件是 ccusage 的数据源,所以安装后不需要自己手动导出任何东西,工具会自动完成扫描解析。
如果你之前用过 Claude Code 的多个账号或迁移过配置文件,路径会有差异。ccusage 提供了--storage参数来查看当前识别的存储位置。确认数据源的思路是:能正常看到历史会话,说明路径正确;看不到任何数据,优先检查~/.claude是否存在。
4.2 首次运行初始化
第一次执行ccusage时,它会做一个简洁的初始化流程。工具会在本地生成自己的配置文件目录,并用交互式选项询问你想要的分析维度。
我建议的第一次操作是直接运行:
ccusage不加任何参数,它默认展示本月汇总信息,包括总 token 数、总费用、对话次数和每日分布。看到这个界面,说明整个流程已经跑通,后面再慢慢研究其他参数。
还会遇到一个交互式问题:选择存储模式。ccusage 支持 sqlite 和 json 两种数据存储方式。sqlite 模式查询快、文件更紧凑,适合长期持续统计数据;json 模式更直观,适合临时用一用或者拿去做自定义脚本解析。我推荐直接选 sqlite,日常用起来和查看历史数据都更顺手。
4.3 存储方式选择
这个选择看起来小,但影响后续使用体验。ccusage 在第一次扫描原始 JSONL 数据后,会生成一份自己的统计缓存。如果选 json 模式,所有统计结果都保存在一个 JSON 文件里,你随时可以手动改或者删除;如果选 sqlite 模式,数据统一入库,用命令行查询性能更好,尤其是积累了几个月的数据之后。
如果你和我一样,用了一两个月才意识到要换存储方式,不用恐慌。ccusage 会有对应的迁移逻辑,但操作上最好先备份一下当前缓存目录,避免中途中断造成数据错乱。我的建议是:不确定的情况下,先用默认方式跑一周,确认自己确实在持续使用这个工具,再决定是否调优存储。
注意:ccusage 的缓存数据和 Claude Code 的原始日志不是同一份。删除 Claude Code 的原始日志,ccusage 的缓存还会在,但新的统计不会再变;反过来删除 ccusage 缓存不影响 Claude Code 使用。清理时想清楚自己到底要清哪一层。
5. 核心功能实操:用量统计与报告生成
5.1 常用统计命令速查
ccusage 的命令参考是ccusage --help,但我直接把最常用的几条贴出来,省得你来回翻:
| 用途 | 命令示例 |
|---|---|
| 查看当月统计 | ccusage |
| 查看最近30天 | ccusage --days 30 |
| 按月份汇总 | ccusage --monthly |
| 输出JSON格式 | ccusage --json |
| 查看存储配置 | ccusage --storage |
| 查看成本估算明细 | ccusage --cost |
这些命令组合起来用效果更好。比如想要最近 90 天的每日数据并存成 JSON 供后续处理,可以这么写:
ccusage --days 90 --json > ccusage-report.json我个人很喜欢把这份 JSON 接到自己的脚本里做图表。你想自动生成一个用量趋势图,用这个输出就够了。
5.2 按时间维度统计
ccusage 的时间维度统计很灵活。默认是当月,但你完全可以按需切换。
--days参数是最常用的,接受数字作为天数,统计最近 N 天的数据。这个参数我常用来做周报,比如统计 7 天的用量:
ccusage --days 7还有一个重点参数是--monthly,它会把所有历史月份的数据按月份汇总,方便你对比不同月份的消耗。如果只看某个月,也可以先运行ccusage --monthly找到日期范围,再用--days细分。
做月度复盘时,我会同时看两个值:总 token 数和总费用。只看 token 数容易忽略不同模型价格的差异,只看费用又看不出使用量的波动。两个值一起看,才能判断费用上涨是因为用多了,还是因为模型切换导致单价变化。
5.3 输出格式与报告导出
单纯在终端里看数字,只能解决“心里有数”的问题。要真正把数据利用起来,就得导出报告。
--json输出格式非常关键。它的结构里包含了日期、项目、会话 ID、模型信息、token 成本和消息数等字段,你可以直接用jq来做分析。
比如统计每天最高花费的日期:
ccusage --json --days 30 | jq '.days | max_by(.cost)'如果你不想手动折腾,也可以直接把 JSON 保存成文件,然后导入到表格软件里。大部分表格工具都能导入 JSON,这样你不需要编写任何代码就能做出自己的周报。
需要注意的是,输出的 JSON 结构在不同版本之间可能略有变化。如果脚本里写死了字段名,升级 ccusage 之后最好重新核对一下字段,避免静默出错。
6. 常见问题排查与避坑实录
6.1 命令找不到
安装成功但执行ccusage却提示command not found,这个问题的概率最高。多数原因是 npm 全局路径没有被加入到系统的 PATH 环境变量里。
先看 npm 的全局路径:
npm config get prefix假设输出是/usr/local,那可执行文件在/usr/local/bin/。把export PATH="/usr/local/bin:$PATH"追加到 shell 配置文件里,重新加载后就能用了。如果是自定义的~/.npm-global/bin,同理处理。
还有一个小坑:macOS 用户如果同时装了 zsh 和 bash,改了.bashrc却开的是 zsh 终端,那自然不会生效。要么把配置加到.zshrc,要么直接调用全路径测试:
~/.npm-global/bin/ccusage --version能输出版本号,说明安装没问题,纯粹是环境变量问题。
6.2 统计结果不完整
如果你的统计数据明显比实际会话少,有几种可能。
第一种,ccusage 只能统计安装之后新增的数据,或者说扫到数据文件的时间范围有限。如果中途自己手动删除过~/.claude/里的历史文件,那部分记录就永久丢了。
第二种,多账号或不同机器配置并存。比如你在一台机器上用了两个配置文件,ccusage 默认只读取当前配置指向的目录。需要确认当前 Claude Code 正在把日志写到哪个位置,再用--storage参数调整 ccusage 的读取路径。
第三种,模型名称识别问题。如果对话里用了自定义模型名,ccusage 可能不认识对应的价格,费用会按未知处理,导致统计成本偏低。解决办法是在 ccusage 的配置里手动补充模型价格。
6.3 与 Claude Code 版本不匹配
Claude Code 升级后,日志格式如果发生变化,ccusage 可能出现解析失败或统计异常。这种情况通常表现为:部分会话没有被识别,或者 token 数明显异常。
遇到这种情况,第一时间升级 ccusage:
npm update -g ccusage新版本一般会在较短时间内适配新的日志格式。如果升级后还是不行,可以先跑一遍原始命令看报错信息,把关键报错记录下来,去项目的 issue 区检索。不要直接删除缓存目录,那会让可恢复的历史数据全部丢失。
这类版本兼容问题的风险,也是我建议保留原始 JSONL 日志文件一段时间的原因。统计缓存可以重建,原始日志没了就真没了。
6.4 数据清理与文件膨胀
ccusage 本身很轻量,但如果用很久不清理,缓存文件也会慢慢膨胀。尤其是一次性扫描几千个会话文件时,工具的响应时间会变长。
ccusage 通常提供了数据文件压缩或清理的功能。官方文档里一般会有类似compact或prune的指令,执行后会把分散的数据重新整理。命令的准确名称以ccusage --help输出为准,我不建议凭记忆乱敲。
定期整理的节奏,我个人是每周跑一次。因为工作日每天都有大量会话,一周一次既能保证统计还是实时,又不会让文件长得太快。
清理前务必先看一眼数据源路径,确认没有其他脚本还在依赖正在被清理的缓存文件,不然会引发同步错误。
7. 踩坑之后的效率心得与扩展思路
如果你整套流程走下来,现在已经能顺利看到统计报表了,那我再分享几个我自己使用过程中的细节和想法。
第一,ccusage 这类统计工具,最值钱的部分其实是帮你改变使用习惯。开始用它的前两周,我发现自己单个会话的 token 消耗明显高于预期,原因是习惯把一大段代码和错误信息直接粘进上下文,导致模型每次都要重复读取大量内容。看到数据之后,我开始有意识地压缩粘贴内容、精简上下文,单次会话的成本下降得很明显。这个效果不是靠工具本身,而是靠可视化反馈倒逼习惯调整。
第二,如果你有定期备份的习惯,建议把~/.claude/下的 JSONL 日志目录也纳入备份范围。它们能帮你还原 ccusage 缓存丢失的情况,也方便你在新机器上快速重建历史统计。我一般在换机器时,直接把整个配置目录迁移过去,然后重装 ccusage,历史数据依然完整。
第三,把 ccusage 的输出接入团队监控是一个不错的扩展方向。很多团队用 Claude Code 做自动化任务,想知道每天的成本消耗是否在预算范围内。我见过一个做法:写一个定时任务,每天把ccusage --json --days 1的输出追加到表格里,月底自动汇总,非常省事。这个思路不依赖任何复杂框架,有 Python 或 Shell 基础就能实现。
最后说一句个人体会:统计工具并不是装完就完事的。它最理想的状态是成为一个“提醒器”,让你在用量上升时及时警觉,而不是月底看到账单才开始惊讶。如果你现在还没有用量概念,装好 ccusage 之后默认观察一个月,再回头对比,你会对自己的实际使用情况有一个很不一样的认识。