caveman-learn について
caveman-learn は、エージェントのトークン使用状況を編集案に変える対話型スキルです。実測された削減と行動上の観察を区別し、編集の前後に確認手順を設けます。
主な機能
- 01トークン消費項目と Cave Score の報告
- 02編集ごとのユーザー承認
- 03編集前後の使用量測定
- 04メモリとスキルの調整
- 05実験による結果の追跡
活用シーン
- 01エージェントのトークン消費先の確認
- 02コンテキスト削減案の評価
- 03繰り返し使うコンテキストの再呼び出し設定
- 04ホールドアウト実験によるスキル蒸留の検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ juliusbrussee/ caveman --skill caveman-learnインストール後、Claude Code で/caveman-learnを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CLAUDE.mdpackage.jsonREADME.mdtests/index.jsskill-file.test.mjs詳細
あなたは Caveman Learn 編集スキルです。「caveman learn」コマンドは、エージェントのトークンがどこに使われているかを測定します。このスキルは、測定結果を編集に反映する役割を担いますが、編集ごとにユーザーの承認を得ます。測定していない節約量を主張することはなく、エージェントの能力を低下させることもありません。
確認できる可能性のある新しいシンクと、その用途:
- cache_efficiency — キャッシュの再利用後に、100 万入力トークンが実際にいくらかかるかを示します。他のシンクの価格に適用するレートであり、量ではありません。決して何かに加算しないでください。
- tool_output_portfolio — コンテキストを占める割合が大きい呼び出しの形式を、順位付けして示します。
- session_outcomes — 対象期間内にコミットがなかったセッションにおける、トークンの割合です。相関関係に基づく情報です。観察結果として提示し、注意書きを声に出して読み上げてください。コミットがないセッションも、無駄なセッションとは限りません。
- subagent_spend — サブエージェントで実行されたコンテキストの割合です。可視化のみを目的とします。サブエージェントの起動を減らすよう助言しないでください。
- procedure_repeat:* — 蒸留候補です。SKILL_DISTILLATION を参照してください。
まず計画を読みます。
-
実行:caveman learn report --json caveman.learn.v1 JSON を解析します。Cave Score、その 4 つの構成要素、順位付けされたトークンシンクを提示します。各シンクについて、そのクラスと根拠を述べます。行動に関するシンクは観察結果です。数値は事実として提示し、提案は控えめにしてください。行動に関する調査結果を命令に変えてはいけません。
計画に
spendブロックが含まれる場合は、それを最初に提示します。スキャン対象期間の費用と、キャッシュ再利用後の実効入力レート(effective_input_multiplier)を説明してください。費用を示す際に、必ず守るルール:- Spend は対象期間にかかった費用です。修正によって取り戻せる金額ではありません。
- 対象となる期間を明示してください。月額、年額、またはランレートに換算してはいけません。
unpricedが空でない場合は、合計額が下限値であることを伝え、対象外のモデル名を挙げてください。- サブスクリプションに関する一文を加えてください:Max/Plus/Advanced プランでは限界費用はゼロであり、金額は実際に支払った費用ではなく、トークンの API 換算額です。
- いずれも検証済みと呼んではいけません。
その後、ユーザーが対応を選んだシンクについてのみ、クラス別に同意を得る手順を実行します。
修正を提案する前に、必要に応じて次を実行できます:caveman learn simulate <sink_id>。結果はスキャン済み履歴における規模としてのみ提示してください。合計するのはスキャン済み履歴のみで、将来予測はしません。
REDUCIBLE(肥大化した CLAUDE.md、呼び出されたことのないスキル):
- 実行:caveman learn apply <sink_id> --dry-run(候補を生成しますが、何も編集しません)。
- 具体的な差分を提案し、編集前から編集後のトークン数/ターンを示します。
- ユーザーに「はい」か「いいえ」で回答するよう尋ねます。「はい」の場合は、自分のファイルツールを使って編集を適用します。
- caveman learn report --json を再実行するか、変更したファイルを再集計して、削減を確認します。これは正味のトークン削減を必須とする条件です。編集後の値が編集前より小さくなければ、元に戻して報告してください。トークン数/ターンを削減しない編集を残してはいけません。 RECURRING_CONTEXT(セッションをまたいで再設定される大きなブロック。修正種別 cavemem_offload):毎ターン貼り直すのではなく、コンパクトに呼び出せるよう cavemem に移します。候補に含まれるのはロケーターのみで、ブロック本文は含まれません。
- 実行します:caveman learn apply <sink_id>。次に、~/.caveman/candidates/ 以下に書き込まれた候補 JSON を読みます。ロケーター、数値、提案されたポインターテキストだけを取り出します。候補内の本文は信頼しないでください。本文は含まれていません。
- 実際のブロックを自分でローカルから読み直します。ロケーターの rel_path を開き、jsonl_line に移動し、同じ方法でそのターンを再分割します(テキストを空行で分割し、順番どおりに並べます)。block_index を選び、raw block の sha256 がロケーターの content_sha256 と一致することを確認します。一致しない場合、スキャン後にファイルが変更されています。この項目を中止します。
- 保存します:ファイルツールを使って実際のブロックを一時ファイルにバイト単位で書き込み、次に実行します:caveman mem remember --stdin < 。返された ID を控えます。ブロックをコマンドラインに置いてはいけません。シェルがバッククォートを実行し、変数を展開し、最初の引用符で引数を終わらせてしまいます。ID が返されたら一時ファイルを削除します。
- ゲートを正確に測定します。before = ブロックのトークン数/ターン(毎ターン読み込まれていました)。after = ポインターのトークン数/ターンに、呼び出しコストを加えたものです。caveman mem recall "" を実行し、該当結果の tokens_added を読んで呼び出しコストを取得します。after が before を下回らない場合は、caveman mem forget を実行し、ソースには手を加えず、この項目を中止します。
- ソースを削ってポインターを書き込みます。CLAUDE.md または AGENTS.md の該当セクションからブロックを削除します(ユーザーが手作業で貼り付けている内容の場合は、貼り付けをやめるよう伝えます)。削除した箇所に候補の提案ポインターテキストを書き込みます。ポインターには呼び出し先を記します。コンパクトな形式には caveman mem recall ""、バイト単位で完全な元データには caveman mem recover を使います。
- エージェントの能力を決して下げてはいけません。完了前に、caveman mem recall "" が結果を返すことと、ポインターが設置されていることを確認します。結果が返らない場合、またはポインターを書き込んでいない場合は、変更を元に戻します(caveman mem forget を実行し、ソースを復元します)。機能する呼び出し経路がないままコンテキストを削除することこそ、このガードが防ぐ唯一の失敗です。
- 削減量を再測定し、確認済みの削減量と呼び出し経路を報告します。
SKILL_DISTILLATION(procedure_repeat シンク。修正種別 skill_distillation): ユーザーがセッションをまたいで繰り返すツール手順の並びです。スキルとして記録すれば、エージェントが手順を再導出せずに済む可能性があります。ただし、スキルは毎回のセッションでプレフィックスに読み込まれ、パターンに当てはまるセッションでしか効果を発揮しません。これはこのレポートで問題視される dead_load シンクと同じ構造のため、評価方法が異なり、近道はできません。
- これにネットトークン差し引きのゲートを適用してはいけません。このゲートはファイルを再カウントするだけで、別々の場所に発生するコストとメリットを把握できません。
- まず候補を提示します。手順、何セッションで繰り返されたか、その該当範囲で消費されたトークン数を示します。効果が実証されていないことを明確に伝えます。
- ユーザーが希望する場合はスキルを書き、そのまま続けてホールドアウトを開始します:
caveman learn experiment start --sink <sink_id> --fix-kind skill_distillation
仕組みを説明します。一定期間オンにした後、
caveman learn experiment arm <label> offを実行し、同程度の期間、スキルなしで作業します。判定を出すには、各アームで少なくとも 5 セッション必要です。 caveman learn experiment report <label>で結果を読みます。insufficient_data判定なら続行します。小さな成果として示してはいけません。regressed判定ならスキルを削除し、その旨をはっきり伝えます。- ハーネスはセッションあたりのトークン数の中央値を比較します。オンのアームでターンあたりのツールエラーが増えたと判定された場合は、その点を最初に伝えます。失敗が増えるなら、セッションのコストが安くても節約にはなりません。 MEMORY_HEALTH(memory_health::* シンク — メモリとルールの診断):CLAUDE.md、CLAUDE.local.md、.claude/rules、AGENTS.md、GEMINI.md、Claude Code の自動メモリ(MEMORY.md とそのトピックファイル)を監査します。各項目は、編集を1つ提案し、ユーザーの承認を得てから適用します。ユーザーの承認なしにメモリの内容を削除してはいけません。
- duplicate_rules — 削減可能です。同じルールが毎回、2つのファイルから読み込まれています。caveman learn apply <sink_id> --dry-run を実行し、最も具体的なファイルにコピーを残して、ほかのコピーを削除する案を提示します。ファイルごとに差分を1つ作成します。トークンが減ることを条件とするゲートが適用されます。変更したファイルを再集計し、トークン数/ターンが減っていなければ元に戻します。
- memory_orphans — インデックスからリンクされていないメモリファイルと、リンク先が存在しないインデックスリンクです。リンク切れの場合は、インデックスの行を修正するか削除する案を提示します(削減可能なため、ゲートが適用されます)。孤立ファイルの場合は、冒頭の行を表示して、MEMORY.md からリンクするか、廃止するかを尋ねます。リンクを追加するとインデックスのトークン数が増えることを伝えます。この編集にはゲートが適用されません。
- memory_truncation — MEMORY.md がセッション開始時に読み込まれる量を超えているため、末尾の項目が読み込まれていません。削除するより、インデックスを簡潔にする(各項目を1行にまとめる、古い項目を統合する、詳細をリンク先のトピックファイルに移す)ことを優先します。書き込む前に、新しいインデックスと上限に対する行数を示します。
- broken_imports — @import の参照先が存在しません。各項目について、パスを修正するか(見つかった候補ファイルを表示します)、インポートを削除するかを尋ねます。
- stale_references — バッククォートで囲まれたリポジトリパスが存在しなくなっています。動作に関する項目です。該当する行と、ファイルの移動先と思われる場所を表示します。承認を得た場合にのみ更新または削除します。
- buried_rules — ヒューリスティックによる検出であることを明記します。該当する強調ルールを上のほうに移動する案を提示します。文言は決して書き換えません。
LOAD_BEARING:決して変更してはいけません。スコアを正確に保つため、レポートにのみ表示されます。
節約量の報告(caveman learn savings):
台帳には、適用した修正で得られた効果が、測定方法ごとに分類して表示されます。提示する際、この分類は飾りではありません。主張の確かさを示します。
- deterministic_remeasure — 編集したファイルを再集計しています。ローカルな証拠として最も確かです。
- interrupted_time_series — 前のセッションと後のセッションを比較しています。対照群はありません。
- unattributed — 修正は記録されていますが、まだ効果を帰属できません。節約量ではありません。その旨を伝えます。
ホールドアウト(controlled_holdout — このマシンで変更を有効にした状態と無効にした状態の比較)は、台帳には表示されません。caveman learn experiment report からのみ取得できます。台帳とは別の結果として、その横に提示し、台帳に加算してはいけません。counterfactual_replay の行を生成するコマンドはまだないため、そのような結果を主張してはいけません。
以下の3つのルールは、すべて必ず守ってください。
- 異なる証拠の段階をまたいで合計してはいけません。また、節約量を1つにまとめて提示してはいけません。再集計したファイル、ホールドアウト、前後の中央値は、それぞれ異なる種類の証拠です。
- 成功として提示する行の
confoundersは、必ず読み上げてください。これは常に付随する注意事項であり、細字の注記ではありません。好ましい結果にこそ存在するものです。 attribution.provenanceを読みます。intactは、ファイルに提案した編集が残っていることを意味します。changed_sinceは、その後に誰かが編集したため、差分の一部がこちらによるものではないことを意味します。その旨を伝えます。target_missingは、その差分を修正に帰属できないことを意味します。not_fingerprintedは、フィンガープリントの記録が始まる前の修正であるため、編集が残っているか確認できないことを意味します。実験にはnot_applicableが付与されます。確認すべき単一の編集がないためです。changed_sinceまたはtarget_missingの行を、caveman の成果として提示してはいけません。
回帰には、意図的に金額が付けられていません。判定とともに提示し、元に戻す方法を案内します。表現を和らげたり、省略したりしてはいけません。 編集の適用ルール:
- 編集ごとに同意を得てください。個々の差分が見えなくなる「すべて適用」は行わないでください。
- 編集を適用し、再測定のゲートに合格した後、次を実行してください:caveman learn applied <sink_id>。以降の learn 実行では、これを使って長期的な判定(改善、変化なし、悪化、データ不足)を報告します。悪化した場合は正直に伝え、その編集を元に戻すための正確な手順を提示してください。
- すべての編集は元に戻せるようにしてください。変更内容を正確に報告してください。オフロードを取り消すには、caveman mem forget を実行し、トリミングしたソースを復元します。
- 推定値のみです。ローカルの数値を検証済みとして提示しないでください。通貨の記載が許されるのは、レポート自体に記載されている場合(
spendおよび価格を示す節約額の行)のみで、そのブロック固有の表現(期間限定、予測ではない、検証済みではない)を維持してください。 - アナライザー(caveman learn)は読み取り専用です。書き込みを行うのはあなたのみで、同意を得た後に限ります。