claude-usage开发者指南:3个Python文件、零依赖背后的完整架构与测试体系
claude-usage开发者指南3个Python文件、零依赖背后的完整架构与测试体系【免费下载链接】claude-usageA local dashboard for tracking your Claude Code token usage, costs, and session history. Pro and Max subscribers get a progress bar. This gives you the full picture.项目地址: https://gitcode.com/gh_mirrors/cl/claude-usageclaude-usage 是一个用于追踪 Claude Code token 用量、成本与会话历史的本地仪表盘只需 3 个 Python 文件、零第三方依赖即可运行。本文从架构设计、数据流、SQLite 存储到测试体系完整拆解这个极简项目的实现逻辑帮助你理解如何用纯标准库构建一个实用的用量监控工具。项目定位为什么零依赖是核心卖点Claude Code 会在本地写入详细的 JSONL 用量日志——token 数、模型、会话、项目无论你的订阅计划是什么。claude-usage 读取这些日志将其转化为图表和成本估算并支持 API、Pro 和 Max 三种计划。它的关键设计哲学是任何在跑 Claude Code 的人都已经装了 Python。因此项目只使用标准库sqlite3、http.server、json、pathlib无需pip install、无需虚拟环境、无构建步骤。这个承诺在 pyproject.toml 中被显式固化dependencies []并注释说明the tool stays stdlib-only at runtime该工具在运行时保持纯标准库。核心架构3 个 Python 文件的职责划分整个项目主体由 3 个扁平的顶层模块组成这也是pyproject.toml中py-modules [cli, scanner, dashboard]的由来文件职责scanner.py解析 JSONL 会话记录写入 SQLite 数据库cli.py提供scan/today/week/stats/dashboard终端命令dashboard.py单文件 HTTP 服务器 内嵌 HTML/JS 单页仪表盘数据流全景项目的数据流在 AGENTS.md 中有一条清晰的链路~/.claude/projects/**/*.jsonl → scanner.parse_jsonl_file() 聚合 → upsert_sessions() insert_turns() ↓ ~/.claude/usage.db (SQLite) ↓ cli.py 查询 ←──────────→ dashboard.py /api/datascanner.pyparse_jsonl_file 解析每条assistant类型记录中的 token 字段input、output、cache_read、cache_creation与模型名scan 函数负责增量扫描cli.py终端报表calc_cost按 turn 逐条计费后求和dashboard.pyDashboardHandler 基于http.server.BaseHTTPRequestHandler提供两个端点——GET /api/data返回 JSON 快照和POST /api/rescan删除数据库并全量重扫整个 UI 以HTML_TEMPLATE原始字符串形式内嵌Chart.js 从 CDN 加载每 30 秒自动刷新存储设计3 张表撑起增量扫描SQLite 数据库位于~/.claude/usage.db由 scanner.py 的init_db创建并自动迁移turns表——每个 assistant API 响应一行是 token 数与模型归属的事实来源sessions表——按会话聚合的冗余汇总总额 主模型processed_files表——增量扫描跟踪记录(path, mtime, lines)mtime 不变则跳过文件增长时只处理新增行这使得重复运行python cli.py scan非常快。此外turns.message_id上的条件唯一索引让INSERT OR IGNORE能低成本地跨重扫去重。三个必须知道的非显而易见不变量AGENTS.md 特别列出了三个容易踩坑的设计点流式去重Claude Code 每个 API 响应会写多条 JSONL 记录只有同一message.id的最后一条才有最终用量统计。解析器只保留每个 message_id 的最后一条记录切勿跨记录累加会话总额重算增量扫描中 token 是累加的扫描结束时会用turns表重算sessions总额防止重复 turn 导致数据漂移会话主模型优先级opus sonnet haiku见 _model_priority避免子代理的 haiku turn 覆盖会话的 opus 模型成本计算按 turn 计费而非按总量一个常见错误是先聚合 token 再用单一价格计费——这对跨多模型的会话是错误的。claude-usage 的做法是每个 turn 都知道自己的模型逐条计费后求和。价格表在 cli.py 的PRICING字典Python和 dashboard.pyHTML_TEMPLATE内的PRICING常量JavaScript中各存一份测试test_prices_match强制两者保持一致。测试体系纯 unittest 覆盖全部关键路径项目测试只依赖标准库unittest完整测试套件运行方式简单python -m unittest discover -s tests -vCI 在 Python 3.9 / 3.11 / 3.12 三个版本上运行。测试目录 tests/ 的分工测试文件覆盖内容test_scanner.py解析、去重、增量扫描、schema 迁移、标题回填test_dashboard.pyAPI 数据结构、HTML 模板完整性、前后端价格表同步test_cli.py定价解析的三级匹配精确 → 前缀 → 子串、成本计算、数字格式化test_subagent.py子代理识别sidechain 标记、agent_id、路径判断与 dispatch 提取test_cli_subagent.py终端命令在旧 schema 下不崩溃test_dashboard_subagent.py子代理 token 数据接口test_version.py三处版本号强同步校验其中 test_version.py 值得单独一提它校验scanner.py中的VERSION当前为1.5.5、CHANGELOG 标题、以及 VS Code 扩展 package.json 三处版本一致——这正是发布流程三处版本 lockstep的守护。测试约定同样记录在 AGENTS.mdscanner 和 dashboard 测试使用tempfile.NamedTemporaryFile建立隔离数据库绝不触碰用户真实的~/.claude/usage.db/api/rescan测试通过 monkey-patchdashboard.DB_PATH和scanner.DEFAULT_PROJECTS_DIRS工作这个契约必须保持Windows 上全新检出可能没有~/.claude/目录get_db的mkdir(parentsTrue, exist_okTrue)不可移除否则sqlite3.connect会在 CI 中失败周边生态Docker 与 VS Code 扩展Dockerscripts/run-docker.sh 构建镜像并以只读方式挂载~/.claude容器可读不可改用命名卷持久化 SQLite 数据库仪表盘运行在 http://localhost:9898镜像定义见 DockerfileVS Code 扩展vscode-extension/ 将同一 UI 以活动栏侧边栏形式嵌入编辑器Python 源码直接打包进.vsix最终用户只需 PATH 上有 Python 3.8。其中 port-allocator.ts 通过workspaceState记住并复用上次端口保证 iframe 内的localStorage状态在窗口重载后不丢失快速上手克隆并跑起来git clone https://gitcode.com/gh_mirrors/cl/claude-usage cd claude-usage python3 cli.py dashboard浏览器将自动打开 http://localhost:8080看到会话数、输入/输出 token、缓存读写、估算成本等统计卡片以及按模型过滤、按日期范围缩放的交互图表。总结值得借鉴的极简工程范式claude-usage 展示了几个对独立开发者很有参考价值的做法约束驱动设计把零依赖写成pyproject.toml里的硬约束空依赖 注释说明让每个贡献者都无法绕开文档即契约AGENTS.md 不只写怎么做更写哪些不变量不能破坏把踩坑经验固化为团队与 AI 编码代理共享的知识单一事实来源 校验测试版本号、价格表这类容易漂移的数据都配有强制同步的测试守护扁平优于分层3 个顶层模块、无包目录与仓库结构一一对应阅读路径极短一个工具3 个 Python 文件17 个测试类——这正是小项目也要有完整工程体系的最好示范。【免费下载链接】claude-usageA local dashboard for tracking your Claude Code token usage, costs, and session history. Pro and Max subscribers get a progress bar. This gives you the full picture.项目地址: https://gitcode.com/gh_mirrors/cl/claude-usage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

