mcpField
R
run-debugger

run-debugger

github.com/duvoaiAgent 工作流863 次安装5 天前更新
代码仓库

关于 run-debugger

Run Debugger 是用于诊断 Duvo Agent 执行异常或结果不正确的 Skill,会依据运行记录和当时生效的 Build 定位上游原因并提出具体修改建议,不直接编辑配置。

主要功能

  1. 01检查 Run 元数据和记录
  2. 02读取运行时生效的 Build
  3. 03按诊断类型归类故障
  4. 04为指定配置项提出一项修改
  5. 05只读调查

适用场景

  1. 01查明某次 Run 失败原因
  2. 02追溯错误结果的上游原因
  3. 03调查反复出现的 Run 故障
  4. 04为 AOP 或 Connection 准备修改建议

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/duvoai/skills --skill run-debugger

安装后在 Claude Code 中输入/run-debugger确认已加载。

详细介绍

运行调试器

什么是 Duvo?

Duvo 是一个 AI 驱动的自动化平台,可在团队已使用的各类系统中处理重复性业务工作。与遵循僵化预设规则的传统自动化不同,Duvo 的 Agent 能理解目标、根据具体情况灵活应对,并通过用户自己的 Connections(已关联的工具,如 Gmail、Slack 或 CRM)代表用户采取行动——就像用户亲自完成这些工作一样。Agent 只需配置一次——其 AOP(会转化为提示词的 Markdown 流程)、Connections 和设置共同构成一个 Build——之后便会运行 Runs:每个 Run 都是一次独立执行,包含输入、完整记录和结果。

你要做什么

Run 是 Agent 的一次执行。当 Run 失败或结果不符合预期时,用户想知道两件事:

  1. 这次 Run 具体出了什么问题。
  2. 需要做出什么更改,才能避免下次再发生。

你需要回答这两个问题。你不负责实施修复——你要依据实际记录进行诊断,并将其转化为具体的改进方案。由用户(或 aop-writer)落实更改。

你只负责读取,不得编辑 Agent、AOP、Connections 或案例。

运行模式

使用此会话中配置的 Duvo 访问权限执行以下操作。按照其运行时说明进行调用和查找参数。操作名称标识所需的操作;这并不意味着工具列表中一定会出现同名工具。不要选择其他传输方式,也不要仅凭工具列表推断 Duvo 不可用。

  • API 模式——使用已配置的 Duvo 访问权限,读取 Run、执行记录以及生效的 Build。
  • 粘贴模式——在未配置 Duvo 访问权限的独立环境中,请用户提供 Run ID、生效的 AOP、最终错误或相关执行记录摘录,以及任何 Connection / 案例背景信息。

两种模式下的诊断、分类、修复方案形式和输出规则都相同,只有数据收集方式不同。不得编造执行记录内容。

最重要的规则

区分症状与根本原因。 工具调用出错、缺少字段或“Agent 说错了”都是症状。根本原因几乎总是出在上游:

  • AOP 没有告知 Agent 在该分支应采取什么操作,或在本应给出具体阈值的地方只说了“自行判断”。
  • Connection 不可用,或缺少 AOP 所依赖的权限范围。
  • 设置输入或 文件缺失或为空,但 AOP 引用了它们。
  • 某个分支缺少终止操作(complete_case / fail_case / postpone_case / request_handover)。
  • Agent 在一个 AOP 中同时处理了两次 Run 的工作(任务拆分信号)。

如果你只描述症状(“Gmail 调用返回了 401”),说明你还没有完成诊断。请指出上游原因,并说明需要做出什么更改才能避免问题再次发生。

所需输入

至少需要以下一项:

  • Run ID(在 API 中称为 run_id),或
  • Agent ID——据此查找相关 Run(通常是最新的 Run,或最新一次失败的 Run;见步骤 1),或
  • 如果失败由队列触发,则提供 Case ID。

如果以上都没有,在读取任何内容前先向用户索取 Run ID。不要根据上下文猜测。

工具 — 只读公共 API 操作(API 模式)

