关于 FailTrace
FailTrace 是面向编码 Agent 的本地命令行工具和 MCP 服务,用于调查间歇性测试失败。它保存可重复的试验结果,帮助对照已捕获的失败检查修复方案。
主要功能
- 01重复测试并捕获失败基线
- 02比较正常与失败的试验
- 03通过 bisect 搜索 Git 历史
- 04缩减复现问题的输入
- 05根据已存基线验证补丁
- 06保存可重放的调查记录
适用场景
- 01编辑前捕获不稳定测试失败
- 02根据原始失败检查修复方案
- 03查找与回归相关的 Git 变更
- 04将输入缩减为更小的复现样例
MCP 相关
本地 stdio MCP 服务提供七种工具,与命令行共用引擎,可重复试验、比较结果、搜索回归、缩减输入、验证和重放。MCP 客户端还可读取已保存的试验与日志页面。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
7收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cwd | string | 否 | 工作目录;相对路径相对于服务端工作目录解析。 |
| env | object | 否 | 显式环境变量覆盖项。null 会取消继承的变量。 |
| args | array | 否 | 字面量可执行文件参数(包括空数组)会停用 Shell 解析。Minimize 仅将整个 `{input}` 参数替换为每个候选路径。Windows 的 .cmd/.bat shim 需要 Shell 模式。 |
| repeat | integer | 否 | |
| command | string | 是 | args 缺省时为 Shell 命令;存在 args 时为可执行文件。命令和参数合计不得超过 64 KiB。使用你的本地权限执行。 |
| predicate | any | 否 | |
| timeoutMs | integer | 否 | |
| captureEnv | array | 否 | 仅将这些选定的环境变量记录在元数据中。 |
| concurrency | integer | 否 | 同时运行的试验上限;默认为 1,最多为 64。共享端口、文件、数据库以及资源竞争可能改变失败概率。 |
| artifactsDir | string | 否 | |
| captureContext | object | 否 | 捕获已声明的常规输入/设置/源文件标识以供验证。指定源文件时,范围仅限文件;否则捕获 Git 标识。相关变量名请另行使用 captureEnv。 |
| captureContext.inputFiles | array | 否 | |
| captureContext.setupFiles | array | 否 | |
| captureContext.sourceFiles | array | 否 | |
| maxOutputBytes | integer | 否 | 每次试验的 stdout/stderr 合计字节上限;默认为 16 MiB。达到上限的结果无法确定。 |
| maxTotalOutputBytes | integer | 否 | 整个实验(包括所有候选项)的输出字节总上限;默认为 256 MiB。 |
| executionRequirement | object | 否 | 在预期检查运行后发出的可选检查点。缺少证据会导致分类/验证无法确定;Verify 会从基线继承此项。 |
| executionRequirement.stream | enum | 是 | stdout | stderr |
| executionRequirement.contains | string | 是 |
详细介绍
FailTrace
复现故障。验证修复。
测试会间歇性失败。你的编码 Agent 修改了代码。只重试一次并通过,仍然无法让你确定是否修好了。
FailTrace 会重复运行同一项检查、保存失败基线,并据此检查拟议的修复。使用 CLI 或 MCP 工具获取试验结果、更精简的复现用例,以及 Agent 在接受补丁前可以检查的证据。
本地执行。无需 AI API、账户或遥测。继续使用现有的测试运行器和断言。
快速开始
在任意工作目录中,使用 Node.js 22.12+ 和 npm 运行以下命令:
npx --yes failtrace demo

演示会将六个输入项缩减为 ["BUG"],拒绝一个因其他原因而崩溃的补丁,并检查一个可正常工作的补丁。它会将证据保存在 .failtrace/ 中,并打印一条重放命令。
面向编码 Agent
通过客户端的配置连接本地 stdio MCP 服务:
npx --yes [email protected] mcp --cwd "/absolute/path/to/your/project"
客户端会启动此命令。在终端中单独运行该命令会等待 MCP 请求。本指南包含 Windows 设置说明。
然后向 Agent 提出以下请求:
修改代码前,使用 FailTrace 捕获此测试故障。选择准确的测试或失败消息,保存有界基线,并检查匹配的试验。修改后,针对该基线进行验证,并说明任何无关错误或不完整的证据。
这七个 MCP 工具共用 CLI 的 Core 引擎。它们会在重复运行、比较、回归搜索、最小化、验证和重放过程中保留故障特征及调查证据。Agent 无需重新运行命令,即可获取已保存的试验和日志页面。支持 Shell 的 Agent 也可以使用带 --json 的 CLI。

Agent 可以先检查已保存的故障,再检查补丁。
重新检查现有单元测试
针对一项确切的 NUnit 或 Unity 测试,跟踪修复过程。 每次尝试都会生成一份全新的 NUnit 3 报告。缺失或已跳过的测试,以及无关的失败,都会被判定为结论不明,因此 Agent 不能将它们当作所选测试已通过的证据。
NUnit 支持从 1.3.0 版本起通过 CLI 和 MCP 提供。文档中的 Unity 验证涵盖 Windows EditMode 示例。

所选测试保持不变;已跳过的报告不会被视为测试通过。
在自己的故障上使用
在你的项目中,将命令和消息替换为你自己的内容:
npx --yes [email protected] run "npm test -- checkout" --repeat 20 --stderr-contains "checkout failed" --capture-context
在 Git 项目中,编辑前运行此命令。--capture-context 会记录源身份,供 Verify 使用;在 Git 项目之外,请使用 --context-source 选择文件。每次试验都会保存其输出,退出码 1 可能表示已成功捕获目标。然后编辑并验证补丁 →
| 你的下一个问题 | 命令 |
|---|---|
| 此故障出现得有多频繁? | run |
| 正常试验和故障试验之间有哪些差异? | compare |
| 是哪次 Git 更改引入了它? | bisect |
| 重现它需要什么输入? | minimize |
| 拟议修复后发生了什么? | verify |
| 如何重放这次调查? | bundle |

此演示的捆绑包可重现其原始故障,退出码为 1。将源代码、输入和重放文件放在一起;打包自己的调查时,请提供目标所需的前置条件。
结果能说明什么
FailTrace 会报告所选设置下的观察结果。Verify 会区分观察到目标、未观察到目标的正常样本,以及无法得出结论的证据。Bisect 会报告采样得到的第一父提交边界;最小化会重新检查结果,但不保证输入已达到最小。
此演示展示的是受控示例结果,而非性能测量。样本通过并不能证明 Bug 已消失。
命令会以你的权限运行,进程清理仅尽力而为。默认情况下,保留的 stdout/stderr 上限为每次试验 16 MiB,每次运行或 bisect/最小化 256 MiB。之前的调查会分别累积。分享前请检查日志、命令和所选文件;捆绑包仍需要目标的依赖项和设置。
结果和退出码参考 · 资源限制 · 存储清单 · 捆绑包指南
可用性与贡献
快速入门使用 npm 的最新版本;已验证的版本为 1.5.0。MCP 配置和可重复安装示例固定使用此精确版本:安装选项、GitHub 发布版本以及 MCP Registry 条目。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。