test:triage について
test:triage は antithesis-triage スキルを検証するエンドツーエンドのテストハーネスです。サブエージェントに Antithesis API で実際のトリアージを行わせ、そのセッション記録から不具合、手順違反、非効率な操作を確認します。
主な機能
- 01サブエージェントによる実行の発見とトリアージ
- 02完了・未完了の実行対象を選択
- 03生のセッション記録を監査
- 04不具合と手順遵守を確認
- 05問題を簡潔に報告
活用シーン
- 01失敗プロパティのトリアージを検証
- 02未完了実行の診断を確認
- 03snouty コマンドの動作を監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ antithesishq/ antithesis-skills --skill test:triageインストール後、Claude Code で/test:triageを入力して読み込まれたか確認します。
詳細
テスト:Antithesis トリアージスキル
antithesis-triage スキルのエンドツーエンドテストハーネスです。サブエージェントを起動し、snouty を介して稼働中の Antithesis API に対する実際のトリアージ操作を実行させ、その作業に問題がないか確認します。
トップレベルのエージェントは、antithesis-triage スキルを直接使用してはなりません。
すべてのトリアージ操作はサブエージェント内で実行します。トップレベルのエージェントは、オーケストレーションとレビューのみを行います。
前提条件
開始する前に、トリアージスキルで必要とされるものと同じ前提条件を確認します。
which snouty && which jq && snouty --version
snouty はバージョン 0.8.0 以上である必要があります。次に、標準の確認方法(トリアージスキルの事前確認と同じ方法)で認証情報を確認します。
snouty doctor
前提条件が不足している場合、古い場合、または snouty doctor が失敗した場合は、処理を停止し、利用できないものを報告してください。
フェーズ 1:実行を検出する
Agent ツールを使って、汎用サブエージェントを起動します。以下の指示で、{{TENANT}} を $ANTITHESIS_TENANT 環境変数の実際の値に、{{TRIAGE_SKILL}} をこのリポジトリ内の antithesis-triage/SKILL.md の絶対パスに置き換えてください。現在のシェルで $ANTITHESIS_TENANT が空の場合は、中止せずにユーザーにテナント名を尋ねてください。
Read the skill file at {{TRIAGE_SKILL}} and follow its instructions to list
recent runs for the tenant "{{TENANT}}". Follow the "Summarize recent runs"
workflow.
Return the COMPLETE raw NDJSON of `snouty runs --json list -n 200` along
with a per-run summary that includes, for each run:
- run_id
- status
- launcher
- created_at / completed_at
- antithesis.test_name and antithesis.description (from parameters)
- whether links.triage_report is present (triageable yes/no)
Do NOT filter by status — return the full list so the orchestrator can
select targets across statuses.
次に進む前に、このサブエージェントの処理が完了するまで待ちます。
サブエージェントが NDJSON リストを返さなかった場合は、中止してください。
フェーズ 2:テスト対象を選択する
サブエージェントの出力を読み取ります。実行の一覧から、次の 2 つの対象を選択します。
- モーメントを持つ失敗プロパティがある完了済みの実行。
status == "completed"links.triage_reportが存在する- 失敗プロパティのうち、少なくとも 1 つに
counterexamples[0].moment.input_hashが存在する(つまり、テレメトリ/メタプロパティではなく、モーメントを指定できる)
snouty runs --json properties --failing $RUN_ID を呼び出し、少なくとも 1 件のエントリに moment フィールドを持つ反例があることを確認します。
failure_momentがある未完了の実行。status == "incomplete"links.triage_reportが存在するsnouty runs --json show $RUN_IDにfailure_momentが存在する- 実行時間(completed_at − created_at)が 30 分未満の実行を優先します。通常、これはセットアップ時または実行初期の失敗であり、診断の未完了パスを最も直接的に検証できます。
対象が見つからない場合のルール:
- 失敗プロパティのモーメントを持つ完了済みの実行がない場合は、フェーズ 3a をスキップし、最終レポートにその旨を記載します。
failure_momentがある未完了の実行がない場合は、フェーズ 3b をスキップし、その旨を記載します。- 実行が 1 つもない場合は、その旨を報告して停止します。
フェーズ 3:選択した実行をトリアージする
利用可能な対象ごとに、サブエージェントを並行して起動します。サブエージェントに詳細な報告を指示したり、テストされていると伝えたりしないでください。これにより、サブエージェントの動作が変わってしまいます。オーケストレーターは、フェーズ 4 でサブエージェントの生のセッショントレースを直接確認します。
フェーズ 3a:失敗プロパティがある完了済みの実行
以下の指示で汎用サブエージェントを起動します(実際の実行 ID と、このリポジトリ内にある antithesis-triage/SKILL.md の絶対パスである {{TRIAGE_SKILL}} を指定してください)。
Read the skill file at {{TRIAGE_SKILL}} and follow its instructions to
triage the Antithesis run with run_id {{RUN_ID}}. Investigate the logs of
the failing property most likely to be a SUT bug. Pick any failing property
if you aren't sure. Do NOT explore or analyze any local source code
repositories — only use the snouty API and downloaded logs to perform your
triage.
フェーズ 3b:未完了の実行
以下の指示で汎用サブエージェントを起動します(実際の実行 ID と、このリポジトリ内にある antithesis-triage/SKILL.md の絶対パスである {{TRIAGE_SKILL}} を指定してください)。
Read the skill file at {{TRIAGE_SKILL}} and follow its instructions to
triage the Antithesis run with run_id {{RUN_ID}}.
両方のサブエージェントが完了するまで待ちます。
フェーズ 4:レビューと報告
スキルプロトコルを理解する
サブエージェントのトレースを監査する前に、トリアージスキルとそのリファレンスを読み、正しい動作と違反を区別できるようにしてください。
antithesis-triage/SKILL.mdを読む — スキルプロトコルの概要antithesis-triage/references/run-discovery.mdを読む — 実行の一覧表示と選択方法antithesis-triage/references/run-info.mdを読む — 単一実行のメタデータantithesis-triage/references/properties.mdを読む — 反例やモーメントをログのダウンロードに対応づける方法を含む、プロパティのトリアージワークフローantithesis-triage/references/logs.mdを読む — ログ形式と jq による分析パターン
コンプライアンスを評価する際は、これらを正しい基準として使用してください。サブエージェントの動作に不自然な点があれば、問題として指摘する前に、スキルにその動作が記載されているか確認してください。
サブエージェントのセッションログを読む
Agent ツールは、各サブエージェントの agentId を返します(結果では agentId: <id> と表示されます)。現在のセッション ID と各 agentId を使って、生の JSONL セッションログを読み取ってください。
~/.claude/projects/<project-dir>/<session-id>/subagents/agent-<agentId>.jsonl
現在のセッションディレクトリを見つけるには、~/.claude/projects/ の下で、subagents/ フォルダーを含むディレクトリのうち、最も最近更新されたものを探してください。
各サブエージェントのトレースから Bash ツール呼び出しをすべて抽出し、各コマンドとその出力を確認してください。
jq -c 'select(.type == "assistant") | .message.content[]?
| select(.type == "tool_use" and .name == "Bash") | .input.command' \
<trace-file>.jsonl
ツールの結果を抽出して、コマンドの出力を確認してください。
jq -c 'select(.type == "user") | .message.content[]?
| select(.type == "tool_result") | {tool_use_id, content: .content[:500]}' \
<trace-file>.jsonl
これにより、各サブエージェントが行ったすべての操作(snouty の呼び出し、jq クエリ、スクリプトの実行、エラーなど)を完全に把握でき、要約に頼る必要がありません。
確認する項目
生のトレースを確認し、次のカテゴリに該当する問題がないか調べてください。
バグ — 動作に問題があるもの:
- タイムアウト以外のエラー(404、スキーマの不一致、予期しない終了コード)で失敗する
snouty runsの呼び出し - ログのダウンロード手順(
snouty runs --json logs ... | jq -s '.')が失敗する、タイムアウトする、または出力が切り詰められる/不完全になる - エラーになる
jqクエリ、またはデータが存在するはずなのに null を返すクエリ - スキルに記載されたコマンドが、スキルの説明どおりに動作しない
コンプライアンス違反 — サブエージェントがスキルプロトコルに従っていないもの:
snouty runsでデータを取得できるにもかかわらず、Web UI を使う、またはレポート URL に対してcurlを実行する- トリアージ前に
snouty runs --json showを実行しない links.triage_reportがない実行について、トリアージ対象外であることを最初に報告せずにトリアージするsnouty runs --json logsに渡す前にinput_hash/vtimeを丸める、または形式を変える(スキルでは値をそのまま渡す必要があります)- モーメントが利用可能なのに、対応するログをダウンロードして調べずにプロパティ失敗の根本原因を結論づける
- テレメトリ/メタプロパティの反例(スカラーやセッション ID オブジェクトなど、
momentではないペイロード)をモーメントがあるかのように扱い、ログをダウンロードしようとする
非効率 — 動作するが、時間やトークンを無駄にするもの:
- 同じログファイルを同じパスに繰り返しダウンロードする
- 片方だけ必要なのに、
--failing/--passingフィルターを使わずすべてのプロパティを取得する - jq フィルターを実行する代わりに、大きなログをコンテキストウィンドウに読み込む
- 複数回の再試行が必要だった手順(特に同じ操作を 2 回より多く再試行した場合)。通常、これはスキルの指示が不明確であることを示します
同じ実行/エンドポイントに対する snouty runs の繰り返し呼び出しは、非効率として指摘しないでください。snouty は繰り返しの呼び出しをキャッシュするため、異なる jq の深さやフィルターで同じ snouty runs 呼び出し(例:properties、show、build-logs)を再実行しても問題なく、スキル上の問題を示すものではありません。
出力形式
対応が必要な問題のみに焦点を当てた簡潔なレポートを作成してください。問題なく行えた点、一般的な提案、広範な推奨事項のセクションは含めないでください。目的は、障害や非効率に関する明確な情報を提示することです。
テスト概要
- テスト対象のテナント
- 選択した実行(run_id、ステータス、該当する場合は失敗プロパティ数)
- 起動したサブエージェント(agentId を含む)
- スキップしたフェーズとその理由
問題
見つかった問題ごとに、以下を記載してください。
- 重大度:バグ/コンプライアンス/非効率性
- フェーズ:問題が発生したフェーズ
- 説明:何が起きたか
- 証拠:セッショントレースに記録された正確なコマンドと出力(直接引用)
- 修正:実施すべき具体的な変更(ファイル名と変更内容)
重大度の高い順に並べてください(バグ、コンプライアンス、非効率性の順)。
問題が見つからなかった場合は、「問題は見つかりませんでした」と報告してください。報告内容を水増ししないでください。