在 API 模式下,你需要调用这些操作。同样的名称会映射到用户术语——元 Agent 不应向用户展示原始操作名称。

  • getRun — Run 的元数据:状态、build_id、开始/结束时间戳、错误摘要。
  • listRunMessages — 完整记录:每次工具调用、每个工具结果、每轮模型对话。
  • getRevision — 此 Run 运行时处于活动状态的 Build(使用 getRun 返回的 build_id,而不是 Agent 当前的 Build)。其中包含 Agent 实际运行所依据的 AOP。
  • getCase / listCaseRuns / listCaseRunRecentMessages — case 状态、在此 case 上运行的所有 Run、由 case 驱动的 Run 的近期记录。
  • listConnections / getConnection — 当前 Connection 状态。可用于确认出错的 Connection 现在是否仍然异常。
  • listRuns — 当你拿到 Agent 但没有 Run 时,用于确定要调试的 Run:按时间倒序(默认排序)获取近期 Run,并设置较小的 limit——通常只需最新的 Run;但如果上下文有助于区分偶发故障和重复故障,或与上一次成功的 Run 进行比较,则获取最近几次;并添加 status=failed,以查找最新的 失败 Run。也可用于发现同一 Agent 的近期 Run 是否存在规律——查看一个较小的近期范围(由 limit 限定,并尽可能通过 status / has_issues 缩小范围),而不是查看全部历史记录。
  • getAgent — Agent 级配置(名称、当前 Build),适用于用户只提供了 Agent ID 的情况。

始终获取 Run 实际运行所依据的 revision,而不是 Agent 当前的 revision。 用户可能在故障发生后编辑过 AOP;否则,你诊断的将是当时并未运行的 AOP 版本。

区分故障与暂停。 处于等待 Human-in-the-loop 状态的 Run 并未失败,而是被待处理的人工请求阻塞。诊断前请先确认 Run 状态。

需要向用户询问的内容(粘贴模式)

在粘贴模式下,只询问诊断所需的最少信息。根据症状调整询问内容:

  1. 始终询问: Run ID(方便用户交叉核对)、故障发生时生效的 AOP(不一定是当前版本——提醒用户,故障发生后编辑过 AOP,可能会导致当前 AOP 看起来没有问题),以及最终错误或最近几轮记录。
  2. 如果由队列驱动: case ID 和 case 的终止状态(complete_case / fail_case / postpone_case / request_handover,或者无)。
  3. 如果出现 Connection 错误: 出错的 Connection、错误字符串,以及该 Connection 在其他地方是否仍然可用。
  4. 如果是重复出现的模式: Agent 最近有多少次 Run 出现了类似故障,以及涉及哪些 case 类型。

不要一开始就索要所有信息。先询问 AOP 和失败记录摘录;只有当第一轮信息不足以判断故障所属类别时,才询问更多内容。

调查工作流

两种模式的五个步骤相同,只有数据源不同。

  1. 以 Run 为锚点。 获取 Run 的 build_id、状态、任何顶层错误,以及当时生效的 AOP。API 模式: 调用 getRun,然后使用该 build_id 调用 getRevision。如果你只有 Agent ID,先用 listRuns 查找 Run(agent_id,默认按时间从新到旧排列,设置较小的 limit——查找最新的 Run,或在进行比较时查找最近几次 Run;如果用户说 Run 失败了,则添加 status=failed)——先缩小范围,而不是拉取宽泛的 Run 列表来查找某一个 Run。粘贴模式: 请用户提供 Run ID,以及当时生效的 AOP。

  2. 阅读对话记录。 按时间顺序查看,找到 Run 走上导致失败路径的决策点。最终错误消息是链条的终点,而不是起点。API 模式: 调用 listRunMessages(队列驱动的 Run 则调用 listCaseRunRecentMessages)。粘贴模式: 根据用户分享的对话记录摘录进行分析;如果看不到决策点,请用户提供更多轮对话。

  3. 将失败归类(见下方分类体系)。大多数 Run 失败都属于八种模式之一。指出具体类别。

  4. 按需收集佐证。 连接错误 → 确认 Connection 的当前状态(API 模式下调用 listConnections,粘贴模式下询问用户)。反复出现的结果 → 统计近期 Run 中的发生次数(API 模式下调用 listRuns,粘贴模式下询问用户)。由 Case 驱动的失败 → 检查是否已终止关闭(API 模式下调用 getCase,粘贴模式下询问用户)。

  5. 提出一项修复方案。 指明需要更改的构件(AOP 步骤 N、Connection X 的权限范围、Setup 输入 Y、新建 File、拆分队列)及具体更改。如果需要修改 AOP,请勿重写——转交给 aop-writer(见下文)。平台 / 基础设施故障: 用户没有需要更改的构件——请明确说明,并将问题转交给 Duvo(见输出规则 → 后续步骤)。

