三步给 Worktrunk 接上 CI 网关:让 Agent 每次改动都先过测试再合入主干
三步给 Worktrunk 接上 CI 网关让 Agent 每次改动都先过测试再合入主干【免费下载链接】worktrunkWorktrunk is a CLI for Git worktree management, designed for parallel AI agent workflows项目地址: https://gitcode.com/GitHub_Trending/wo/worktrunk多 Agent 并行的开发模式已经跑起来了Claude Code、Codex 各自占一个 worktree互不干扰地改代码、写提交、推分支。但真正的瓶颈从来不是谁能改得快而是谁改的能安全地进主干。Agent 不会等测试不会看 CI 红灯它只会做完任务然后报告可以合了。如果合入动作没有一道强制门禁主干很快就会被一批本地能编译、远程全红的提交污染。Worktrunk 给出的答案是把这道门禁做成命令级网关用pre-merge钩子在合入动作发生前强制执行测试用wt list --full让每个 Agent 分支的 CI 状态随时可见再用wt merge的固定管线把测试通过→合入→清理变成不可跳过的单条命令。本文从源码出发拆解三步落地方案附带可直接抄走的配置。一、网关设计思路把门禁放在合入动作内部而不是外部约定先想清楚一个前提为什么不能用团队约定来兜底因为约定对 Agent 无效。Agent 不会自觉遵守合入前跑一遍测试的流程规范它只会执行被编排进命令链里的步骤。所以门禁必须长在合入这个动作本身里——要么合入前跑测试要么不允许合入。这就是网关的本质在信任边界上做强制校验。Worktrunk 把这道校验做进了wt merge的固定管线里merge.rs 的执行顺序是Commit/Squash— 未提交改动先被收敛成提交默认 squash合并前的工作树改动会先备份到refs/wt-backup/branchRebase— 把分支变基到目标分支之上Pre-merge 钩子— 变基之后、真正合入之前执行FailureStrategy::FailFast任何一个命令失败都会中止整个合入Merge— 快进推送到目标分支--no-ff时创建合并提交Pre-remove / Cleanup— 合入成功后移除 worktree 与分支Post-钩子* — 后台运行用于部署通知等非阻塞动作。关键在第三步pre-merge是阻塞型钩子失败即中止而中止发生时分支还停在原处、目标分支未动分毫——这就是先过测试再合入主干的语义保证管线细节见 merge.md 的 Pipeline 一节。配套的可观测性同样重要。Agent 分支推上去之后测试到底过了没有wt list --full的 CI 列直接回答这个问题每个分支显示其 PR/MR 编号GitHub/Gitea/Azure 为#3035GitLab 为!3035并用颜色编码管道状态——绿色 passed、蓝色 running、红色 failed、黄色 conflicts、灰色 no-ci、⚠表示拉取失败list.md。也就是说网关不是只在合入那一刻亮红灯而是让每一个 Agent 分支的 CI 状态在整个生命周期里都处于可视状态。二、命令级对接三步配置把测试变成合入的前置条件第一步声明项目钩子写入.config/wt.tomlWorktrunk 的钩子支持三种 TOML 形态字符串是单条命令表是并发执行的多个命令[[hook]]序列是带依赖顺序的管线。一个最简网关长这样# .config/wt.toml [[pre-merge]] test cargo nextest run lint cargo clippy -- -D warnings [[pre-merge]] build cargo build --release第一个块里test和lint并发执行第二个块在它们全部通过后才跑build。pre-merge钩子运行时{{ branch }}指向被合入的特性分支{{ target }}指向合入目标模板变量可以用{{ branch | hash_port }}这类过滤器动态生成测试端口hook.md。第二步打通 forge 识别让 CI 状态找得到门pre-merge只管本地校验而远程 CI 状态的可视化依赖 Worktrunk 对代码托管平台的识别。平台识别集中在 ci_platform.rsForgeKind枚举覆盖 GitHub、GitLab、Gitea 和 Azure DevOps解析优先级是配置 分支所属 remote 主 remote URL 主机名。也就是说GitHub/GitLab/Gitea 这类带品牌名的主机可以自动识别但自托管实例比如git.company.example上的 Forgejo需要在项目配置里显式点名# .config/wt.toml [forge] platform gitlab # 或 github / gitea / azure-devops hostname git.company.example多个仓库共享同一个自托管主机时也可以在用户配置里用[projects.git.company.example/*]模式一次声明仓库自身的[forge]永远覆盖用户级条目config.md。识别到平台后CI 状态的实际查询走各平台的官方 CLIgh、glab、tea、az。查询策略是先查 PR/MR再回退到分支工作流分支可能作为某个 PR 的 head 时先问 PR 的检查结果没有 PR 且分支有上游时再查分支管道本身platform.rs。PrStatus里还带一个is_stale字段本地 HEAD 与远端不一致时状态会变暗显示——这在多 Agent 场景下非常关键它提醒你CI 绿灯对应的提交不是本地这份。第三步预批非交互执行让 Agent 无需人工点确认钩子是项目级命令Worktrunk 的安全模型要求首次运行弹窗审批。但 Agent 是非交互的弹窗等于卡死。两条路预审批克隆项目后在 CI 编排环境里跑一次wt config approvals add把项目命令的批准持久化到~/.config/worktrunk/approvals.toml之后合入不再弹窗config.md 的 Approvals 一节运行时绕过给wt merge传--yes仅对当次运行授予同意且不落盘下次仍会询问——适合每轮合入都重新确认的严格策略。同样关键的是Worktrunk 在调用gh/glab时显式设置了GH_PROMPT_DISABLED1、NO_COLOR1并移除GH_FORCE_TTY保证 forge CLI 在无 TTY 环境下既不弹交互也不输出终端专属格式ci_status/mod.rs 的non_interactive_cmd。这条容易被忽略但对 Agent 流水线是生死线一旦gh在批处理里弹了浏览器认证或交互提示整条合入管线就会挂起。三行命令的完整闭环$ wt config approvals add # 预批准项目命令供无人值守使用 $ wt list --full # 观察各 Agent 分支的 CI 状态 $ wt merge # 测试通过后一次完成合入清理三、合并策略与失败回滚网关的兜底机制网关不是只拦测试不过它还要处理测试过了但合入时出问题的情况。wt merge的管线为此内置了三层防护。第一层变基冲突不销毁现场。默认管线会在合入前把分支变基到目标之上step.md 的wt step rebase一节。如果某个提交变基时产生冲突Worktrunk 不会自动回滚或强推而是把 rebase 停在冲突状态保留 git 冲突标记由你决定git rebase --continue解决后继续、git rebase --skip或git rebase --abort放弃并回到变基前。而且一旦检测到 rebase 进行中wt merge会直接拒绝启动merge.rs 的ensure_no_operation_in_progress防止带着一半变基的索引强行合入这类二次破坏。第二层合入前的工作树改动有备份。默认的 squash 步骤会把工作树里未提交的改动先备份到refs/wt-backup/branch再统一收敛成一个提交。这意味着即使合入中出了问题未提交的内容也能从备份 ref 找回不会随着 worktree 清理而蒸发。第三层合入策略可细分回滚路径明确。wt merge的六个布尔开关覆盖了从全自动到全手动的策略谱系场景命令行为默认推荐给 Agentwt mergesquash rebase pre-merge 门禁 快进合入 清理保留提交历史wt merge --no-squash不做 squash逐个保留提交要求线性历史、禁变基wt merge --no-rebase保留原图要求目标能快进到分支尖端否则拒绝创建合并提交wt merge --no-ffrebase 后创建 merge commit保留半线性历史合入后保留 worktreewt merge --no-remove便于失败后立即诊断现场完全跳过钩子wt merge --no-hooks显式放弃门禁应仅用于人为决策的场合注意到--no-rebase与--no-ff的组合语义--no-rebase要求目标是分支历史的祖先否则直接报NotRebased错误——这条检查在 merge.rs 里是硬性校验没有 force 变体从根上杜绝了悄悄改写历史再合入。另外合入失败时 worktree 与分支都还完整存在你可以直接wt switch回该分支修 bug 再重试合入成功后默认会移除 worktree 和分支如果想给 Agent 留一个复核现场用--no-remove即可。落地建议把网关接进 Agent 的调用链最后把整套方案嵌入 Agent 工作流的实际调用链。对每个 Agent 任务Agent 完成改动后不直接合入而是先git push让远程 CI 跑起来轮询wt list --full --formatjson读取每个分支的checks对象等待状态从running变绿passed或变红failed状态为passed时执行wt merge --formatjson一次完成本地测试门禁 → 变基 → 合入 → 清理状态为failed时把失败信息连同 CI 链接交还给 Agent 修复合入结果用 JSON 结构化输出解析committed/squashed/rebased/removed四个字段让编排器清楚知道每一步发生了什么。这套方案的价值在于本地pre-merge钩子兜住快速失败秒级拿到编译/单测结果远程 CI 状态兜住合入前全量校验wt merge的管线语义兜住合入动作原子化。三道兜底把Agent 改完就合变成了Agent 改完、验证通过、才能合而所有校验都长在命令内部——Agent 想跳过只有显式传--no-hooks而这本身就是一个可以被审计和禁止的动作。【免费下载链接】worktrunkWorktrunk is a CLI for Git worktree management, designed for parallel AI agent workflows项目地址: https://gitcode.com/GitHub_Trending/wo/worktrunk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Fine语言窗口组件详解:从声明式语法到工程实践

