OpenResearch orx-git 技能实战:用 Git worktree 与 orx/<slug> 分支管理实验代码的版本与不可变历史
人工智能AI Agent深度研究自主智能体Agent 编排【免费下载链接】OpenResearchTurn your coding agents into research agents项目地址https://gitcode.com/GitHub_Trending/op/OpenResearch点击查看免费下载OpenResearchorx把 Git 当作实验历史的数据库每一个实验节点都对应一条本地orx/slug分支每一次运行都从这条分支的已提交 commit 构建不可变源码归档GitHub 发布仅用于协作者可见性、从不参与计算传输。本文以agent-skills/orx-git/SKILL.md为骨架结合仓库源码src/local/git.rs、src/local/experiments.rs、src/compute.rs、src/local/localrun.rs等深入讲解会话工作树模型、分支协作规则、提交即运行机制、父子实验对比以及历史不可变纪律。读完后你将能在多 Agent 并行会话中安全地操作实验代码、避免重复劳动与分支冲突并能准确理解已提交内容才是可复现结果这条底层契约。一、核心原则Git 记录实验但 Git 不是计算传输通道orx-git技能的第一条纪律是定位问题Git 记录每一个实验分支与提交是实验节点事实状态的唯一来源任何一次运行都要能精确回溯到跑的是哪一段代码。GitHub 发布是可选项发布publication可能被启用目的是让协作者看到进展它绝不参与计算传输compute transport。计算后端拿到的是从已记录 commit 构建出的源码归档而不是远程仓库。遵守项目 playbook 的发布状态不要仅仅为了启动计算而push同时不要从论文的上游仓库fetch也不要把结果发布回论文的上游仓库——实验仓库与论文源仓库是两个互相隔离的宇宙。这一原则在源码里被反复落实。例如 src/local/git.rs 中的github_publication与remote_matches_publication会检查github、origin、upstream三个 remote 的 fetch/push URL 是否都指向项目声明的owner/repo只有完全匹配才算发布已配置而 src/compute.rs 的模块注释则直接写明本地 Git 是实验历史数据库启动运行时绝不要求远端后端克隆这段历史而是把精确记录的 commit 归档一次、按 SHA-256 寻址、交给选定的提供方适配器。计算传输的单元是内容寻址的源码归档不是 git clone。二、多会话协作模型同一克隆上的兄弟工作树2.1 会话工作树从哪来在orx up的本地会话中每个聊天会话chat session都工作在同一个克隆的**兄弟工作树sibling worktree**里。源码层面src/local/git.rs 给出了目录约定共享克隆data/repos/owner/repo会话工作树data/worktrees/project_id/session_idensure_session_worktreesrc/local/git.rs的注释精确描述了这套设计的收益工作树共享 hub 的对象存储和 refs——在一个工作树里创建的分支其他所有工作树立即可见一次fetch更新所有人git 本身会拒绝在两个工作树同时检出同一个分支。这正是技能文档要求开工前先勘察现场的原因。2.2 开工前的现场勘察因为其他会话可能正在同一个克隆的兄弟工作树里工作动手前必须先回答别人在做什么# 查看所有分支本地 远端跟踪了解谁占了哪些 orx/slug git branch -a # 查看项目最近运行记录避免重复跑已经回答过的问题 orx runs projectId # 查看相关实验节点的备注读取兄弟会话留下的上下文 orx exp desc expIdorx runs projectId的实现见 src/commands/runs.rs它把项目运行记录渲染成表格含状态、时长、commit 短 SHA。orx exp desc expId支持--set text写备注、cat notes.md | orx exp desc expId --stdin从文件灌入实现位于 src/plane/local_plane.rs。技能强调边学边记让实验备注保持最新兄弟会话才能据此定位。2.3 一分支一 owner检出冲突的处理规则分支和 remote 是共享的工作树目录是私有的。因此一条分支只有一个工作树 owner如果git checkout报branch is already checked out只有当错误信息里列出的路径就是你自己的工作树时才继续操作否则把那条分支留给它的 owner 会话不要抢占。这背后是 git worktree 的硬约束同一分支只能在一个工作树中被检出。正是利用这一点OpenResearch 才能放心让多个 Agent 并行——冲突在 git 层就被拒之门外。2.4 工作树以 detached 状态起步会话工作树默认从 baseline 以 detached HEAD 起步src/local/git.rs 的注释直接检出 baseline 分支本身会认领它、堵死所有兄弟会话所以进入会话后第一件事是git checkout orx/slug切到自己的实验分支在编辑之前完成切换避免把改动落在游离的 HEAD 上。底层命令是git worktree add --detach path start_ref见ensure_worktree_fromsrc/local/git.rsstart_ref 默认取项目的 baseline 分支。这也是为什么技能里说check out the experiment branch before editing。三、一个实验节点 一条 orx/ 分支3.1 分支如何创建每个实验节点都有自己的一条本地orx/slug分支。orx create-experiment负责从父节点创建它orx create-experiment projectId --title title [--parent experimentId] [--description text] [--run-command cmd]用法定义在 src/commands/create_experiment.rs形状选择规则见该文件头部注释--parent id→ 从该父实验分支出去的子实验--baseline→ 新建一条 baseline根节点项目可持有多个 baseline不带参数 → 取项目最老的根节点树为空时新建 baseline。slug由标题派生并去重。实现位于 src/local/experiments.rsunique_slug扫描项目里所有已有实验的 slug 与全部本地分支的orx/前缀生成base、base-2、base-3…… 这样第一个可用值随后用git branch --no-track new parentsrc/local/git.rs从父分支的本地 tip拉出orx/slug。注意--no-track实验分支不绑定上游跟踪避免与远端发布互相干扰。3.2 标准工作流编辑 → 提交在每个会话工作树里只做这一个实验的改动然后git checkout orx/slug git status --short # 确认起点干净 git add changed files git commit -m describe the experiment change提交信息应当描述实验变更本身如调整的学习率、换用的数据集、修改的损失函数而不是泛泛的 update。3.3 边界情况baseline 之前的老根实验源码里还处理了一个历史遗留问题src/local/experiments.rs 的legacy_root_warning会警告在 baseline 拥有自己的orx/*分支之前创建的根实验是骑在项目 base 分支上的。遇到这类节点时把它当作base 分支上的根实验处理不要误解成分支丢失。四、提交即运行不可变源码归档4.1 运行只认已提交的 commitrunner 从记录的 commit 构建不可变源码归档immutable source archive已提交的内容在所有后端上都是充分的sufficient。未提交的文件永远不会被包含进一次运行。具体机制在 src/compute.rs 的SourceSnapshot::create用git rev-parse取实验分支的 HEAD 作为revisionlocal_head_sha见 src/local/git.rs调用git archive --formattar revisionarchive函数src/compute.rs把该 commit 的完整树打成 tar对 tar 计算 SHA-256 摘要按digest.tar内容寻址存放于data/source-snapshots/权限收紧到 0600/0700运行记录里写入commit_shaStoredRun.commit_sha见 src/local/localrun.rs。因为快照按内容寻址同样的代码只归档一次install_content_addressedsrc/compute.rs还会在复用缓存时做 digestsize 双校验防止缓存被篡改。运行侧的脚本snapshot_scriptsrc/compute.rs则是set -eo pipefail; mkdir -p repo; tar -xf archive -C repo; cd repo; run-command即从归档解出精确的 commit 树在独立的运行目录里执行绝不动 Agent 的工作树src/local/localrun.rs 的注释the run extracts the recorded revision into its own run dir, never the agents worktree。远程后端同理——src/local/k8s.rs 的注释强调代码在记录的 revision 上被读取与 job 收到的 commit 完全一致。这也解释了为什么每个后端HF、Modal、K8s、Ray、Slurm、SSH、OpenResearch、Local/Tinker的启动代码里都带着source_digest/source_path字段见 src/jobs/mod.rs 与各src/local/*.rs的BackendDescriptor构造。4.2 启动前检查因此在启动一次运行之前务必确认git status --short # 必须为空未提交改动不会进运行 git show --stat --oneline HEAD # 核对将要被归档的 commit 内容git show --stat --oneline HEAD让你在按下运行键之前用眼睛确认将要运行的就是这条提交。一次干净的git status --short 一条符合预期的git show是我的运行是可复现的的最小证明。4.3 备注信息与运行命令的继承orx exp desc expId的备注、--run-command都会随节点保存运行命令解析遵循实验自带 项目默认的优先级src/local/localrun.rs、src/local/experiments.rs。运行记录StoredRun里同时保存了commit_sha、command、status等供orx runs与orx exp status expId展示后者会打印last run: … commit …见 src/plane/local_plane.rs。五、对比子实验与父实验只使用本地 refs要弄清子实验相对于父实验改了什么只使用本地 ref不要上网# 三点 diffmerge-base 语义累计展示父分支与子分支之间的全部差异 git diff parent-branch...orx/child-slug # 仅列出子分支上多出的提交parent..child git log --oneline parent-branch..orx/child-slug这套命令与仓库内部实现完全一致diff_range使用base...head三点、merge-base 语义src/local/git.rslist_commits_between使用base..headsrc/local/git.rs且都通过resolve_commitishsrc/local/git.rs优先解析本地 ref、其次回退到refs/remotes/origin/。原因很直接Agent 的工作先提交到本地orx/slug分支本地 ref 才是最新、最权威的对比基准远端可能还没 push甚至不该 push。六、历史不可变永不 merge / rebase 实验分支一次运行回答了某个实验之后该分支及其历史就是不可变的immutable。它精确记录着当时跑过的那段代码任何改写都会让历史失去证词价值。因此绝不merge 或 rebase 一条已完成的实验分支需要并入其他工作成果时创建子实验把 merge commit 放在子分支上绝不rebase 实验历史——它记录的是实际运行过的精确代码。这条纪律在 UI 和模型层同样有呼应例如 UI 中的文件版本/分支变更视图ui/src/components/BranchChanges.tsx、ui/src/components/GitDiff.tsx都围绕分支 commit呈现而非工作区草稿运行记录的 diff 上限MAX_DIFF_BYTESsrc/local/git.rs也保证了任何被展示的 diff 都源于 git 对象库可追溯。七、GitHub 发布只推 baseline 与 orx/*发布用于协作者可见性遵循项目 playbook 的发布状态即可。仓库实现的发布边界非常清晰只推送 baseline 分支和orx/前缀的分支push_allsrc/local/git.rs过滤branch baseline_branch || branch.starts_with(orx/)按 baseline 优先排序后逐条git push -u remote branch发布 remote 按github→origin→upstream顺序识别publication_remotesrc/local/git.rs要求 fetch 与全部 push URL 都指向项目声明的仓库推送走认证通道authenticated_git_commandsrc/local/git.rs显式禁用交互提示GIT_TERMINAL_PROMPT0、ssh -oBatchModeyes并把凭据 helper 限定为!gh auth git-credential避免把用户的全局 git 配置卷进来发布状态可查询publication_sync_statussrc/local/git.rs会对比本地与远端的 heads返回not configured/not pushed/local changes to push/synced之一。与论文上游仓库的关系要始终保持只读隔离不要fetch论文上游、更不要发布回上游。涉及论文仓库导入时仓库还做了浅克隆重定根reroot_shallow_repository、prepare_shallow_repository_for_publicationsrc/local/git.rs与克隆时对 URL 的严格校验public_clone_urlsrc/local/git.rs目的都是保证论文源仓库与实验仓库两条线互不污染。八、常见故障与边界情况速查现象处理方式源码依据checkout报分支已被检出仅当列出的路径是自己的工作树时才继续否则留给 owner 会话ensure_session_worktree注释src/local/git.rs工作树处于 detached HEAD编辑前先git checkout orx/sluggit worktree add --detachsrc/local/git.rs想启动运行但git status --short非空先提交未提交文件不会进归档SourceSnapshot::createsrc/compute.rs想确认将运行的代码git show --stat --oneline HEADsnapshot_scriptsrc/compute.rs老根实验警告按base 分支上的根实验理解无需修复legacy_root_warningsrc/local/experiments.rs手动删除了工作树目录导致worktree add失败仓库会自动git worktree prune清理陈旧注册ensure_worktree_fromsrc/local/git.rs克隆/发布遇到认证发布走gh auth git-credential克隆优先 ssh、回退 https均禁交互authenticated_git_command、ensure_clonesrc/local/git.rs运行记录的源码归档缺失按 digest 校验失败会明确报错不会静默降级SourceSnapshot::from_runsrc/compute.rs九、总结orx-git 的三条纪律把agent-skills/orx-git/SKILL.md浓缩成三条纪律也就把握住了 OpenResearch 实验版本管理的全部精髓先勘察、后动手git branch -aorx runsorx exp desc三连尊重一分支一 owner避免与兄弟会话互相踩踏。提交即事实运行只认orx/slug分支上已提交的 commit源码归档按 SHA-256 内容寻址、跨后端一致启动前用git status --short和git show --stat --oneline HEAD自检。历史是证词不可改写已回答的实验分支永不 merge/rebase需要合并就开子分支发布只推 baseline 与orx/*且与论文上游仓库彻底隔离。遵循这三条纪律多 Agent 并行研究会话就能在同一克隆上互不干扰地工作而每一行跑过的代码都能精确回溯——这正是把编码 Agent 变成研究 Agent的版本管理地基。相关实现可继续深入 src/local/git.rs、src/local/experiments.rs、src/compute.rs 与 src/local/localrun.rs 阅读。赞分享人工智能AI Agent深度研究自主智能体Agent 编排【免费下载链接】OpenResearchTurn your coding agents into research agents项目地址https://gitcode.com/GitHub_Trending/op/OpenResearch点击查看免费下载相关推荐OpenResearch orx-create 实战指南从 orx up 建项目到 orx create-experiment 构建实验树OpenResearch orx create 实战指南从 orx up 建项目到 orx create experiment 构建实验树 导读 orx cr人工智能AI Agent深度研究自主智能体Agent 编排note-gen与Git版本控制提交历史与分支管理功能note gen与Git版本控制提交历史与分支管理功能 引言AI笔记与版本控制的融合痛点 你是否曾在写作过程中误删重要内容是否需要追踪笔记的修改轨迹作为AI 应用桌面应用移动开发知识管理OpenResearch 后端实战用 orx exp run --backend openresearch 按次计费拉起临时 GPU/CPU 沙箱OpenResearch 后端实战用 orx exp run backend openresearch 按次计费拉起临时 GPU/CPU 沙箱 本指南讲解 O人工智能AI Agent深度研究自主智能体Agent 编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

