llmeter

AI コーディングツール(Claude Code / Codex / Cursor)の利用状況をローカルログから集計・可視化する CLI ツールです。

自分の使い方を統計的に把握し、プロンプト改善・不要なスキルの整理・コスト管理に役立てることを目的としています。外部サーバーへの送信は一切なく、すべてローカルで完結します。

機能

対応データソース

ツール 読み取り元 備考
Claude Code ~/.claude/projects/**/*.jsonl トークン・コストとも正確に集計
Codex ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl token_count イベントから集計
Cursor ~/.cursor/chats/<workspace>/<session>/store.db および ~/.cursor/projects/<workspace>/agent-transcripts/*.jsonl(chats に無いセッションのみ) ログにトークン情報がないため文字数からの概算(estimated 表示)

ログの読み取りのみを行い、元ファイルは変更しません。

インストール

cargo install --git https://github.com/m-tkg/llmeter

またはソースから:

git clone https://github.com/m-tkg/llmeter
cd llmeter
cargo install --path .

アップデート

llmeter update           # リモートと版比較し、新しければ再ビルドしてインストール
llmeter update --force   # 同バージョンでも強制再インストール

内部で cargo install --git ... --force を実行するため cargo が必要です(ビルドに1〜2分)。

使い方

レポート生成(HTML)

llmeter report                         # デフォルト設定で出力(config 未設定時は直近30日/HTML/./llmeter-report/)
llmeter report --days 7                # 直近7日
llmeter report --out ~/reports/ai      # 出力先を指定
llmeter report --tools claude,codex    # 対象ツールを絞る(claude / codex / cursor)

ブラウザで ./llmeter-report/index.html を開くとダッシュボードが表示されます。

レポート生成(Markdown)

--format md を付けるだけで、同じ内容を Markdown で出力します。

llmeter report --format md                     # ./llmeter-report/report.md に出力
llmeter report --format md --out ./docs/usage  # 出力先を指定
llmeter report --format md --stdout            # ファイルに書かず標準出力へ(パイプ処理向け)
llmeter report --format md --stdout | pbcopy   # 例: クリップボードにコピー

日付範囲を指定する

--since / --until(YYYY-MM-DD)で絶対日付の範囲を指定できます。指定した場合 --days は無視されます。

llmeter report --since 2026-06-01 --until 2026-06-30 --format md  # 2026年6月分のみ
llmeter report --since 2026-06-01                                 # 2026-06-01 以降すべて
llmeter report --until 2026-06-30                                 # 2026-06-30 以前すべて

レポートの出力構成

ファイル 内容
index.html / report.md Overview(コスト・トークン・気づき・グラフ)+ セッション一覧
sessions/<ID>.html / sessions/<ID>.md 各セッションの詳細トランスクリプト(一覧からリンク)

report の全オプション:

オプション デフォルト 説明
--days <N> 30(または config) 集計対象期間(日数)。--since/--until 指定時は無視
--since <DATE> 省略時はなし(または config) 集計開始日(YYYY-MM-DD、この日を含む)
--until <DATE> 省略時はなし(または config) 集計終了日(YYYY-MM-DD、この日を含む)
--format <html|md> html(または config) 出力形式
--out <DIR> ./llmeter-report/(または config) 出力先ディレクトリ(なければ作成)
--tools <LIST> 全ツール(または config) claude,codex,cursor のカンマ区切りで限定
--offline オフ(または config) ネットワークアクセスなしで実行(LiteLLM 料金データはキャッシュ+埋め込みのみ使用)
--analyze <AGENT> 省略時は分析なし(または config) レポートを AI エージェント CLI に読ませ、コスト削減提案をマージする(claude / codex / cursor)
--analyze-timeout <SECS> 300(または config) --analyze 実行時のタイムアウト(秒)
--stdout オフ(または config) ファイルに書き出さず Markdown を標準出力に出す(--format md 専用)

コマンドライン引数が指定された項目は config より優先されます。

config.toml(report のデフォルト)

llmeter report のデフォルト値は ~/.config/llmeter/config.toml の [report] で上書きできます。ファイルが無い場合は従来どおり直近30日・HTML・./llmeter-report/ です。配置場所の解決は pricing.toml と同様(~/.config/llmeter/config.toml を優先し、無ければ OS 標準の設定ディレクトリ)です。

# ~/.config/llmeter/config.toml
# llmeter report のデフォルト。CLI で指定した項目が優先。

[report]
days = 7
format = "md"
out = "~/reports/llmeter"

# 絶対日付(どちらか/両方指定時は days を無視。CLI と同じ)
# since = "2026-06-01"
# until = "2026-06-30"

# tools = ["claude", "codex"]  # 省略時は全ツール

offline = false

# analyze = "claude"           # "claude" | "codex" | "cursor"
# analyze_timeout = 300

# stdout = false               # true なら md を標準出力(ファイル書き込みなし)

例: 上記の config があるとき llmeter report だけで直近7日分を ~/reports/llmeter/report.md に出力します。llmeter report --format html のように CLI で指定した項目だけ上書きされます。

AI 分析(--analyze)

--analyze <agent> を付けると、生成したレポート(Markdown)を指定した AI エージェント CLI に読ませ、コスト削減提案を生成してレポート本体にマージします。

llmeter report --analyze claude                          # claude -p でレポートを分析
llmeter report --format md --analyze codex                # codex exec で分析、Markdown 出力
llmeter report --analyze cursor --analyze-timeout 600     # cursor-agent、タイムアウトを延長

セッション一覧(ターミナル表示)

llmeter sessions                          # 直近30日、コスト降順
llmeter sessions --repo llmeter           # リポジトリで絞り込み
llmeter sessions --sort turns             # cost | turns | errors

セッション詳細

セッション ID は llmeter sessions の表示や、HTML レポートのリンク先ファイル名で確認できます。

llmeter session <セッションID>                              # Markdown で標準出力
llmeter session <セッションID> --out ./llmeter-report       # sessions/<ID>.md に保存
llmeter session <セッションID> --format html --out ./out    # sessions/<ID>.html に保存
llmeter session <セッションID> --format html > session.html # シェルリダイレクトでも可

キャッシュ操作

llmeter cache status   # キャッシュ状態の確認
llmeter cache clear    # キャッシュ削除(次回はフルパース)

キャッシュは OS 標準のキャッシュディレクトリ(macOS: ~/Library/Caches/llmeter/、Linux: ~/.cache/llmeter/)に保存され、ソースファイルの path + mtime + size をキーに無効化されます。

コスト計算

料金解決は ccusage と同様、3層構造で行います。

  1. pricing.toml(ユーザー上書き、モデル名との部分一致、最優先)
  2. LiteLLM 料金データベース(BerriAI/litellm が公開する model_prices_and_context_window.json をキャッシュして利用。完全一致 → プロバイダ接頭辞除去後の完全一致 → 最長プレフィックス一致の順で照合)
  3. 埋め込みデフォルト(src/pricing.rs の embedded_defaults()。ネットワーク不可・LiteLLM 未収録時の fallback)

未知モデルのコストは「不明」として合計から分離表示します。

LiteLLM 料金データベース

llmeter pricing refresh
llmeter pricing show claude-sonnet-5-20260115
llmeter report --days 7 --offline

内蔵デフォルト単価($ / 100万トークン)

パターン input output cache_write cache_read
claude-opus 15.0 75.0 input×1.25 input×0.1
claude-sonnet 3.0 15.0 input×1.25 input×0.1
claude-haiku 0.8 4.0 input×1.25 input×0.1
claude-fable 3.0 15.0 input×1.25 input×0.1
gpt-5 5.0 15.0 5.0 0.5
gpt-4.1 2.0 8.0 2.0 0.5
gpt-4o 2.5 10.0 2.5 1.25
o3 2.0 8.0 input×1.25 input×0.1
o4-mini 1.1 4.4 input×1.25 input×0.1

パターンはモデル名との部分一致(小文字比較)。例えば claude-sonnet は claude-sonnet-5-20260115 にマッチします。単価は公式価格と異なる場合があるため、正確なコストが必要な場合は pricing.toml で上書きしてください。

pricing.toml の書式

配置場所は ~/.config/llmeter/pricing.toml(全 OS 共通で優先)。無い場合は OS 標準の設定ディレクトリ(macOS: ~/Library/Application Support/llmeter/pricing.toml、Linux: ~/.config/llmeter/pricing.toml)を読みます。

# キー = モデル名の部分一致パターン。ユーザー定義は内蔵デフォルトより優先。
# 単価はすべて $ / 100万トークン。

# 既存パターンの単価を上書き
[models."claude-sonnet"]
input = 3.0
output = 15.0
# cache_write / cache_read は省略可
# 省略時: cache_write = input × 1.25、cache_read = input × 0.1

# 新モデルの追加
[models."gpt-5.6"]
input = 5.0
output = 15.0
cache_write = 5.0
cache_read = 0.5

既知の制限

開発

cargo test     # 単体テスト
cargo clippy   # lint

構成: src/sources/(各ツールのパーサ)、src/aggregate.rs(集計)、src/config.rs(config.toml の読み込み)、src/pricing.rs(コスト計算・3層解決)、src/litellm.rs(LiteLLM 料金データの取得・キャッシュ)、src/analyze.rs(AI 分析エージェント実行・md→html変換)、src/insights.rs(気づき生成)、src/render/(HTML / Markdown 出力)、src/cache.rs(増分キャッシュ)。

ライセンス

MIT