OpenResearch 的 `orx agent spawn` 实战指南:把独立任务委派给辅助 Agent 会话
发布时间:2026/9/20 5:38:52 作者:尧图编辑部 阅读量:1,286

人工智能AI Agent深度研究自主智能体Agent 编排【免费下载链接】OpenResearchTurn your coding agents into research agents项目地址https://gitcode.com/GitHub_Trending/op/OpenResearch点击查看免费下载orx agent spawn是 OpenResearch 中把独立工作委派给辅助 Agent 会话的核心命令它在同一项目内创建一个新的顶层会话该会话对用户可见、拥有独立 worktree 与 transcript并与当前会话完全隔离地并行工作。本文以 agent-skills/orx-agent-delegation/SKILL.md 为主线结合 src/commands/agent.rs 与 src/local/chat/mod.rs 的源码实现完整讲解命令用法、任务边界选择、分支与计算资源保护、独立简报brief撰写规范以及嵌套/并发约束的底层原理。读完你可以安全、高效地把适合外包的工作交给 helper同时杜绝权限失控与任务串扰。orx agent spawn能做什么顶层会话、worktree 与 transcriptorx agent spawn会在同一个项目中创建一个新的顶层会话top-level session。与当前会话相比helper 具有三个关键特征对用户可见新会话会出现在侧边栏与各仪表盘的 Recents 中用户可以直接打开查看拥有自己的 worktree 与 transcripthelper 的所有改动落在它自己的 git worktree 中transcript 独立于当前对话独立工作helper 从空 transcript 开始看不到当前会话的对话内容。命令的完整形态如下orx agent spawn self-contained task orx agent spawn --title session title --stdin orx agent spawn task --harness harness --model model orx agent spawn task --no-wake几个要点默认情况下当前会话会在 helper 的**收尾回复closing reply**之后被唤醒并恢复对话见下文“唤醒机制”。仅在完全不需要后续跟进时才使用--no-wake此时父会话不会被唤醒需要自行查看 helper 的会话确认结果。被 spawn 出来的会话不能再 spawn 其他 helper嵌套被禁止同时 CLI 会强制执行单会话在途 helper 数量上限见下文“并发上限”。如果命令因这两种原因拒绝 spawn应当在当前会话自己完成任务或等待某个 helper 结束后再 spawn。源码视角spawn 命令的真实执行边界从 src/commands/agent.rs 可以看出orx agent spawn只在本地orx upagent 会话内可用if !crate::local::chat::in_local_session() { return Err(anyhow!( orx agent spawn is only available inside a local orx up agent session. )); } let parent_id crate::local::chat::launching_chat_session() .ok_or_else(|| anyhow!(This agent session has no chat id to spawn from.))?;其中ORX_LOCAL_SESSION标记进程为本地会话ORX_CHAT_SESSION_ID标识发起 spawn 的会话由local::chat::set_chat_session_env注入。这意味着该命令面向的是交互式研究会话场景而非普通 CLI 脚本环境。另一个重要事实orx agent spawn本身并不运行 helper。它只写入子会话行和一条chat_spawns记录一次事务完成避免出现“只有会话行、没有 spawn 记录”的空会话随后由常驻的orx upwatcher 接管——这与orx exp wake采用相同的 store-and-watcher 拆分模式原因也一致CLI 是短生命周期子进程自身没有可运行回合的 harness。写入成功后命令会打印Spawned agent session chat_xxxxxxxx. It starts within a few seconds and works in its own git worktree. This chat will be resumed with its result when it finishes.使用--no-wake时最后一行替换为You will NOT be told when it finishes; check its session yourself.选择有清晰边界的任务委派的目标是与当前会话所拥有的节点真正独立的工作典型场景包括勘察不熟悉的代码库surveying an unfamiliar codebase把已完成的实验结果写成文档writing up completed results。而如果任务是实验循环experiment loop中正在进行的一步则应在本会话完成不要委派出去。判断标准是helper 能否在不依赖当前会话上下文、不触碰当前节点分支的前提下独立交付严禁委派文献检索循环agent-skills/orx-lit-review/SKILL.md 明确规定了边界文献检索循环retrieval loop绝不委派给子 agent。主 agent 必须亲自调用 alphaXiv、OpenAlex、bioRxiv 的 discovery 原语检查并排序合并后的候选文献再决定聚焦哪些源。原因在于检索循环的核心是“主 agent 是低延迟的检索排序器”——候选的合并、去重、按主题相关性与优先级排序这些决策必须由拥有全局视角的主 agent 完成委派会导致检索质量与证据链失控。源码视角任务文本的获取与校验src/commands/agent.rs 定义了任务文本的唯一来源规则任务只能来自位置参数或--stdin二者同时给出会报错Pass the task as an argument or --stdin, not both.空白任务空串或纯空白会被拒绝Describe the task for the spawned agent: \orx agent spawn --stdin方式会读取全部 stdin适合用 heredoc 传入多段落的完整简报见“撰写独立简报”一节。对应测试a_task_is_required_and_comes_from_one_place验证了 trim、空串拒绝、参数与 stdin 互斥三条规则src/commands/agent.rs。保护分支与计算资源这是委派安全的核心小节agent-skills/orx-agent-delegation/SKILL.md 给出了四条硬性规则绝不给 helper 当前会话已检出的分支。如果 helper 必须修改实验代码应要求它创建自己的节点node并工作在该节点的分支上。冻结的实验节点frozen experiment node任何会话都不得编辑。精确声明 helper 可以执行的orx exp run调用。当没有任何授权时必须显式禁止启动否则 helper 可能会推断出常规研究循环可用从而擅自启动实验。helper 的编辑只留在它的 worktree 中不会自动合并进当前分支。源码视角worktree 隔离的落地方式helper 的“独立 worktree”是实际落地的隔离机制。当 helper 结束时父会话收到的报告会附上工作区路径说明src/local/chat/mod.rsIts edits are in its own worktree at path — read them there. Nothing was merged into yours.该路径由existing_session_worktree_path(project, session.id)计算即 helper 会话 id 对应的工作树目录。这意味着父会话只能以“读取结果”的方式查看 helper 的产出合并与否完全由父会话人类或主 agent决定——没有任何自动合并路径。这与规则 4“Nothing merges into this branch automatically”完全对应。撰写独立简报standalone briefhelper从空 transcript 开始看不到当前对话。因此任务描述必须完全自包含。一个合格的简报需要包含项目project相关的实验与分支relevant experiment and branch指标metric约束constraints允许的计算资源allowed compute预期输出expected output明确的完成定义concrete definition of done。多段落的简报建议使用--stdin配合 heredocorx agent spawn --title 文献整理: baseline 复现报告 --stdin EOF 项目: nanochatdemo/nanochat 任务: 阅读 runs/ 下的 scaling_laws.sh 与 miniseries.sh,总结两者在数据集切分、 学习率调度与评估指标上的差异,并输出一份 Markdown 对比报告。 约束: - 只读当前仓库,不得修改任何实验代码; - 不允许执行任何 orx exp run 调用; - 在你的 worktree 内新建 docs/comparison.md 输出。 完成定义: docs/comparison.md 包含两个脚本的逐项对比表、关键参数默认值、 以及一处基于 scripts/base_train.py 的推断说明。 EOF注意上例中的--harness/--model未指定此时 helper 会继承父会话的 harness模型与服务层级的继承规则见下文“继承规则”小节。源码视角会话继承规则与参数传递src/commands/agent.rs 展示了 spawn 时如何构建子会话配置几个关键决策harness 默认继承父会话但必须是聊天类 harnessis_chat_harness否则报unknown harness: harness只有子会话与父会话使用相同 harness 时inherits harness parent.harness设置才会继承——model、service_tier、permission_mode、reasoning_level 均遵循此条件不同 harness 之间继承无意义因为某个 CLI 的 model id 或 permission-mode id 对另一个 CLI 无效显式传入--model且与父会话不同时会阻止 service_tier 继承changes_model判断plan 权限的剥离对 Claude 系 harnessPlan 通过 permission mode 激活而非 plan 轴因此子会话会过滤掉PermissionMode::Plan对应的权限模式同时plan_mode恒为false——避免把“只产出计划”的规划模式传给 helper显式--title会标记title_source user自动起名逻辑不再覆盖它。唤醒机制、嵌套限制与并发上限唤醒wake机制默认行为下helper 完成或失败、被中断、静默无回复后父会话会被唤醒并收到一份结构化报告src/local/chat/mod.rs格式大致为[orx] The agent you spawned for chat_xxx (title) has finished. It was asked to: brief 摘要 Its closing reply: 收尾回复 Its edits are in its own worktree at path — read them there. Nothing was merged into yours.报告会区分四种结局has finished有收尾回复、failed以错误结束且未完成任务、was interrupted before it finished、以及Silent无回复任务未确认需自行检查会话。若 helper启动失败父会话同样会被唤醒收到spawn_start_failure_text提示“Do the task here, or delegate it again.”src/local/chat/mod.rs。--no-wake场景下wake_parent为falsehelper 结束后父会话不会被唤醒但其 spawn 记录仍会流转到Done状态不会因此绕过并发上限。嵌套禁止与并发上限两条硬边界src/commands/agent.rs 的spawn_refusal定义了拒绝 spawn 的两个理由对应两条硬边界嵌套禁止parent_session_id.is_some()即“本会话本身是被 spawn 出来的”此时直接拒绝提示“Do the task here, or report back so the session that spawned you can delegate it.”并发上限单会话同时在途 helper 数达到MAX_LIVE_SPAWNS 5src/commands/agent.rs时拒绝提示等待其中一个报告后再 spawn。这两个限制的目的是防止一次请求变成无界的付费会话树depth 与 breadth 两个维度都被封死。测试a_spawned_session_may_not_spawn_its_own与one_session_may_only_run_so_many_helpers_at_once分别覆盖了这两条边界src/commands/agent.rs。值得注意的是--no-wake并不会让在途计数提前释放源码注释明确说明 Running 状态的保留是为了“fire-and-forget spawn 不能在回合刚开始时就退役记录从而绕过在途上限”src/local/chat/mod.rs。spawn 记录的生命周期与容错设计从 src/store.rs 可以看到每条 spawn 在 SQLite 的chat_spawns表中是一条完整记录包含session_id、parent_session_id、prompt、wake_parent、attempts、finished_at等字段状态机为Pending → Starting → Running → Waking → DonePending记录已写入子会话首回合尚未投递Starting/Waking两个“-ing”状态都是认领claim状态——由某一个 watcher 持有claim_token独占该转换崩溃可恢复而非丢失Runninghelper 正在工作Done终态——父会话已被告知或父会话本就不要求唤醒--no-wake。容错细节src/local/chat/mod.rs启动失败会记录一次attemptsrecord_chat_spawn_attempt达到重试上限后要么静默退役--no-wake要么以“启动失败”报告唤醒父会话helper 首回合投递前会广播会话事件让新会话一开始工作就出现在仪表盘 Recents 中而不是等首次 flush 之后重试时不会重复记录简报只有list_chat_messages为空时才写回用户消息判断 helper 是否还在工作时使用持久化租约chat_turn_leased而非内存状态——即使orx up中途重启也不会误报“已结束”而放弃任务。结语一张委派决策清单结合 SKILL 文档与源码实现可以把orx agent spawn的用法收敛为一张可执行的清单任务边界与当前节点真正独立 → 委派是实验循环中的一步 → 自己做是文献检索循环 → 绝不委派主 agent 亲自排序见 agent-skills/orx-lit-review/SKILL.md。任务文本位置参数或--stdin二选一不能同时用--title给会话命名多段落用 heredoc 走--stdin。简报自包含项目、实验与分支、指标、约束、允许的计算、预期输出、完成定义七要素齐全。安全边界不给 helper 当前分支冻结节点双方禁改显式声明或禁止orx exp run调用默认不合并去 helper 的 worktree 读结果。唤醒与并发默认等待收尾回复--no-wake仅用于无需跟进被 spawn 的会话不能再 spawn深度 1在途上限 5 个宽度 5。运行环境仅在本地orx upagent 会话内可用helper 由常驻 watcher 接管启动CLI 本身不执行 helper。掌握这六点你就能把 OpenResearch 中的批量勘察、文档撰写等独立工作安全地并行出去同时保证分支、实验与计算资源始终处于受控状态。赞分享人工智能AI Agent深度研究自主智能体Agent 编排【免费下载链接】OpenResearchTurn your coding agents into research agents项目地址https://gitcode.com/GitHub_Trending/op/OpenResearch点击查看免费下载相关推荐OpenResearchorx实战指南把 Claude Code / Codex / OpenCode 变成本地优先的科研 Agent 工作区OpenResearchorx实战指南把 Claude Code / Codex / OpenCode 变成本地优先的科研 Agent 工作区 OpenR人工智能AI Agent深度研究自主智能体Agent 编排learn-claude-code s06 Subagent:给子任务一段独立上下文,用嵌套 Agent Loop 实现上下文隔离与委派learn claude code s06 Subagent:给子任务一段独立上下文,用嵌套 Agent Loop 实现上下文隔离与委派 本篇基于 learn示例工程AI Agent人工智能从 310M 到 2.3BVAR 模型选型与部署实操指南从 310M 到 2.3BVAR 模型选型与部署实操指南 VAR 是视觉自回归图像生成项目把生成当作 next scale prediction从粗到精逐计算机视觉媒体生成深度学习大模型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考