让 Agent 找出检查命令,再固定执行
Styx 让 Agent 首次识别并运行项目检查命令,再将其保存到版本控制内的配置文件,供后续合入前确定性执行。方案拒绝保存疑似含密钥的命令,但无法识别检查方式时仍允许合入并明确提示。
完整中文译文
Agent 能读懂一个代码仓库,并弄清楚它如何做自检:通常是从 package scripts 中找到类型检查、测试和 linter。它很擅长做这件事。但每次准备合并代码时都依赖它重新摸索,就不太合适了。
所以,在我正在开发的应用 Styx 中,Agent 只需要做一次。首次将任务合入一个尚未配置检查命令的项目时,任务的 Agent 会获得一次执行机会,负责找出命令、运行直到检查通过,再通过 remember_command 工具回报这条命令。之后,每次合入前都会运行同一条命令,无须 Agent 参与。
结果会保存到项目的 .styx/project.json 中,字段名是 checks.command,而不是藏在应用内部状态里。这一点有三个好处:任何人都能读到它,知道这个项目所谓的“检查通过”具体意味着什么;项目里的所有人共用这条命令;如果命令有误,修改一行就能修正,也可以清空它,让 Agent 在下次合入时重新查找。
这里有一道防护:如果一条命令看起来包含密钥等敏感信息,就会被拒绝,因为这个文件会提交到版本库。
这套做法也有不适用的情况:如果 Agent 找不出命令,任务仍会继续合入,只是不运行检查,并明确提示('no checks ran: none are known for this project'),而不会阻止你。另外,一旦有人重命名了脚本,保存的命令就可能失效,所以要像维护其他配置一样维护它。
更通用的做法是:让 Agent 负责发现,再把结果写到人能阅读和编辑的地方。你会缓存 Agent 摸索出的结果,还是让它每次重新发现一遍?
如果还想采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。