01 · PAPER MAParXiv:2608.17393v1 · 2026-08-18 · CC0
HARNESS-NATIVE RL FOR CODING AGENTS

把 Claude Code、OpenHands、OpenCode 原样接进 RL

LEGO-RL 不接管 Agent 的内部 control flow。它在模型 API 边界捕获真实 token,在隔离仓库里执行任务,再把 verifier 的 0/1 结果送回 GSPO。

论文解决的是训练闭环的可信度:rollout 时发生了什么,trainer 是否在同一批 token 和同一条 MoE routing 上算梯度,reward 又是否来自真实修复。
LEGO-RL 训练基础设施
原论文 Figure 1:native harness、proxy、sandbox、verifier 与 trainer。
64.0 → 70.4OpenHands SDK
62.4 → 68.2Claude Code
57.2 → 66.6OpenCode
> 0.99rollout-training correlation
论文 Abstract、Figure 1、Table 2。每个主要配置一次 training run。
02 · PART 0先分清 policy、harness、sandbox 与 verifier

Harness-native 指 Agent 仍按自己的方式工作

Claude Code 继续管理 prompt、tool calls、history compaction 和多轮交互;训练系统接住它向模型服务发出的请求。

01 · TASK

Issue + repo

问题描述和初始化仓库。

02 · HARNESS

原生 control flow

Claude Code、OpenHands 或 OpenCode 决定上下文与工具。

03 · PROXY

捕获生成

记录 token IDs、mask、log-probs、MoE routes。

04 · SANDBOX

执行修改

Agent 在隔离容器中读写仓库。

05 · VERIFIER

隐藏验收

结束后注入 tests,输出任务级 0/1。

06 · TRAINER

更新 policy

只训练 policy 生成的 response token。

论文 §3.1。Harness 是环境的一部分,优化对象只有 policy。
03 · PART 0同一任务采 8 条 rollout,再比较组内相对好坏

GSPO 的学习信号来自同题 rollout 之间的 reward 差异

Âi = (ri − r̄)
────────────
std(r1:G) + 10−6G = 8;reward 来自 executable verifier
0
1
0
1
有正有负

这组任务能训练

不同 rollout 得到不同 advantage。

0 / 8

全错没有组内差异

这类任务对当前 policy 太难。

8 / 8

全对也没有组内差异

策略变强后,固定 task pool 会逐渐变易。

论文 Eq. (1)、§3.1、§4.3。主实验:64 prompts/batch × 8 rollouts。
04 · PART 0相同文字不代表相同训练概率

Trainer 必须重放 rollout 时的 token 边界与 MoE expert 选择

HARNESS

compaction、tool serialization 或 system reminder 会改变重新编码后的 token。

PROXY

在 serving boundary 保存 sampled token、mask 与 rollout log-prob。

MOE

每个 token 还绑定 rollout 时选择的 experts。

TRAINER

同 token、同 route 重算 train log-prob。

Aligned replayPearson 0.9993,mean |Δp| = 0.0025。
DisabledPearson 0.9946,mean |Δp| = 0.0062。
故意错一位Pearson 0.7503;top-1 agreement 0.026。
论文 §3.2、§4.4、Appendix B、Tables 3/7。
05 · RELATED WORK区别落在谁控制 rollout,以及如何得到 reward

LEGO-RL 保留完整 harness,再补齐可信训练链

路线rollout 在哪里实现优势与 LEGO-RL 的边界
verl / slime / MOLT / SkyRL / AReaL训练框架控制或提供 abstraction靠近 token 与 optimizer完整 coding harness 往往要改写成框架内部 loop
ALE:ROLL + ROCK + iFlowtrainer、sandbox、CLI agent 协同设计整栈一致性强一致性来自共同控制 full stack
Agent LightningSDK callbacks侵入较轻论文表中 history alignment、R3、reward-hack defense 未报告
Polar / rLLM / OpenForgeRLmodel API 边界观察现有 harness保留原生 loop最接近;alignment、sandbox、observability 覆盖不同
LEGO-RLClaude Code / OpenHands / OpenCode 原生 loopcapture、routing replay、Harbor verifier、Live UI 合在一处贡献是完整系统组合,不声称每个组件都首次提出
论文 §2、Table 1。功能勾选来自作者整理,未做逐框架独立复现。
06 · ARCHITECTUREFigure 1

