mcpField
T
token-audit

token-audit

github.com/vtmocanuエージェントワークフロー3179 回インストール2 日前に更新
リポジトリ

token-audit について

Claude Code のトークン消費を監査するスキルです。セッションログ、設定、付属スクリプトから値を測定し、根拠に基づくレポートを作成します。監査中にファイルや設定を変更しないことを明示しています。

主な機能

  1. 01セッションログからトークン使用量を測定
  2. 02メモリ、ツール、モデル、フックを監査
  3. 03エージェントと定期実行を確認
  4. 04測定不能な値は推測せず不明と報告
  5. 05根拠に基づく読み取り専用監査

活用シーン

  1. 01トークン使用量の発生源の特定
  2. 02MCP ツールとモデル設定の確認
  3. 03プロンプトキャッシュの動作評価

MCP 対応

監査対象には設定済み MCP サーバー、ツール数、遅延読み込み状態、プロキシの確認が含まれます。このスキル自体は MCP ツールを提供しません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/vtmocanu/skills --skill token-audit

インストール後、Claude Code で/token-auditを入力して読み込まれたか確認します。

同梱ファイルscripts/cache-report.shscripts/memory-scan.py

詳細

トークン消費の監査

ドキュメントの場所

信頼できる情報源:~/stuff/gitrepos/gh/vtmocanu/skills/skills/token-audit/SKILL.md(公開リポジトリ:github.com/vtmocanu/skills)。インストール済みのコピー ~/.claude/skills/token-audit/ は npx skills によって生成されます。ソースを編集してから npx skills update を実行してください。インストール済みのコピーは絶対に編集しないでください。

このスキルにはスクリプトが同梱されています。スキル読み込み時に出力される Base directory for this skill: の行にある、スキル自身のベースディレクトリから実行してください。例:<skill dir>/scripts/cache-report.sh。通常のグローバルインストールでは、このパスは ~/.claude/skills/token-audit/scripts/ です。

目的と厳守事項

この環境でトークンを消費しているものを診断します。報告のみ行ってください。ファイルや設定は変更しないでください。編集、設定の書き込み、修正は、明らかなものでも一切行わないでください。

監査契約に基づく、必ず守るべきルール:

  • 推測ではなく、測定してください。 数値ごとに、コマンドを実行するかファイルを読み取ってください。セッションログと /context から得られる正確なトークン数が正式な値です。API に記録された数値だからです。バイト数は正確です。バイト数をトークン数に換算する場合は、近似値であることを明記し、/context の値を優先してください。
  • 推測せず、UNKNOWN と記載してください。 値を測定できない場合(権限がない、ツールが利用できない、データがない)は、その理由とともにセルに UNKNOWN と記載してください。形容詞や、もっともらしい数値で代用してはいけません。
  • 根拠は数値かファイルパスにしてください。形容詞は使わないでください。 「17253 bytes」または ~/.claude/settings.json と記載し、「大きい」や「複数」とは書かないでください。

自分では実行できないスラッシュコマンド

/context と /usage は UI コマンドです。ツール呼び出しでは実行できません。これらのコマンドには、信頼できる最新の数値(カテゴリごとの実際のコンテキストトークン数、プラン/使用量の上限)が表示されます。ユーザーに /context と /usage を実行して出力を貼り付けるよう依頼してから、続行してください。 監査全体を保留してはいけません。まずシェルで測定できる項目をすべて実行し、出力が届いたら貼り付けられた数値を反映してください。届かなかった場合、それらに依存する項目には UNKNOWN (awaiting /context) と記載してください。

7 つの測定項目

独立した項目は並行して実行してください。それぞれの結果を、最終表の根拠として使用します。

1. MEMORY — 起動時に読み込まれる CLAUDE.md、インポート、ルール

監査対象のディレクトリから、同梱のスキャナーを実行してください。

<skill dir>/scripts/memory-scan.py

このスキャナーは、Claude Code が起動時に読み込むすべての項目を、CC の実際のルールに従って列挙します。対象は、存在する場合の管理対象/エンタープライズの CLAUDE.md、ユーザーメモリ(~/.claude/CLAUDE.md)、プロジェクトの階層(親ディレクトリをたどった CLAUDE.md と CLAUDE.local.md、および cwd の .claude/CLAUDE.md)、さらに .claude/rules/ と ~/.claude/rules/ 内の無条件の *.md です。@import 行(裸の @README、@dir/file.md、~/…、絶対パス)を再帰的にたどります。CC の実際の上限である 4 ホップで打ち切り、コードスパンとフェンス付きブロックをスキップするため、例として記載された @path は数えられません。paths: でスコープが指定されたルールはオンデマンドで読み込まれるため、一覧には表示されますが、起動時の合計には含まれません。ファイルごとの正確なバイト数/行数と、トークン数の概算(バイト数÷4)が出力されます。5k トークンを超えるファイルが1つでもある場合、および起動時の合計が10k トークンを超える場合は、必ず指摘してください。 貼り付けられた /context の「Memory files」の数値と概算を照合し、食い違いがあれば /context を優先してください。