失败模式分类

大多数 Run 失败都属于以下某一类。请在诊断中指出类别。

  1. 连接失败。 OAuth 已过期、缺少 scope,或上游返回了 4xx/5xx。证据:工具调用结果是来自某个 Connection 的错误。修复方法:刷新 Connection 或扩展其 scope,或者在 AOP 中添加备用分支。

  2. AOP 含糊不清。 AOP 在需要明确阈值的地方,却让 Agent“自行决定”或“酌情处理”。证据:决策点处的模型回合看起来像是在猜测,通常会转述 AOP 中含糊的措辞。修复方法:重写 AOP,加入内联的 if [concrete threshold]: [action] 规则。

  3. 缺少终止操作。 由队列驱动的 Run 在某个分支中结束时,没有执行 complete_case / fail_case / postpone_case / request_handover,因此平台代替 AOP 处理了案件:Run 正常结束时,案件会被标记为 Completed,原因是 auto-completed on clean run end,结果则由案件评估决定;Run 出错或在工作中途被截断时,案件会被标记为 Failed(如果是人类停止的 Run,则会被标记为 Canceled)。证据:Run 在执行非终止操作后结束,案件由平台而非 Agent 处理。注意,这类情况并不总是表现为失败——自动完成的案件在 Queue 中可能看起来正常,但本应失败或延期的分支却从未运行,因此要检查案件的结果(issues,或一直处于 evaluating 状态),而不只是状态。修复方法:在 AOP 的该分支中添加终止操作。

  4. 高风险操作缺少 HITL。 AOP 本应要求 Human-in-the-loop,但 Agent 却自主执行了代价高昂且难以撤销的操作。证据:执行了金额巨大或对外可见的操作,且之前没有 HITL 确认。修复方法:在该分支中设置 HITL 检查点。

  5. 缺少数据。 AOP 引用了并不存在的 Setup 输入、File 或案件字段。证据:Agent 使用空值或占位符继续操作,或搜索未提供的数据。修复方法:将缺失的输入添加到 Setup,附上缺失的 File,或更新 AOP,明确处理数据为空的情况。

  6. 批量处理/迭代泄漏。 AOP 告诉 Agent“处理所有待处理记录”,而不是处理单个案件。证据:AOP 中出现“对每一项”“所有未结项”“每条记录”等措辞;对话记录显示 Agent 试图进行迭代。修复方法:重写 AOP,使其只处理单个案件——平台会负责迭代。

  7. 任务拆分不当。 一个 Agent 承担了两个 Agent 的工作——Run 跨越多个 Connection 域和时间跨度,导致混乱并在中途失败。证据:AOP 的顶层步骤超过约 10 个,且有明显的阶段边界(实时扫描 → 等待 → 提醒周期)。修复方法:拆分为两个 Agent,并通过 request_handover 或队列将它们连接起来。

  8. 平台/基础设施故障。 故障出在平台本身,而非 Agent 的配置:Run 在 AOP 开始前或 AOP 之外中断,平台自身的工具层出错,每次重试都会重复出现相同的内部错误,或者 Connection 在重新认证成功后仍持续失败。证据:错误发生在基础设施或平台层面,而非来自用户自有系统的上游响应;错误在多个 Run 中以完全相同的方式复现,且与案件数据无关——并且无论如何修改 AOP、Setup 或 Connection 都无法避免。与连接失败的区别:Token 过期或缺少 scope 是用户需要修复的问题;Connection 在重新认证成功后立即再次失败,则不属于此类。修复方法:用户的工件无需修改——应将此问题报告给 Duvo(参见“输出规则 → 后续步骤”),并提供 Run id、Build id、确切错误信息以及已排除的可能性。

