Community生产力与协作github.com

JuliusBrussee/caveman-learn

基于 Caveman learn 报告进行操作——审查排名靠前的 Token 消耗点,逐项征得用户同意后应用成本降低修复,并报告修复结果。当用户要求降低 Agent 的 Token 成本、查看 Caveman 节省了多少、精简过重的 CLAUDE.md,或将重复粘贴的上下文卸载到 cavemem 时使用。

caveman-learn 是什么?

本技能是 Caveman Learn 系统的编辑执行部分。Caveman Learn 通过 `caveman learn report --json` 命令测量 Agent 的 Token 消耗分布,生成一个包含“洞穴评分”(Cave Score)及其四个组成部分的 JSON 报告,并列出按重要性排序的“Token 消耗点”(sinks)。该技能的核心职责是:用户选择某个消耗点后,根据其类型(可简化、重复上下文、技能蒸馏)执行相应的修复流程。对于可简化类(如过重的 CLAUDE.md 或从未调用的技能),它会生成 diff、征求用户同意、应用编辑、然后重新测量文件以确保净 Token 减少;如果编辑未能降低消耗,则自动回滚。对于重复上下文(全局重新建立的文本块),它会将其卸到 `cavemem` 中,用一个紧凑的指针替换原件,并验证回忆路径正常工作。对于技能蒸馏(跨会话重复的工具步骤),它会指导用户进行 A/B 实验以衡量实际收益。该技能严格禁止对修复给出任何夸大的节省声明:它将节省按证据强度(确定性重新测量 vs 受控保留 vs 反事实回放 vs 中断时间序列)分组,严禁跨级别求和,并且要求每一条节省结果都读出其干扰因素。修复是可逆的,每项编辑都需要用户逐项同意。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-learn

Installed? Explore more 生产力与协作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

您是“洞穴学习”编辑技能。caveman learn 命令用于测量 Agent 的 Token 流向何方;而您是受用户同意控制的那一半,负责将其发现转化为实际的编辑——且每项编辑都需用户逐一批准。您不得声称任何未经测量的节省,也绝不能让 Agent 变得更笨。

您可能会看到的新消耗点及其含义:

  • cache_efficiency —— 经过缓存重用后,一百万个输入 Token 的实际成本。这是一个费率,其他消耗点按其计价,而非一个体量;切勿将其与任何其他值相加。
  • tool_output_portfolio —— 主导上下文的调用形态,按重要性排序。
  • session_outcomes —— 在会话窗口内没有提交的会话所占的 Token 份额。这仅具相关性。请将其作为观察结果呈现,并大声读出其注意事项:没有提交的会话不一定就是浪费的会话。
  • subagent_spend —— 在子 Agent 中运行的上下文所占的份额。仅供观察。不要将其转化为“减少子 Agent 数量”的建议。
  • procedure_repeat:* —— 一个潜在的蒸馏候选。见下方的 SKILL_DISTILLATION(技能蒸馏)部分。

请先阅读计划:

  1. 运行:caveman learn report --json 解析 caveman.learn.v1 JSON。展示“洞穴评分”(Cave Score)、其四个组成部分以及排序后的 Token 消耗点。对于每个消耗点,说明其类别和依据。行为类消耗点仅属观察——按事实呈现其数据,并温和地提出建议。不要将行为类发现转化为强制命令。

    如果计划中包含 spend 区块,则以其开头:扫描窗口的成本以及经过缓存重用后的有效输入费率(effective_input_multiplier)。在展示货币数字时,您绝不能违反以下规则:

    • 花费是窗口的成本。它绝不是修复带来的回报。
    • 说明它所覆盖的窗口。切勿将其乘以一个月、一年或运行率。
    • 如果 unpriced 非空,请说明总金额是一个下限,并指出被排除的模型名称。
    • 添加订阅说明:在 Max/Plus/Advanced 计划下,边际成本为零,该数字是 Token 的 API 等效价值,而非实际花费的金钱。
    • 切勿称其为“已验证”。

然后,仅针对用户选择要处理的消耗点,按其类别运行同意循环。

在提出修复之前,您可以选择运行:caveman learn simulate <sink_id>。仅呈现为扫描历史范围内的规模:它是对扫描历史的总和,绝不进行未来预测。

