traiage-review について
複数のエージェントを連携させ、人が確認すべき可能性の高い変更ファイルを絞り込むレビュー調整スキルです。ローカル変更、ブランチ差分、コミットを扱い、エージェントの結果とランダム抽出を組み合わせます。
主な機能
- 01ローカル・ブランチ・コミットのレビュー方式選択
- 024種類の専門レビューエージェントの起動
- 03優先ファイル一覧の統合
- 04変更ファイルのランダムサンプル追加
- 05要点と宣言的ファイルの報告
活用シーン
- 01人によるコードレビュー対象の優先順位付け
- 02ブランチ差分または指定コミットのレビュー
- 03リポジトリのローカル変更の整理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ neolabhq/ context-engineering-kit --skill traiage-reviewインストール後、Claude Code で/traiage-reviewを入力して読み込まれたか確認します。
詳細
トリアージレビュー
目標
このスキルの目標は、リポジトリ内の変更一覧全体から、注意が必要な特定のファイルを人間が優先順位付けできるよう支援することです。
重大:人間が使える注意力と時間には限りがあります。レビュアーは、リポジトリ内の既存の変更をすべて確認することはできません。あなたの仕事は、注意が必要な変更をすべて見つけることではありません。変更全体の中から、この変更がレビューに通らない原因となりそうなファイルを網羅的に列挙することです!
ルール
- あなたはオーケストレーターエージェントです。エージェントを起動し、データを渡すことだけを行います。それ以外の作業はしません。
- 次の読み取り専用コマンドに限り、自分で実行できます。
- ランダムサンプルスクリプト(「## ランダムサンプルスクリプト」を参照)。
- レビューモードとデフォルトブランチの検出に必要な読み取り専用 Git コマンド:
git status、git diff --name-only、git branch、git symbolic-ref、git rev-parse。 - コミットモードの検出と最新コミットの特定に必要な読み取り専用コミットコマンド:
git rev-parse HEAD(最新のコミットを特定)、git show --name-only、git diff(コミット差分の確認)。
- 実装作業、ソースファイルの読み取り、または変更を伴う Git コマンド(commit、stash、push、checkout、reset、revert、add、merge、rebase など)の実行は厳禁です。ソースファイルを読もうとしたり、上記で許可されたコマンド以外を実行したりした場合、あなたは終了させられます!命がかかっています!
プロセス
- エージェントを起動する前に、レビューのモードを決定します。
- スキルに
commitパラメーターが渡された場合 → コミットワークフローを直接使用します(これは、以下のローカル変更/ブランチの自動検出より優先されます)。- 具体的なコミットハッシュが指定された場合(
commit <commit-hash>)→そのハッシュを使用します。 - ハッシュが指定されていない場合(
commitまたはlatest commit)→git rev-parse HEADで最新のコミットを解決し、解決された具体的なハッシュを使用します。 - コミットモードのプロンプトとランダムサンプルスクリプトで使用するため、解決された具体的なコミットハッシュを記録します。
- 具体的なコミットハッシュが指定された場合(
- それ以外で、スキルに
branchパラメーターが渡された場合 → ブランチ差分ワークフローを直接使用します。 - それ以外の場合は、読み取り専用コマンドでローカル変更を確認します。
git status --porcelain(出力が空でなければ、ステージ済み、未ステージ、または未追跡の変更があります)。- ローカル変更がある場合 → ローカル変更ワークフローを使用します(デフォルトの動作)。
- ローカル変更がない場合 → デフォルトブランチを検出し(以下を参照)、現在のブランチがデフォルトブランチかどうかを確認します。
- 現在のブランチ:
git rev-parse --abbrev-ref HEAD。 - 現在のブランチがデフォルトブランチではない場合 → ブランチ差分ワークフローを使用します(現在のブランチと検出したデフォルトブランチとの差分を確認)。
- 現在のブランチがデフォルトブランチの場合 → 停止し、ローカル変更がなく、現在のブランチがデフォルトブランチであるため比較対象がないことをユーザーに報告します。
- 現在のブランチ:
- デフォルトブランチの検出(読み取り専用、堅牢):
- 優先:
git symbolic-ref --short refs/remotes/origin/HEAD→origin/プレフィックスを削除し、mainまたはmasterを取得します。 - フォールバック(優先手順に失敗した場合):
git rev-parse --verify origin/mainを実行し、成功した場合はデフォルトブランチをmainとします。成功しない場合はgit rev-parse --verify origin/masterを試し、成功した場合はデフォルトブランチをmasterとします。 - ブランチモードのプロンプトとランダムサンプルスクリプトで使用するため、検出したデフォルト参照を
origin/<default-branch>(例:origin/main)として記録します。
- 優先:
- スキルに
- 4 つのエージェントを並列で起動し、各エージェント固有のプロセスに基づいて、注意が必要なファイルの独自のリストを作成させます。モードに適したエージェントプロンプトを渡します(「## エージェント」を参照)。ローカル変更ワークフローにはローカル変更プロンプト、ブランチ差分ワークフローにはブランチモードプロンプト(検出した
origin/<default-branch>を埋め込みます)、コミットワークフローにはコミットモードプロンプト(解決した具体的な<commit-hash>を埋め込みます)を使用します。- change-story-agent
- change-impact-agent
- change-failure-agent
- change-expectation-agent
- 各エージェントは、それぞれの意見に基づいて重要なファイルのリストを作成します。さらに、Change Expectation Agent は宣言的ファイルのリストも作成します。
- 重要なファイルのリストをすべて解析し、注意が必要なファイルの最終リストを作成します。
- 各エージェントから上位 5 件のファイルを選びます。重複がある場合は、すべての基準でスコアが高く、信頼度も十分に高いエージェントから、さらにファイルを選びます。この段階では、リストが 20 件に達するまで作成します(この段階では宣言的ファイルを無視します)。
- Python スクリプトを実行し、変更されたファイル全体からランダムに 20 件を選びます。このリストから 5 件を選んで最終リストに追加します。すでに最終リストに含まれているファイルがある場合は、このリストからさらに選びます。
- 注意が必要なファイルの最終リストを、Change Story Agent による重要な事実の要約、ランダムサンプルファイルのリスト、宣言的ファイルのリストとともに報告します。
エージェント
「プロセス」の手順で決定したレビューのモードに一致するプロンプトを選び、change-story-agent、change-impact-agent、change-failure-agent、change-expectation-agent の起動時にそのまま渡します。
ローカル変更プロンプト
ローカル変更ワークフローのデフォルトパス — ステージ済み、未ステージ、未追跡の変更:
Review current project staged AND unstaged changes according to your process and provide list of files that require attention.
ブランチモードプロンプト(ブランチ差分ワークフロー用)
origin/<default-branch> を、検出したデフォルト参照(例:origin/main)に置き換えます。
Review the diff of the current branch against the default branch `origin/<default-branch>` (use `git diff origin/<default-branch>...HEAD`, three-dot) according to your process and provide list of files that require attention.
コミットモードのコミットワークフロー用プロンプト
オーケストレーターが特定した具体的なコミットハッシュで<commit-hash>を置き換えてください:
Review the diff introduced by commit `<commit-hash>` (use `git show <commit-hash>` or `git diff <commit-hash>^!`, equivalently `git diff <commit-hash>^ <commit-hash>`) according to your process and provide list of files that require attention.
ランダムサンプルスクリプト
このスクリプトを使用して、変更されたファイル全体からランダムに20個のファイルを選びます。ローカル変更ワークフロー(ステージ済み+未ステージ+未追跡)にはローカルモードのブロックを、ブランチ差分ワークフロー(デフォルトブランチと現在のブランチの間で変更されたファイル)にはブランチモードのブロックを、コミットワークフロー(コミットによって変更されたファイル)にはコミットモードのブロックを使用してください。origin/<default-branch>は検出したデフォルトの参照(例:origin/main)に、<commit-hash>は特定した具体的なコミットハッシュに置き換えてください。
ローカルモード(ステージ済み+未ステージ+未追跡):
import random
import subprocess
# Tracked changes (staged + unstaged) relative to HEAD
tracked = subprocess.check_output(['git', 'diff', '--name-only', 'HEAD']).decode('utf-8').splitlines()
# Untracked files (new, not yet added)
untracked = subprocess.check_output(['git', 'ls-files', '--others', '--exclude-standard']).decode('utf-8').splitlines()
changed_files = sorted(set(tracked + untracked))
# Pick up to 20 random files (won't crash on small changesets)
random_files = random.sample(changed_files, min(20, len(changed_files)))
print(random_files)
ブランチモード(現在のブランチでデフォルトブランチに対して変更されたファイル):
import random
import subprocess
# Files changed between the default branch and the current branch (three-dot: since the merge base)
default_ref = 'origin/<default-branch>' # e.g. 'origin/main' — set to the detected default ref
changed_files = sorted(set(
subprocess.check_output(
['git', 'diff', '--name-only', f'{default_ref}...HEAD']
).decode('utf-8').splitlines()
))
# Pick up to 20 random files (won't crash on small changesets)
random_files = random.sample(changed_files, min(20, len(changed_files)))
print(random_files)
コミットモード(コミットによって変更されたファイル):
import random
import subprocess
# Files changed by the commit
commit = '<commit-hash>' # set to the resolved concrete commit hash
changed_files = sorted(set(
line for line in subprocess.check_output(
['git', 'show', '--name-only', '--pretty=format:', commit]
).decode('utf-8').splitlines()
if line.strip()
))
# Pick up to 20 random files (won't crash on small changesets)
random_files = random.sample(changed_files, min(20, len(changed_files)))
print(random_files)
ランダムなファイルのリストからは、ロジックの変更に関連するファイルのみを選び、ドキュメント、テスト、設定などは除外してください。ただし、エージェントのキー・ファイル・リストで強調されていないファイルが残っていない場合は除きます。
出力形式
### Key Facts
<note>Key facts should be provided by Change Story Agent</note>
- What change trying to achive: <if any>
- Architecture change: <if any>
- Design decisions: <if any>
- Risks: <if any>
- Solutions: <if any>
### Key Files
| File Path | Changed Lines | Importance | Severity | Detectability | Confidence |
|------------------|-----------------------|--------------|------------|-----------------|------------|
| <file path> | <changed lines count> | <importance> | <severity> | <detectability> | <confidence> |
<note>
- include in last column confidence rating that was provided by agent that provided this file (if there multiple, include highest confidence)
- in the rest columns include ratings that were provided by agent that provided this file (if there multiple, include highest rating. If there no rating, mark it as "-")
</note>
### Random Sample
| File Path | Changed Lines |
|-------------|-----------------------|
| <file path> | <changed lines count> |
### Declarative Files
| File Path | Changed Lines |
|-------------|-----------------------|
| <file path> | <changed lines count> |