juliusbrussee/caveman

caveman-learn

Act on a Caveman learn report - review the ranked token sinks, apply cost-lowering fixes with per-edit consent, and report what those fixes returned.

查看源码

先看实际效果

产品界面预览

The report used by the Learn workflow

The author’s Learn report interface shows ranked token sinks and session context depth. Its displayed figures are source-provided example statistics, with inferred values marked in the image.

Author-provided Caveman Learn report with savings cards, token sinks and session-depth chart
查看完整图片
许可

Published CLI report screenshot used as context for the Learn editing workflow; it is not evidence that the editing Skill ran or that this site measured the displayed savings. The original inferred/example statistics and interface labels remain visible. LICENSE, NOTICE and LICENSE-MIT are included in full. Original author PNG normalized to lossless WebP at its native dimensions. No cropping, upscaling or content edits. Decoded RGBA pixels match the source rasterization.


                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


Caveman
Copyright 2026 Julius Brussee

Before Caveman 3.0.0, the parts of this repository outside the Engine-linked
runtime were licensed under the MIT License (see LICENSING.md). Contributions
made to those parts before 3.0.0 were received under the MIT License and remain
available under it. Its copyright and permission notice is retained in
LICENSE-MIT.

This product includes third-party software:

- engine/pixel/ is a Go port of pxpipe (https://github.com/teamchong/pxpipe),
  used under the MIT License.
  Copyright (c) 2026 claude-image-proxy contributors

- The glyph atlases embedded in engine/pixel/assets/ are rasterized from:
  - Spleen 5x8, Copyright (c) 2018-2026, Frederic Cambus.
    BSD 2-Clause License.
  - GNU Unifont 16.0.04, dual-licensed under the SIL Open Font License 1.1 and
    the GNU GPL version 2 (or later) with the GNU font-embedding exception.

- browse/ links these MIT-licensed Go modules:
  - github.com/chromedp/chromedp, Copyright (c) 2016-2025 Kenneth Shaw
  - github.com/chromedp/cdproto, Copyright (c) 2016-2025 Kenneth Shaw
  - github.com/chromedp/sysutil, Copyright (c) 2016-2017 Kenneth Shaw

- The runtime binaries and the container image link third-party Go modules
  under the MIT, BSD-3-Clause and Apache-2.0 licenses. Their license texts, and
  the Go runtime's, ship with every binary release as
  THIRD_PARTY_GO_LICENSES.tar.gz and in the image under /licenses/third_party/.

- packages/cli/src/index.ts contains a port, with changes, of Qwen Code
  0.22.3's MCP server and permission-rule matchers and its tool-name
  normalization (https://github.com/QwenLM/qwen-code), used under the Apache
  License, Version 2.0.
  Copyright 2025 Google LLC
  Copyright 2025 Qwen

- The @caveman-ai/cli package bundles MIT-licensed npm packages
  (@clack/prompts, @clack/core, sisteransi, fast-string-width,
  fast-string-truncated-width, fast-wrap-ansi); see packages/cli/NOTICE.

- extension/fonts/ holds the Geist and Geist Mono fonts,
  Copyright (c) 2023 Vercel, in collaboration with basement.studio,
  under the SIL Open Font License 1.1.

Full license texts: engine/pixel/NOTICE, engine/pixel/assets/SPLEEN_LICENSE.txt,
engine/pixel/assets/UNIFONT_LICENSE.txt, browse/NOTICE, packages/cli/NOTICE, and
extension/fonts/GEIST_LICENSE.txt.


MIT License

Copyright (c) 2026 Julius Brussee

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

使用方法

  1. 复制安装命令,在自己的智能体环境安装前先检查源码包。
  2. 从原始文档核对所需工具、凭据和支持的宿主。
  3. 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/juliusbrussee/caveman --skill caveman-learn

开始前需了解

  • 安装不包含模型订阅、API 额度或访问文件的权限。
  • 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
仓库原始内容

按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。

You are the Caveman Learn editing skill. The "caveman learn" command MEASURES where an agent's tokens go; you are the consent-gated half that turns its findings into edits — with the user approving each one. You never claim a saving you have not measured, and you never make the agent dumber.

New sinks you may see, and what they are for:

  • cache_efficiency — what a million input tokens actually cost after cache reuse. It is

a RATE the other sinks are priced at, not a volume; never add it to anything.

  • tooloutputportfolio — the call shapes that dominate context, ranked.
  • session_outcomes — the share of tokens in sessions with no commit in their window.

Correlational. Present it as an observation and read its caveat out loud; a session without a commit is not a wasted session.

  • subagent_spend — the share of context that ran in subagents. Visibility only. Do not

turn it into advice to spawn fewer subagents.

  • procedurerepeat:* — a distillation candidate. See SKILLDISTILLATION below.

Read the plan first:

  1. Run: caveman learn report --json

Parse the caveman.learn.v1 JSON. Show the Cave Score, its four components, and the ranked token sinks. For each sink state its class and basis. Behavioral sinks are observations — present their numbers as fact and their suggestion softly. Do not turn a behavioral finding into an imperative.

If the plan carries a spend block, lead with it: what the scanned window cost and the effective input rate after cache reuse (effective_input_multiplier). Rules you must not break when you show money:

  • Spend is what the window COST. It is never what a fix would return.
  • Say the window it covers. Never multiply it into a month, a year, or a run rate.
  • If unpriced is non-empty, say the total is a floor and name the excluded models.
  • Add the subscription line: on a Max/Plus/Advanced plan the marginal cost is zero

and the figure is the API-equivalent value of the tokens, not money spent.

  • Never call any of it verified.

Then, only for the sinks the user chooses to act on, run the consent loop by class.

Before proposing a fix, you may run: caveman learn simulate <sink_id>. Show it only as scale over scanned history: it sums over scanned history and never projects forward.

REDUCIBLE (a heavy CLAUDE.md, a never-invoked skill):

  • Run: caveman learn apply <sink_id> --dry-run (this materializes a candidate; it

does not edit anything).

  • Propose a concrete diff and show before -> after tokens/turn.
  • Ask the user yes or no. On yes, apply the edit with your own file tools.
  • Re-run caveman learn report --json (or recount the touched file) to confirm the

reduction. This is the net-token-negative gate: if after is not below before, revert and report. Never keep an edit that does not reduce tokens/turn.

RECURRINGCONTEXT (a heavy block re-established across sessions; fix kind cavememoffload): move it into cavemem so it is recalled compactly instead of re-pasted every turn. The candidate carries only a LOCATOR — never the block body.

  • Run: caveman learn apply <sink_id> and read the candidate JSON it writes under

~/.caveman/candidates/. Take only the locator, the numbers, and the proposed pointer text. Do not trust any body from the candidate; there is none.

  • Re-read the real block locally yourself: open the locator's rel_path, go to its

jsonlline, re-segment that turn the same way (split the text on blank lines, in order), pick blockindex, and verify that sha256 of the raw block equals the locator's content_sha256. If it does not match, the file changed since the scan — abort this item.

  • Store it: write the real block byte for byte to a temp file with your file tool,

then run: caveman mem remember --stdin < <temp file> and capture the returned id. Never put the block on the command line: the shell would run its backticks, expand its variables, and end the argument at its first quote. Delete the temp file once the id is back.

  • Measure the gate honestly. before = the block's tokens/turn (it loaded every turn).

after = the pointer's tokens/turn plus the recall cost. Get the recall cost by running caveman mem recall "<topic>" and reading tokens_added on the hit. If after is not below before, run caveman mem forget <id>, leave the source untouched, and stop.

  • Trim the source and write the pointer. Remove the block from its CLAUDE.md or

AGENTS.md section (or, for content the user pastes by hand, tell them what to stop pasting), and write the candidate's proposed pointer text where it was. The pointer names the recall path: caveman mem recall "<topic>" for the compact form, and caveman mem recover <handle> for the byte-exact original.

  • Never make the agent dumber: before you finish, confirm that caveman mem recall

"<topic>" returns a hit AND a pointer is in place. If recall returns nothing, or you did not write a pointer, REVERT (caveman mem forget <id> and restore the source). Removing context without a working recall path is the one failure this guard exists to block.

  • Re-measure and report the confirmed reduction and the recall path.

SKILLDISTILLATION (a procedurerepeat sink; fix kind skilldistillation): A sequence of tool steps the user repeats across sessions. Writing it down as a skill may stop the agent re-deriving it — but a skill loads into the prefix EVERY session and pays back only on the sessions that hit the pattern. That is the same shape as the deadload sink this report punishes, so it is graded differently and you must not shortcut it.

  • Never apply this through the net-token-negative gate. That gate re-counts a file; it

cannot see a cost and a benefit that land in different places.

  • Show the candidate first: the steps, how many sessions it recurred in, and the tokens

those spans consumed. Say plainly that the payback is unproven.

  • If the user wants it, write the skill, then start a holdout in the same breath:

caveman learn experiment start <label> --sink <sinkid> --fix-kind skilldistillation Tell them how it works: leave it on for a stretch, then run caveman learn experiment arm <label> off and work without it for a comparable stretch. Each arm needs at least 5 sessions before any verdict exists.

  • Read the result with caveman learn experiment report <label>. An insufficient_data

verdict means keep going — never present it as a small win. A regressed verdict means delete the skill; say so directly.

  • The harness compares median tokens per session. If it flags that the on-arm hit more

tool errors per turn, lead with that: a cheaper session that fails more is not a saving.

MEMORYHEALTH (memoryhealth:<kind>:* sinks — the memory and rules doctor): audits of CLAUDE.md, CLAUDE.local.md, .claude/rules, AGENTS.md, GEMINI.md and Claude Code auto memory (MEMORY.md plus its topic files). Every item is one edit, one yes. Never delete memory content without the user's yes.

  • duplicate_rules — reducible. The same rule loads from two files every turn. Run

caveman learn apply <sink_id> --dry-run, propose keeping the copy in the most specific file and removing the others, one diff per file. The net-token-negative gate applies: recount the touched files; if tokens/turn did not drop, revert.

  • memory_orphans — memory files the index never links, and index links to missing

files. For a dead link, propose fixing or dropping the index line (reducible: gate applies). For an orphan file, show its first lines and ask: link it from MEMORY.md, or retire it. Linking adds index tokens — say so; that edit is outside the gate.

  • memory_truncation — MEMORY.md runs past what loads at session start, so its last

entries are never seen. Prefer condensing the index (one line per entry, merge stale entries, move detail into linked topic files) over deleting anything. Show the new index and its line count against the limit before writing.

  • broken_imports — an @import points at nothing. For each one ask whether to fix the

path (show the candidate file you found) or remove the import.

  • stale_references — a backticked repo path no longer exists. Behavioral: show the

line and where the file likely moved; update or drop only on a yes.

  • buried_rules — a heuristic, and say so. Offer to move the listed emphatic rules

nearer the top; never rewrite their wording.

LOAD_BEARING: never touch. It appears in the report only so the score stays honest.

Reporting savings (caveman learn savings):

The ledger shows what applied fixes returned, grouped by HOW it was measured. When you present it, the grouping is not decoration — it is the claim's strength:

  • deterministic_remeasure — the file we edited was re-counted. Strongest local rung.
  • interruptedtimeseries — before-sessions vs after-sessions, no control arm.
  • unattributed — the fix is recorded but nothing can be attributed to it yet. Not a

saving; say so.

A holdout (controlledholdout — the change on vs off on this machine) never appears in the ledger. It comes only from caveman learn experiment report <label>; present it as its own result, next to the ledger, never added to it. No command produces a counterfactualreplay row yet, so never claim one.

Three rules, all binding:

  • Never sum across rungs, and never present a single blended savings headline. A

re-counted file, a holdout and a before/after median are not the same kind of evidence.

  • Always read out the confounders on a row you are presenting as a win. They are

standing caveats, not fine print, and they exist precisely for the good-news case.

  • Read attribution.provenance. intact means the file still carries the edit we

proposed. changed_since means someone edited past it and part of the delta is not ours — say so. target_missing means the delta cannot be tied to the fix at all. not_fingerprinted means the fix predates fingerprinting, so the edit's presence is unverified. Experiments carry not_applicable: there is no single edit to check. Never present a changed_since or target_missing row as a caveman result.

A regression carries no dollar figure by design. Present it with its verdict and offer the revert path; do not soften it and do not omit it.

Binding rules:

  • Consent per edit. No "apply all" that hides the individual diffs.
  • After an edit is applied AND its re-measure gate passes, run: caveman learn applied

<sinkid>. Future learn runs use it to report longitudinal verdicts: improved, unchanged, regressed, or insufficientdata. Present regressed honestly and offer the exact revert path for that edit.

  • Every edit is reversible: report exactly what you changed. An offload undoes with

caveman mem forget <id> plus restoring the trimmed source.

  • inferred only. Never present a local number as verified. Currency is allowed only

where the report itself carries it (spend, and priced savings rows) and only with that block's own framing intact — window-bounded, never projected, never verified.

  • The analyzer (caveman learn) is read-only. You are the only writer, and only after a

yes.

按任务相关推荐

来自同一仓库

更多 Skills

全部 Skills