一次 rollout 怎样从 native harness 走到 policy update

LEGO-RL training infrastructure
原论文 Figure 1(CC0)。Sandbox 内运行 harness;proxy 连到 inference;verifier reward 与 trajectory 进入 trainer。
07 · OPERATIONSFigure 2

训练不是一条命令,而是五阶段可检查流程

LEGO-RL workflow
原论文 Figure 2(CC0):Data Preparation → Run Validation → Training → Live UI → Human Review。
准备与验证检查 task index、image、verifier、模型、sandbox 与依赖。
训练Figure 1 的 proxy、rollout buffer 与 trainer 真正运行。
观察与复核Live UI 下钻到 task、trajectory、tool use 和 termination reason。
论文 §3.3、Figure 2。官方仓库提供 /rl:check、/rl:run、/rl:status、/rl:dashboard。
08 · DATA PROVENANCE36,884 candidates → 2,699 train tasks

先排除坏任务,再保留当前 policy 有机会做对也有机会做错的任务

36,884OpenSWE candidates

repo、issue、gold patch、test patch、test lists。

22,806静态过滤后

有效性、repo diversity、coarse complexity。

21,681可构建、可判分

约 2.5% grader 错套 gold patch。

4 rolloutsQwen3.6-27B

固定用 OpenHands SDK 估计难度。

2,699solved 1-3 / 4

与 Verified 在 repo、instance 两层不重叠。

筛选偏差难度只由一个 model + harness 估计;尚未证明这是对每种 harness 都最优的 task pool。
论文 §4.1、§4.3。训练 index 指向 Harbor task,task 本体留在共享存储。
09 · REAL CASE12rambau__sepal_ui-814 · issue #813 / PR #814

首次设置 total,后续只更新 progress

Raw instance record
原论文 Figure 15(CC0):raw instance 长字段已截断。
alert = sw.Alert()

# 第一次初始化总量
alert.update_progress(0, "toto", total=10)

# 后续不再重复传 total
for i in range(10):
alert.update_progress(i)
任务来源openforis/pysepal issue #813;PR #814 是公开参考修复。
目标 testtest_update_progress 从 FAIL 变 PASS;PASS_TO_PASS 不能回归。
Agent 看不到gold patch、test patch、test lists、grader 与外网。
论文 Appendix J / Figure 15;公开 issue #813 与 PR #814 用于核验来源。
10 · JUDGE TRACEAgent phase 与 verifier phase 分权

同一任务经过 raw record、Harbor package、thin index 三种表示

Raw task record
Figure 15 · issue、base commit、gold/test patch 与测试清单。
Harbor task directory
Figure 16 · manifest + verifier-only files。
Task index row
Figure 17 · trainer 只采样一个 Harbor task 路径。
原论文 Figures 15-17(CC0)。PASS:FAIL_TO_PASS 全过且 PASS_TO_PASS 无回归;官方 GitHub 未含此 instance 完整 checker。
11 · TRAINING BEHAVIORFigure 3 · 126 steps / 3 epochs

同一初始 policy 在三种 harness 下形成不同 trajectory distribution

Training curves
原论文 Figure 3(CC0):reward、validation、entropy、response length。
OpenHands SDK64.0% → 70.4%。
Claude Code62.4% → 68.2%。
OpenCode57.2% → 66.6%。
不能横向排名 harnessstep-0 已不同;论文比较各自训练前后。
论文 Figure 3、Table 2。Validation temperature 0.7,1 sample/instance。
12 · ADMISSION & REWARDFigures 4-5

基础设施失败要丢弃;合法超时仍保留 verifier 结果

Termination profiles
Figure 4 · 排除比例:Claude Code 7.1%,OpenHands SDK 2.4%,OpenCode 6.4%。
Reward distributions
Figure 5 · 0/8 与 8/8 都不产生 group-relative advantage。
原论文 Figures 4-5(CC0)。environment setup failure 与 wall-clock timeout 被排除。
13 · TASK SELECTIONFigure 6 · four 951-task pools

随机未筛选任务几乎不给 GSPO 可用的组内差异

Task selection ablation
原论文 Figure 6(CC0)。Validation 只在实际执行的任务上计算。
Full bandpost-warmup validation average 0.671。
Upper half0.670。
Lower half0.640。
Unscreened72.7% 从未解出,13.4% 总能解出;训练前后没有净改善。
论文 §4.3、Figure 6。四组 inference concurrency 不同,作者比较 post-warmup average。
14 · OBSERVABILITYFigures 7-8