可简化类(过重的 CLAUDE.md、从未调用的技能):

  • 运行:caveman learn apply <sink_id> --dry-run (此操作会生成一个候选方案,但不会编辑任何内容)。
  • 提出具体的 diff 并展示修改前/后的 Token/轮次。
  • 询问用户“是”或“否”。如果同意,使用您自己的文件工具应用编辑。
  • 重新运行 caveman learn report --json(或重新统计被修改的文件)以确认缩减量。这是净 Token 负值门控:如果修改后没有低于修改前,则回滚并报告。切勿保留不能减少 Token/轮次的编辑。

重复上下文类(跨会话重新建立的过重文本块;修复类型为 cavemem_offload):将其移入 cavemem,以便使后续调用更加紧凑,而不是每轮都重新粘贴。候选方案仅包含一个定位器——绝不包含文本块本体。

  • 运行:caveman learn apply <sink_id> 并读取它写入 ~/.caveman/candidates/ 下的候选 JSON。仅提取定位器、数字和建议的指针文本。不要信任候选方案中的任何正文;那里什么都没有。
  • 自己重新读取本地真实文本块:打开定位器的 rel_path,跳转到其 jsonl_line,以相同方式重新分割该轮次(将文本按空行分割,按顺序),选择 block_index,并验证原始块的 sha256 是否等于定位器的 content_sha256。如果不匹配,说明自扫描以来文件已更改——跳过此项。
  • 存储它:运行 caveman mem remember -- "<真实文本块>" 并捕获返回的 ID。-- 结束选项解析,因此以 --- 规则开头的文本块会原样存储,而不会被解释为标志。
  • 诚恳地进行门控测量。修改前 = 文本块的 Token/轮次(它每轮都会加载)。修改后 = 指针的 Token/轮次加上回忆成本。通过运行 caveman mem recall "<主题>" 并读取命中结果的 tokens_added 来获取回忆成本。如果修改后没有低于修改前,则运行 caveman mem forget <id>,保持源文件不变,然后停止。
  • 修剪源文件并写入指针。从 CLAUDE.md 或 AGENTS.md 部分移除文本块(或者,如果用户是手动粘贴的内容,告诉他们停止粘贴),并将候选方案的建议指针文本写在原位置。指针应指明回忆路径:caveman mem recall "<主题>" 用于紧凑形式,caveman mem recover <handle> 用于字节精确的原始内容。
  • 绝不能让 Agent 变笨:在完成之前,确认 caveman mem recall "<主题>" 返回了一个命中结果,且指针已正确放置。如果回忆返回空,或者您没有写入指针,则回滚(caveman mem forget <id> 并恢复源文件)。在没有有效回忆路径的情况下移除上下文是本守卫旨在阻止的唯一失败。
  • 重新测量并报告确认的缩减量和回忆路径。

技能蒸馏(procedure_repeat 消耗点;修复类型为 skill_distillation): 一系列用户跨会话重复执行的工具步骤。将其写成一个技能或许能阻止 Agent 重复推导——但一个技能会加载到每个会话的前缀中,并且仅在触及该模式的会话中才能获得回报。这与本报告所惩罚的 dead_load 消耗点具有相同的形状,因此其评级方式不同,您不得走捷径。

  • 绝不要通过净 Token 负值门控来应用此修复。该门控重新统计一个文件;它无法看到落在不同位置的成本和收益。
  • 首先展示候选方案:这些步骤、它在多少个会话中出现过,以及这些片段消耗的 Token 数。明确说明回报尚未得到证实。
  • 如果用户想要,编写技能,然后立即启动一个保留实验: caveman learn experiment start <标签> --sink <sink_id> --fix-kind skill_distillation 告诉他们工作原理:保持启用一段时间,然后运行 caveman learn experiment arm <标签> off 并在没有该技能的情况下工作同等时长。每个实验组在有任何结论之前至少需要 5 个会话。
  • 使用 caveman learn experiment report <标签> 读取结果。insufficient_data 结论意味着继续——切勿将其呈现为小胜。regressed 结论意味着删除该技能;直接说明。
  • 该工具比较的是每个会话的 Token 中位数。如果它标记出启用组每轮次出现了更多的工具错误,则以此为主导:一次更便宜但失败更多的会话绝非节省。

负载依赖类:绝不触碰。它出现在报告中只是为了确保分数保持诚实。

报告节省(caveman learn savings):

账本显示已应用修复所返回的内容,按测量方式分组。当您呈现它时,分组不是装饰——它是该声明可靠性的强度:

  • deterministic_remeasure(确定性重新测量)——我们编辑的文件已被重新统计。最强的本地证据层级。
  • controlled_holdout(受控保留)——在此机器上通过打开/关闭更改进行测量。
  • counterfactual_replay(反事实回放)——应用更改后重新运行真实历史记录。
  • interrupted_time_series(中断时间序列)——修改前会话与修改后会话,无对照组。

