🗿

Claudeトヌクン消費を抑えお倍䜿う: 「原始人」口調が80%削枛

に公開
2026/05/07
2ä»¶

[泚意]AIに曞かせた蚘事をそのたた私の方でレビュヌしお掲茉しおいたす。
Claudeマヌケットプレむスにだしたらたた曎新するかもよろしくおねがいしたす。

@远蚘: 2026幎4月18日

  • Claudeのマヌケットプレむスに無事公開されたした🎉
  • genshijin@v1.3.0を公開したした。マルチ゚ヌゞェント察応やセキュリティ察応、ベンチマヌク曎新などを含めおいたす

@远蚘: 2026幎5月7日

  • genshijin@v1.4.0を公開したした
  • caveman本家v1.3.0以降の差分stats receipts / smart installer / cavecrew盞圓 / cavepack盞圓 / MCP-shrinkを党項目移怍
  • 䞻な远加: /genshijin-stats でリアルセッション削枛量USD掚定衚瀺、3 subagent (genshijin-investigator/builder/reviewer) で長セッションコンテキスト持続、genshijin-shrink MCP middleware、root マルチ゚ヌゞェント installer、ultra-mode code-symbol guard 匷化
  • 技術的に面癜いトピックを䞋蚘「v1.4.0 技術深掘り」に远加MCP middleware proxy の仕組み、USD換算の芋積もり方法, subagent 圧瞮による長セッション持続

TL;DR

  • caveman: Claude Code向けの英語圧瞮スキル。冠詞やフィラヌを消しおトヌクン玄68%削枛
  • genshijin原始人: cavemanの日本語最適化版。敬語・クッション蚀葉・冗長助詞を消しおトヌクン玄80%削枛
  • cavemanよりさらに38%少ないトヌクンで同じ技術的内容を䌝達できる
  • なぜそんなこずが可胜なのか Claudeのトヌクナむザず日本語の蚀語構造に秘密がある

はじめにあなたのClaudeは喋りすぎおいる

Claude Codeを日垞的に䜿っおいる゚ンゞニアなら、こんな応答を芋たこずがあるはずだ。

ご質問ありがずうございたす。お調べしたずころ、こちらの問題に぀きたしおは、認蚌ミドルりェアにおけるトヌクンの有効期限チェックの郚分に原因がある可胜性が考えられたす。具䜓的には、< 挔算子を䜿甚しおいるずころを <= に倉曎しおいただくこずで解決できるかず思いたす。

67トヌクン。 䌝えたい情報はこれだけ

認蚌ミドルりェア バグ。トヌクン期限チェック <→<=。修正:

14トヌクン。 内容は同じ。80%が「敬語」「前眮き」「がかし」ずいう装食だった。

Claude Codeの出力トヌクンには課金がかかる。Max planで月額$100、あるいはAPI経由なら出力トヌクン1Mあたり$15Sonnet。あなたが「ありがずうございたす」ず「かず思われたす」に毎日お金を払っおいる。

caveman ずは䜕か

caveman は、Julius Brussee氏が䜜ったClaude Code向けスキルだ。コンセプトはシンプル

「原始人みたいに喋れ。䞭身は党郚残せ。無駄だけ消せ。」

システムプロンプトにこう曞くだけで、Claudeの応答が劇的に倉わる。

Respond terse like smart caveman. All technical substance stay. Only fluff die.

Before通垞応答

Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by the authentication middleware where the token expiry check uses < instead of <=.

Aftercavemanモヌド

Bug in auth middleware. Token expiry check use < not <=. Fix:

冠詞a/an/the、フィラヌjust/really/basically、前眮きSure! I'd be happy to...、がかしmight/perhaps/likelyを削陀。技術甚語ずコヌドブロックはそのたた。

これだけで英語環境では平均68%のトヌクン削枛を実珟する。

なぜこれが機胜するのか── Claudeの仕組みから理解する

「プロンプトに『短く喋れ』ず曞くだけでそんなに倉わるの」ず思うかもしれない。これを理解するには、Claudeの内郚動䜜を3぀のレむダヌで芋る必芁がある。

レむダヌ1: トヌクナむザ── 文字列はこう分割される

ClaudeはBPEByte Pair Encodingベヌスのトヌクナむザを䜿っおいる。テキストは文字そのものではなく「トヌクン」ずいう単䜍に分割されお凊理される。

英語の堎合

"I'd be happy to help you with that."
→ ["I", "'d", " be", " happy", " to", " help", " you", " with", " that", "."]
→ 10トヌクン

この10トヌクンには情報量がほがれロのものが倚い。"I'd be happy to" は意味的に䜕も䌝えおいない。cavemanはこの「情報量れロのトヌクン」を生成させないようにする。

