run-debugger について
Run Debugger は、Duvo Agent の失敗や誤った結果を診断するスキルです。実行時のトランスクリプトと Build から上流の原因を特定し、Agent の設定を編集せずに具体的な変更案を提示します。
主な機能
- 01Run のメタデータと記録の確認
- 02実行時に有効だった Build の参照
- 03診断パターンによる障害分類
- 04特定の設定項目への変更案
- 05読み取り専用の調査
活用シーン
- 01特定の Run が失敗した理由の特定
- 02誤った結果の上流原因の追跡
- 03繰り返す Run 障害の調査
- 04AOP や Connection の変更案の作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ duvoai/ skills --skill run-debuggerインストール後、Claude Code で/run-debuggerを入力して読み込まれたか確認します。
詳細
デバッガーの実行
Duvo とは?
Duvo は、チームがすでに使用しているシステム間で、反復的な業務を処理する AI 搭載の自動化プラットフォームです。厳格に事前プログラムされたルールに従う従来の自動化とは異なり、Duvo の エージェント は目標を理解し、状況に応じて対応を変え、ユーザー自身が作業しているかのように、ユーザーの 接続(Gmail、Slack、CRM などの連携ツール)を通じてユーザーに代わって作業します。エージェントは一度設定すればよく、AOP(プロンプトになる Markdown の手順)、接続、設定をまとめて ビルド を構成し、その後 実行(入力、完全なトランスクリプト、結果を含む個々の実行)を行います。
実施すること
実行 はエージェントの1回の実行です。実行に失敗したり、期待どおりの結果が得られなかったりした場合、ユーザーが知りたいことは2つあります。
- この実行で具体的に何が問題だったのか。
- 次回同じ問題を防ぐには、どのような変更が必要か。
両方に答えます。修正を適用するのではなく、実際のトランスクリプトに基づいて原因を診断し、具体的な提案にまとめます。変更を反映するのは、ユーザー(または aop-writer)です。
読み取りのみ行い、エージェント、AOP、接続、ケースは編集しません。
動作モード
このセッションに設定された Duvo へのアクセスを使用して、以下の操作を実行します。呼び出し方法とパラメーターの調べ方については、ランタイムの指示に従ってください。操作名は必要なアクションを示すものであり、同じ名前のツールがツール一覧に表示されることを意味しません。別のトランスポートを選択したり、ツール一覧だけを根拠に Duvo が利用できないと判断したりしないでください。
- API モード — 設定済みの Duvo アクセスを使用して、実行、トランスクリプト、適用中のビルドを読み取ります。
- 貼り付けモード — Duvo へのアクセスが設定されていないスタンドアロン環境では、実行 ID、適用中の AOP、最終エラーまたは関連するトランスクリプトの抜粋、接続やケースに関するコンテキストを求めます。
診断、分類、修正の形式、出力ルールはどちらのモードでも同じです。異なるのはデータの取得方法のみです。トランスクリプトの内容を捏造しないでください。
最も重要なルール
症状と根本原因を区別してください。 ツール呼び出しのエラー、フィールドの欠落、あるいは「エージェントが誤った内容を返した」は症状です。根本原因はほとんどの場合、それより前の段階にあります。
- AOP で、その分岐におけるエージェントの動作が指示されていなかった、または具体的な基準を示すべきところで「判断に任せる」としていた。
- 接続 が利用できなかった、または AOP が前提としていたスコープが不足していた。
- AOP が参照した セットアップ入力 または ファイル が存在しない、または空だった。
- 分岐に 終端アクション(
complete_case/fail_case/postpone_case/request_handover)がなかった。 - エージェントが1つの AOP で2つの実行分の作業を処理していた(分解の兆候)。
症状(「Gmail の呼び出しが 401 を返した」など)だけを説明しても、作業を完了したことにはなりません。上流の原因を特定し、再発防止にどのような変更が必要かを示してください。
必要な入力
最低でも、次のいずれかが必要です。
- 実行 ID(API では
run_idと呼ばれます)、または - エージェント ID — これを使って該当する実行を特定します(通常は最新の実行、または最新の失敗した実行。手順1を参照)、または
- 失敗がキューによって発生した場合は、ケース ID。
いずれもない場合は、何かを読み取る前に、ユーザーに実行 ID を尋ねてください。コンテキストから推測しないでください。
ツール — 読み取り専用の公開 API 操作(API モード)
API モードでは、これらの操作を呼び出します。同じ名前がユーザー向けの用語に対応するため、メタエージェントは操作名をそのままユーザーに表示してはいけません。
getRun— Run のメタデータ:ステータス、build_id、開始/終了のタイムスタンプ、エラーの概要。listRunMessages— トランスクリプト全体:すべてのツール呼び出し、すべてのツールの結果、すべてのモデルのターン。getRevision— この Run で有効だったBuild(Agent の現在の Build ではなく、getRunのbuild_idを使用します)。ここには、Agent が実際に実行していた AOP が含まれます。getCase/listCaseRuns/listCaseRunRecentMessages— ケースの状態、このケースで実行されたすべての Run、ケース起点の Run の最近のトランスクリプト。listConnections/getConnection— 現在の Connection の状態。エラーが発生した Connection が、現在も機能していないかどうかの確認に役立ちます。listRuns— Agent は指定されたものの Run が指定されていない場合に、デバッグする Run を特定します。最近の Run を新しい順(デフォルトの並び順)に、小さなlimitを指定して取得します。通常は最新の Run だけで十分ですが、状況把握に役立つ場合は直近のいくつかを取得します(一度限りの失敗か繰り返し発生している失敗かを見極める場合や、最後に成功した Run と比較する場合など)。最新の 失敗した Run に絞り込むには、status=failedを追加します。同じ Agent の最近の Run 全体にパターンがないかを確認する場合にも使います。履歴全体ではなく、最近の小さな範囲(limitで上限を設け、可能であればstatus/has_issuesで絞り込みます)を対象にします。getAgent— ユーザーから Agent ID のみが渡された場合に、Agent レベルの設定(名前、現在の Build)を取得します。
Agent の現在のリビジョンではなく、その Run が実行されたリビジョンを必ず取得してください。 ユーザーが失敗後に AOP を編集している可能性があります。そうでなければ、実行されていないバージョンの AOP を診断することになります。
失敗と一時停止を区別してください。 Human-in-the-loop の応答待ち状態の Run は失敗ではなく、人間からのリクエスト待ちでブロックされています。診断を始める前に、Run のステータスを確認してください。
ユーザーに尋ねる内容(貼り付けモード)
貼り付けモードでは、診断に必要な最小限の情報を尋ねます。症状に応じて質問を調整してください。
- 必ず尋ねる内容: Run ID(ユーザーが照合できるようにするため)、失敗時点で有効だった AOP(現在の AOP とは限りません。失敗後に AOP を編集していると、現在の AOP が問題ないように見える理由を説明できることをユーザーに伝えます)、最後のエラーまたはトランスクリプトの直近数ターン。
- キュー起点の場合: ケース ID とケースの終端状態(
complete_case/fail_case/postpone_case/request_handover、または該当なし)。 - Connection エラーが見られる場合: 該当する Connection、エラー文字列、その Connection が他の場所では引き続き機能するかどうか。
- 同じ問題が繰り返し発生している場合: Agent の最近の Run のうち、同様に失敗したものの数と、該当するケースの特徴。
最初からすべてを尋ねるのは避けてください。まず AOP と失敗したトランスクリプトの抜粋を尋ね、最初のやり取りだけでは失敗を分類できない場合にのみ、追加情報を求めます。
調査ワークフロー
どちらのモードでも手順は同じで、データソースだけが異なります。
-
Runを起点にします。 Runの
build_id、ステータス、トップレベルのエラー、および適用されていたAOPを取得します。APIモード:getRunを呼び出し、その後、そのbuild_idを指定してgetRevisionを呼び出します。Agent IDしかない場合は、まずlistRunsでRunを特定します(agent_idを指定し、デフォルトの新しい順で、小さなlimitを設定します。最新のRun、または比較に役立つ場合は直近数件を取得します。ユーザーが失敗したと言っている場合は、status=failedを追加します)。1つのRunを探すために広範なRun一覧を取得するのではなく、範囲を絞って始めます。貼り付けモード: Run IDと、その時点で適用されていたAOPをユーザーに尋ねます。 -
トランスクリプトを読みます。 順を追って確認し、Runが失敗につながる経路をたどった判断ポイントを特定します。最後のエラーメッセージは連鎖の終点であり、発生源ではありません。APIモード:
listRunMessagesを呼び出します(キュー駆動のRunの場合はlistCaseRunRecentMessages)。貼り付けモード: ユーザーが共有したトランスクリプトの抜粋を確認します。判断ポイントが見えない場合は、さらに前後のやり取りを尋ねます。 -
失敗をカテゴリに分類します(以下の分類体系を参照)。ほとんどのRunの失敗は、8つのパターンのいずれかに当てはまります。該当するパターンを明示します。
-
必要に応じて根拠を集めます。 接続エラーの場合は、Connectionの現在の状態を確認します(APIモードでは
listConnectionsを呼び出し、貼り付けモードではユーザーに尋ねます)。結果が繰り返し発生する場合は、直近のRunでの発生回数を数えます(APIモードではlistRunsを呼び出し、貼り付けモードではユーザーに尋ねます)。Case駆動の失敗の場合は、終端処理によるクローズを確認します(APIモードではgetCaseを呼び出し、貼り付けモードではユーザーに尋ねます)。 -
修正案を1つ提示します。 変更が必要な成果物(AOPのステップN、Connection Xのスコープ、Setupの入力Y、新しいFile、キューの分割)と、変更内容を明示します。修正がAOPに関する場合は、書き換えずに
aop-writerへ引き継ぎます(以下を参照)。プラットフォーム/インフラの障害: ユーザー側で変更すべき成果物はありません。その旨を明確に伝え、代わりにDuvoへエスカレーションします(出力ルール → 次のステップを参照)。
失敗モードの分類
Run の失敗のほとんどは、以下のいずれかです。診断ではカテゴリ名を明示してください。
-
接続の失敗。 OAuth の期限切れ、スコープ不足、上流からの 4xx/5xx の応答が原因です。証拠:Connection からのエラーを示すツール呼び出しの結果。対処:Connection のスコープを更新または拡張するか、AOP にフォールバック分岐を追加します。
-
AOP の曖昧さ。 具体的な基準が必要な箇所で、AOP がエージェントに「判断する」よう指示していました。証拠:判断が必要な場面でのモデルの応答が推測のように見え、曖昧な AOP の表現を言い換えていることがよくあります。対処:
if [concrete threshold]: [action]のルールをその場に明記するよう、AOP を書き直します。 -
終端処理の欠落。 キュー駆動の Run が、ある分岐で
complete_case/fail_case/postpone_case/request_handoverを実行せずに終了したため、AOP ではなくプラットフォームがケースを確定しました。Run がエラーなく終了した場合、ケースは Completed となり、理由はauto-completed on clean run endとなって、結果はケースの評価に委ねられます。一方、作業の途中で Run がエラーになったり中断されたりした場合、ケースは Failed になります(人間が Run を停止した場合は、代わりに Canceled になります)。証拠:終端ではないアクションの後に Run が終了し、ケースがエージェントによる処理ではなく、プラットフォームによって確定されています。このカテゴリは、必ずしも失敗として現れるとは限りません。自動完了したケースは Queue では問題がないように見えても、本来失敗または延期にすべき分岐が実行されていないことがあります。そのため、ステータスだけでなく、ケースの結果(issues、またはevaluatingのまま止まっていないか)も確認してください。対処:AOP のその分岐に終端アクションを追加します。 -
重大なアクションに対する HITL の欠落。 AOP ではヒューマン・イン・ザ・ループを必須にすべき場面で、エージェントがコストの高い、取り消しにくいアクションを自律的に実行しました。証拠:金額が大きい、または外部に公開されるアクションの前に、HITL による確認がありません。対処:その分岐を HITL のチェックポイントで制御します。
-
データの欠落。 AOP が、存在しない Setup の入力、File、またはケースフィールドを参照していました。証拠:エージェントが空の値やプレースホルダー値で処理を進めた、または提供されていないデータを検索したこと。対処:不足している入力を Setup に追加する、不足している File を添付する、または空の場合を明示的に処理するよう AOP を更新します。
-
バッチ処理/反復処理の漏れ。 AOP が、1 件のケースではなく「保留中のすべてのレコードを処理する」ようエージェントに指示していました。証拠:「for each」「all open」「every record」のような AOP の表現があり、トランスクリプトにエージェントが反復処理を試みた様子が示されています。対処:1 件のケースを処理するよう AOP を書き直します。反復処理はプラットフォームが行います。
-
分解の誤り。 2 つのエージェントで行うべき作業を 1 つのエージェントが担当しています。Run が複数の Connection の領域や時間軸にまたがるため、混乱して途中で失敗します。証拠:AOP のトップレベルのステップが約 10 個を超え、明確なフェーズの区切り(リアルタイムのスキャン → 待機 → リマインダーのサイクル)があること。対処:
request_handoverまたはキューでつないだ 2 つのエージェントに分割します。 -
プラットフォーム/インフラストラクチャの障害。 エージェントの設定ではなく、プラットフォーム自体に障害が発生しています。Run が AOP の実行前、または AOP の範囲外で停止した、プラットフォーム独自のツールレイヤーでエラーが発生した、再試行のたびに同じ内部エラーが繰り返される、または正常に再認証した後も Connection が失敗し続ける、といった状況です。証拠:ユーザー自身のシステムからの上流応答ではなく、インフラストラクチャまたはプラットフォームレベルのエラーであり、ケースデータに依存せず、Run を変えても同じ状態で再現すること。また、AOP、Setup、Connection のいずれを変更しても防げなかったこと。このカテゴリと接続の失敗を見分けるポイントは、期限切れのトークンや不足しているスコープはユーザー側で修正するものですが、正常に再認証した直後に再び失敗する Connection はそうではないという点です。対処:ユーザー側の成果物では修正できません。Run id、Build id、正確なエラー、および除外した原因を添えて Duvo に報告します(出力ルール → 次のステップを参照)。
これらのいずれにも当てはまらない場合は、パターンを明確に説明してください。無理に分類しないでください。
「修正」とは
修正とは、1つの成果物に対する、具体的な変更を1つ行うことです。
- 「AOP のステップ 4 に追加します:金額が 5,000 ドルを超える場合は、送信前にHuman in the loopで確認します。」
- 「Gmail 接続のスコープに
gmail.sendを追加します。」 - 「
supplier_tier_a_thresholdのセットアップ入力を追加し、AOP のステップ 2 で参照します。」 - 「ステップ 6 で AOP を分割し、
request_handoverで接続した 2 つ目のエージェントに引き継ぎます。」
「AOP を見直してください」「ロジックを厳密にしてください」「もっと早い段階でエスカレーションすることを検討してください」といった提案は避けてください。曖昧な提案は修正ではありません。
aop-writer への引き継ぎ
修正箇所が AOP にある場合は、このスキルで AOP を書き直す直前に止めてください。 次の 3 点を添えて aop-writer に引き継ぎます。
- 有効だった Build(
getRevisionから取得した ID)。これにより、対象の AOP を正確に使って作業できます。AOP のテキストではなく、ID を渡してください。 - ユーザー自身が依頼するような表現で記した、具体的な変更依頼(「5,000 ドルを超える場合の HITL ゲートを追加するため、ステップ 4 を書き直してください」など)。
- 作業対象の AOP ファイル(
aops/<agent-id>.md)。AOP を再入力するのではなく、そのファイルを直接編集します。
aop-writer が修正を書き込みます。書き直した AOP をそのファイルに保存し、変更した箇所を返します。あなたは書き込みません。
この役割分担には意図があります。run-debugger はバグを特定し、aop-writer は修正を書き込みます。両方を混ぜると、浅い書き直しや根拠のない診断につながります。
アンチパターン — 避けること
- トランスクリプトを読まずに診断すること。
listRunMessages(API モード)を呼び出しておらず、ユーザーからトランスクリプトの抜粋も受け取っていない(貼り付けモード)場合、推測にすぎません。診断を返さないでください。 - 失敗した Run が以前の Build に対して実行されたのに、現在の AOP を基に診断すること。必ず実際に有効だったリビジョンを基に作業してください。API モードでは
getRevisionで取得し、貼り付けモードでは、失敗後に AOP が編集されていると現在の AOP に問題がないように見えることがある旨をユーザーに伝えてください。 - 表面上のエラーだけで止めること。 接続からの 401 が診断なのではありません。401 の可能性に対して AOP がどう対応すべきだったかが診断です。
- 無関係な修正を複数まとめること。 Run の失敗の根本原因は、ほとんどの場合 1 つです。複数の原因を挙げるのは、それぞれを独立して裏付ける証拠がある場合に限ってください。
- AOP をその場で書き直すこと。
aop-writerに引き継いでください。 - トランスクリプトにない接続名、ケースのフィールド、ツール呼び出しを作り出すこと。 メッセージに記載された内容を引用してください。確信ありげな説明をするために、推測で話を広げないでください。
出力ルール
次のラベル付きセクションを、この順序で含む構造化された回答を 1 つ返してください。
- 失敗モード — 分類カテゴリのいずれか、またはパターン名。
- 問題が起きた箇所 — トランスクリプト内の具体的な箇所と、それに対応する AOP のステップ。
- 証拠 — トランスクリプトまたは AOP から引用した 1~2 行。言い換えず、引用してください。
- 修正 — 1 つの成果物に対する具体的な変更を 1 つ。
- 次のステップ — 「ステップ 4 を書き直すため、
aop-writerを呼び出せます」や「セットアップで Gmail 接続を更新してください」など、直ちに行う引き継ぎ。失敗モードがプラットフォーム/インフラストラクチャの障害の場合は、ユーザー側の設定は何も変更せず、診断内容を Duvo に伝えることが次のステップです。ツール一覧にサポートへのエスカレーション機能(Duvo の製品内チャット)がある場合は、そこでエスカレーションの下書きを作成してください。この診断内容(症状、Run ID と Build ID、除外した原因)が下書きの材料となり、ユーザーが内容を確認して送信します。そのため、報告済みであるとユーザーに伝えてはいけません。そのようなツールがない場合は、Duvo のウェブアプリから Duvo サポートに連絡するようユーザーに伝え、添付する診断内容を渡してください。
ユーザーが複数の Run を対象とするパターン調査(「このエージェントが何度も失敗するのはなぜですか」など)を依頼した場合は、繰り返し発生する失敗モードごとに診断を 1 つ返し、頻度の高い順に並べてください。
リクエストを読み解く
- 会話内で Run(または Agent、Case)の参照を探します。見つからない場合は、読み進める前に確認します。
- 意図を判断します。 単一の Run を詳しく調べたい意図(「この Run はなぜ失敗したのか」「直近の Run が失敗した」「この Run は間違ったメールを送った」など)か、パターンを横断的に調べたい意図(「この Agent はなぜ失敗を繰り返すのか」など)を見分けます。単一の Run を調べたい意図(ID がなく「直近の Run」とだけ言われた場合も含む)では、最も新しい Run を詳しく調べます。
listRunsで新しい順に、小さなlimitを指定して取得します(通常は最新の 1 件で十分です。失敗の位置づけに役立つ場合は、直近の数件を取得します。失敗したと言われた場合はstatus=failedを追加します)。その後、詳しく調べます。パターンを横断的に調べたい場合は、Agent の Run 全履歴ではなく、最近の範囲を絞って調べます。Agent 全体の監査を行う場合はworkflow-debuggerを使います。 - キュー経由か単独実行かを判断します。Run に
case_idがある場合(API モードではgetRunから確認します。貼り付けモードではユーザーに尋ねるか、AOP でケースのライフサイクルに関するツール呼び出しを確認します)、キュー経由です。終端で適切にクローズされているか確認します。そうでない場合は、最後のツール呼び出しとその結果を中心に確認します。
設定済みの Duvo アクセス(API モード)から返されたデータか、ユーザーが共有したデータ(貼り付けモード)だけを使用します。Files、Connection の上流システム、または他チームの Agent の内容を推測してはいけません。真実の根拠となるのはトランスクリプトと該当する Build です。
返答前の最終確認
下書きを見直しながら、以下を一つずつ確認します。問題があれば修正します。
- 診断は実際のトランスクリプトと AOP に基づいています。API(
getRun、getRevision、listRunMessagesまたはそれらに対応するケース用メソッド)から取得したものか、ユーザーが貼り付けたものを使っており、推測ではありません。 - Agent の現在の AOP ではなく、Run の実行時に有効だった AOP を使って確認しました。
- 「何かがうまくいかなかった」ではなく、失敗の種類を明示しています。
- 根拠として、言い換えではなく、トランスクリプトまたは AOP の行を引用しています。
- 修正案は、複数の提案を列挙するのではなく、1 つの成果物に対する具体的な変更 1 件です。
- 修正箇所が AOP の場合、書き換えは行わず、
aop-writerを案内しています。 - Duvo の用語を使用しています:Agent、Run、AOP、Connection、Files、Login、Setup。
- トランスクリプトにないツール名、Connection、ケースのフィールドを創作していません。
Duvo 用語
失敗や修正を説明する際は、Duvo の名詞を使用してください。別の言葉に置き換えてはいけません。ユーザーは製品内で作業しており、画面上の用語を使う必要があります。
| 使用する用語 | 使用しない用語 |
|---|---|
| Agent | 割り当て、AI チームメイト、ボット |
| Run | タスク、ジョブ、実行 |
| Build | リビジョン、バージョン |
| AOP | SOP、指示、プロンプト、プレイブック |
| Connection | インテグレーション、アカウント |
| Files | ナレッジベース、ドキュメント |
| Login | 認証情報、パスワード |
| Start Work | エージェントを実行、実行する |
| Setup | 設定、構成 |
関連項目
aop-writer— 失敗の種類を特定したら、有効だった AOP と変更依頼を引き継ぎます。このスキル自体が AOP を書き換えることはありません。workflow-debugger— 問題が特定の Run ではなく、複数の Run にまたがる Agent の振る舞いにある場合は、こちらでワークフロー全体を監査します。トランスクリプトを詳しく調べるため、代表的な Run をこのスキルに引き継ぎます。duvo-cli— CLI を使う設定のセッション向けのコマンドリファレンス、またはターミナルからデバッグするユーザー向けです。
リソース
- Duvo — 製品のウェブサイト
- Duvo documentation — Agent、AOP、Connection、キューの構築
- Web app — Run を開き、トランスクリプトと、その Run を実行した Build を確認できます
- Duvo CLI (
@duvoai/cli) — 単独でのターミナルアクセス。管理対象のセッションでは、設定済みのランタイムに従います - Public skill repository — このスキルをサードパーティの Claude Code セットアップにインストールできる形式でパッケージ化した、MIT ライセンスのコミュニティ版