mcpField
A
afk-loop

afk-loop

github.com/clhbidAgent 工作流0480 次安装1 天前更新
代码仓库

关于 afk-loop

AFK loop 是团队将可无人值守的编码工作交给 Copilot 并管理运行结果的流程指南。内容涵盖问题简报、人工派发、拉取请求审查,以及运行受阻或失败后的处理。

主要功能

  1. 01区分无人值守与需人工参与的工作
  2. 02规定结构化 Agent 简报
  3. 03手动将问题派发给 Copilot
  4. 04分类并审查拉取请求结果
  5. 05说明如何引导或停止运行
  6. 06提供失败后的恢复步骤

适用场景

  1. 01判断问题是否适合无人值守处理
  2. 02派发前准备验收标准
  3. 03审查 Copilot 拉取请求
  4. 04处理 Agent 运行受阻或失败

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/clhbid/agent-context --skill afk-loop

安装后在 Claude Code 中输入/afk-loop确认已加载。

详细介绍

AFK 循环

团队如何运行 AFK Agent:哪些工作适合交接、如何分派、拉取请求提交后要检查什么,以及运行出错时该怎么办。

仓库中的 AGENTS.md 是另一半内容。它说明 Agent 要遵循的约定;本技能则是围绕它的人工操作流程。

刻意采用手动分派。 在我们试用编码 Agent 的成本和性能期间,团队成员会手动将每个 Ready for Agent issue 分配给 Copilot。项目字段变更时不会触发任何工作流,因此目前也无事可自动化。等 Agent 能自行从待办队列中领取工作后,这个文件就失去了读者,届时应将其删除,而不是继续维护。

工作状态是看板上的 Status 字段——参见 issue-tracker 技能。

Copilot 还是 Claude Code

这项工作能否在无人值守的情况下运行?

  • Copilot — 任务说明足够完整,无需有人在场。变更范围明确、验收标准无需询问任何人即可核验,也没有尚未确定的决策。
  • Claude Code — 这项工作需要人工参与:需要探索不熟悉的领域、过程中会出现需要决策的事项,或任何你希望边做边引导的工作。

这正是 Ready for Agent 已经回答的问题,因此,带有该状态的 issue 按定义就是 Copilot 的候选任务。参见 issue-tracker 技能中的 分诊角色。

Agent 任务说明

issue 移至 Ready for Agent 时,由 triage 使用 writing-lean 编写并发布的结构化评论。 issue 正文和讨论是背景信息;任务说明才是约定——Agent 会依据它开展工作。

任务说明须包含以下所有内容才算完整:

  • 类别和摘要 — bug 或 enhancement,并用一行说明需要完成什么
  • 当前行为和预期行为 — 包括边界情况和错误条件
  • 关键接口 — 要查找的类型、签名和配置结构,说明这些内容是什么,而不是它们的位置。不写文件路径或行号:issue 可能处于待处理状态数周,代码树可能会在此期间发生变化
  • 验收标准 — 具体且可独立核验,让 Agent 能判断工作是否完成
  • 范围之外的内容 — 明确哪些内容不得更改

完整参考资料以及具体的正反示例,见 Matt 的 triage 技能中的 AGENT-BRIEF.md。 它随技能一起提供,不属于本仓库,因此 Copilot 容器中没有这份文件——这也是上方列出检查清单并将链接指向 GitHub 而非本地路径的原因。

该文档使用标签词汇(ready-for-agent),我们已不再使用。请将其理解为 Ready for Agent;任务说明的其他内容均不变。

分派给 Copilot

分配前先阅读 Agent 任务说明。 状态代表队列位置;任务说明才是准入门槛。分派者是在 Agent 开始一次运行前最后查看任务的人,因此,如果任务说明没有写清楚行为会如何变化、如何判断工作已完成,以及哪些内容不得更改,就不要分派。

分派步骤:

  1. 在 GitHub 上打开 issue — 🤖 Frontier 视图会列出可分派的任务。
  2. 在 Assignees 下,选择 Copilot。
  3. 将 Status 设为 In progress。
  4. Copilot 随后会创建一个草稿拉取请求,并在其中开展工作,推送提交,同时逐项勾选自己的任务清单。

从命令行分配无效 — Copilot 不在仓库的受分配者列表中,因此 gh issue edit <n> --add-assignee Copilot 会失败。请使用界面。

审查 Agent 的拉取请求

每次运行都会以请求审查结束,包括失败的运行。 请求审查意味着 Agent 已停止运行,并不代表它成功了——因此在阅读任何代码之前,先判断拉取请求的状态。

一次运行结束时可能处于以下三种状态,每种状态对应的 Status,以及 Agent 在每种状态下必须留下的内容,都列在仓库自己的 AGENTS.md 中的 How a run ends 一节里——该表有意按仓库分别制定。根据这些内容审查拉取请求,然后采取相应行动:

  • Complete — 像审查其他人的拉取请求一样审查它,并核对问题中 Agent 任务说明里的验收标准。
  • Blocked — Agent 提出了无法回答的问题,或无法执行的操作。解决问题,然后在会话中回复,让运行继续。它在等待你,而不是陷入停滞;工作会从中断处恢复。
  • Error — 工作不会自动恢复。决定是把任务交给说明更完善的 Agent,还是交给人工处理,并相应设置 Status。

不属于上述三种状态的拉取请求——例如已准备好审查但内容为空,或没有任何说明的草稿——属于 Agent 的缺陷,而不是需要审查的内容。clhbid/clhbid.com#2254 是一个具体示例:没有更改,未满足任何验收标准,却仍请求了审查。

如果拉取请求不是由 Copilot 创建的,请自行编辑描述和问题。 在这种情况下,它只能向分支推送内容并回复讨论串,不能做其他事。

运行出错时

  • 在运行偏离方向时引导它,而不要停止它:从拉取请求打开会话,然后在会话日志下方的提示框中输入后续指示。
  • 通过会话日志查看器中的 Stop session 停止正在进行的运行。 已推送的提交会保留。
  • 关闭有问题的拉取请求,而不是直接修复它,并在问题中评论说明出错之处,让下一次尝试能据此改进。
  • 取消分配前先设置状态。 已分派的问题会一直分配给 Copilot——无论成功、失败还是关闭;frontier 会跳过所有已分配的问题,因此停滞的问题已经不在队列中。取消分配才会将其放回队列。操作前,先判断此次失败是否表明这项工作终究不适合交给 Agent:如果是,设置为 Ready for Human;如果说明不够完善,无法再次交接,则设置为 Waiting on input。如果仍将状态设为 Ready for Agent 就取消分配,下一次分派会再次遇到同样的失败。
  • 先检查任务说明,再责怪 Agent。 运行出错通常是因为任务说明留下了未明确之处;修复任务说明才能避免问题再次发生。

评论

支持 Markdown