mcpField
S
settle

settle

github.com/wkentaroAgent 工作流014 次安装3 天前更新
代码仓库

关于 settle

Settle 是一项引导 Agent 收尾工作会话的技能,涵盖 Git 仓库、拉取请求和会话资源。它会检查最新状态、处理或汇总待决事项供用户选择、记录获准的经验,并将关闭窗格留到最后。

主要功能

  1. 01刷新仓库和拉取请求状态
  2. 02查找过期分支和未完成事项
  3. 03汇总待决事项供用户选择
  4. 04将获准经验记录到 secondbrain
  5. 05最后关闭会话窗格

适用场景

  1. 01结束工作前检查仓库和拉取请求
  2. 02查找遗留分支、工作树或进程
  3. 03询问如何处理未解决的会话产物
  4. 04保存会话经验并关闭窗格

安装

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

$npx skills add https://github.com/wkentaro/agent-skills --skill settle

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
evals/
evals.json
setup.sh

详细介绍

收尾

分 4 个步骤收尾当前会话。每一步完成后再开始下一步。

1. 读取最新状态

会话对仓库和拉取请求的记忆可能已有数小时之久。对会话接触过的每个仓库,运行 git fetch,然后查看 git status、git worktree list --porcelain 和 git branch -vv。对会话创建或推送过的每个拉取请求,运行 gh pr view,读取 state、headRefOid、labels、comments 和 statusCheckRollup。后续所有检查都以这些输出为依据。

2. 清理未完成事项

未完成事项是指任何妨碍会话收尾的事项。当以下每项检查均通过,或用户选择保留未通过项时,会话才算已收尾。

对会话接触过的每个仓库:

  • git status 显示工作区干净,且没有分支领先于其上游。
  • 不存在过时分支或工作树(见下文)。
  • 主检出位于默认分支并已更新。当它位于过时分支时,切换到默认分支并拉取更新。

对会话创建或推送过的每个拉取请求:

  • 已合并,或用户选择将其保持为开启状态。
  • 带有 recommend-* 标签和一条评审评论。如果已合并的拉取请求缺少其中任一项,停止仍在运行的相关评审,并将其列为已合并但未经评审。不要启动新的评审。

对会话本身:

  • 会话提出的所有提议、问题或后续跟进都已得到答复。搜索整个会话,而不只是最后一条消息:例如“要我……吗?”, “我应该……吗?”,在默认分支上发现的问题,以及任何报告为已跳过或未验证的事项。
  • 会话启动的临时目录、临时文件或后台进程均已清理。这包括 mktemp -d 创建的目录、本地服务器,以及 tailscale serve 条目。
过时的分支和工作树

当一个非默认分支的本地 HEAD,以及在远程分支仍存在时获取到的远程 HEAD,均已包含在默认分支中,或等于其已合并拉取请求的 headRefOid,该分支即为过时。分支是否过时与哪个会话创建了它无关。通过 git worktree list --porcelain 中的 branch 行查找分支对应的工作树,因为工作树目录名可能与分支名不同。

只有在没有关联工作树检出该分支,且没有其他本地分支将其作为上游跟踪时,才可不经询问删除过时分支。其提交已存在于默认分支或其已合并的拉取请求中,因此不会丢失任何内容。按堆叠分支的子分支优先顺序删除。

会话留下的所有其他分支都是未完成事项,所有关联工作树也都是未完成事项,无论其看起来多么干净:Git 设置和索引标志可能会让工作树中的文件不显示在 git status 中。询问是否处理时,说明删除会丢失的内容:

  • 其独有的提交;
  • git status --porcelain --ignored --untracked-files=all 在其工作树中列出的每个路径,包括 .env 等忽略文件;
  • git ls-files -v 标记不是 H 的每个路径,例如表示 assume-unchanged 的 h 或表示 skip-worktree 的 S;
  • cwd 位于该工作树中的 herdr 窗格(herdr pane list)。

无论是否经询问决定删除分支:如果用户选择删除其工作树,先运行 git worktree remove --force <path>。然后运行 git branch -D;如果远程分支仍存在,则使用已检查的远程 HEAD 作为租约删除远程分支:git push --force-with-lease=<branch>:<sha> origin :<branch>。对于目录已不存在的工作树,运行 git worktree prune。

询问

通过原生结构化输入,一次性询问所有剩余的未完成事项(Claude Code 中使用 AskUserQuestion,Codex 中使用 request_user_input)。根据每项情况提供合适的选项,例如立即完成、提交问题、保留或删除某项内容,或暂时搁置。若另一个窗格正在使用某个工作树,则须等到该窗格的会话自行收尾;因此只提供等待或暂时搁置的选项。按用户选择执行,然后 再次运行检查。会话已收尾时,此步骤即告完成。

3. 记录经验

经验是指会改变未来会话的行为或认知的内容:一个决定及其原因、一个易踩的坑、一套可行的做法,或一个经过深入查找才发现的事实。仓库、仓库历史、议题或拉取请求中已有记录的内容不算经验。

如果本次会话没有值得记录的经验,就什么也不写,并用一行说明。

否则,阅读 ~/ghq/github.com/wkentaro/secondbrain/AGENTS.md,并在 secondbrain 中搜索每条经验所属的页面。跨项目的工具经验通常应记录在 references/tools/ 下的页面中。将每条经验及其目标页面放在一个多选问题中征求意见。对于用户批准的每条经验,在现有页面中就地更新;或者按照目标领域的 AGENTS.md 创建页面。对经验中不需要的凭据和个人数据进行脱敏。提交并推送到 main,并确认推送成功。

4. 关闭窗格

最后再执行此操作,因为它会结束会话。当设置了 HERDR_PANE_ID 时,使用 herdr pane get "$HERDR_PANE_ID" 读取窗格当前所在的标签页,因为窗格移动后,HERDR_TAB_ID 仍会保留窗格启动时所在的标签页。然后对该标签页运行 herdr tab get。当其 pane_count 为 1 时,对该标签页运行 herdr tab close;否则运行 herdr pane close "$HERDR_PANE_ID"。当未设置 HERDR_PANE_ID 时,说明未找到 herdr 窗格,然后停止。

评论

支持 Markdown