aide: AIコーディングセッションを計測する
要点
- aideはClaude CodeとCodexのセッションログをSQLiteに読み込み、全プロジェクト横断でコスト、トークン、セッションのつまずき箇所を報告する。
- 30分のアイドル間隔でセッションを作業ブロックに分割する。2日間開いたままのターミナルは48時間のセッションではないからだ。
- 繰り返し現れる知見はランブックやセッションブリーフの提案になり、承認してから将来のセッションに届く。
- LLM呼び出しはゼロ、実行コストもゼロで、すべてローカルに保持される。
METRの調査では、開発者はAIによって20%速くなると考えていた。実測は19%遅かった。自分自身の使い方についてのデータが欲しくなり、ローカルで動く生産性計測ツールを作った。
![]()
これは何か
aideはClaude CodeとCodexのセッションログ(JSONL)をSQLiteに取り込み、プロジェクト横断で何が起きているかを示す。コスト、トークン使用量、セッションのパターン、有効性の傾向、レビューキュー、繰り返し発生するワークフローの摩擦だ。
さらに、繰り返し現れる知見をプロジェクト知識の提案に変える。それらの成果物をレビューして承認すると、将来の人間やエージェントの作業向けのランブックやセッション開始ブリーフになる。
LLM呼び出しゼロ。実行コストゼロ。すべてのデータはローカルに残る。
~/.claude/projects/**/*.jsonl → Claude parser → SQLite → aide
~/.codex/sessions/**/*.jsonl → Codex parser → SQLite → aide
課題
Claude CodeとCodexは詳細なローカルログを生成する。メッセージ、ツール呼び出し、トークン数、タイムスタンプ、コマンド、メタデータだ。ファイルは~/.claude/projects/と~/.codex/sessions/の下にある。誰も見ていない。
AIコーディングツールに価値があるかについて誰もが意見を持っている。だがデータを持っている人はいない。自分は時間とともに効率的になっているのか。どのプロジェクトが最もトークンを食うのか。セッションはどこで繰り返し失敗するのか。より良い指示やランブックは本当に摩擦を減らしたのか。
役に立つ視点は全セッションを通した個人の傾向であり、加えて繰り返しの失敗を将来のより良いコンテキストに変えるフィードバックループだ。単一のセッション記録はそのどちらも示さない。
仕組み
データパイプライン
- 発見 - 設定済みのClaudeとCodexのJSONLソースを見つける
- 解析 - プロバイダ固有のイベントを単一のセッションモデルに正規化する
- 作業ブロック - 各セッションを30分のアイドル間隔で連続したコーディング期間に分割する
- 取り込み - ファイルのmtimeを追跡しながら増分取り込みでSQLiteにupsertする
- レビューループ - 疑わしいセッションを順位付けし、繰り返す原因をまとめ、レビュー可能な成果物を提案する
コスト見積り
すべてのコストは現行のAPI料金で見積もっている。サブスクリプション利用者(Pro/Max)向けには、金額の代わりにトークンベースの指標を表示する切り替えがある。
主な機能
概要ダッシュボード
サマリーカード、有効性の指標(キャッシュヒット率、編集比率、コンパクション率、エラー率)、傾向グラフ、週あたりの作業ブロック。

有効性
プロジェクト別・プロバイダ別の集計が直近30日と前の30日を比較する。セッションあたりの平均コスト、アクティブ時間、レビューキュー率、編集の帰属、ツールエラー率だ。
アクションのサマリーは、編集なしの作業、プロジェクト帰属の弱さ、プレフィックス規則の欠落、編集帰属の欠損といった繰り返し現れる調査シグナルをまとめる。各アクションは、その原因となったセッションへリンクする。
セッション詳細
任意のセッションを掘り下げる。トークンの内訳、ツール使用状況、読み取り/編集/書き込み回数付きの触れたファイル、作業ブロックのタイムライン、エラーの分類。

インサイト
最初のプロンプトの有効性、コストの集中、時間帯のパターン、モデルの使用状況、ツールの並び、思考ブロックの分析、権限による摩擦、調査アクション。

その他
- セッション解剖 -
aide autopsy <session-id>はセッションごとの診断レポートを生成する。コストの内訳、コンテキストウィンドウの分析、コンパクションの検出、プロジェクト指示の改善提案。 - 成果物レビュー - 繰り返し現れる知見が意味的な成果物の提案になる。承認された成果物はランブックとタスクブリーフに反映される。
- サブスクリプションモード - Pro/Max加入者向けに、APIコスト表示とトークンベースの指標を切り替える。
- CLI統計 -
aide statsはウェブブラウザを開かずに簡単なサマリーをターミナルに表示する。
技術的な詳細
作業ブロック
JSONLの「セッション」は、ターミナルウィンドウが開いたままだというだけのものだ。月曜から水曜にまたがり間に睡眠が入るセッションは48時間のセッションとして読まれ、「継続時間」は無意味になる。
メッセージ間の間隔の分布は二峰性だ。ほとんどの間隔は5分未満(作業中)で、小さな集まりが30分超(離席)にある。30分のしきい値は二つのモードをきれいに分ける。
各セッションは作業ブロック、つまり連続したコーディング期間に分割される。「35セッション」よりも「35セッションにわたる119の作業ブロック」の方が多くを語る。
エラーの分類
ツールエラーは自動的に分類される。テスト(pytest、jest)、Lint(ruff、eslint)、ビルド(pip、npm)、Git、編集の不一致、ファイルアクセスだ。「エラー」の大半は通常の反復(編集・テスト・修正サイクル中のテスト失敗)である。ダッシュボードは反復と実際のミスを分ける。
有効性の指標
- キャッシュヒット率 - 入力コンテキストのうちキャッシュから供給された割合(高いほど再利用が良い)
- 編集比率 - ツール呼び出しのうちファイル編集の割合(高いほど生産的)
- コンパクション率 - コンテキスト上限に達したセッションの割合
- 読み取り/編集比 - 編集あたりの読み取り回数(低いほど探索が少ない)
- 反復率 - 同じファイルを3回以上編集したセッション
- レビュー率 - 直近のセッションのうち手動レビューに値する割合
- 編集の帰属 - 編集/書き込み呼び出しのうちファイルパスに結び付いた割合
AIコーディングのログは金鉱だ。 すべてのツール呼び出し、トークン数、タイムスタンプ、コマンドの形がそこにある。難しいのは、どの指標が本当に重要かを決めることだった。
作業ブロックがすべてを変えた。 生のセッション継続時間はどのグラフでも誤解を招いた。アイドル間隔で分割することでデータが正直になった。派手な可視化よりデータのクリーニングが重要だ。
LLM呼び出しゼロは正しい制約だった。 すべての指標はヒューリスティックだ。API呼び出しなし、追加コストなし。好きなだけ再取り込みして再構築できる。
技術スタック
- Python 3.12+ とClick CLI
- Flask + Jinja2テンプレート
- インタラクティブなグラフにChart.js(CDN)
- スタイリングにTailwind CSS(CDN)
- ストレージにSQLite(標準ライブラリ)
- パッケージ管理にuv