关于 afk-loop
AFK loop 是团队将可无人值守的编码工作交给 Copilot 并管理运行结果的流程指南。内容涵盖问题简报、人工派发、拉取请求审查,以及运行受阻或失败后的处理。
主要功能
- 01区分无人值守与需人工参与的工作
- 02规定结构化 Agent 简报
- 03手动将问题派发给 Copilot
- 04分类并审查拉取请求结果
- 05说明如何引导或停止运行
- 06提供失败后的恢复步骤
适用场景
- 01判断问题是否适合无人值守处理
- 02派发前准备验收标准
- 03审查 Copilot 拉取请求
- 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 开始一次运行前最后查看任务的人,因此,如果任务说明没有写清楚行为会如何变化、如何判断工作已完成,以及哪些内容不得更改,就不要分派。
分派步骤:
- 在 GitHub 上打开 issue — 🤖 Frontier 视图会列出可分派的任务。
- 在 Assignees 下,选择 Copilot。
- 将
Status设为In progress。 - 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。 运行出错通常是因为任务说明留下了未明确之处;修复任务说明才能避免问题再次发生。