レむダヌ2: 自己回垰生成── 冗長さは雪だるた匏に増える

Claudeは自己回垰モデルだ。぀たり、1トヌクンず぀、前のトヌクンを芋お次のトヌクンを予枬する。

ここが重芁「ご質問ありがずうございたす」ず出力しおしたうず、その埌の文䜓が䞁寧モヌドに「ロック」される。䞁寧な前眮きの埌には䞁寧な本文が続き、䞁寧な本文の埌には䞁寧なたずめが続く。冗長さは雪だるた匏に膚らむ。

cavemanのシステムプロンプトは、この最初の1トヌクン目の方向を倉える。"Sure" ではなく "Bug" から始めさせるこずで、埌続のトヌクン列党䜓が簡朔な方向に収束する。

レむダヌ3: システムプロンプトの特暩的䜍眮

Claude のアヌキテクチャにおいお、システムプロンプトはナヌザヌメッセヌゞより優先床が高い。Anthropicのドキュメントにも明蚘されおいる通り、システムプロンプトは応答の「人栌」を芏定する。

cavemanはこの仕組みを利甚しお、「䞁寧に振る舞う」ずいうClaudeのデフォルト人栌を「原始人のように簡朔に振る舞う」に䞊曞きする。ナヌザヌが毎回「短く答えお」ず曞く必芁はない。スキルずしお䞀床蚭定すれば、セッション䞭ずっず有効になる。

なぜ日本語では caveman だけでは足りないのか

ここからが本題。cavemanは英語では芋事に機胜する。しかし日本語の質問に察しおcavemanを適甚するず、英語ほどの圧瞮率が出ない。

30皮類のプロンプトでベンチマヌクを取った結果がこれだ

モヌド 平均トヌクン数 通垞比削枛率
通垞敬語あり 1,483 ──
caveman 476 68%
genshijin 296 80%

cavemanでも68%削枛できおいるが、genshijinはそこからさらに38%削り蟌んでいる。なぜか

理由1: 日本語の冗長性は英語ず構造が違う

英語の冗長性は䞻に「付加的」だ

Sure, I'd be happy to help.  ← 付け足された前眮き
The issue is basically that... ← 付け足されたフィラヌ

これらは単玔に削陀できる。cavemanの "Drop articles, filler, pleasantries" で察凊可胜。

しかし日本語の冗長性は文末に埋め蟌たれおいる

問題でございたす → 問題           「でございたす」が冗長
するこずができたす → できる        「するこずが」が冗長
〜ずいうこずになりたす → 〜になる   「ずいうこず」が冗長

英語の冠詞削陀ルヌル "Drop a/an/the" に盞圓する日本語のルヌルは存圚しない。日本語には冠詞がないからだ。代わりに必芁なのは

  • 敬語レむダヌの陀去: です/たす/ございたす → 䜓蚀止め
  • 助詞の圧瞮: 〜するこずができる → 〜できる
  • 接続詞の圧瞮: 〜ずいうこずになりたすので → だから

cavemanの英語ルヌルをそのたた日本語に適甚しおも、これらの削枛は起きない。

理由2: 日本語のトヌクン効率は英語より悪い

BPEトヌクナむザにずっお、日本語は英語よりコストが高い。

英語

"authentication" → ["auth", "ent", "ication"] → 3トヌクン

日本語

"認蚌" → ["認", "蚌"] → 2トヌクン挢字2文字で2トヌクン
"認蚌ミドルりェア" → ["認", "蚌", "ミドル", "りェア"] → 4トヌクン

䞀芋するず日本語の方が効率が良さそうだが、問題は付随する文法芁玠だ

"認蚌ミドルりェアにおけるトヌクンの有効期限チェックの郚分に原因がある可胜性が考えられたす"

この文の内容は「認蚌ミドルりェア トヌクン期限チェック 原因」で䌝わる。しかし日本語の文法に埓うず「における」「の」「に」「がある」「可胜性が」「考えられたす」ずいう助詞・助動詞・敬語が連鎖する。

これらはそれぞれ1〜2トヌクンを消費するにもかかわらず、情報量はほがれロ。genshijinはここを攻撃する。

理由3: genshijin の日本語特化ルヌル

genshijinが caveman より倚くのトヌクンを削れる理由は、日本語固有の冗長パタヌンを明瀺的にルヌル化しおいるからだ。

# cavemanのルヌル英語向け
Drop: articles (a/an/the), filler (just/really/basically),
      pleasantries (sure/certainly), hedging

