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

Harness-native 指 Agent 仍按自己的方式工作
Claude Code 继续管理 prompt、tool calls、history compaction 和多轮交互;训练系统接住它向模型服务发出的请求。
Issue + repo
问题描述和初始化仓库。
原生 control flow
Claude Code、OpenHands 或 OpenCode 决定上下文与工具。
捕获生成
记录 token IDs、mask、log-probs、MoE routes。
执行修改
Agent 在隔离容器中读写仓库。
隐藏验收
结束后注入 tests,输出任务级 0/1。
更新 policy
只训练 policy 生成的 response token。
GSPO 的学习信号来自同题 rollout 之间的 reward 差异
────────────
std(r1:G) + 10−6G = 8;reward 来自 executable verifier
这组任务能训练
不同 rollout 得到不同 advantage。
全错没有组内差异
这类任务对当前 policy 太难。
全对也没有组内差异
策略变强后,固定 task pool 会逐渐变易。
Trainer 必须重放 rollout 时的 token 边界与 MoE expert 选择
compaction、tool serialization 或 system reminder 会改变重新编码后的 token。
在 serving boundary 保存 sampled token、mask 与 rollout log-prob。
每个 token 还绑定 rollout 时选择的 experts。
同 token、同 route 重算 train log-prob。
LEGO-RL 保留完整 harness,再补齐可信训练链
| 路线 | rollout 在哪里实现 | 优势 | 与 LEGO-RL 的边界 |
|---|---|---|---|
| verl / slime / MOLT / SkyRL / AReaL | 训练框架控制或提供 abstraction | 靠近 token 与 optimizer | 完整 coding harness 往往要改写成框架内部 loop |
| ALE:ROLL + ROCK + iFlow | trainer、sandbox、CLI agent 协同设计 | 整栈一致性强 | 一致性来自共同控制 full stack |
| Agent Lightning | SDK callbacks | 侵入较轻 | 论文表中 history alignment、R3、reward-hack defense 未报告 |
| Polar / rLLM / OpenForgeRL | model API 边界观察现有 harness | 保留原生 loop | 最接近;alignment、sandbox、observability 覆盖不同 |
| LEGO-RL | Claude Code / OpenHands / OpenCode 原生 loop | capture、routing replay、Harbor verifier、Live UI 合在一处 | 贡献是完整系统组合,不声称每个组件都首次提出 |
一次 rollout 怎样从 native harness 走到 policy update

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

先排除坏任务,再保留当前 policy 有机会做对也有机会做错的任务
repo、issue、gold patch、test patch、test lists。
有效性、repo diversity、coarse complexity。
约 2.5% grader 错套 gold patch。
固定用 OpenHands SDK 估计难度。
与 Verified 在 repo、instance 两层不重叠。
首次设置 total,后续只更新 progress

alert = sw.Alert()
# 第一次初始化总量
alert.update_progress(0, "toto", total=10)
# 后续不再重复传 total
for i in range(10):
alert.update_progress(i)
test_update_progress 从 FAIL 变 PASS;PASS_TO_PASS 不能回归。同一任务经过 raw record、Harbor package、thin index 三种表示



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

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


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

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


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


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


从 task grid 进入 termination 与 train-inference alignment


训练后的 Qwen3.5 在三种 harness 中都超过自身 baseline
| Harness | Qwen3.5 | Qwen3.6 | KAT-Coder-V2.5-Dev | LEGO-RL |
|---|---|---|---|---|
| OpenHands SDK | 64.0 | 67.4 | 67.0 | 70.4 (+6.4) |
| Claude Code | 62.4 | 63.4 | 66.8 | 68.2 (+5.8) |
| OpenCode | 57.2 | 60.6 | 64.8 | 66.6 (+9.4) |
系统闭环完整,因果归因和可复现实验仍有缺口
LEGO-RL 把“能跑 Agent”推进到“能相信这次 policy update”
保存真实 token
不要从被 harness 改写过的 transcript 反推训练序列。
验收文件后置
隐藏 test、gold patch 和 grader 到验证时才注入。
难度随 policy 改变
0/8 和 8/8 都不给 group-relative signal。
曲线下钻到 trajectory
termination、tool call、task distribution 与 alignment 要连起来看。
训练跨 harness policy
论文分别训练三次;尚未回答 harness-general behavior。
作者兴趣度 9.5 / 10
与 Claude Code、Codex 一类完整 harness 的 RL 训练直接相关。