福生无量摸鱼天尊

每日github项目解析:(二)20260605 github robot和agent soul

github robot

https://github.com/pbakaus/agent-reviews

这个项目让我想到一个有意思的场景:一个让人血压升高的下午

你提了一个 PR,信心满满。几秒钟后,Copilot 来了,CodeRabbit 来了,Cursor Bugbot 也来了。它们在你的代码行上密密麻麻留下几十条评论:这里可能空指针,那里命名不规范,这个函数复杂度超标。你认认真真改了一轮,git push。

然后,新的评论又冒出来了。

你再改,再 push,它们又冒出来一批。

你开始机械地在每条评论下面敲 "Fixed in abc1234",敲到第 47 遍的时候,你意识到一个下午已经没了。

这就是 agent-reviews 官网直接挂在标题上的痛点,叫 bot review doom loop(评审机器人死循环)

你修一轮、推一次、冒一批新评论,循环往复,永无止境。官网那句话很扎心:没人应该把整个下午花在敲第 47 遍Fixed in abc1234上

agent-reviews 就是来杀掉这个循环的。本质上就是一个 CLI 工具加三套 Agent Skill(给 AI 编码 agent 用的自动化剧本),专门管理 GitHub PR 上各种评审机器人留下的评论。

我们常见用的是 gh ,但它不是为"管理评审评论"设计的。它能拉到原始数据,但是它并没有任何额外的设计,它是as little as necessary,所以为了好用,对不起,这要我们自己写 jq去。

# 列出当前分支对应 PR 上所有 review 评论(默认 list 模式)
agent-reviews

# 只看没人回复过的、机器人发的评论
agent-reviews --unanswered --bots-only

# 看某条评论的完整详情(展开正文、代码 diff、所有回复)
agent-reviews --detail 123456

# 回复某条评论,并顺手把这条 review 线程标记为已解决
agent-reviews --reply 123456 "Fixed in abc1234." --resolve

# 输出 JSON,方便管道处理
agent-reviews --unanswered --json | jq '.[].id'

注意它的过滤维度:--unresolved(只看未解决)、--unanswered(只看没人回过)、--bots-only / --humans-only(只看机器人或人类),而且这些维度可以任意组合。这正是 gh 给不了你的东西。

它的三套 Agent Skill对应三种不同的工作流:

  • /resolve-reviews:处理全部评论(人类 + 机器人)

  • /resolve-agent-reviews:只处理机器人评论

  • /resolve-human-reviews:只处理人类评论

你装好 skill,在 agent 里敲一句 /resolve-agent-reviews,然后就可以去喝杯咖啡了。agent 会自动跑完这样一套闭环:

拉取所有未答复评论,逐条判断是真问题还是误报,修真问题并跑 lint/type-check,误报就附理由驳回,把所有修复打成一次 commit 推送,逐条回复结果并标记线程已解决,起一个 watcher 循环监听新评论,直到 10 分钟没有新评论才退出,输出一份汇总报告。

你回来的时候,PR 已经干净了。这就是它的产品定位:对人类是"按一个斜杠命令然后走开",对 agent 是"拿到一个可靠、紧凑、带状态的接口,不用自己跟 GitHub API 和各家机器人的样板文本搏斗"。

那它到极限了吗?我觉得不然,再看看别的

github自动流

我们以以下功能为workflow:

编号

能力

含义

为什么重要

R1

自动读取 GitHub issue

能把一个 issue 直接作为任务输入(标签触发、评论触发、或传入 issue 链接),自动拉取标题、正文、上下文

这是"自治"的起点。没有它就只能人工喂 prompt

R2

构建 code sandbox 复现问题

能在隔离的容器 / 虚拟机环境里真正运行代码(跑测试、执行复现脚本),把问题重现出来

区分"评审 bot"与"真 agent"的分水岭。只有能跑代码,才能验证 bug 是否真实、修复是否有效

R3

自动改代码解决

能定位问题并自动修改源码,生成修复

核心产出能力

R4

自动开 / 写 PR

修复完成后自动创建分支并开 Pull Request 提交改动