均值下降以后,必须下钻到 termination、task 和 transcript

Failure diagnosis
Figure 7 · environment failure 与 collapsed run。
Behavior analysis
Figure 8 · Claude Code run:单题 8 条 tool trajectory 与 task solve rate。
原论文 Figures 7-8(CC0)。Figure 7 两个 panel 来自不同 diagnostic runs。
15 · BEHAVIORFigures 11-12

模型更常检查、重读和运行测试,malformed tool call 变少

Reasoning share
Figure 11 · reasoning share 是 trajectory shape,不证明 reasoning 导致成功。
Behavior changes
Figure 12 · 重读 73.6%→98.1%;测试 85.0%→93.6%;malformed 1.07%→0.15%。
原论文 Figures 11-12、Table 9(CC0)。行为标签由确定性 transcript detector 计算。
16 · SYSTEMSFigures 9-10

异步调度消掉慢 rollout 的批次等待,Nydus 减少镜像搬运

Sync versus async
Figure 9 · 7.5 小时 sync 3 steps、async 7;实测 2.5×,校正后约 1.9×。
Nydus versus OCI
Figure 10 · network 21.6GB→1.59GB,disk writes 65.6GB→5.29GB。
原论文 Figures 9-10、Tables 4-5(CC0)。Sync/async 的 optimizer throughput 不完全匹配。
17 · UI EVIDENCEFigures 13-14

从 task grid 进入 termination 与 train-inference alignment

Task grid
Figure 13 · 每个 instance 的 rollout reward 与状态分布。
Diagnostic panels
Figure 14 · termination breakdown 与 train-inference consistency。
原论文 Figures 13-14(CC0)。UI 是诊断工具,不自动把相关性解释成原因。
18 · RESULTStemperature 0.7 · 200 turns · 200k context

训练后的 Qwen3.5 在三种 harness 中都超过自身 baseline

HarnessQwen3.5Qwen3.6KAT-Coder-V2.5-DevLEGO-RL
OpenHands SDK64.067.467.070.4 (+6.4)
Claude Code62.463.466.868.2 (+5.8)
OpenCode57.260.664.866.6 (+9.4)
CONTROL相同 harness version、temperature、turn/context budget。
VARIANCE每个配置没有重复 training run。
HETEROGENEITYClaude Code:1,135 tasks 上升,471 下降;每题 8 条 rollout。
论文 Table 2、§4.2、§4.5。单位:SWE-bench Verified solve rate (%)。
19 · LIMITATIONS论文能证明什么,不能证明什么

系统闭环完整,因果归因和可复现实验仍有缺口

SINGLE RUN训练方差未知三种 harness 各训练一次。
SELECTOR BIAS筛选只用一种 harnessQwen3.6-27B + OpenHands SDK 估计难度。
PUBLIC ARTIFACT GAPCase checker 未完整公开官方 GitHub a3e28f1 不含 sepal_ui-814 完整 task package。
PARTIAL CONTROL同步对照不完全匹配2.5× 是实测,1.9× 是校正估计。
CORRELATION行为变化不是因果reasoning share 与测试习惯同时变化。
SELF-REPORTED框架表不是复现排名Table 1 的功能勾选由作者整理。
论文全文与附录、官方仓库 a3e28f1、公开 issue/PR。未公开项按 unknown 处理。
20 · TAKEAWAYS对 Claude Code / Codex harness 研究最有用的四点

LEGO-RL 把“能跑 Agent”推进到“能相信这次 policy update”

TRAJECTORY

保存真实 token

不要从被 harness 改写过的 transcript 反推训练序列。

REWARD

验收文件后置

隐藏 test、gold patch 和 grader 到验证时才注入。

CURRICULUM

难度随 policy 改变

0/8 和 8/8 都不给 group-relative signal。

OBSERVABILITY

曲线下钻到 trajectory

termination、tool call、task distribution 与 alignment 要连起来看。

RESEARCH GAP

训练跨 harness policy

论文分别训练三次;尚未回答 harness-general behavior。

INTEREST

作者兴趣度 9.5 / 10

与 Claude Code、Codex 一类完整 harness 的 RL 训练直接相关。

核心结论 1 / 20