Skip to content

使用量の帳簿が書き手ごとに別の置き場へ書かれ、サブエージェントの行と claude -p の行を同じ集計で読めない #2575

Open

Description

@takemi-ohama

何を見つけたか

使用量の帳簿が、書き手によって 2 つのディレクトリに分かれて書かれている。帳簿のディレクトリは plugins/ndf/scripts/lib/usage_ledger.py:45-53 で NDF_USAGE_DIR → ${CLAUDE_PLUGIN_DATA}/usage → ${XDG_STATE_HOME}/ndf/usage → ~/.local/state/ndf/usage の順に決まる。Claude Code が起動する hook には CLAUDE_PLUGIN_DATA が渡り、supervise.py などのスクリプトには渡らないため、置き場が分かれる。

2026-11-05 に手元の Claude の帳簿を数えた結果(devbasex__ai-plugins.jsonl):

置き場 行数 kind=subagent の行
~/.local/state/ndf/usage/claude/ 1490 0
~/.claude/plugins/data/ndf-ai-plugins/usage/claude/ 993 993

サブエージェントの行はすべてプラグインのデータの置き場にあり、claude -p・cross-review などの行はすべて ~/.local/state にある。

どこで見つけたか

#1979 の設計で、SubagentStop の hook が帳簿の既存の行を読めるか(hook の時間の上限 10 秒に収まるか)を本物の帳簿で測ったとき。

なぜこの変更の範囲外なのか

#1979 の受け入れ条件は、1 本の帳簿の中での数え方(同じ message.id の最後の usage・同じ agent_id の 2 回目以降の停止・期間の絞り方・supervise の work の行)だけを扱い、帳簿の置き場の決め方は対象範囲に含まない。置き場を揃えると既存の行の移し方(#1953 の「移行は行わない」)も決め直すことになり、別の設計が要る。根拠: Value 7(根本原因の場所で直す)(MVV 版 5)

直さないと何が起きるか

usage-report.py --ledger claude を打つ環境によって、片方の置き場しか読まない。スクリプトや端末から打つと「サブエージェントだけ」の値が帳簿の行を持たず、会話の記録から足す分(会話の記録が消えた期間は 0)だけになる。hook と同じ環境から打つと claude -p の行が抜ける。トークン削減の効果を測る値が、どこから集計したかで変わる。

起票者の推定

  • 置き場を 1 つに揃えるべきで、読む側が両方を読む形では足りない(推した出所: 確定仕様 docs/specifications/ndf-usage-ledger-by-runtime.md の決定 1「ディレクトリを読む単位がそのまま帳簿の単位」)

由来

issue #1979

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions