ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

oh-my-pi Vibe Mode 实战:以导演视角驱动双 Worker 并发协作的编码 Agent 工作流

oh-my-pi Vibe Mode 实战:以导演视角驱动双 Worker 并发协作的编码 Agent 工作流 oh-my-pi Vibe Mode 实战以导演视角驱动双 Worker 并发协作的编码 Agent 工作流【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-piVibe Mode 是 oh-my-pi⌥ Coding agent with the IDE wired in提供的一种交互式会话运行模式它将顶层会话降级为DIRECTOR导演由导演负责拆解任务、分派指令并验收结果而把实际的搜索、编辑、执行与构建全部交给后台常驻的 Worker 子 Agent。本文以 vibe-mode-active.md 注入的导演指令为骨架结合 docs/vibe-mode.md 与源码实现完整讲解 Vibe Mode 的启用方式、fast/good双 Worker 层级、五个 Worker 控制工具的参数契约、六步导演工作流以及其背后的会话注册表、异步投递与生命周期持久化原理帮助你用并发协作的方式组织大型编码任务。Vibe Mode 是什么会话降级为导演Worker 负责干活Vibe Mode 的核心是一次“角色反转”。进入该模式后顶层会话不再是亲自下场干活的全能 Agent而变成一个DIRECTOR其系统提示明确约束Vibe mode ON. You are DIRECTOR: drive two worker CLIs, full coding agents with every normal tool; NEVER edit, run, grep, or build yourself. Verify work by reading files.也就是说导演唯一被允许的“动手”动作是读文件验收其余一切搜索、修改、运行、构建动作都必须由 Worker 完成。导演的工具集被压缩到最小——参见 tools/vibe.ts 中的 VIBE_TOOL_NAMESread验收与检查todo可选父会话专属的任务清单维护五个 Worker 控制工具vibe_spawn、vibe_send、vibe_wait、vibe_kill、vibe_list。Worker 是拥有完整编码工具面edit、bash、grep 等的真实子 Agent各自拥有独立且持久化的对话记录。导演通过五个控制工具指挥 Worker验证其声称的成果并对最终交付负责。启用与退出/vibe斜杠命令Vibe Mode 由/vibe斜杠命令切换支持带内联指令的快捷进入方式/vibe # 进入 vibe mode /vibe fix the flaky test in packages/tui # 进入模式并同时提交第一条指令 /vibe # 再次运行以退出进入模式时发生的动作依据 docs/vibe-mode.md激活父会话的 Worker 作用域安装五个 vibe 工具将顶层活跃工具集收缩为read、可选的父会话todo与 vibe 工具注入上述导演指令到系统提示中状态栏显示Vibe指示符。退出模式时恢复进入前的工具集精确还原包括合法的空集取消在途in-flight的 Worker turnkill 掉作用域内的所有 Worker 会话并持久化终止生命周期记录——任何 Worker 都不会比一次有意的模式退出活得更久Vibe Mode 与 plan/goal 模式含 paused 状态互斥需先退出那些模式模式激活期间拒绝 start/fork/move/handoff 等会话操作。值得注意的持久化行为Vibe Mode 及其生命周期事件随父会话一并持久化。恢复一个当前模式为vibe的会话时已完成的 Worker 会被重水合rehydrate为 idle/parked 会话并携带其子对话记录被进程重启打断的 turn 不会被自动续跑被显式 kill 或模式退出终结的 Worker 保持终止状态。对应契约测试见 interactive-mode-vibe-toggle.test.ts它验证了“进入前无 vibe 工具、进入后注册且仅激活 read/todo/vibe 工具、退出后精确还原原工具集”三条核心行为。双 Worker 层级fast与good导演只认识两种 Worker“口味”按难度路由任务Tier捆绑 Agent默认角色适用场景fastsonicsmol机械执行、草稿、高吞吐工作重命名、小修复、样板代码、数据收集、跑测试与输出报告goodtasktask设计、棘手的调试、多文件重构、依赖判断的高难度工作从源码看这个映射是硬编码在 runtime.ts 的 VIBE_CLI_AGENT 中的fast→sonicgood→task。模型解析走与task子 Agent 完全相同的resolveAgentModelSelection路径task.agentModelOverrides.sonic/.task优先于捆绑 Agent 自带模型角色别名smol/task通过modelRoles解析最终回退到父会话的 active/default 模型。五个 Worker 控制工具参数与行为契约五个工具均为对VibeSessionRegistry的薄封装见 tools/vibe.ts每个工具的参数 schema 定义在源码中导演调用时需遵循以下契约工具参数与行为vibe_spawn{ cli: fast \| good, prompt, name? }。启动一个空白Workerprompt是其唯一上下文必须包含文件、约束与验收标准name会被清洗并截断到 48 字符缺省时自动生成 id。返回 session id 与 turn job idvibe_send{ session, message }。向既有会话发送消息Worker 空闲则启动新 turnWorker 正在流式输出则作为实时转向注入Worker 在途但不可转向则自动排队为下一个 turn。返回立即产生vibe_wait{ sessions?, timeout? }。阻塞直到某个被观察会话的 turn 落定省略sessions时等待所有在途 Worker默认超时 30 秒会对已落定的 job 做确认避免结果被二次投递。仅当完全被阻塞、无法指挥其他会话时才使用vibe_kill{ session }。取消在途 turn、清空排队消息、释放 Worker已初始化的对话记录保留在history://id可读vibe_list{}。按产生顺序列出会话包含 tier、状态、turn/排队计数、解析后的模型与最近活动工具描述全文分别见 vibe-spawn.md、vibe-send.md、vibe-wait.md、vibe-kill.md、vibe-list.md。spawn与send都立即返回不阻塞导演。每个 Worker turn 的完成结果活动轨迹 响应通过异步 job 管理器自动投递进导演对话长响应文本在投递时被预览截断RESPONSE_PREVIEW_MAX 6000字符见 runtime.ts完整输出可通过agent://id查看。turn 结果的结构化模板见 vibe-turn-result.md包含activity工具调用轨迹、response响应体可带truncated标记以及可选的error与存活提示。导演六步工作流从拆解到验收vibe-mode-active.md 的# Direction部分给出了完整的导演作业流程与 docs/vibe-mode.md 的 Workflow 章节一一对应拆解把请求拆分为相互独立的工作流workstream每个工作流配一个常驻 Worker使其持续累积有用的对话上下文。分派用vibe_spawn为每个工作流下发自包含、一次讲清的任务简报文件、约束、可观测的验收标准。Worker 以空白状态启动永远看不到导演的对话。异步并行spawn/send 立即返回turn 在后台运行。导演应趁此继续指挥其他会话只有无法推进时才调用vibe_wait超时后可重新发起。验收与修正每个结果到达后导演必须read被触碰的文件验证其声称再vibe_send下发修正、下一步或复审请求。需要跨工作流记账时用父会话的todo协调——Worker 不拥有这份记账。按难度路由机械部分先用fast起草fast卡住或需要判断时升级到good。good负责设计fast负责执行机械部分。清理用vibe_kill结束卡死或已完成工作流的会话若丢失名册用vibe_list重新定位。正常形态是并发运行一个fast与一个good各跑在不同工作流上互不阻塞。最终交付质量由导演负责——Worker 完成 turn 只代表该轮结束不代表其结论正确必须用read亲自验收不要轻信 Worker 的一面之词。发送语义的三个分支turn / steered / queuedvibe_send的行为取决于 Worker 的实时状态这正是异步编排的关键。源码 runtime.ts 的 send 实现 展示了三分支逻辑turnWorker 空闲idle或已驻留parked→ 立即启动新的后台 turn返回jobIdsteeredWorker 正在流式输出isStreaming→ 消息实时注入正在运行的 turn下一执行步即可看到queuedWorker 在途但当前不可转向 → 消息进入队列自动作为下一 turn 执行。由于会话保留了完整对话历史后续消息可以自然引用前文如“现在对另一个模块做同样的事”无需重新解释上下文也严禁重复 spawn 同一工作流的第二个会话——同一工作流必须复用同一会话。源码级原理会话注册表、作用域与生命周期持久化VibeSessionRegistry进程级全局注册表所有 Worker 会话由VibeSessionRegistry单例见 runtime.ts统一管理。每个记录以{parentSessionId, parentSessionFile, ownerId, id}四元组构成作用域键scopeKey意味着Worker id 作用域于所属 Agent 与父会话来自其他作用域的会话会被报告为 unknown 且无法控制。Worker 状态机包含四个状态VibeSessionStatestarting刚 spawn首个 turn 尚未跑起来running有 turn 在途idleturn 已落定可接受下一条vibe_senddead已终结被 kill、spawn 失败、模式退出或子会话无法解析。每个 turn 都是一次异步 job每个 turn 作为AsyncJobManager的一个 job 运行因此 turn 完成会自动投递进导演对话行为与异步task结果完全一致vibe_wait则以hub等待语义阻塞在首个落定的 turn 上并对已落定 job 做确认防止其作为异步结果被二次投递。turn 之间的空闲期Worker 作为 adopted idle Agent 寄存在AgentRegistry/AgentLifecycleManagerTTL park JSONL revive对话上下文跨 turn、跨驻留存活。相关等待语义测试见 test/vibe/wait.test.ts。生命周期事件可恢复的持久化词汇表Vibe 模式与 Worker 生命周期事件以vibe-session-lifecycle自定义条目写入父会话日志schema 定义在 lifecycle.ts包括四类事件spawn记录 cli 口味、捆绑 Agent 名与子会话文件名turn-started/turn-settled记录 turn 序号用于恢复时的在途状态推断tombstone终止墓碑reason 为explicit-kill、mode-exit、spawn-failed或unrecoverabletombstone-revoked撤销 mode-exit 墓碑用于可恢复的退出场景。进程重启后rehydrate依据这些事件重建注册表spawn 过且至少完成过 1 个 turn、未被墓碑标记的 Worker 被恢复为 idle/parked 会话turn-settled缺失turn 序号停留在 started则标记为“被进程重启打断”不会被自动续跑。失败行为与清理spawn 失败会拆除部分记录并写入 spawn-failed 墓碑turn 失败以失败 job 结果自动投递可恢复的 keep-alive Worker 回到idle等待下一次vibe_send注册的子会话无法再解析的 Worker 变为dead模式退出通过原子持久化appendEntriesAtomically一次性写入所有存活 Worker 的 mode-exit 墓碑并切换模式状态清理设 5 秒宽限期VIBE_TEARDOWN_GRACE_MS。TUI 体验迷你终端与“电视墙”Vibe 工具在 TUI 中刻意强化了“你在驱动几个小 CLI”的拟物交互见 tools/vibe.ts 的注释与渲染器实现vibe_spawn/vibe_send绘制一个迷你 composer——一个在微型 Claude-Code 风格终端里正在输入的消息框带光标闪烁动画vibe_wait/vibe_list绘制“电视墙”TV wall——每个 Worker 一块实时屏幕竖排叠加动态展示其当前工具调用、轨迹与流式输出文本等待期间每 500ms 刷新一次快照WAIT_PROGRESS_INTERVAL_MS。实战建议与注意事项简报要自包含Worker 启动时看不到导演对话prompt必须写清文件路径、约束与验收标准缺省则 Worker 只能靠猜测干活。保持一个工作流一个会话follow-up 一律用vibe_send绝不 respawn否则对话上下文断裂、资源浪费。不要滥用vibe_waitturn 结果默认自动投递vibe_wait只在完全阻塞时使用避免串行化拖慢整体吞吐。先验证后信任每次结果都read触碰过的文件再进入下一步验收通过后用父会话todo记账。及时清理结束或卡死的工作流用vibe_kill释放保持vibe_list名册清晰。注意互斥与生命周期Vibe Mode 与 plan/goal 模式互斥模式退出会清空整个 Worker 作用域需要继续协作时应先完成手头工作。综上Vibe Mode 将单会话编码 Agent 扩展为“一个导演 多个常驻 Worker”的并发协作编排模型其指令、工具契约、会话注册表与持久化机制在 prompts/system/vibe-mode-active.md、docs/vibe-mode.md 与 tools/vibe.ts、vibe/runtime.ts、vibe/lifecycle.ts 中均有完整实现与契约测试可循适合在大型、多线程可并行的编码任务中作为团队级 Agent 编排方案使用。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进