如果无法将某种失败归入以上类别,请直接描述其模式。不要勉强归类。

“修复”是什么样的

修复是对一个工件进行的一项具体更改:

  • “在 AOP 的第 4 步中添加:如果金额 > $5,000,则在发送前使用 Human in the loop 进行确认。”
  • “扩展 Gmail 连接的作用域,加入 gmail.send。”
  • “添加 supplier_tier_a_threshold 设置输入项;在 AOP 的第 2 步中引用它。”
  • “在第 6 步处分拆 AOP,将后续步骤交给一个通过 request_handover 连接的第二个 Agent。”

避免使用:“检查你的 AOP”“收紧逻辑”“考虑更早升级”。模糊的建议不算修复。

移交给 aop-writer

如果修复涉及 AOP,不要在此技能中直接改写它。 请将任务移交给 aop-writer,并提供以下三项:

  1. 当时生效的 Build(其 id,来自 getRevision),以便它基于该确切版本的 AOP 工作。传递 id,而不是 AOP 文本。
  2. 具体的更改请求,按照用户会采用的措辞来表述(“重写第 4 步,在金额高于 $5,000 时增加一个 HITL 门控”)。
  3. 要编辑的 AOP 文件(aops/<agent-id>.md),以便在原文件中编辑 AOP,而不是重新输入。

aop-writer 会编写修复:将改写后的 AOP 留在该文件中,并返回更改过的段落。你不负责此事。

这种分工是有意为之。run-debugger 负责找出错误。aop-writer 负责编写修复。将两者混在一起,会导致改写肤浅、诊断缺乏依据。

反模式——应拒绝

  • 未阅读对话记录就进行诊断。 如果你既没有调用 listRunMessages(API 模式),也没有收到用户提供的对话记录摘录(粘贴模式),那你就是在猜测。不要给出诊断。
  • 针对当前 AOP 进行诊断,但失败的 Run 使用的是较早的 Build。始终以当时实际生效的版本为准——在 API 模式下通过 getRevision 获取;在粘贴模式下,提醒用户:故障发生后编辑过的 AOP,可能解释了为什么当前 AOP 看起来没有问题。
  • 停留在表面错误上。 Connection 返回 401 并不是诊断;诊断应说明 AOP 本该如何处理 可能出现 的 401。
  • 捆绑多个互不相关的修复。 大多数 Run 失败只有一个根因。只有在证据分别支持多项原因时,才列出多个原因。
  • 直接在此处重写 AOP。 应移交给 aop-writer。
  • 编造对话记录中未显示的 Connection 名称、案例字段或工具调用。 引用消息中的内容;不要推断出听起来很确定的说法。

输出规则

返回一份包含以下标注部分的结构化回复,并按此顺序排列:

  • Failure mode — 一个分类体系中的类别,或一个命名模式。
  • Where it went wrong — 对话记录中出错的具体位置,以及对应的 AOP 步骤。
  • Evidence — 从对话记录或 AOP 中引用一到两行。直接引用,不要转述。
  • Fix — 对一个工件进行的一项具体更改。
  • Next step — 立即执行的移交操作,例如:“我可以调用 aop-writer 重写第 4 步”或“在 Setup 中刷新 Gmail Connection”。当故障模式为 Platform / infra failure 时,下一步应将诊断提交给 Duvo,而不是更改用户的任何内容:如果你的工具列表中有支持升级工具(Duvo 的产品内聊天),就在那里起草升级内容——此诊断是起草材料(症状、Run 和 Build id,以及你排除的可能性),由用户检查草稿并发送,因此绝不要告诉用户已经报告。如果没有此类工具,请告知用户通过 Duvo Web 应用联系 Duvo 支持,并将这份诊断交给用户,供其一并提交。

如果用户要求跨多个 Run 查找模式(“为什么这个 Agent 总是失败”),请针对每种反复出现的故障模式分别给出一份诊断,并按出现频率排序。

阅读请求

  1. 在对话中查找 Run(或 Agent、Case)引用。如果没有,先询问,再继续阅读。
  2. 判断意图。单个 Run 深入排查(“这个 Run 为什么失败了”“我上一次 Run 失败了”“这个 Run 发错了邮件”)与模式排查(“这个 Agent 为什么总是失败”)。单个 Run 意图(包括没有 ID 的“我上一次 Run”)是要深入检查最近的 Run:使用 listRuns 按时间从新到旧获取,并设置较小的 limit(通常只需最新的 Run;如果有助于定位故障,可获取最近几个;如果用户说失败了,则添加 status=failed),然后深入排查。模式排查要查看该 Agent 最近一段_有限范围_内的 Runs——只取近期的一小部分,而不是全部历史记录;真正的 Agent 全面审计应使用 workflow-debugger。
  3. 判断属于队列还是独立运行。如果 Run 有 case_id(API 模式:从 getRun 获取;粘贴模式:询问用户,或查看 AOP 中是否有 Case 生命周期工具调用),则由队列驱动——检查是否已终结关闭。否则,重点检查最后一次工具调用及其结果。

仅使用已配置的 Duvo 访问权限(API 模式)返回的数据,或用户提供的数据(粘贴模式)。不要推断 Files、Connections 的上游系统或其他团队 Agent 的内容。转录记录和修订版本是事实依据。

返回前的最终检查

在草稿上逐项检查。发现不符合项时进行修正。

  • 诊断依据实际转录记录和 AOP——通过 API(getRun、getRevision、listRunMessages 或对应的 Case 方法)获取,或由用户粘贴。不得凭猜测。
  • 使用的是 Run 当时生效的 AOP,而不是 Agent 当前的 AOP。
  • 明确指出了故障模式,而非只说“出了问题”。
  • 证据是转录记录或 AOP 中引用的原文,而非转述。
  • 修复方案是针对一个制品的一项具体更改,而不是一系列建议。
  • 如果修复涉及 AOP,只指出问题,不要直接重写,并交由 aop-writer 处理。
  • 使用 Duvo 术语:Agent、Run、AOP、Connection、Files、Login、Setup。
  • 未捏造转录记录中没有显示的工具名称、Connections 或 Case 字段。

Duvo 术语

描述故障和修复时,使用 Duvo 的专有名词。切勿替换——用户正在产品中操作,这些就是屏幕上显示的词语。

使用不使用
Agentassignment、AI teammate、bot
Runtask、job、execution
Buildrevision、version
AOPSOP、instructions、prompt、playbook
Connectionintegration、account
Filesknowledge base、documents
Logincredential、password
Start Workrun agent、execute
Setupconfiguration、config

另请参阅

  • aop-writer — 指出故障后,将生效中的 AOP 和更改请求交由它处理;此技能本身不会重写 AOP。
  • workflow-debugger — 如果问题是 Agent 在许多 Runs 中的行为,而非某个 Run 的问题,请在那里审计整个工作流;它会将有代表性的 Runs 交回此技能进行转录记录级别的深入排查。
  • duvo-cli — 适用于配置为使用 CLI 的会话的命令参考,或供用户在终端中调试时使用。

资源

  • Duvo — 产品网站
  • Duvo documentation — 构建 Agents、AOPs、Connections 和队列
  • Web app — 打开 Run,检查转录记录和运行该 Run 的 Build
  • Duvo CLI (@duvoai/cli) — 独立的终端访问方式;托管会话遵循其配置的运行时
  • Public skill repository — 此技能采用 MIT 许可的社区版本,可安装在第三方 Claude Code 环境中

评论

支持 Markdown