Fine语言窗口组件详解:从声明式语法到工程实践

如果你做过GUI开发,一定知道“窗口组件”这四个字在不同的语言和框架里含义差得很远。有的语言里它指一个系统级窗口句柄,有的框架里它指一套可拖拽的控件库,而在Fine语言里,“窗口组件”是一个完整的界面描述体系——从顶层窗口到…

2026/10/10 22:25:11 阅读更多 →
基于SpringBoot的高校课程智能选课系统-附源码

基于SpringBoot的高校课程智能选课系统-附源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/10/10 22:24:11 阅读更多 →
多层内支撑基坑的ABAQUS模拟:从地应力平衡到收敛调试

多层内支撑基坑的ABAQUS模拟:从地应力平衡到收敛调试

从基坑开挖模拟入手,很多刚接触ABAQUS的朋友第一反应是:不就是把土挖掉吗?模型建好,边界设好,跑一下就出来了。可一旦真做起来,尤其是碰到多层内支撑的工况,问题一个接一个往外冒:地…

2026/10/10 22:23:11 阅读更多 →

最新新闻

OpenVINO部署人脸关键点检测:从ONNX导出到CPU实时推理的完整实践

OpenVINO部署人脸关键点检测:从ONNX导出到CPU实时推理的完整实践

简介:这是一份面向算法部署与计算机视觉开发者的OpenVINOONNX人脸关键点检测项目源码,重点演示如何将支持68点与39点landmark的检测模型,从训练框架转换并优化部署至英特尔硬件平台。资源共188个文件,以Python脚本为主&#xff08…