切线判定到射影定理:16题几何证明链与批量核验

切线判定到射影定理:16题几何证明链与批量核验

简介:《相似三角形和圆综合题》教师版练习文档面向初中高年级及中考数学备考学生与教师,集中训练圆与相似三角形的综合证明与计算。文档收录16道典型几何题,覆盖切线判定、直径与弦的关系、圆周角与弦切角、角平分线与垂线、比例线段、勾股定…

2026/9/20 2:56:08 阅读更多 →
Kubernetes核心概念与生产实践:从Pod到控制平面全梳理

Kubernetes核心概念与生产实践:从Pod到控制平面全梳理

这个系列写到第七篇,前几篇从容器镜像一路讲到编排工具,我不断收到读者私信:Kubernetes 概念那么多,哪些才是真正的核心?说实话,很多人学 K8s 半途而废,不是不努力,而是把顺序搞反了…

2026/9/20 2:56:08 阅读更多 →
实验室规划技术方案设计:功能分区、工艺参数与自控联锁全解析

实验室规划技术方案设计:功能分区、工艺参数与自控联锁全解析

简介:这份《实验室规划技术方案设计》文档面向企业品质管理、研发与实验室建设人员,围绕雷特科技股份有限公司的实验室筹建需求,系统梳理了从功能定位到设备选型的完整规划思路。内容按光电实验室、电源控制器实验室、环境材料实验室和信赖性…

