ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

caveman `/caveman-stats` 技能解析:从会话日志读取真实 Token 用量并计算净节省

caveman `/caveman-stats` 技能解析:从会话日志读取真实 Token 用量并计算净节省 caveman/caveman-stats技能解析从会话日志读取真实 Token 用量并计算净节省【免费下载链接】caveman why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman项目地址: https://gitcode.com/GitHub_Trending/caveman1/cavemancaveman-stats是 caveman 项目用于回答这个会话到底用了多少 token、省了多少的统计技能。它的核心特点是不依赖模型估算数字直接读自 Claude Code 的会话日志JSONL transcript由hooks/caveman-stats.js脚本计算后经 mode-tracker 钩子注入给用户。读完后你能掌握该技能的完整触发链路、会话日志解析方式、节省/开销/净节省三项指标的精确计算口径、每模式归属per-mode attribution机制以及如何直接用命令行运行脚本做离线验证。技能定位与触发方式技能定义见 SKILL.md仓库中还有同内容的镜像 SKILL.md其 frontmatter 声明name: caveman-stats用途Show real token usage and estimated savings for the current session. Reads directly from the Claude Code session log — no AI estimation.触发词/caveman-stats关键设计模型本身不计算任何数字输出由 mode-tracker 钩子注入。SKILL.md 原文表述为hook 以格式化统计作为 reason 返回decision: block而当前 mode-tracker 实现 的做法等价且更温和把脚本输出放进hookSpecificOutput.additionalContext并附一句指令Print this stats block verbatim inside a fenced code block. Say nothing else.让模型原样转发统计块。用户随即看到数字无需等待模型生成。对应的斜杠命令包装在 caveman-stats.toml 中仅两行prompt /caveman-stats {{args}}即把附加参数透传给技能。执行链路从斜杠命令到统计输出当用户在 Claude Code 中输入/caveman-stats时链路如下依据 caveman-mode-tracker.jsUserPromptSubmit 钩子拦截。钩子注册为UserPromptSubmit事件收到用户输入的 JSON payload匹配 stats 命令。正则/^\/caveman(?::caveman)?-stats(?:\s(.*))?$/同时接受/caveman-stats与命名空间形式/caveman:caveman-stats组装子进程参数并执行src/hooks/caveman-stats.js--session-file transcript_path透传 hook payload 中的 transcript 路径保证读取当前活动会话而不是最近修改的某个 JSONL--session-id id让统计脚本丢弃属于其他窗口的模式切换日志行透传尾部参数--share、--all、--since Nh|Nd。2.5 秒看门狗。子进程execFileSync设timeout: 2500hook 注册允许 30 秒Windows 进程启动慢脚本自身已有 Node 启动开销故留了余量超时或失败时降级输出caveman-stats: could not run stats script.并提示手动运行node hooks/caveman-stats.js。注入 additionalContext模型按要求原样输出统计块。一个值得注意的实现细节钩子按 chunk 解析 stdin JSON而非等 EOF因为 Windows 管道上 EOF 关闭可能任意延迟而该钩子只有 5 秒预算解析完成后对 stdin 执行pause()unref()避免事件循环空转直到宿主杀掉进程见 caveman-mode-tracker.js 尾部的 stdin 处理。数据来源会话 JSONL 的解析口径caveman-stats.js 的parseSession逐行读取会话 transcript每行一个 JSON 对象只统计type assistant且带message.usage的行字段来源含义Output tokensusage.output_tokens累加模型实际产出的输出 tokenCache-read tokensusage.cache_read_input_tokens累加缓存命中的输入 token只读展示不参与节省计算Turnsassistant 带 usage 的行数轮次用于规则开销计算Model首个message.model用于匹配输出单价messages每行{ts, outputTokens}供按模式归属使用找不到会话时未传--session-file且~/.claude/projects下没有.jsonl脚本向 stderr 输出caveman-stats: no Claude Code session found.并以非零码退出。配置目录可由环境变量CLAUDE_CONFIG_DIR覆盖默认为~/.claude。节省估算压缩率与输出单价压缩率COMPRESSION 目前只有一个条目{ full: 0.65 }来自 benchmarks/ 中 10 个任务、sonnet-4-20250514 的平均avg_savings: 65。lite/ultra/wenyan等模式没有基准数据输出会直接写明No savings estimate for mode mode — only full has benchmark data.不做猜测。估算公式deriveSavingsestSavedTokens round( tokens / (1 - ratio) ) - tokens即已知压缩率 65% 时用当前输出量反推不用 caveman 时大约会有多少输出差额即节省量。美元换算脚本内置一张按模型 id 前缀匹配的输出单价表MODEL_OUTPUT_PRICE_PER_M取第一个命中的前缀最具体的前缀必须排在最前例如前缀输出单价USD/M tokensclaude-fable-5/claude-mythos-550claude-opus-525claude-sonnet-510claude-opus-4-0/claude-opus-4-1/claude-opus-4-20254.0/4.1 旧档75claude-opus-44.5 及以上25claude-sonnet-415claude-haiku-45claude-3-5-sonnet/claude-3-5-haiku/claude-3-opus15 / 4 / 75模型无法匹配任何前缀时只报 token 数、不报美元避免给出无依据的金额。规则开销与净节省不藏着净负区间这是 SKILL.md 强调的第二部分。只要存在已知轮次的节省估算输出就会包含两行Est. rule overhead规则开销 每轮注入 caveman 规则的输入token 成本 × 轮次。默认1,250 tokens/turnSKILL.md ~5 KB 规则注入 每轮强化提醒的量级可用环境变量CAVEMAN_RULE_OVERHEAD_TOKENS覆盖——ruleOverheadPerTurn 要求它是正整数否则回落到默认值Est. net净节省 节省量 − 开销deriveNet。注意节省量是输出token、开销是输入token分属不同计费桶但把两者相加是整个预算口径下唯一诚实的差值脚本注释明确引用 HONEST-NUMBERS.md。当净值为负时netLines 会直白输出Est. net: -2350 (caveman cost more than it saved for this workload — consider turning it off)即直接建议对该工作负载关闭 caveman而不是用总节省数字掩盖净负区间。这与 docs/HONEST-NUMBERS.md 的立场一致该页面明确列出 caveman 净负的场景简短编码问答、按请求计费的 Copilot 场景等并建议用 A/B 对照服务商账单做最终裁决。另外Est. output reduction: ~X%这一行终身视图在 outputReductionPct 中有严格限定它只是saved / (saved used)的输出 token 缩减比例不是占会话用量或配额的比例——因为代理式会话中输入 缓存 token 才是大头且不受 caveman 影响源码注释特意要求永远不要把它标成 usage/budget 占比。每模式归属会话中途切换模式时不虚报attributeByMode 解决会话中途换过模式的归属问题不能把整个会话的 token 全记在统计时刻的 flag 值上verbose 轮次会被算成压缩轮次或反过来。归属依据按精确度分三档logmode-tracker 的recordModeChange会在每次真实切换时向.caveman-mode-log.jsonl追加{ts, mode, prev}行stats 用消息时间戳与切换日志做 join第一条行之前的区间归属该行的prev。readModeLog 会按session_id过滤掉其他窗口的行防止多窗口交错污染时间线flag-mtime无切换日志、但 flag 文件 mtime 晚于首条消息——说明模式是会话中途写的只有写入之后的 token 可归属当前模式之前的 token 记为 unattributed 并排除出估算宁可少算不猜whole-session既无日志也无中途变更证据——按当前模式覆盖全会话模式从未改变时即为正确答案。混合模式时输出会给出逐模式明细Mode changed mid-session — output attributed per mode:无基准数据模式标注no benchmark estimate未知区间标注unattributed: N tokens (mode unknown — excluded from estimate)。终身统计、记忆压缩与状态栏后缀终身视图每次运行turns 0都会向~/.claude/.caveman-history.jsonl追加一条会话快照含session_id、output_tokens、turns、est_saved_tokens、est_saved_usd。--all或--since 7d/--since 24hparseDuration 仅接受Nh/Nd非法格式退出码 2触发终身聚合aggregateHistory 对同一 session 只取最新一条快照且净节省只累加真实记录了turns的行老格式行没有 turns 字段混入会扭曲开销计算。记忆压缩findCompressedPairs 扫描*.original.md备份对caveman-compress 的产物以字节差 ÷ 4英文约 4 字符/token估算每次会话启动的被动输入节省输出Memory compressed: N files, ~X tokens saved per session start (approx)。状态栏每次运行都会把聚合节省写成~/.claude/.caveman-statusline-suffix如⛏ 1.2Mshell 状态栏脚本可直接 cat 该文件无需解析 JSONL。--share输出一行可分享的总结例如 Saved 650 output tokens (~$0.010) across 3 turns this session — caveman.sh。直接运行与测试验证不依赖 Claude Code 也可以直接运行脚本# 读取最近修改的会话 node src/hooks/caveman-stats.js # 指定 transcript 与窗口过滤配置目录可用 CLAUDE_CONFIG_DIR 覆盖 CLAUDE_CONFIG_DIR~/.claude node src/hooks/caveman-stats.js --session-file path.jsonl --since 7d完整性守护方面脚本对同目录的caveman-config.js做了两层防护文件缺失时输出一行可操作的报错提示/plugin update caveman或重跑 install.sh并退出码 1文件存在但导出形状不符插件缓存漂移同样拒绝运行——因为 stats 没有降级半报表的可用输出。opencode 安装布局把同目录模块改名为.cjs脚本按错误信息点名本模块这一条件做了一次精确的重试。tests/test_caveman_stats.js约 900 行用临时目录伪造.claude/projects下的会话 JSONL 验证了这些口径例如两条 assistant 消息分别 100/50 输出 token、200/50 缓存 token 时断言输出含Turns: 2、Output tokens: 150、Cache-read tokens: 250flag 为full、输出 350 token 时断言Est. without caveman: 1,000、Est. tokens saved: 650 (~65% of output)即 350/0.35 1000flag 为ultra时断言出现No savings estimate for ultra mode。另有针对 mode-tracker 注入路径的用例确认/caveman-stats经钩子投递。适用前提小结数字的真实部分输出/缓存 token、轮次严格来自会话日志节省估算是基准压缩率 × 前缀匹配的公开输出单价属于估计值输出中始终带Est.与approx标注规则开销默认 1,250/turn若你的注入规则集不同建议实测后用CAVEMAN_RULE_OVERHEAD_TOKENS覆盖该技能面向 Claude Code 会话日志格式HONEST-NUMBERS.md 建议最终裁决以同一任务开/关 caveman 的服务商账单 A/B 为准/caveman-stats提供的是会话内可复核的明细与口径。【免费下载链接】caveman why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman项目地址: https://gitcode.com/GitHub_Trending/caveman1/caveman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表