2. ツール — MCP サーバー、ツール数、遅延読み込み、プロキシの有無
  • 設定済みの MCP サーバー:各設定ソースを解析します。サーバーはそのいずれかで定義できます。
    jq -r '.mcpServers | keys[]?' ~/.claude.json 2>/dev/null
    jq -r '.mcpServers | keys[]?' ./.mcp.json ~/.claude/settings.json .claude/settings.json .claude/settings.local.json 2>/dev/null
    
    セッションに接続されたサーバー(claude.ai コネクター:Gmail、Slack、IBKR など)は、これらのファイルには含まれていません。独自のツール一覧に表示される MCP ツール名(mcp__<server>__<tool>)から、<server> ごとにグループ化して数えてください。サーバーごとのツール数を報告してください。
  • ツールの遅延読み込みが有効か無効かを、明確に示してください。 MCP/その他のツールが遅延読み込みで提示され、ToolSearch を介して呼び出される場合(システムリマインダーに遅延読み込みされるツール名が列挙され、スキーマが事前に読み込まれていない場合)、遅延読み込みは有効です。すべてのツールスキーマが最初から読み込まれている場合は無効です。このセッションで利用できるツールを確認し、ACTIVE または NOT ACTIVE と記載してください。
  • プロキシ/ゲートウェイが見つかった場合は、明確に警告してください。 プロキシ経由のルーティングでは、遅延読み込みが気付かれないまま無効になり、警告も表示されません。環境変数と設定を確認してください。
    env | grep -iE 'ANTHROPIC_BASE_URL|ANTHROPIC_AUTH_TOKEN|ANTHROPIC_API_KEY|ANTHROPIC_BEDROCK|ANTHROPIC_VERTEX|_PROXY|GATEWAY'
    jq -r '.env // {} | to_entries[] | "\(.key)=\(.value)"' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json 2>/dev/null
    
    ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKEN(または Bedrock/Vertex/ゲートウェイ関連の環境変数)があれば、プロキシが使用されています → RED。ステップ 2 の結果にかかわらず、遅延読み込みが無効になっている可能性が高いためです。
3. モデル — 現在のモデル、推論強度、セッション中の切り替え
  • モデルと推論強度を報告し、それぞれの設定場所も示してください。優先順位の高い順に、ソースは次のとおりです:ANTHROPIC_MODEL/ANTHROPIC_SMALL_FAST_MODEL 環境変数、~/.claude/settings.json の model、プロジェクトの .claude/settings.json/.local.json の model、および /model による実行時の選択(現在のモデルは環境ブロックにあります)。推論強度についても、設定/環境変数から確認してください。
    jq -r '{model, env}' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json 2>/dev/null
    env | grep -iE 'ANTHROPIC_MODEL|ANTHROPIC_SMALL_FAST_MODEL|MAX_THINKING|REASONING'
    
  • セッション中にモデルを自動で切り替えるモードがあれば、明記してください。 たとえば、opusplan のようなプラン用モデルエイリアス(計画には Opus、実行には小型モデルを使用)や、モデルを切り替えるハーネス設定です。切り替えのたびに、プロンプトキャッシュ全体が無効化され、再構築されます。モデルが固定 ID で、自動切り替えエイリアスが設定されていない場合は、その旨を記載してください。
4. フック — 出力を減らす PreToolUse フック

PreToolUse フックを列挙し、ノイズの多いコマンドを書き換えて出力を減らすものがあるかを判定してください(--quiet/-q、--reporter=dot、2>/dev/null、| tail、pytest の -q などを追加するもの)。

jq -r '.hooks.PreToolUse[]? | .matcher as $m | .hooks[]? | "\($m)\t\(.command // .type)"' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json 2>/dev/null

フックがない場合は、必ずその旨を明記してください。 フィルタリングされていないテスト/ビルド出力はそのままコンテキストに入り、セッションの残りの間、再送されます。何もないこと自体が確認結果です。

5. サブエージェント — 明示的なモデル指定か継承か

エージェントの定義をすべて列挙し、エージェントごとに、フロントマターで model: が指定されているか、メインセッションのモデルを継承するかを報告してください。

for f in ~/.claude/agents/*.md .claude/agents/*.md; do
  [ -f "$f" ] || continue
  m=$(sed -n '/^---$/,/^---$/{s/^model:[[:space:]]*//p;}' "$f" | head -1)
  printf '%s\t%s\n' "$f" "${m:-INHERITS}"
