开源QA代理Sentinel:点击前先读代码
速览
Sentinel作为开源QA代理,创新性地在点击操作前先读取代码,理解其逻辑后再执行测试。它通过代码分析提升测试准确性,减少误操作。该工具面向开发者和测试工程师,旨在自动化QA流程,提高效率。
AI 深度解读
背景
当前的AI测试代理大多停留在“点击”层面:打开页面、点击按钮、发现一个元素错位或控制台报错,然后宣告任务完成。这种做法的价值约等于冒烟测试——代理并没有真正理解产品做什么。一位合格的QA工程师不会盲目点击,而是先学习产品,再推理业务逻辑:这是一个酒店系统,所以我要测试单笔预订、团体预订、取消后释放房间、入住、退房、夜审,并确认每一项都在服务端真正持久化,而不是仅仅相信UI看起来正常。
Sentinel正是为了解决这个“点击与理解之间的鸿沟”而诞生的开源QA代理。它由开发者在Hacker News上展示,采用MIT许可证开源。
核心内容
Sentinel是一个会先读取你的代码库,再执行操作的端到端测试代理。它通过以下方式工作:
1. 读取代码库(Repo Recon)
通过确定性扫描(grep和find,不调用模型)提取项目结构:前端路由、API路由模块、服务、数据库实体。模型基于这个摘要进行推理,而不是盲目爬取整个monorepo(那样既慢又容易遗漏)。
2. 推导业务流(Flow Derivation)
使用Mimo模型(通过pi agent harness运行)将代码摘要转化为优先级排序的端到端业务流列表,每个流包含UI步骤、后端断言和边界情况。计划基于commit缓存,只有代码变化时才重新推导。
3. 运行流程(Flow Execution)
每个流程作为一个代理循环执行:模型决定下一步动作,Playwright驱动浏览器,同时内置的api_request工具在每个步骤检查服务端状态(通过页面内执行fetch,复用前端发送的Authorization头)。模型只能使用浏览器和API工具,不能访问shell或文件系统。每个尝试有硬性预算限制(超过90次工具调用后动作工具拒绝继续,只能调用finish)。
4. 多次运行
由于自主代理是非确定性的,每个流程默认运行两次(FLOW_ATTEMPTS可配置),发现结果取并集:任何一次尝试发现的bug都会进入报告,每个流程保留所有尝试中的最差判定。
5. 设计评分(Design Grading)
代理访问过的每个不同屏幕(按URL去重,默认每轮最多8个)会由多模态模型进行视觉评分,评估视觉层次、间距、可能违反WCAG对比度的文本、排版和破损状态。这是纯DOM检查无法看到的层面。
真实案例:无指令测试酒店PMS
开发者将Sentinel指向一个完整的全栈酒店PMS(KaribuKit,他们自己的产品),仅提供仓库和一次性测试租户的admin凭证,没有测试计划或流程列表。Sentinel读取代码后自行得出结论:这是一个精品酒店和safari酒店PMS,并推导出9个关键业务流:
- 完整的预订生命周期
- 团体预订
- 从线索到提案的管道
- 房价管理
- 客人自助服务
- 入住期间换房
- 夜审
- 从发票到退款的支付
- AI copilot(取消被作为边界情况和后端检查嵌入其他流程中)
它随后运行了排名前两个的流程,各两次。追踪记录展示了类似人类的手工测试过程:
- 调用
GET /api/availability得到400,计算出缺失参数后重试adults=2&children=0得到200。 - 通过
POST /api/reservations创建真实预订(201),然后回查确认持久化正确。 - 遍历状态生命周期,通过试错找到入住端点(
/checkin返回404,/check-in返回400,最终有效调用返回200),并检查了账单(folio)。
发现的Bug(UI层面无法发现):
- 确认预订时返回
NO_AVAILABILITY,尽管同一预订已经持有该房间——后端状态机bug,UI在一种情况下显示误导性的“No rooms available”,另一种情况下无任何反馈。 - 日历显示房间在已有预订后仍可用——API和UI不一致,只有同时检查两层才能发现。
- 入住返回200,但客人的
registrationStatus在服务端仍为NONE——状态转换只完成了一半。
技术架构
Sentinel的底层引擎是flow,一个pipeline。它使用Mimo模型(mimo-v2.5)进行决策,通过pi agent harness驱动。所有调度基于launchd,每15分钟检查一次仓库,每次新commit触发代码审查,QA按设定频率(如12或24小时)运行。Sentinel还有三个兄弟代理:
- 代码审查代理:读取每个新diff
- 文档同步代理:保持Markdown与代码匹配
- 大脑同步代理:将每个仓库的变更提炼到共享团队知识库中
版本演化
- v1:确定性Node循环,每次调用Mimo作为无工具的单次“大脑”,但循环本身是天花板,无法积累上下文测试多步流程。
- v2(pi-native):将Playwright工具注册为pi扩展,让Mimo在pi的代理循环内驱动,拥有完整会话记忆,但依然需要手动编写目标。
- v3:当前flow引擎,自动读取代码推导流程并运行。
关键要点
- Sentinel是开源QA代理,MIT许可证,核心思想是“先读代码再点击”,而非盲操作。
- 通过确定性扫描提取代码结构,模型只用于需要判断的环节:推导流程、决定下一步动作、评分屏幕设计。
- 在无任何测试计划的情况下,Sentinel仅凭代码和凭证自行推导出9个关键业务流,接近人类QA主管会列出的清单。
- 它发现了多个UI无法捕捉的bug:后端状态机不一致、API与UI数据冲突、半完成的状态转换。
- 每个流程运行两次以应对非确定性,结果取并集,且每个流程保留最差判定。
- 集成视觉设计评分,使用多模态模型检查屏幕的视觉层次、对比度等,弥补DOM-only检查的盲区。
- 使用Mimo模型(mimo-v2.5)通过pi agent harness驱动,v1曾因模型太弱失败,v3利用模型作为agent loop的核心。
- 只支持常见JS技术栈(Next.js、Express、Fastify、Prisma、Drizzle或纯SQL schema),但其他栈可通过扩展recon支持。
- 所有代理运行在调度系统上,有预算限制(90次工具调用上限),且不会自动合并PR,保证安全。
- 三个兄弟代理分别处理代码审查、文档同步和知识蒸馏,构成完整的自动化质量保障体系。
意义与影响
Sentinel的出现代表了一种新型测试范式的尝试:从“脚本化测试”或“简单AI点击”转向“代码理解驱动的自主测试”。它模拟了人类QA工程师先学习产品再推理的思维方式,将测试从表面验证提升到业务逻辑验证层面。
其开源性质(MIT许可证)意味着社区可以自由
