用途
Claude Code Merge Queue 是面向并行 Claude Code 智能体的本地合并队列。当同时运行多个 claude --worktree 会话时,它用于解决以下问题:
- 推送竞争:多个智能体推送到同一分支,导致推送被拒和反复 rebase
- 构建争抢:并发构建压垮机器
- 测试冲突:测试访问共享资源(数据库、端口)时相互干扰
该工具通过 FIFO 队列串行化代码落地,并在所有 lane 之间协调构建。
主要能力
- 串行化落地:同一时间机器范围内只有一个 lane 可以推送
- 检查先行:推送前必须通过
checkCommand - 自动清理:移除已落地的同级 lane worktree
- 构建锁:通过
build-lock串行化重构建命令 - 端口分配:按 lane 编号派生开发服务器端口
- 工作树预览:将 lane 工作树(含未提交变更)镜像到主检出目录
- 两阶段分支模型:支持 integration 分支到 production 分支的晋级流程
安装
npm install --save-dev claude-code-merge-queue
其他包管理器:
pnpm add -D claude-code-merge-queue
yarn add -D claude-code-merge-queue
bun add -d claude-code-merge-queue
使用方式
初始化:
npx claude-code-merge-queue init
初始化会自动配置 claude-code-merge-queue.config.mjs、CLAUDE.md、.claude/settings.json 中的 WorktreeCreate 钩子、.husky/pre-push、package.json 脚本以及推送前预检安全机制。
核心命令:
claude-code-merge-queue hook worktree-create:Claude Code 的 WorktreeCreate 钩子,运行claude --worktree时自动创建编号 lane,生成../project-lane-1、../project-lane-2等 worktreeclaude-code-merge-queue land:将当前 lane rebase 到 integration 分支并通过 FIFO 队列推送claude-code-merge-queue sync:将主检出目录快进到最新,并在需要时重装依赖claude-code-merge-queue promote:将 integration 分支发布到生产,仅限人工执行claude-code-merge-queue preview/preview:restore:将 lane 工作树镜像到主检出目录或切回claude-code-merge-queue build-lock -- <cmd>:在所有 lane 之间串行化重构建命令claude-code-merge-queue port:返回 lane 的开发服务器端口claude-code-merge-queue prune:立即移除已落地的同级 worktree
典型日常流程:
claude --worktree feature-x # 启动隔离 lane
npm run land # 测试通过后落地
npm run sync # 更新主检出目录
npm run preview # 无需构建即可预览
npm run preview:restore # 切回
npm run promote # 发布到生产
配置
配置文件为 claude-code-merge-queue.config.mjs(ES module 格式),可配置项包括:lane 命名(branchPrefix、worktreeSuffix)、端口分配(portBase)、分支策略(integrationBranch、productionBranch、protectedBranches)、落地要求(checkCommand、checksRequired)、构建协调(regenerableFiles、buildOutputDirs)以及共享资源软链接(symlinks,如 .env、node_modules)。
两阶段分支模型示例中,integrationBranch 设为 staging,productionBranch 设为 main,智能体落地到 staging,人工决定何时通过 promote 发布到 main。
预推送钩子会阻止:直接推送到 integration 分支、推送到 production 分支、以及任何未通过 checkCommand 的推送。紧急情况下可使用 CLAUDE_CODE_MERGE_QUEUE_EMERGENCY_PUSH=1 绕过队列,该机制为约定而非加密强制。
适用场景
- 同时运行多个隔离 worktree 智能体的项目
- 需要串行化落地以避免推送竞争和 rebase 的团队
- 并发构建会压垮机器、需要构建锁的场景
- 测试使用共享资源(端口、数据库、临时文件),需要隔离的场景
- 多包仓库(monorepo)中需要为每个 lane 分配独立数据库目录的测试
- 需要 staging 到 production 两阶段发布流程的项目
- 希望智能体在本地测试通过后自动落地、无需人工介入的工作流
限制
- 运行时零依赖,全部锁定与协调基于内置
fs模块、进程 ID 检查和 Git 原生 worktree 支持 - 紧急绕过机制为约定,不具备加密强制力
- 队列实现使用
os.tmpdir()中的文件系统锁,通过独占文件创建实现原子操作,PID 标记保证崩溃安全 - 若 lane 相对 origin 已过期,会出现
command not found: claude-code-merge-queue,需 fetch 并 rebase 到最新 integration 分支 - 若进程在 land 中途崩溃,下一次 land 会检测到 PID 已死并回收锁
- lane 中测试失败但本地通过时,多为共享资源冲突,需检查端口、数据库隔离和临时文件位置
- 队列负责本地协调,CI 是已落地代码的第二道检查点