done

model: のないエージェントはセッションのモデルを継承するため、Opus セッションではそのサブエージェントも Opus で実行されます。明示指定と継承の内訳を報告してください。高価なセッションモデルを継承するエージェントばかりの場合は、そのコストを明記してください。

6. スケジュール済み作業 — 実行間隔と測定済みキャッシュ TTL の比較

繰り返し実行されるジョブをすべて列挙し、それぞれの実行間隔を測定済みのプロンプトキャッシュ TTL と比較してください(ステップ 7 で 5m または 1h と報告されます。推測しないでください)。TTL より長い実行間隔はすべて警告してください。 その間隔では、実行のたびにキャッシュが使われません。

  • Claude Code のスケジュール済みエージェント/ルーティン(cron スケジュール):CronList ツールがあれば ToolSearch("select:CronList") で読み込み、なければ schedule/loop スキルが管理するスケジュール設定を確認します。
  • システムスケジューラー:
    crontab -l 2>/dev/null
    ls ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons 2>/dev/null   # macOS launchd
    
  • このセッションで実行中の /loop ジョブと、その実行間隔。

各項目について、実行間隔、TTL、および実行間隔が TTL より長い場合は MISS を報告してください。

7. CACHE — 最新のセッションログにおけるトークンの内訳

同梱のレポーターを実行します(デフォルトでは、現在のプロジェクトの最新ログが対象です)。

<skill dir>/scripts/cache-report.sh          # or: cache-report.sh /path/to/session.jsonl
<skill dir>/scripts/cache-report.sh --list    # list this project's logs, newest first

すべてのアシスタントのターンにわたって cache_read_input_tokens、cache_creation_input_tokens、input_tokens、output_tokens を合計し、それぞれが総計に占める割合を報告します。また、最初と最後のターンにおけるコンテキストサイズ(入力側)と、実際に使用されているキャッシュ TTL も示します。これらは API 自体が記録した数値であり、推定値ではなく正確な値です。TTL をステップ 6 に反映してください。トークン合計には、セッション全体の使用量としてサブエージェント(サイドチェーン)のターンが含まれます。最初と最後のコンテキストサイズには含まれません(出力の subagent_turns と context_basis にその旨が示されます)。そのため、コンテキストの数値はサブエージェントではなくメインスレッドを反映しています。

内訳を確認してください。健全なセッションでは cache_read が大部分を占めます(読み取りの割合が高ければ、キャッシュが機能しています)。cache_read に対して cache_creation の割合が大きい場合、キャッシュが繰り返し再構築されています。これは、説明すべき頻繁な入れ替わりを示します(モデルの切り替え、TTL の期限切れ、初期コンテキストの編集など)。数値を報告し、別の測定値で裏付けられる場合に限り、原因を示してください。

出力

コストの高い順に並べた表を 1 つだけ出力します。

FINDING | SEVERITY | EVIDENCE | WHAT IT IS COSTING ME
  • SEVERITY は RED、AMBER、GREEN のいずれかです。
  • EVIDENCE は数値またはファイルパスにしてください。形容詞は使わないでください。
  • WHAT IT IS COSTING ME には、根拠に結び付けた具体的なトークン数またはレイテンシコストを記載してください。
  • 測定できない項目は、理由とともに EVIDENCE を UNKNOWN とした行にしてください。

続けて、最も効果の高い変更を 1 行だけ記載してください。それ以外は何も追加しないでください。

要約、次の手順、修正の申し出は追加しないでください。表とその 1 行だけが成果物です。

注意点

  • メモリのトークン数を正確な値として推定しないでください。 バイト数を 4 で割った値は近似値です。近似値であることを明記し、/context の値を優先してください。割った値を測定済みのトークン数として提示してはいけません。
  • 設定済みの MCP サーバーだけを数えないでください。 ~/.claude.json には、実行中のツール一覧にのみ表示される claude.ai のコネクターが含まれません。両方を数えてください。そうしないと、ツールの合計が誤ったものになります。
  • キャッシュ TTL を決めつけないでください。 アカウント/セッションに応じて 5m または 1h です。セッションログには、実際に使用された TTL が記録されています(ephemeral_1h_input_tokens と ephemeral_5m_input_tokens のいずれか)。ステップ 6 の間隔を評価する前に、ステップ 7 で測定してください。
  • プロキシによって defer 状態が隠れることがあります。 ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKEN が設定されている場合、実行中のツール一覧の表示内容にかかわらず、defer は侵害されていると報告してください。
  • 監査を実行しても修正にはなりません。 何も変更しないでください。ユーザーがその後に修正を希望した場合は、別途明示的な依頼として対応します。

コメント