决定它是"给你一个 patch"还是"直接交付可合并的 PR"

R5

在 PR 上评论

能在 PR 上留评论 / 评审意见 / 响应 review 反馈

决定能否参与协作回路、根据反馈迭代

R6

在 issue 上评论

能在 issue 上回帖(进度、计划、结果、追问)

决定能否对外汇报状态、闭合 issue 沟通

借助cc调研了一下,还蛮多项目可以做到的,但是需要注意的是,cc只会关注它web search搜到的项目,我建议有需要还是要自己多搜一搜:

项目

R1 读ISSUE

R2 沙箱复现

R3 改码

R4 开PR

R5 评论PR

R6 评论ISSUE

命中

OpenHands(+resolver)

6 / 6

LangChain Open SWE

6 / 6

AWS remote-swe-agents

🟡

5.5 / 6

pullfrog/pullfrog

🟡

5.5 / 6

SWE-agent(Princeton)

🟡

3.5 / 6

AutoCodeRover

3 / 6

irgolic/AutoPR(已归档)

3 / 6

由于我对aws的云服务不太敏感,然后功能缺失不见得有好的架构,所以选一些成熟的来看看

很有意思的是,他们有三类很经典的架构:

graph TB subgraph OpenHands OH_API[FastAPI Server] --> OH_SANDBOX[Sandbox Service] OH_API --> OH_AGENT[Agent Server 独立进程] OH_AGENT --> OH_SDK[openhands SDK] OH_SDK --> OH_LLM[LiteLLM] endgraph TB subgraph Open_SWE["Open SWE"] OS_WH[Webhook Handler] --> OS_LG[LangGraph] OS_LG --> OS_DA[Deep Agents] OS_DA --> OS_SB[Sandbox Backend] OS_DA --> OS_LLM[Multi-Provider LLM] endgraph TB subgraph SWE_Agent["SWE-agent"] SA_CLI[CLI run.py] --> SA_AGENT[DefaultAgent] SA_AGENT --> SA_ENV[SWEEnv] SA_ENV --> SA_REX[SWE-ReX Runtime] SA_AGENT --> SA_LLM[LiteLLM] end
  • OpenHands 采用 App Server + Agent Server 分离部署,这种侧重存储和服务层的可替换

  • Open SWE 基于 LangGraph 图编排 + Deep Agents 库组合,这种是强调中间件和模型的灵活组合

  • SWE-agent 则是经典的 CLI + Agent-Environment-Tools 三层设计,这种是以 Bundle 和 Hook 为核心扩展机制

sequenceDiagram participant User participant GitHub participant Agent rect rgb(200, 220, 255) Note over User,Agent: OpenHands User->>GitHub: 给 Issue 打 fix-me 标签 GitHub->>Agent: Webhook → Resolver Agent->>GitHub: 创建 Draft PR / 留评论 end rect rgb(220, 255, 200) Note over User,Agent: Open SWE User->>GitHub: Issue/PR 中 @openswe GitHub->>Agent: Webhook → webapp.py Agent->>GitHub: 创建 PR / 回复评论 end rect rgb(255, 220, 200) Note over User,Agent: AWS remote-swe-agents User->>GitHub: Issue comment / GitHub Actions GitHub->>Agent: REST API → Lambda → EC2 Agent->>GitHub: gh CLI 创建 PR / 评论 end rect rgb(255, 255, 200) Note over User,Agent: SWE-agent User->>Agent: CLI 传入 Issue URL Agent->>Agent: 解析 → 沙箱执行 Agent->>Agent: 输出 patch 文件 end

有意思的是他们的通信和执行pipeline也不一样:

  • OpenHands 通过标签触发

  • Open SWE 通过 @mention 触发

  • AWS 支持多入口(GitHub Actions/Slack/REST API)

  • SWE-agent 主要是 CLI 驱动,默认输出 patch 而非直接开 PR

(没写完,挖个坑)

front design

https://github.com/pbakaus/impeccable

https://github.com/pbakaus/radiant

感觉一般,先不理了