impeccable:用 PRODUCT.md 和 DESIGN.md 驱动 CLI 自动化验证

impeccable:用 PRODUCT.md 和 DESIGN.md 驱动 CLI 自动化验证

1. 项目概述:这不是一个工具,而是一套设计驱动的 CLI 工作流范式“impeccable”这个词在英文里本意是“无可挑剔的、完美无瑕的”,但放在当前开发者社区语境下,它早已脱离字典定义,演变成一个高度特指的技术符号——它…

2026/10/10 22:39:12 阅读更多 →
WorkBuddy 六大真实场景实战:从科研数据同步到企业知识库的自动化链路拆解

WorkBuddy 六大真实场景实战:从科研数据同步到企业知识库的自动化链路拆解

1. 从六个真实场景看 WorkBuddy 到底解决了什么问题WorkBuddy 这类工具最近在技术圈和效率工具圈里被反复提起,但真正让人好奇的不是它有多少功能按钮,而是不同行业的人到底拿它来干什么。我花了两周时间,跟踪了六个来自不同领域的实际使用案…

2026/10/10 23:08:56 阅读更多 →
Composer 依赖管理速成指南:安装、版本约束与 PSR-4 自动加载(learnxinyminutes-docs 实战解析)

Composer 依赖管理速成指南:安装、版本约束与 PSR-4 自动加载(learnxinyminutes-docs 实战解析)

文档教程 【免费下载链接】learnxinyminutes-docs Code documentation written as code! How novel and totally my idea! 项目地址: https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs 点击查看 免费下载 Composer 是 PHP 生态中事实标准的依赖管理工具&a…

2026/10/10 23:24:55 阅读更多 →

最新新闻

Java日期时间转换实战:Date/Long/时间戳与格式化全解析

Java日期时间转换实战:Date/Long/时间戳与格式化全解析

2. 为什么要写这篇指南先说个真实场景。上周有个同事调接口,前端传了个时间戳过来,他拿new Date(Long.parseLong(str))一解析,页面上的日期直接变成了 1970 年。排查了半天,发现是前端把毫秒当秒传了,后端拿到手就当成…

2026/10/10 23:24:59 阅读更多 →
PyCharm调试asyncio报错ProactorEventLoop缺少_compute_internal_coro的解决方案

PyCharm调试asyncio报错ProactorEventLoop缺少_compute_internal_coro的解决方案

1. 这是哪来的报错:从现象到定性1.1 报错现场你在 Windows 上用 PyCharm 打开一个用 asyncio 写的项目,代码里设了个断点,点下 Debug 按钮。程序刚跑到断点那一行,你可能还没看到绿色的当前行标记,控制台先给你甩出一行…

2026/10/10 23:24:59 阅读更多 →
微调GPT-2写诗对战:中文诗词数据+keras_nlp全流程,还能救活你的对联项目

微调GPT-2写诗对战:中文诗词数据+keras_nlp全流程,还能救活你的对联项目

微调GPT-2写诗对战:中文诗词数据keras_nlp全流程,还能救活你的对联项目 【免费下载链接】gpt2 项目地址: https://ai.gitcode.com/hf_mirrors/openai-community/gpt2 GPT-2 诞生七年,参数规模已被后辈甩开两个数量级,但它…

2026/10/10 23:24:59 阅读更多 →
ADHD不是缺陷,而是可适配的认知操作系统

ADHD不是缺陷,而是可适配的认知操作系统

1. “I have ADHD”不是一句网络梗,而是一把打开理解之门的钥匙最近在多个内容平台刷到带#IHaveADHD标签的短视频,有人边叠衣服边突然开始拆解冰箱压缩机原理,有人对着Excel表格写诗,还有人用37种颜色标记同一份会议纪要——评论区…

2026/10/10 23:24:59 阅读更多 →
微信小程序+SpringBoot个人财务管理系统:毕业设计源码拆解与避坑指南

微信小程序+SpringBoot个人财务管理系统:毕业设计源码拆解与避坑指南

简介:基于微信小程序的个人财务管理系统毕业设计论文文档,完整呈现从选题意义、系统分析到技术实现的全过程,适合计算机相关专业学生作为毕业设计与论文写作参考。文档围绕Uni-weixin、Spring Boot与MySQL技术路线,前端以小程序页…

2026/10/10 23:24:59 阅读更多 →
PLC物料自动检测与分拣系统设计与调试实战指南

PLC物料自动检测与分拣系统设计与调试实战指南

做毕业设计或者接非标自动化项目的时候,物料自动检测与分拣系统基本是绕不开的经典课题。这个标题看着很长,其实拆开就三个关键词:PLC、物料检测、分拣系统。说白了就是用可编程逻辑控制器当大脑,配合各类传感器当眼睛&#xff0c…

2026/10/10 23:23:58 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →