[开源]之前我想用 Hook 管住 Codex,后来发现手伸太长了:Click 的一次架构重构”的新话题的反馈

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

  • 我的帖子已经打上 开源推广 标签: 是
  • 我的开源项目完整开源,无未开源部分: 是
  • 我的开源项目已链接认可 LINUX DO 社区: 是
  • 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
  • 以上选择我承诺是永久有效的,接受社区和佬友监督: 是

以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出


上次在论坛发了 Click 插件,被几位佬友点醒了,后来回去看自己的设计,发现之前确实有点自作聪明。

项目:GitHub - grapefruit0205/click: Codex plugin for coding agents that turns software requests into approved implementation contracts, then keeps implementation and verification inside the agreed boundary. · GitHub
上期:[开源] 我做了一个 Codex 插件:不再靠 Prompt 约束 Agent,而是让 Hook 强制执行工作流

最开始我管得特别宽。看模型容易重复规划、反复扫库、重复跑测试,就想着干脆在 Hook 底层全部硬拦,超过次数直接报错不给继续。

后来想想这个思路其实有问题。

模型第一次 plan 做错了,推翻重来很正常;中间代码发生变化,再读一次之前看过的文件也很正常。把这种东西全部写成死规则,最后不一定是在防死循环,反而可能是在给模型戴镣铐。

所以这次我把大部分这种限制都拆掉了。

现在模型怎么找代码、要不要重新 plan、一个测试要重试几次,基本都交给模型自己判断。Click 最多提醒一下,不再因为“我觉得这样效率比较高”就直接 BLOCK。

反而这次我主要把精力放到了 revision cache 上。

以前的逻辑比较粗暴:

代码改了
→ revision 变化
→ 之前所有测试结果全部作废
→ 全部重新跑

但实际开发里这明显不太合理。

比如 auth 代码改完已经跑过测试并且 PASS,下一次只是改了一行 README,没必要为了这一行 README 再把 auth 测试跑一遍。

所以现在会把测试结果和它真正依赖的代码绑定起来。

大概就是:

auth.py 修改
→ auth test PASS

README.md 修改
→ auth 相关输入没变
→ 之前的 PASS 继续复用

auth.py 再修改
→ 相关输入变了
→ 旧结果失效,重新测试

如果依赖关系判断不清楚,或者环境、执行文件之类对不上,就不冒险复用,直接重新验证。

我现在感觉这个方向比“限制模型最多跑几次测试”靠谱多了。

模型自己决定要跑什么测试,Click 只负责判断:你手里这个测试结果,现在到底还算不算数。

另外权限这块反而保留得更严格了。像 Guarded 模式下,模型自己提出修改方案不能顺便当成用户已经同意,必须等用户下一轮明确批准之后才能获得写权限。

所以现在整个定位比之前清楚很多:

模型负责想办法干活,Click 不管它怎么想。
Click 只管权限是不是真的有,以及拿来交差的证据是不是还有效。

上次被拍完之后确实把不少自己加进去的限制拆了,不过反而感觉整个东西顺了很多。

不知道这种方向各位佬友怎么看?

尤其是这种 按代码依赖复用旧验证结果的 revision cache,大家觉得值得放在 Agent Harness 这一层做吗?

继续欢迎拍砖。

3 个赞