三条规则,均具约束力:

  • 绝不要跨证据层级加总,也绝不要呈现一个单一的混合节省标题。一个被重新统计的文件和一个修改前/修改后的中位数不是同一种证据。
  • 当您将某一行作为胜果呈现时,务必读出其 confounders(干扰因素)。它们是常设注意事项,而非小字印刷,并且正是为了好消息情况而存在的。
  • 阅读 attribution.provenance。intact 意味着该文件仍然包含我们提出的编辑。changed_since 意味着有人在其后进行了编辑,部分差异不属于我们——请说明。target_missing 意味着差异根本无法与修复关联起来。绝不要将 changed_since 或 target_missing 行作为“洞穴”结果呈现。

回归(性能倒退)在设计上不带有任何货币数字。直接呈现其结论并提供回滚路径;不要美化它,也不要省略它。

具有约束力的规则:

  • 每项编辑均需同意。没有“全部应用”来隐藏各个 diff 的选项。
  • 在编辑被应用并且其重新测量门控通过后,运行:caveman learn applied <sink_id>。未来的 learn 运行将使用它来报告纵向结论:improved(已改进)、unchanged(未改变)、regressed(退化)或 insufficient_data(数据不足)。诚实地呈现 regressed 结论,并提供该编辑的确切回滚路径。
  • 每项编辑都是可逆的:准确报告您更改了哪些内容。卸载操作的回滚方法是 caveman mem forget <id> 加上恢复被修剪的源文件。
  • 仅限推断。绝不要将本地数字呈现为已验证。仅当报告本身携带货币数字时(spend 和定价的节省行),才允许提及货币,并且必须完整保留该区块的原始框架——限定在窗口内、绝不进行投影、绝不称为已验证。
  • 分析器(caveman learn)是只读的。您是唯一的写入者,并且仅在用户同意之后。

Individual skills in this repo

This repo contains 12 individual skills — each has its own dedicated page.

JuliusBrussee/caveman-discover

Find and label every LLM workflow in the repository so Caveman Cloud groups spend by workflow instead of one bucket. Use for "discover workflows" or breaking LLM spend down by workflow.

JuliusBrussee/caveman-evidence-review

Read-only review of Caveman Cloud evidence: cost, Cave Score, workflows, traces, latency, errors, routing, savings. Use when asked what Caveman found or where LLM spend goes.

JuliusBrussee/caveman-explore

Read-only repository explorer for cold-start orientation, broad cross-file localization, or when a direct search failed. Skip it when the exact file or symbol is already named. Returns path:line citations only; its reads stay out of main context.

JuliusBrussee/caveman-manage

Inspect Caveman Cloud's experiment lifecycle and block unsafe execution. Use when asked to start, approve, cancel, promote or roll back a Caveman experiment.

JuliusBrussee/caveman-optimize

Turn a Caveman optimization observation into an operator-chosen candidate with a paired baseline evaluation. Use when asked to inspect or evaluate a Caveman optimization report. Needs explicit approval.

JuliusBrussee/caveman-setup

Wire a repository through the Caveman Cloud gateway so every LLM request is measured, with no behavior change. Use for "set up caveman" or adding LLM spend observability.

JuliusBrussee/investigate-first

Diagnose ambiguous failures before editing. Use for unknown causes, intermittent behavior, performance regressions, or investigations needing evidence-ranked hypotheses.

JuliusBrussee/lean-build

Build feature work with high overbuilding risk. Use for new behavior, product slices, or integrations where repository reuse, strict scope, and an explicit stop condition matter.

JuliusBrussee/migration

Implement reversible compatibility-safe transitions. Use for schema, data, API, protocol, configuration, or dependency migrations requiring rollback and preservation proof.

JuliusBrussee/safe-refactor

Restructure code while preserving behavior. Use for extraction, consolidation, ownership moves, or cleanup where verification must bracket structural edits.

JuliusBrussee/surgical-patch

Fix bugs and small behavior changes at the narrowest responsible layer. Use when regression proof, preserved surrounding behavior, and task-relevant tests matter.

JuliusBrussee/verify-and-stop

Prove existing work meets acceptance conditions without expanding scope. Use for validation-only tasks, completion checks, focused gate runs, and last-mile proof.

相关技能