概要
Claude Codeに資料のたたき台を作らせるたびに、過去何度も伝えたはずの指摘(数値の整合性、表現の硬さ、構成の抜け漏れなど)を毎回また指摘する羽目になっていました。原因は単純で、「過去にAIへどんなフィードバックをしてきたか」を次の作業に一切引き継いでいなかったことです。
この記事では、数百セッション分の会話ログから指摘パターンを抽出してチェックリスト化し、Claude/Codexどちらのエージェントからでも同じ基準で参照できる仕組みにした手順を書きます。ログが大量にあってAIモデルにそのまま読ませるとコストも時間もかかる、という状況への対処法としても参考になれば幸いです。
課題: ログは大量にあるが、そのままAIに読ませられない
会話ログは数百セッション、行数にして万単位でした。これを丸ごとLLMに読ませて「指摘を抽出して」と頼むのは、コンテキスト長・料金・処理時間のいずれの観点でも非現実的です。
そこで抽出パイプラインを3段階に分けました。
- 機械的な事前絞り込み(AIを使わない): キーワードでgrepし、対象になりそうな断片だけを抜き出す
- 並列サブエージェントによる抽出: 絞り込んだ断片を複数のエージェントに分担させ、指摘らしき箇所を抽出する
- 統合・重複排除: 抽出結果をまとめてカテゴリ分けし、重複を取り除く
1. 事前絞り込み
対象領域に関係しそうなキーワード(構成・言葉遣い・数値・体制・スケジュール・レビュー・品質基準など)でログ全体をgrepし、大量のログをそのAIモデルを使わずに大きく圧縮します。
grep -n -E "構成|言葉遣い|数値|体制|スケジュール|レビュー|品質基準|敬語" \
session_logs/*.md > candidates.txt
この段階でAIを一切使わないのがポイントです。ここでAIに読ませてしまうと、絞り込みたい対象そのものが大きすぎてコストが跳ね上がります。単純な文字列マッチだけで、対象になりうる行を機械的に集めます。
2. 並列サブエージェントによる抽出
絞り込んだ断片は、それでも1つのコンテキストに収まらない量でした。ここで複数のサブエージェントに分担させ、並列で「指摘らしき箇所」を抽出させます。各エージェントには次のような指示を渡しました。
- 原文をそのまま引用すること(要約や言い換えをしない)
- 出典(どのログのどの箇所か)を必ず添えること
- カテゴリ(構成/言葉遣い/数値整合/デザイン/体制・スケジュール/品質基準など)を仮でよいので付けること
原文引用と出典を必須にしたのは、後で人間が「本当にそう言ったか」を検証できるようにするためです。AIの要約だけを信用してチェックリスト化すると、ニュアンスがずれたまま定着するリスクがあります。
3. 統合・重複排除
複数エージェントの抽出結果を1つにまとめ、同じ趣旨の指摘を統合してカテゴリごとに整理します。ここでも人間側で最終レビューを挟み、以下のような観点で人間が判断しました。
- 一度きりの案件固有の指摘か、繰り返し出てくる汎用的な指摘か
- 表現として一般化できるか(固有名詞や案件情報を含んでいないか)
汎用化できない、あるいは一度しか出ていない指摘は採用せず、繰り返し性のある指摘だけをチェックリストに残しています。
ハマりどころ: 「進めてください」だけでは自動化の権限は解除されない
このパイプラインを組んでいる過程で、Claude Codeの権限まわりで学びがありました。
抽出結果を外部ツール(社内のドキュメント管理システムなど)に書き込もうとしたところ、Claude Codeの自動モードの権限判定によって2回ブロックされました。理由は「元のタスクはテキスト抽出のみで、外部システムへの書き込みは明示許可の範囲外」というものです。
ここで重要なのは、チャット内で口頭で「進めてください」と伝えても、この判定は解除されなかったという点です。外部システムへの書き込みや git push のような操作は、セッション内の会話だけでは許可されず、settings.json などの設定側で明示的にルールを追加する必要があります。
{
"permissions": {
"allow": [
"Bash(git push origin main)"
]
}
}
「タスクの範囲外と判定される操作は、その場の会話でいくら許可しても止まる」という挙動は覚えておくと、なぜブロックされるのか分からず消耗する時間を減らせます。
チェックリストをAIエージェント間で共有可能にする
最後に、抽出したチェックリストをどう配置するかです。Claude用の指示ファイルにチェックリストの中身を直接書き込むと、Codexなど別のAIエージェントに切り替えたときに同じ基準を参照できません。かといって、エージェントごとに同じ内容を別々に管理するのはメンテナンスコストが高すぎます。
そこで、チェックリスト本体は場所を選ばない独立したMarkdownファイルとして持ち、各AIエージェント向けの指示ファイルには「このファイルを読め」という1行だけを書く構成にしました。
# Claude用指示ファイル(例)
提案資料のレビュー時は必ず checklist/proposal_review.md を読み込み、
各項目を上から順に確認すること。
# Codex用指示ファイル(例)
提案資料のレビュー時は必ず checklist/proposal_review.md を読み込み、
各項目を上から順に確認すること。
チェックリスト本体を「正」として1箇所に置き、各エージェントの指示ファイルはそこへのポインタに徹する。この構成にしておくと、新しい指摘が出てきたときもチェックリスト本体を1箇所更新するだけで、どのAIエージェントを使っていても同じ基準を参照できます。
まとめ
- 大量のログをAIにそのまま読ませず、「grepでの機械的な事前絞り込み → 並列サブエージェントでの抽出 → 人間によるレビューと統合」の3段階に分けるとコストと精度のバランスが取れる
- 抽出時は原文引用と出典を必須にすることで、後から検証可能な状態を保てる
- Claude Codeの自動モードの権限判定は、チャット内の口頭許可では解除されない。外部システムへの書き込みなど範囲外の操作は
settings.json側で明示的に許可する必要がある - チェックリストは特定のAIエージェント専用の指示ファイルに埋め込まず、独立したファイルとして持ち、各エージェントの指示ファイルからはそこへのポインタだけを書くと、AIを切り替えても同じ基準を維持できる