Viberuler:测量你的 AI 编程上下文都花在哪了
Show HN: Viberuler – measure where your AI coding context goes
Viberuler 是一款本地运行的 CLI 工具,通过扫描 Claude Code 和 Codex 的会话日志计算 VIBE SCORE,核心指标为 tokens per dollar(每美元 token 数)。默认运行零网络请求,--submit 仅上传 14 个聚合字段,不含路径、仓库名、提示词或代码。支持 npx viberuler 直接运行,并提供月度回顾和排行榜提交功能。
氛围编程者的基准。
你到底有多能 vibe?只有一个办法能知道:
npx viberuler
它做什么
viberuler 扫描你的机器——本地运行,几秒完成——并计算出你的 VIBE SCORE:
| 信号 | 来源 | 炫耀值 |
|---|---|---|
| 🧠 烧掉的 token | Claude Code + Codex 会话日志(+ 你的 LiteLLM 网关,需选择加入) | 1.2B tokens |
| 💸 每美元 token 数 | token ÷ 花费(内置价格表) | 6.5M tok/$ — TOP 3% |
| ⚡ 交付的代码行数 | 你在你的提交中添加的行数,减去生成的内容 | 312K LoC |
| ⚙️ 机器噪音 | 你提交的生成行数,以及它们在你 diff 中的占比 | 163K · 33% of diff |
| 📦 项目 | 你撰写过提交的仓库 | 47 projects |
| 🔥 连续 · 节奏 | 连续提交天数,以及每个活跃日的提交数 | 212-day streak · 8.4/day |
| 🏆 成就 | 见下文 | Token Billionaire |
| 🤖 马厩里的 agent | 你主目录中已知编程 agent 的标记目录 | 4 agents · Claude Code · Codex · Antigravity |
| ⏳ Codex 计划余量 | Codex 已经写入其会话日志的 rate_limits 记录——不计分,不上传 |
5h 12% used · resets in 45m · week 2% used |
然后它会打印一张记分卡,你会在反应过来之前就截图。
tokens per dollar 是头条数据。谁都能烧 token。高效地烧才是本事。
Token 就是赌场筹码。它们之所以这样计价,就是为了让你花的时候不觉得是在花钱——而每一种新的工作方式(vibe 一下、随口说、让 agent 自己搞定)都在降低投入、抬高消耗。viberuler 就是收银窗口:它把筹码换回美元——按 API 等价计算,总计和分平台——在你重新坐回牌桌之前。
代码行数统计的是你写的,而不是你拥有的。它过去统计的是你仓库目录树的大小——这会把从未碰过的第三方代码和编译器生成的每一行都算在你头上。现在它统计的是你在自己提交中添加的行数,排除生成内容。这让作者自己的头条数字下降了 17%,而我们发布了更小的真实数字。详细原因 →
被排除的行仍然会显示。作者 diff 中有三分之一是机器输出——重新生成的类型、打包产物、锁文件。它不计分,也永远不会离开你的机器;它是一个可以缩小的基线。看不见的数字,就是你无法减少的数字。
这是一面镜子,不是绩效评估。这里的每个数字都只限定于一台机器和一个人:你。用烧掉的 token 给一个初级员工打分,你就会得到一个烧 token 的初级员工——古德哈特定律一周内就会应验,而 token 的钱是你付的。截图、炫耀、和选择加入的人比较;一旦它进入某人的绩效评估,它就不再衡量任何东西了。
段位
Prompt Peasant → Vibe Apprentice → Token Burner → Context Goblin → Ship Machine → GIGACHAD SHIPPER → Singularity Adjacent
(没有数据?你会得到 NPC (no vibes detected)。我们很抱歉。我们并不抱歉。)
成就
| 💰 Token 亿万富翁 — ≥10 亿 token | 🪦 免费层殉道者 — 花费不到 $1 却用了 ≥100 万 token | 🗄️ 缓存低语者 — >90% 缓存读取 |
| 🌐 多语言者 — 5 种以上语言 | 🐘 单体仓库威胁 — 在单个仓库中撰写 10 万行以上 | 🔥 连击狂魔 — 连续 100 天 |
| 🌙 凌晨 3 点提交者 — 10 次以上夜间提交 | 💥 YOLO 强推者 — 20 次以上历史重写 | 🎰 豪赌客 — 烧掉 $1,000 以上 API 等价金额 |
| 🎲 换桌常客 — 在 3 个以上平台各烧掉 $1 以上 |
排行榜
npx viberuler --submit
GitHub device-flow 登录 → 你的分数会实时显示在 viberuler.dev/u/<you>,作为一份 Vibe Measurement 证书(代码行数 · tok/$ · 连续天数 · agents · 排名 · 头衔),专为炫耀而生。全球排名。效率百分位。预填分享链接 — X · LinkedIn · Facebook · Bluesky。
分享到 Stories — 证书页面还会渲染一张竖版 9:16 的 story 卡片(Spotify-Wrapped 风格的数据揭晓),以及一个 Share to Stories 按钮。在移动端,它会把卡片直接交给手机的原生分享面板 — Instagram、WhatsApp、Facebook、Messenger;在桌面端,它会下载卡片供你发布。(Stories 仅限 App 内,所以这是唯一的进入方式 — 与 Wrapped 使用的机制相同。)
隐私(HN 的朋友们,请读这段)
- 默认运行会进行 零网络调用。零。
--submit只发送 聚合数据 — 十四个字段:聚合统计、成就 id、你的编码 agent 名称、提交连续天数,以及交付成果(已交付功能 / 已合并 PR)。没有路径,没有仓库名,没有提示词,没有代码。永远没有。- 在发送任何内容之前,CLI 会打印出 确切的 JSON 载荷 并询问。
--share也不发送任何内容:它只是打印一个携带你展示数字的 URL。打开或发布该链接由你决定,它渲染的卡片会标记为未验证。- 时间指标来自你转录记录中已有的时间戳。没有任何东西监视你的屏幕,也不会读取、存储或发送任何窗口标题、路径或文件名。
- 别信我们 — 读读那约 140 行代码:
packages/cli/src/payload.ts和packages/cli/src/submit.ts。详情:PRIVACY.md。
数学部分
完整公式、价格表、归一化和诚实的免责声明见 METHODOLOGY.md。简版:
VIBE = 1000·log₁₀(1 + LoC/1000) # shipping volume
+ 500·log₁₀(1 + tokens/1M) # AI leverage
+ 800·efficiency_percentile # tokens/$ vs the world
+ 300·log₁₀(1 + projects·10) # breadth
+ min(streak, 365) + 50·achievements
处处使用对数 — 巨鲸被压缩,新人有攀升空间。
月度回顾
npx viberuler wrapped --month 2026-06
你的本月 Vibe Wrapped — 提交数、最忙的一天、连续天数、最常用语言,以及该时间窗口内的 Claude Code tokens/成本。100% 本地;截图炫耀吧。
标志
npx viberuler # scan + scorecard (100% local)
npx viberuler audit # audit your rig — see below
npx viberuler --submit # push to the global leaderboard
npx viberuler payload # show exactly what --submit WOULD send
npx viberuler --json # machine-readable
npx viberuler --scan-dir ~/code --since 2026-01-01
npx viberuler --scan-dir ~/work --scan-dir ~/oss # repeatable — scans ALL repos under each root
npx viberuler --github <handle> # add your stars (the only other network call)
npx viberuler --share # print a shareable card URL (nothing is sent)
npx viberuler audit --idle-gap 5 # pause (minutes) that stops counting as attention
npx viberuler audit --compare 2026-06-01..2026-07-01 # that window vs the equally long one after it
npx viberuler audit --market # reprice your mix at live market rates (one catalog GET, opt-in)
裸运行会扫描你 主目录 下的每个 git 仓库。如果你的代码在别处(或分散在多个位置),请把 --scan-dir 指向每个根目录 — 可重复使用,并且所有指标(代码行数、提交数、功能、PR)都会汇总所有找到的仓库,因此你的证书反映的是你的全部工作成果,而非单个项目。
装备审计
npx viberuler audit
你的 每美元 tokens 分数说明你燃烧 tokens 的效率。audit 则说明你的装备配置效率。100% 本地,读取你的 Claude Code 转录记录:
- Token 经济性 — 缓存命中率,以及 prompt caching 实际为你节省了多少 API 等价美元。
- 上下文放大 — 你引入的平均每个 token 在后续轮次中被重读的次数。仅在主线程上测量:在短命 subagent 上下文中合并会把这个数字减半,并低估一个 token 在你实际所处线程中的真实成本。(在真实装备上:1088×。)
- Subagents — 它们的压缩力度:在 subagent 内部 拉入的工作量 vs 交还的摘要。它们并非免费(它们有真实开销),但在 1000× 放大下,让 tokens 远离主线程就是全部关键。
- 🧊 冷上下文 — 一个会话在你输入一个字之前的成本:系统提示词、工具名称、agent 和技能描述、记忆。每次 subagent 生成都会重新支付这笔成本。(在真实装备上:会话开始时 50.2K tokens,在 3,234 次生成中每次重新支付 33.1K。)
- 👻 幽灵 token — 输出重写插件承诺为你省下的 token,是实测出来的,而不是承诺出来的。超大结果(>4KB)占所有被接纳内容的 54%;著名的“去重重复读取”技巧只值 2%。
- 热门工具 — 哪些工具真正在填满你的上下文,按调用次数和 token 数排名。
- ☠️ 无用负担 — 每次会话都加载、启动进程、注入工具 schema……却零次被调用的 MCP 服务器和插件。
最后一点才是关键。在作者的机器上,它发现两个 MCP 服务器在 10,700+ 次会话中 0 次调用,却烧掉了 76 个进程共 1.5 GB 内存。移除它们后,冷启动上下文中位数从 49.9K 降到 41.1K token——此后每次会话都享受 17.5% 的折扣,也证明了延迟加载工具 schema 并不能让一个未使用的服务器变得免费。
测量胜过猜测,这对一个靠感觉给你打分的工具来说是个尴尬的结论。
上下文浪费——只讲规模和杠杆,绝不声称节省
有一大类工具承诺能把你的 token“最多削减 90%”。它们是真实项目;但没有一个公布这个数字背后的方法论。audit 走的是另一条路:它在你自己的对话记录上,指出上下文去了哪里。
CONTEXT WASTE
5.7M tok · 2,555 calls oversized single results → slice / grep before read
2.2M tok · 4,068 calls subagent-returned tokens → tighter subagent contracts
1.9M tok · 3,394 calls whole-file reads never edited → outline-first / symbol reads
三条规则保证诚实,而且是在输出中强制执行,而不只是写在文档里:
- 不说“你能省 N%”。反事实无法知晓——一次没有改变任何东西的读取,可能正是告诉你不要改变某事的读取。
- 不给总计。这些类别在构造上就相互重叠(一次超大读取也可能同时是探索性的),所以把它们相加会重复计算,制造出一个标题数字。
audit --compare A..B把两个窗口并排放——安装优化器,比较前后——并把差值标注为观察,而非因果,因为两个窗口的工作负载不同。没有会话的窗口会显示“数据不足”,而不是打印一个好看的零。
按市场价计算你的构成(audit --market)
筹码换美元的视角,扩展到整个交换过程:你实测的 token 构成,按一组精选的当前模型的标价重新计价——开放权重旗舰(Kimi K3、DeepSeek、GLM、Qwen、Llama、MiniMax)以及闭源层级。价格来自对 OpenRouter 公开目录的一次匿名 GET(此标志为可选网络,类似 --github),本地缓存一天,离线时回退到内置快照——输出会标明是哪个来源应答的。这是算术,不是建议:分词器、质量和缓存机制各不相同,所以表格说的是你的用量在每个计数器上花多少钱,而绝不是你能省多少钱。
同一张表还回答了每美元的最大 AI 性能:当目录带有 Artificial Analysis 智能指数时,每个计数器会显示在你的构成上一个指数点要花多少钱($/pt),排名据此而定,最便宜的戴上 🏆——每美元点数是最初的切法,但一旦构成达到数十亿 token,它在每一行上都会读成 0.00,而 $12.77/pt vs $688.51/pt 在任何规模下都清晰可读(同样的排序,上下颠倒)。没有公布分数的模型会说明这一点并排在列表末尾——未知不等于零。该指数是第三方对模型的基准测试,不是对你的工作负载的;王冠标记的是最便宜的智能,而不是最多的智能。
自托管模型也享有同样的诚实待遇:设置 VIBERULER_LOCAL_RATE=<USD/Mtok>(以及可选的 VIBERULER_LOCAL_MODELS=local,mlx 前缀),即可按你自己的电费 + 硬件成本为网关的本地模型定价,而不是 $0。费率由你计算;viberuler 会应用它并标记为自报。
无需登录即可分享
npx viberuler --share
生成一个卡片 URL,你可以发布到任何地方。图片根据链接中的数据渲染——无需账户、无需提交、不会向数据库写入任何内容——并带有 SELF-REPORTED · UNVERIFIED 品牌标识,且不显示排名。位于 /u/:login 的 GitHub 验证证书仍是唯一带排名的展示面。
你自己的时间
卡片和 audit 还会报告从对话记录时间戳推导出的时间——注意力时间(间隔超过 --idle-gap 的不计入)对比挂钟时间。没有守护进程,没有窗口跟踪,没有任何东西监视你的屏幕。
状态栏
把你的分数放在你自尊心所在的地方——可直接粘贴的片段,适用于 Claude Code、Starship、oh-my-posh、tmux,以及 integrations/statusline/ 中的原始 shell 提示符。一个缓存文件,亚毫秒级读取:
Fable 5 · ⚡3982 Context Goblin · 481.5K tok/$
路线图——欢迎 PR
- Claude Code 收集器(token、成本、缓存命中去重)
- Codex 收集器
- Cursor 收集器(输入侧下限,估算)
- Gemini CLI 收集器
- Cline / Roo Code / KiloCode 收集器(一个解析器,三个分支)
- 多智能体装置——可重复的
--agent-home,外加CODEX_HOME/CLAUDE_CONFIG_DIR - Windsurf / Aider 收集器——
good first issue - Vibe Wrapped——月度回顾卡片
- 时间指标——来自对话记录的会话挂钟时间和注意力时间(#21)
-
--share——一个无需登录即可发布的自报卡片 URL(设计上未验证) -
audit+--compare A..B中的上下文浪费分类——大小和杠杆,绝不声称节省 - Codex 计划余量——5 小时 / 每周已用份额和重置时间,从
rate_limitsCodex 已记录的日志中读取(无网络),每个 Codex 主目录一行 - 团队排行榜
想让你的智能体上榜? 一个收集器大约 70 行代码加一个测试:两个方法,这个智能体在这里吗 和 它消耗了什么。CONTRIBUTING.md 会带你走一遍,包括已经坑过我们的两个解析陷阱。草稿 PR 也可以——你不必在提问前完成它。
多智能体装置
如果你的智能体不在你的主目录中,请指向它们——每个额外的根目录都会被搜索,并且挂载相同的日志两次绝不会重复计数:
npx viberuler --agent-home C:\agents\Claude --agent-home C:\agents\codex
CODEX_HOME 和 CLAUDE_CONFIG_DIR 会被自动遵循,所以如果你已经按常规方式迁移了你的智能体,就无需传递任何内容。
多个订阅? 很正常。一个 Claude 计划加上一个 ChatGPT/Codex 计划再加上 Cursor 都会落在同一张卡片上:每个平台都是自己的收集器,而按智能体的图例会分别对每个平台的流量定价——那个美元数字就是那个订阅在 API 等价意义上的价值。同一平台的两个账户(工作 + 个人 Claude)会合并为一行;要拆分它们,请为每个账户运行一次,并将 VIBERULER_AGENT_HOMES 指向单个主目录(详情见 METHODOLOGY)。
技术栈
TypeScript CLI(一个运行时依赖:picocolors)。后端:Cloudflare Worker + D1,OG 图片由 satori 在 worker 内渲染——packages/worker。字体:JetBrains Mono(OFL)。MIT。
你的提示词永远不会离开你的机器。你的分数永远不会离开群聊。
来源:Hacker News · github.com