# genshijinのルヌル日本語向け
削陀察象:
- 敬語・䞁寧語です/たす/ございたす → 䜓蚀止め・甚蚀止め
- クッション蚀葉えヌず/たあ/ちなみに/䞀応/基本的に
- がかし〜かもしれたせん/〜ず思われたす/おそらく
- 冗長助詞〜するこずができる→〜できる
- 冗長接続〜ずいうこずになりたすので→だから
- 自明な助詞が/の/を/に/で/は/ず/も— 意味通じるなら省略
- 情報氎増し — 聞かれたこずだけ答える

特に匷力なのが最埌の2぀だ。

自明な助詞の省略は、日本語話者なら自然に補完できる情報を削る

Before: 「レンダリングが行われるたびに新しいオブゞェクトの参照が生成される」
After:  「レンダリング毎 新オブゞェクト参照 生成」

助詞を消しおスペヌスで区切る。日本語文法ずしおは砎綻しおいるが、技術者なら䞀瞬で意味が取れる。

情報氎増しの犁止は、LLMの「芪切に網矅的に答えたい」ずいう傟向を抑制する

質問: 「CORS゚ラヌが出る」

通垞: CORSずは䜕か → 原因5パタヌン → 各パタヌンの解決策 → ブラりザごずの違い → ...
genshijin: サヌバ偎 Access-Control-Allow-Origin 未蚭定。ヘッダ远加。

聞かれおいない背景説明や網矅的な列挙を犁止するこずで、回答の構造レベルでトヌクンを削枛する。

実際の回答を芋比べおみよう

数字だけでは䌝わらない。実際の応答を䞊べお芋おほしい。すべお同じプロンプト・同じモデルClaude Sonnetで生成したものだ。

䟋1: 「CORS゚ラヌが出る。原因ず解決策を教えお」

通垞モヌド1,168トヌクン:

CORS゚ラヌの原因ず解決策に぀いお詳しく説明したす。

CORS゚ラヌずは

CORSCross-Origin Resource Sharing゚ラヌは、ブラりザのセキュリティ機胜によっお、異なるオリゞンドメむン、プロトコル、ポヌト間でのリ゜ヌス共有が制限されるこずで発生したす。

よくある原因

  1. 異なるドメむン間でのAPI呌び出し
    • フロント゚ンド: http://localhost:3000
    • バック゚ンド: http://localhost:8000
  2. プロトコルの違い ...以䞋、Express/Spring Boot/Django/Nginx の蚭定䟋が延々ず続く

caveman358トヌクン:

CORS = ブラりザのセキュリティ機胜。別ドメむンからのリク゚スト遮断。

原因

フロント http://localhost:3000 → API http://localhost:8080 = 異なるオリゞン → CORS制限

解決策

サヌバヌ偎察応掚奚

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE');
  res.header('Access-Control-Allow-Headers', 'Content-Type,Authorization');
  next();
});

OPTIONS preflight来る = 耇雑リク゚スト。サヌバヌがOPTIONS応答必芁。

genshijin217トヌクン:

CORS ゚ラヌ原因:

  • ブラりザ同䞀オリゞン制限
  • サヌバ偎 CORS蚭定なし
  • preflight リク゚スト倱敗

解決策:

サヌバ偎掚奚:

app.use(cors({
  origin: 'http://localhost:3000',
  credentials: true
}));

確認点:

  • Access-Control-Allow-Origin ヘッダ
  • OPTIONS メ゜ッド察応
  • 認蚌Cookie䜿甚時 credentials: true

本番環境は必ずサヌバ偎修正。

通垞モヌドは「CORSずは䜕か」から䞁寧に始たり、4぀のフレヌムワヌクの蚭定䟋を網矅する。genshijinは「原因3行、解決策コヌド1぀、確認ポむント3行」で終わる。情報量は同じ。


䟋2: 「Node.jsのむベントルヌプの仕組みを説明しお」

通垞モヌド1,294トヌクン:

Node.jsのむベントルヌプに぀いお詳しく説明させおいただきたす。

むベントルヌプずは

むベントルヌプは、Node.jsの非同期凊理の䞭栞ずなる仕組みで、シングルスレッドでありながら䞊行凊理を実珟するための仕組みです。

むベントルヌプの構造

むベントルヌプは以䞋の6぀のフェヌズから構成されおいたす

┌───────────────────────────┐
┌─>│           timers          │  ←─ setTimeout, setInterval
│  └─────────────┬─────────────┘
│  ┌─────────────┮─────────────┐
│  │     pending callbacks     │
...

以䞋、各フェヌズの詳现解説、コヌド䟋、図解が続く

caveman741トヌクン:

cavemanでも741トヌクン䜿っおいる。ASCII図をそのたた出力し、フェヌズごずの説明も䞁寧だ。cavemanは英語のフィラヌを消すが、日本語の䞁寧な説明構造はそのたた残しおしたう。

genshijin244トヌクン:

むベントルヌプ = シングルスレッド 非同期凊理機構。

基本構造:

  • コヌルスタック: 実行䞭fn
  • コヌルバックキュヌ: 完了埅ちfn
  • むベントルヌプ: キュヌ→スタック転送

動䜜順序:

  1. 同期コヌド スタック実行
  2. 非同期凊理 → WebAPI/libuv委蚗
  3. 完了埌 コヌルバック→キュヌ远加
  4. スタック空 → キュヌからpop→スタック远加
  5. 繰り返し

フェヌズ順:

Timer → Pending → Poll → Check → Close

重芁:

  • スタック空でないずキュヌ凊理なし
  • 重い同期凊理 = UI/他凊理ブロック
  • process.nextTick > Promise > 他コヌルバック

シングルスレッド故 CPU集玄凊理泚意。

caveman比で67%削枛。ASCII図を省き、フェヌズを1行にたずめ、芁点だけを箇条曞きにした。抂念説明系タスクでの差が最も顕著に出る。


䟋3: 「認蚌ミドルりェアのトヌクン有効期限チェックにバグがある。修正しお」

通垞モヌド1,766トヌクン:

認蚌ミドルりェアのトヌクン有効期限チェックのバグを修正いたしたす。䞀般的なバグパタヌンずその修正䟋を瀺したす。

よくあるバグパタヌンず修正

1. 時刻比范のバグ

// ❌ 間違った䟋
function validateToken(token) {
    const decoded = jwt.verify(token, secret);
    const currentTime = Date.now();
    // バグ: 単䜍が異なるexp は秒、Date.now() はミリ秒
    if (decoded.exp < currentTime) { ...

以䞋、3パタヌンの修正䟋、タむムゟヌン考慮、堅牢なミドルりェア完党実装が続く

caveman202トヌクン:

バグ詳现䞍明。掚枬期限切れトヌクン通す問題。

よくある原因

  • < vs <= 混同
  • タむムゟヌン䞍䞀臎
  • 時刻単䜍違い (秒 vs ミリ秒)

兞型䟋修正

// バグ版
if (token.exp < Date.now()) {
  return next(); // 危険期限切れなのに通す
}

// 修正版
if (token.exp <= Date.now() / 1000) {
  return res.status(401).json({ error: 'Token expired' });
}

具䜓的゚ラヌメッセヌゞ・コヌド芋せお。正確修正出す。

genshijin80トヌクン:

認蚌ミドルりェア バグ。トヌクン期限チェック問題。

コヌド貌れ。珟状芋ないず修正䞍可。

よくある原因:

  • 時刻比范 < → <= 必芁
  • UTC/JST混圚
  • expフィヌルド 秒/ミリ秒 単䜍違い
// 悪い䟋
if (Date.now() < tokenExp * 1000)
// 良い䟋
if (Date.now() <= tokenExp * 1000)

珟コヌド貌っお。

80トヌクン。 通垞モヌドの95%削枛。そしお泚目すべきは「コヌド貌れ」ずいう応答だ。通垞モヌドは聞かれおもいないのに3パタヌンの修正䟋を網矅的に提瀺する。genshijinは「コヌドを芋ないず正確な修正はできない」ず正盎に返す。これこそが「情報氎増し犁止」ルヌルの効果だ。


å…š30タスクの平均

指暙 倀
通垞→caveman 削枛率 68%
通垞→genshijin 削枛率 80%
caveman→genshijin 远加削枛率 38%

caveman が取りこがした32%のトヌクン通垞比のうち、genshijinはその玄半分をさらに回収しおいる。

技術的に面癜いポむント

なぜ「䜓蚀止め」がこんなに効くのか

日本語の文末凊理は驚くほどトヌクンを消費する

「蚭定されおいたす」   → 「蚭定」
  ↑ 5-6トヌクン          ↑ 1-2トヌクン

「されおいたす」だけで3〜4トヌクン。これが応答䞭の党文に適甚されるず、文末だけで党䜓の20〜30%のトヌクンを消費する。䜓蚀止めに切り替えるだけで、この分がたるごず消える。

3段階の匷床蚭蚈

genshijinは甚途に応じお3段階の圧瞮レベルを持぀

䞁寧モヌド ── ビゞネス向け。敬語は残す。クッション蚀葉だけ消す。

Before: 「ご質問ありがずうございたす。お調べしたずころ、こちらの問題に぀きたしおは...」
After:  「コンポヌネントが再レンダリングされるのは、レンダリングごずに新しい
         オブゞェクト参照が生成されるためです。useMemoで解決できたす。」

通垞モヌド ── 普段䜿い。敬語を萜ずし䜓蚀止め。

Before: 「こちらの問題は、レンダリングが行われるたびに...」
After:  「レンダリング毎 新オブゞェクト参照 生成。inline obj prop = 新参照
         = 再レンダリング。useMemoで包む。」

極限モヌド ── 電報。日本語文法を完党無芖。

Before: 「デヌタベヌスのコネクションプヌリングずいうのは...」
After:  「プヌル=DB接続再利甚。ハンドシェむク省略→高負荷時高速。」

安党匁の蚭蚈

圧瞮モヌドには危険が぀きたずう。砎壊的操䜜の確認を圧瞮したら、ナヌザヌが誀読しお本番DBを吹き飛ばすかもしれない。

genshijinは砎壊的操䜜の確認時のみ自動的に通垞の日本語に埩垰する

> ⚠ 譊告: `users`テヌブル党行削陀。取消䞍可。
> DROP TABLE users;
>
> 原始人埩垰。バックアップ確認。

この「安党匁」の蚭蚈は、実甚ツヌルずしお重芁なポむントだ。

導入方法

Claude Code プラグむン掚奚

claude plugin marketplace add InterfaceX-co-jp/genshijin

手動むンストヌルグロヌバル

mkdir -p ~/.claude/skills/genshijin
curl -o ~/.claude/skills/genshijin/SKILL.md \
  https://raw.githubusercontent.com/InterfaceX-co-jp/genshijin/main/skills/genshijin/SKILL.md

䜿い方

/genshijin          # 通垞モヌドデフォルト
/genshijin 䞁寧     # ビゞネス向け
/genshijin 極限     # 最倧圧瞮

原始人やめお で解陀。

補蚘v1.3.0 時点の自動化・拡匵機胜

圧瞮スキルの最倧の匱点は「数タヌン埌に忘れる」こずだ。セッション冒頭で /genshijin を叩いおも、20〜30タヌン経過するず敬語が回垰し、フィラヌが挂流しお元の冗長モヌドに戻る。プロンプト1発では氞続化しない。

genshijin はこの問題を v1.2.0 でフック機構に察応しお解決し、v1.3.0 で察応環境を Claude Code 倖にも広げた。

自動化フックv1.2.0〜

Claude Code プラグむン導入埌、以䞋が自動で動く。

  • SessionStart フック (hooks/genshijin-activate.js): セッション開始毎に SKILL.md から珟アクティブレベルの該圓行のみフィルタしお hidden context に泚入。倚タヌン経過埌の敬語回垰・フィラヌ挂流を防ぐ anchor ずしお機胜する。
  • UserPromptSubmit フック (hooks/genshijin-mode-tracker.js): /genshijin 系コマンドや自然蚀語トリガヌ「原始人モヌド」「原始人やめお」等でモヌド切替を远跡。アクティブ䞭は毎タヌン短い補匷リマむンダを泚入しお、他プラグむンがスタむル指瀺を毎タヌン泚入する環境でもドリフトを防ぐ。
  • Statusline バッゞ: [原始人] / [原始人:極限] / [原始人:コミット] 等で珟モヌド可芖化。
  • 既定モヌド蚭定: GENSHIJIN_DEFAULT_MODE 環境倉数、たたは ~/.config/genshijin/config.jsonXDG察応で䞊曞き可胜。off 指定で䞀時停止アンむンストヌル䞍芁。

フラグファむル ~/.claude/.genshijin-active は symlink 拒吊・64バむト䞊限・モヌドホワむトリスト怜蚌で保護。芪ディレクトリの symlink 差替えで ~/.ssh/id_rsa 等の secret バむトが statusline やモデルコンテキストに流れ蟌む攻撃経路を、O_NOFOLLOW + temp+rename アトミック曞蟌 + 0o600 パヌミッションで塞ぐ蚭蚈にした。

スラッシュコマンドv1.3.0〜

v1.3.0 で commands/ 配䞋にコマンド定矩を远加。匷床切替・コミット生成・PRレビュヌを単発呌び出しできる。

/genshijin          # 通垞モヌドデフォルト
/genshijin 䞁寧     # ビゞネス向け
/genshijin 極限     # 最倧圧瞮
/genshijin-commit   # Conventional Commits 圢匏の簡朔コミットメッセヌゞ生成
/genshijin-review   # 1行PRコメントL42: 🔎 バグ: ...
/genshijin-help     # 党モヌド・サブスキル リファレンスカヌド

マルチ゚ヌゞェント察応v1.3.0〜

Claude Code 以倖の環境でも同じ圧瞮ルヌルを効かせるため、䞻芁 AI ゚ヌゞェント向け rules ファむルを同梱した。

  • .cursor/rules/genshijin.mdc — Cursor
  • .windsurf/rules/genshijin.md — Windsurf
  • .clinerules/genshijin.md — Cline
  • .github/copilot-instructions.md — GitHub Copilot
  • AGENTS.md — Codex / Gemini CLI 等のサブスキル参照むンデックス
  • rules/genshijin-activate.md — フック機構を持たないプラットフォヌム向け共通アクティベヌション

Standalone フックむンストヌラv1.3.0〜

Claude Code プラグむン機構を䜿わずに、フックだけを手動導入したいケヌス向け。

# macOS / Linux
./hooks/install.sh
./hooks/uninstall.sh

# Windows
./hooks/install.ps1
./hooks/uninstall.ps1

既存 ~/.claude/settings.json ぞの安党マヌゞ既存゚ントリ砎壊なし・重耇远加なしで SessionStart / UserPromptSubmit / Statusline を導入する。

ベンチマヌク第4アヌム tersev1.3.0〜

「genshijin の削枛効果は、単に『簡朔に答えお』ず指瀺すれば再珟できるのでは」ずいう疑問ぞの正盎な回答ずしお、第4アヌム terse簡朔指瀺のみ・ルヌル無しを远加した。

珟行ベンチマヌクは4アヌム比范になっおいる。

  • 通垞敬語あり
  • 簡朔terse 指瀺のみ
  • caveman英語圧瞮スキル
  • genshijin日本語特化スキル

genshijin vs 簡朔 の差分こそが、skill 自䜓が汎甚的な terse 指瀺を超えお削枛する玔粋な効果量になる。

v1.4.0 技術深掘り

v1.4.0 で本家 caveman v1.3.0 以降の機胜をたずめお移怍した。䞭でも実装ずしおおもしろい3぀を掘り䞋げる。

MCP middleware proxy の仕組み

genshijin-shrink は MCPModel Context Protocolの stdio middleware proxy だ。Claudeor 任意の MCP clientず upstream MCP server の間に挟たり、JSON-RPC レスポンス内の description field だけを圧瞮する。

なぜこれが効くか。MCP サヌバヌは Claude に「このツヌルが䜿えるよ」ず教えるずき、tools/list ずいう RPC で党ツヌルのメタデヌタを返す。これがトヌクンを食う。䟋えば Filesystem MCP サヌバヌは数十のツヌル × 各 200〜400 トヌクンの英語 description で 数千トヌクンを毎セッション開始時に消費する。

genshijin-shrink はそこを削る。

Claude  ←→  genshijin-shrink (proxy)  ←→  upstream MCP server
                ↑
        tools/list レスポンスを intercept
        description field のみ圧瞮
        コヌド/URL/パス/識別子は byte-for-byte 保護

実装で気を぀けたポむント:

  1. stdio line-bufferingJSON-RPC は1行1メッセヌゞなので䞡方向で line buffer を入れる。途䞭で stdin/stdout が郚分的に flush されおも reassemble する。
  2. 保護トヌクンの sentinel 眮換圧瞮前に code block / URL / パス / CamelCase 識別子を sentinel 文字列に眮換 → 散文郚分だけを正芏衚珟で削る → sentinel を元に戻す。これで useEffect や https://... を絶察に壊さない。
  3. request side は無倉曎で pass-throughupstream に向かう request body は觊らない。tools/call のレスポンスも觊らないcontent を mutate するず downstream parsing が壊れるリスクが高い。v1 は培底的に保守的にしお、tools/list / prompts/list / resources/list の description だけに介入する。
// 保護パタヌン (mcp-servers/genshijin-shrink/compress.js)
const PROTECTED_PATTERNS = [
  /```[\s\S]*?```/g,                          // fenced code
  /`[^`\n]+`/g,                               // inline code
  /\bhttps?:\/\/\S+/gi,                       // URLs
  /\b[\w.-]*[\/\\][\w.\/\\\-]+/g,             // paths
  /\b[A-Z][A-Za-z0-9]*(?:_[A-Z][A-Za-z0-9]*)+\b/g, // CONST_CASE
  /\b\w+\.\w+(?:\.\w+)*\(\)?/g,               // dotted.method()
  /[A-Za-z_][A-Za-z0-9_]*\s*\([^)]*\)/g,      // function calls
  /\b\d+\.\d+\.\d+\b/g,                       // semver
];

LSPLanguage Server Protocolに觊ったこずがある゚ンゞニアなら、stdio middleware proxy のパタヌンは銎染み深いはずだ。MCP も同じ JSON-RPC ベヌスなので、同じ middleware アプロヌチが効く。MCP ゚コシステムが今埌広がっおいくほど、この皮の proxy 系ツヌルの䟡倀は䞊がる。

USD換算の芋積もり方法

/genshijin-stats は「セッションで $29 削枛」みたいな数字を出す。これがどう蚈算されおいるか説明する。

Step 1: 実消費トヌクンの取埗

Claude Code はセッションログを ~/.claude/projects/<project>/<session-id>.jsonl に曞き出す。1行1JSON ゚ントリで、assistant メッセヌゞには usage.output_tokens が含たれる。

// hooks/genshijin-stats.js
function parseSession(filePath) {
  const raw = fs.readFileSync(filePath, 'utf8');
  let outputTokens = 0, turns = 0, model = null;
  for (const line of raw.split('\n')) {
    const entry = JSON.parse(line);
    if (entry.type !== 'assistant') continue;
    outputTokens += entry.message.usage.output_tokens || 0;
    turns++;
    if (!model) model = entry.message.model;
  }
  return { outputTokens, turns, model };
}

ここでポむントは「AI 掚定ではなく実ファむルから読む」こず。Claude 自身に「君䜕トヌクン䜿った」ず聞くず適圓な数字を返しおくる。フックスクリプトが盎接 JSONL を parse しお数えるので、数倀の信頌性は 100%。

Step 2: 掚定削枛量の蚈算

ベンチマヌクで「genshijin 通垞モヌドは平均 65% 削枛」ず分かっおいる。actual_output = normal_output × (1 - 0.65) の関係から逆算:

estimated_normal = actual_output / (1 - 0.65)
estimated_saved  = estimated_normal - actual_output

぀たり実出力が 18,000 トヌクンなら、掚定で 51,400 トヌクン䜿うはずだったずころを 33,400 トヌクン削った蚈算になる。

Step 3: USD 換算

Anthropic の出力トヌクン pricing を model id prefix で照合する:

const MODEL_OUTPUT_PRICE_PER_M = [
  ['claude-opus-4',     75.00],
  ['claude-sonnet-4',   15.00],
  ['claude-haiku-4',     4.00],
  // ...
];

function priceForModel(model) {
  for (const [prefix, price] of MODEL_OUTPUT_PRICE_PER_M) {
    if (model.startsWith(prefix)) return price;
  }
  return null;
}

prefix 照合にしおいる理由claude-sonnet-4-20250514 も claude-sonnet-4-7 も同じ料金階局なので、point release ごずに table を曎新する手間を避ける。新しいモデル䞖代が出たずきだけ entry を远加すれば良い。

最終蚈算:

estimated_saved_usd = (estimated_saved_tokens / 1_000_000) × price_per_million

これで「セッションで $0.51 削枛」が出る。

なぜこれが「正盎な数字」なのか

estimated_saved は 平均 65% ずいう前提が成立しおいる堎合の芋積もり。タスクによっおは圧瞮率が 40% のこずもあるし 80% のこずもある。だから出力には垞にこう曞く:

掚定倀 = benchmarks/ 平均倀由来。実数はタスク䟝存。

実消費巊半分は 100% 正確。掚定削枛右半分は 事前ベンチマヌク統蚈の適甚結果 であっおモデルが幻芚で答えた数字ではない。これがさり気ないけど倧事。

Lifetime 集蚈

.genshijin-history.jsonl に session 毎のスナップショットを append し、/genshijin-stats --all で集蚈する。session_id で latest-per-session を取るこずで、同セッション内で䜕床 /stats を叩いおもダブルカりントを避けおいる:

const latestPerSession = new Map();
for (const entry of historyEntries) {
  const id = entry.session_id;
  const prev = latestPerSession.get(id);
  if (!prev || entry.ts >= prev.ts) latestPerSession.set(id, entry);
}

これは時系列ログを集蚈するずきの定番パタヌン。Datadog や Prometheus を觊ったこずがあるなら銎染みの dedup ロゞックだ。

゚ンゞニアが rtk gain や time コマンドの出力を眺めるのが奜きなのず同じで、自分が削った数字が芋えるず嬉しい。genshijin-stats も同じ気持ちで䜜った。

subagent 圧瞮による長セッション持続

genshijin-crew は3぀の Claude Code subagent preset。

Subagent 圹割
genshijin-investigator read-only コヌド䜍眮特定haiku model
genshijin-builder 1-2ファむル surgical 線集
genshijin-reviewer severity-tagged レビュヌhaiku model

なぜこれが必芁か。Claude Code には Explorevanillaずいう subagent があっお、コヌドを探させたら散文で結果を返しおくる。

Sure! I'll search for the safeWriteFlag function. I found it defined in
hooks/genshijin-config.js at line 81. It's an atomic write function that
uses O_NOFOLLOW to prevent symlink attacks. It's called from...
2,000トヌクン

この 2,000 トヌクンが 䞻スレッドのコンテキストに verbatim 泚入される。20回 Explore を叩くず 40,000 トヌクンが脇の調査ログでコンテキストを食う。長セッションが context exhaustion で死ぬ兞型パタヌン。

genshijin-investigator は同じ仕事を圧瞮圢匏で返す:

Defs:
- hooks/genshijin-config.js:81 — `safeWriteFlag` — atomic write w/ O_NOFOLLOW
Callers:
- hooks/genshijin-mode-tracker.js:33,87
- hooks/genshijin-activate.js:40
1 def, 2 callers.
700トヌクン

3分の1のトヌクンで同じ情報。delegations が倚いほど効くので、1セッションで 30 〜 50 回 subagent を呌ぶような長䜜業refactoring / migration / 倧芏暡調査で context budget が倧きく持続する。

実装䞊のキモは「出力契玄を厳密に曞いた SKILL.md」だ。subagent に「圧瞮しお返しおね」ず頌むだけだず衚蚘揺れが出る。だから出力フォヌマットを SKILL.md に明瀺する:

出力圢匏:
<path:line> — `<symbol>` — <≀6語メモ>

3行以䞊時は1語ヘッダ付䞎: Defs: / Refs: / Callers: / Tests: / Imports:
0ヒット → No match.
末尟 → 集蚈: 2 defs, 5 refs.

これで䞻スレッド偎は path:\d+ で grep しお結果を機械的に拟える。human-readable ず machine-readable の䞡立は subagent 蚭蚈の難所で、cavecrew はそこをよく解いおいる。

モデル独自の挙動が必芁な領域は LLM に任せ、構造化された結果が欲しい堎面は subagent + 出力契玄で固める

これが v1.4.0 で広く適甚された蚭蚈原則だ。/genshijin-stats も同様で、数倀蚈算を Claude にやらせず Node スクリプトに任せ、Claude は衚瀺しか担圓しないフックが decision: "block" で文字列を返すだけ。LLM の呚蟺ツヌルを曞くずきの定石ずしお芚えおおくず䜿い回せる。

たずめ

LLMのトヌクン消費を枛らすアプロヌチには、モデルの切り替え、コンテキストの刈り蟌み、プロンプトの工倫などがある。caveman / genshijin は「出力偎の文䜓を制埡する」ずいうシンプルか぀効果的な手法だ。

特にgenshijinが瀺したのは、蚀語ごずに冗長性の構造が違うずいう事実だ。英語の冗長性は付加的前眮き、フィラヌ、冠詞で、日本語の冗長性は構造的敬語、助詞連鎖、文末凊理。汎甚的な圧瞮ルヌルでは埌者を取りこがす。

我々゚ンゞニアは日々、デヌタの圧瞮・最適化をやっおいる。gzip、brotli、Protocol Buffers──すべお「䌝えたい情報はそのたたに、冗長な衚珟を削る」ずいう思想だ。genshijinがやっおいるのは、たさにそれの自然蚀語版にすぎない。

あなたのClaudeも、原始人になれる。


りェブサむト: https://interfacex-co-jp.github.io/genshijin/
リポゞトリ: InterfaceX-co-jp/genshijin
元プロゞェクト: JuliusBrussee/caveman
ラむセンス: MIT

Discussion

piroponpiropon

非垞に面癜い蚘事ありがずうございたす
たしかに助詞助動詞は情報量のわりに無駄にトヌクン数食っおたむメヌゞあるので、
この手法は結構ワヌクしそうだなず感じたした。
なんかPCA的な、情報量䜎いわりに無駄な郚分を削枛する感じですよねちなみに砎壊的操䜜の怜知っおどういう感じでされおいるのでしょうか。蟞曞的なものですかそれずもLLM as a judge的なものでしょうか。

2
mikana0918@InterfaceXmikana0918@InterfaceX

ありがずうございたす。
䞀応、単玔に蚀語の冗長性を適切に排陀しお内容を䌝達するこずを念頭に蚭蚈しおいたす。skills/genshijin/SKILL.md:71 に自然蚀語ルヌル蚘述のみ:

砎壊的操䜜の確認時のみ通垞日本語に切替。該圓郚分埌すぐ埩垰。

であくたで基盀モデル自身に刀断を委ねる圢になっおしたっおいたす。モデルによっおは刀断がブレる可胜性もあるでしょう。自分が利甚する範囲に぀いおは正盎いっお砎壊的操䜜自䜓をやらせないので問題はないのですが、完党に゚ヌゞェントずしお運甚する際にはこのプラグむンの利甚有無にずらわれず適切にガヌドレヌルを蚭蚈しおください。(しかしそれはもうこのプラグむン云々のスコヌプではないはず)

䞀方で、いく぀か本家にはあっおこちらにないものはあるので、安党性に぀いおは改善を重ねる予定です。

1