OpenRig Startup启动投影原理完整指南:6步看懂files与actions如何注入Agent工作区
【免费下载链接】openrigBuild your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.项目地址: https://gitcode.com/GitHub_Trending/op/openrig
如果你好奇 OpenRig startup启动投影到底在做什么——files与actions是如何被注入到每个 Agent 工作区的,这篇文章会用 6 步把整套机制讲清楚。OpenRig 是一个多 Agent 协作框架(multi-agent harness),让 Claude Code 和 Codex 像一套系统一样协同运行:Daemon 解析 YAML 规格,把技能、指导文件、启动命令"投影"进各 Agent 的工作目录,再自动拉起终端并喂入首批上下文,全程无需你手动粘贴配置。
Startup启动投影解决什么问题
想象你要让 6 个 AI Agent 同时开工,每个都要:装好指定技能、读团队文化文档、执行几条初始化命令。手动操作一遍就要半天,而且每次重启都得重来。
OpenRig 的 startup启动投影把这件事自动化了,整条链路是:解析 YAML → 叠加合并 → 投影资源 → 交付文件 → 拉起终端 → 注入动作,全程由 Daemon 驱动,最后把可重放(replay)的上下文持久化,重启时照样能恢复。
三个核心角色各司其职:
| 角色 | 文件 | 职责 |
|---|---|---|
| Startup 解析器 | startup-resolver.ts | 把多层 YAML 里的files/actions按固定顺序叠加合并 |
| 投影规划器 | projection-planner.ts | 规划技能、插件等资源如何落盘到工作区 |
| 启动编排器 | startup-orchestrator.ts | 驱动"投影→交付→拉起→注入"的完整执行序列 |
files:7层叠加合并,团队规则逐层生效
启动文件不是简单复制,而是按 Architecture Rule 6 定义的固定 7 层顺序做加法合并(additive,不去重):
- Agent 基础层—
agent.yaml里的基础startup.files - Profile 层— 角色档案的补充文件
- Rig 文化文件— 团队级
culture.md,以合成文件条目强制注入 - Rig 启动层— 整套 Rig 的全局覆盖
- Pod 共享层— 小组内共享的启动文件
- 成员覆盖层— 单个节点(member)的个性化文件
- 操作员调试层— 永远排最后的排障入口
合并逻辑非常直白,核心实现见 startup-resolver.ts#L30-L72:逐层把files与actions追加进同一队列,先声明者先交付。
每个文件条目还有一个deliveryHint字段(定义在 types.ts#L846-L872),决定它怎么交付:
- 📁
guidance_merge/skill_install— 走文件系统,在终端启动前就写入磁盘 - 💬
send_text— 走TUI,等终端就绪后以文本形式"粘贴"给 Agent - 🤖
auto— 兼容旧配置的兜底模式,运行时自动判断
actions:让Agent自动执行初始化命令
actions是比文件更进一步的能力——不只是把材料放到位,而是替 Agent 敲命令。当前约束(见 架构文档 §4):
- 动作类型仅限
slash_command(斜杠命令)和send_text(文本注入),不允许任意 shell 命令,这是安全边界 - 非幂等动作在恢复(restore)场景下不会重放,避免"启动一次执行两遍"
- 支持
startup_proof校验选择,由 resolveStartupProof 统一裁决
启动投影的6步执行序列
启动编排器 startNode 按固定 6 段式推进(完整注释见 startup-orchestrator.ts#L86-L100):
- 标记 pending— 会话状态置为启动中,发出
node.startup_pending事件 - 投影资源— 把技能、指导文件、子代理、插件按 投影计划 落盘到工作区
- 交付启动前文件—
guidance_merge、skill_install类文件直接写入文件系统(此时终端还没启动) - 拉起终端 + 等待就绪— 通过运行时适配器(Claude Code / Codex / Pi 等)启动 harness,指数退避轮询,默认 30 秒超时
- 交付启动后文件—
send_text类文件通过 TUI 注入给已就绪的 Agent,再执行after_files/after_ready动作 - 持久化上下文— 连同 resume token 一并存库,标记 ready,发出
node.startup_ready
其中第 2 步的"投影"最巧妙:规划器会给每个资源做冲突分类(projection-planner.ts#L12-L19),判断目标位置该不该写:
| 分类 | 含义 |
|---|---|
safe_projection | 目标不存在,安全写入 |
managed_merge | 目标由框架托管,合并写入 |
hash_conflict | 内容不一致且无历史写入记录,保护不覆盖 |
stale_overwrite | 目标是我们上次写的旧版,安全覆盖 |
operator_conflict | 操作员手动改过,坚决保护 |
也就是说,投影是"幂等且尊重人工修改"的:重启 10 次也不会把你手改过的文件冲掉。
启动完成后:拓扑视图确认一切就绪
投影成功之后,你可以在 TUI 拓扑视图里看到每个节点的状态——这是验证启动投影是否成功的直观方式:
延伸阅读:这些文件值得收藏 🔖
- 📖 官方架构文档(spec 解析→投影→启动全流程):agent-spec-and-startup.md
- 📝 可运行的示例规格:demo/rig.yaml、demo/agents/lead/agent.yaml、demo/culture.md
- 🧪 合并顺序的行为测试(想深挖细节首选):startup-orchestrator.test.ts、projection-planner.test.ts
一句话总结:OpenRig 的 startup启动投影 = 7 层文件叠加 + 冲突感知的资源落盘 + 前/后两段式交付 + 持久化可重放,让"配置一个 Agent 工作区"从手工劳动变成了声明式 YAML。 🚀
【免费下载链接】openrigBuild your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.项目地址: https://gitcode.com/GitHub_Trending/op/openrig
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考