2026/10/10 23:38:12 阅读更多 →
Python+OpenCV答题卡识别判卷实战:透视校正与涂点判定

Python+OpenCV答题卡识别判卷实战:透视校正与涂点判定

简介:这是一套面向Python初学者与计算机视觉爱好者的答题卡智能识别判卷项目源码,适合课程设计、毕业设计或项目实战练习。项目以Python为核心,结合OpenCV、PIL完成图像灰度化、二值化、去噪与模板匹配,并引入机器学习模型对填涂选…

2026/10/10 23:38:12 阅读更多 →
Qwen-Image-2.1云端部署实战:从GPU实例到FastAPI接口

Qwen-Image-2.1云端部署实战:从GPU实例到FastAPI接口

如果你最近在关注图像生成模型,应该已经注意到 Qwen-Image-2.1 这个名字。它几乎是目前中文提示词理解能力最理想的一代开源图像生成项目之一,很多创意团队拿它跑电商场景、IP设计、海报初稿。可现实是模型文件好几十个 GB,推理时显存需求也不…

2026/10/10 23:38:12 阅读更多 →
AI助手自定义指令实战:从输出规范到行为红线,让大模型真正懂你

AI助手自定义指令实战:从输出规范到行为红线,让大模型真正懂你

给 AI 助手“立规矩”这件事,我听过很多次方法论,但真正体会“规矩真的管用”,是在我认真配完 workbuddy 设置里的自定义指令之后。先说结论:没配指令的 workbuddy,像个聪明但没方向的实习生;配完指令之后&…

2026/10/10 23:38:12 阅读更多 →
二维Navier-Stokes方程的Fourier-Galerkin谱方法:MATLAB实现与去混叠详解

二维Navier-Stokes方程的Fourier-Galerkin谱方法:MATLAB实现与去混叠详解

简介:这是一份用Fourier-Galerkin谱方法求解二维Navier-Stokes方程的MATLAB实现,适合流体力学数值模拟方向的研究生、科研人员及对谱方法感兴趣的MATLAB开发者。资源基于傅立叶级数展开与Galerkin变分原理,结合四阶Runge-Kutta时间推进&#…

2026/10/10 23:38:12 阅读更多 →
CVND人脸关键点检测实战:从数据增强到OKS评估的完整避坑指南

CVND人脸关键点检测实战:从数据增强到OKS评估的完整避坑指南

简介:这份资源是CVND(计算机视觉纳米学位)的第一个实战项目——面部关键点检测的完整代码与数据集,面向具备Python与深度学习基础、希望掌握CNN回归任务与经典人脸检测流程的学习者。项目围绕眼睛、鼻子、嘴部关键点展开&#xff…

2026/10/10 23:37:11 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →