こんにちは。Claude Code を毎日使っている開発者です。CLAUDE.md が大きくなるほど、2つの点がずっと気になっていました。
- ルールがセッション開始時(t=0)に丸ごと読み込まれる一方で、そのルールが実際に必要になるのは何十ターンも後だということ。コンテキストが積み上がり、コンパクションが一度走ると、明示的なルールはぼんやりした背景へと格下げされてしまいます。
@docs/pr-rules.mdのような参照ドキュメントは毎セッションでトークンを前払いするのに、実際に PR を作るセッションは一部だけだということ。
そこで、ルールを「セッション冒頭の宣言」ではなく、「アクションに結び付いたイベントリスナー」としてコンパイルするプラグインを作りました。
/nunchi:compile が CLAUDE.md と参照ドキュメントからルールを抽出し、トリガー(ツール + 正規表現)を付けたルールファイルにします。PreToolUse フックが gh pr create のようなアクションの直前に、元のドキュメントをその場で読み込んで配信します。コンパクションが走った後は SessionStart フックが配信状態をリセットし、次のトリガー時に再配信します(再配信の実測は 5/5)。すべての配信は JSONL に記録され、/nunchi:report で「どのルールがいつ発火し、何を節約したか」を確認できます。
数値はすべて事前登録した実験としてリポジトリで公開しています。
- セッション開始時のトークン: ルールドキュメント 8 個(約 76KB)を @import から外すと、79,683 → 45,808(−42.5%、約 34k トークン)。ドキュメントのコストは、そのアクションが実際に発火したセッションでのみ支払います。
- コンパクション後のルール違反: ベースライン(CLAUDE.md のみ)では 3 回の実行中 1 回で、実験全体を通じて初めて観測された違反でした。その箇所はまさに「コンパクションが捨てた @参照ドキュメント内のルール」でした。ただし、事前登録したゲートを通過できなかったため、「JIT のほうが遵守率が高い」とは主張しません。これはまだ未検証であり、README にもそのように書いています。
- コンパイル品質: 実際に公開されている CLAUDE.md 12 個(airflow、next.js、supabase など、166KB)で、形式の有効性 100%、捏造 0。recall は敵対的 gold に対して 35% と低く、これも隠さず Issue として追跡中です。
- 日本語以外の文書との互換性: 韓国語の公開 CLAUDE.md 4 個(pinpoint 含む)で、形式違反・過剰抽出・捏造は 0。禁止表現(「絶対に直接コミットしません」)の強度判定は 88%。韓国語で CLAUDE.md を書く人向けの作成ガイドもあります。
既存アプローチとの違い: path-scoped rules は「ファイル読み込み」トリガーで、nunchi は「アクション」トリガーです(両者は共存するよう設計しています)。Context Mode/RTK 系はコンテキストに入ってくる出力を圧縮するツールですが、nunchi は圧縮ではなく配信タイミングをスケジューリングします。トークン削減は副産物であり、核心は ルールがアクション直前に確実にコンテキスト内にあり、それをログで証明できることです。
現在の実利用者は私ひとりだけなので、別のワークフロー(モノレポ、他言語圏のチーム、大規模な CLAUDE.md)でどう動作するかのデータが必要です。インストールは 2 行です:
/plugin marketplace add seob717/nunchi
/plugin install nunchi@nunchi-marketplace
トリガー推論が外れる箇所、正規表現では拾えないルールの種類、レポートでもっと見たいものなど、どんなフィードバックでもありがたく受け取ります。
まだコメントはありません。