2026/9/20 2:56:08 阅读更多 →

最新新闻

C盘被 odis_download_dest 塞满?CAD与诊断软件缓存堆积清理全攻略

C盘被 odis_download_dest 塞满?CAD与诊断软件缓存堆积清理全攻略

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

2026/9/20 4:14:02 阅读更多 →
Codex 历史会话列表消失?数据恢复与索引重建指南

Codex 历史会话列表消失?数据恢复与索引重建指南

1. 会话没丢,只是列表不见了:问题到底出在哪Codex 用久了,最让人心里一紧的场景不是模型报错,而是某天打开 CLI,发现历史会话列表空了。那一瞬间脑子里闪过的念头通常是“完了,记录被清了”。但实际情况往往…

2026/9/20 4:14:02 阅读更多 →
流媒体测试地址全解析:RTSP、RTMP、M3U8、FLV、MP4实测与本地搭建

流媒体测试地址全解析:RTSP、RTMP、M3U8、FLV、MP4实测与本地搭建

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

2026/9/20 4:14:02 阅读更多 →
IsaacLab VSCode调试配置踩坑记:3步解决ModuleNotFoundError报错

IsaacLab VSCode调试配置踩坑记:3步解决ModuleNotFoundError报错

IsaacLab VSCode调试配置踩坑记:3步解决ModuleNotFoundError报错 【免费下载链接】IsaacLab Unified framework for robot learning with multi-physics/renderer support 项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab 概览:在Isa…

2026/9/20 4:14:02 阅读更多 →
IDEA集成Claude Code与Codex:AI编程代理实战指南

IDEA集成Claude Code与Codex:AI编程代理实战指南

1. 为什么偏偏是 IDEA:IDE 与 AI 编程助手的合体逻辑先说结论:Claude Code 和 Codex 这类终端型 AI 编程工具,单独用只是“半个神器”,真正让它们起飞的关键,是把它们塞进 IDEA 这个“老巢”里。我在过去大半年里&…

2026/9/20 4:14:02 阅读更多 →
RTX 50 显卡跑不动 IsaacLab?版本冲突根因与两条快速修复路径全解

RTX 50 显卡跑不动 IsaacLab?版本冲突根因与两条快速修复路径全解

RTX 50 显卡跑不动 IsaacLab?版本冲突根因与两条快速修复路径全解 【免费下载链接】IsaacLab Unified framework for robot learning with multi-physics/renderer support 项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab 你刚把 IsaacLab 装完…

2026/9/20 4:13:02 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →