关于 settle
Settle 是一项引导 Agent 收尾工作会话的技能,涵盖 Git 仓库、拉取请求和会话资源。它会检查最新状态、处理或汇总待决事项供用户选择、记录获准的经验,并将关闭窗格留到最后。
主要功能
- 01刷新仓库和拉取请求状态
- 02查找过期分支和未完成事项
- 03汇总待决事项供用户选择
- 04将获准经验记录到 secondbrain
- 05最后关闭会话窗格
适用场景
- 01结束工作前检查仓库和拉取请求
- 02查找遗留分支、工作树或进程
- 03询问如何处理未解决的会话产物
- 04保存会话经验并关闭窗格
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wkentaro/ agent-skills --skill settle安装后在 Claude Code 中输入/settle确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlevals/evals.jsonsetup.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 窗格,然后停止。