SETA: Scaling Environments for Terminal Agents

CAMEL-AI · Eigent.AI · SambaNova · KAUST · Imperial / Stanford / Oxford · 2026-01
作者: Qijia Shen, Jay Rainton, Aznaur Aliev, Ahmed Awelkair, Boyuan Ma, Zhiqi (Julie) Huang, Yuzhen Mao, Wendong Fan, Philip Torr, Bernard Ghanem, Changran Hu, Urmish Thakker, Guohao Li
CAMEL Blog · Notion Tech Report · GitHub: seta · seta-env · HF dataset · HF model
关键词: Terminal agent · Terminal-Bench 2.0 · RLVR · AReaL · synthetic env · CAMEL · Qwen3-8B · Apache-2.0

速读卡片 (TL;DR)

一句话: SETA 是 CAMEL-AI / Eigent.AI 把"为 terminal agent 训练用的 RL 环境"整套搬到开源的项目——核心包括 (1) 一份与 Terminal-Bench 任务格式兼容的 400+ 合成任务数据集(LLM-生成 / Docker 容器 / unit-test verifier),(2) 一个 双工具包(TerminalToolkit + NoteToolkit),(3) AReaL 上的端到端 GRPO 训练 workflow + rLLM 集成 demo。它对应的"训→评闭环"是 SWE-Gym → SWE-Bench 的 terminal 版,即 SETA → Terminal-Bench。代码、数据、Qwen3-8B 训练后权重全部 Apache-2.0 开源

400 / 260
初始合成任务数 / RLVR 微调实际用到的子集
46.5%
Claude Sonnet 4.5 + CAMEL terminal agent · Terminal-Bench 2.0 排名 #1(领先第 2 名 3 pp)
3.4% → 20.2% ↑
Qwen3-8B 基线 3.4% on TB2.0;RLVR 后 unit-test 通过率 0.38 → 0.45(+20.2%)

立场: SETA 不是一篇有 arXiv 编号的 paper,而是一份"持续更新"的 Notion 技术报告 + 两个活跃 GitHub 仓库。和姊妹项目 Toolathlon-Gym(MCP 域)以及 R2E-Gym(SWE 域)形成同一 CAMEL/Eigent 生态下的三大开源训练 env 矩阵。它最有信号价值的一句来自创始人 Guohao Li: "Frontier labs spend millions purchasing RL environments for training terminal agents. But we decided to open source it."——直接把 frontier lab 的"软资产"打回到 commodity。


1 · 背景:为什么 2026 突然需要 "terminal RL env" 这种东西

2024–2025 这一年,"终端"突然变成 agent 工程的中心舞台:

"Frontier labs spend millions purchasing RL environments for training terminal agents. But we decided to open source it. Introducing SETA: Scaling Environments for Terminal Agents, the largest open source training RL environments for terminal agents." —— Guohao Li (CAMEL-AI 创始人,X)

这句话点透了 SETA 的真正定位——不是再写一个 benchmark(那是 Terminal-Bench 的工作),而是把 "训练数据 + verifier + 训练 pipeline" 这个完整闭环开源化,让小团队 / 学术界也能跑得起 terminal agent 的 RL 训练。这与笔者前面读过的几个工作可以并排理解:

对应关系"benchmark"(评测)"gym / env"(训练)关系
Coding / SWESWE-BenchSWE-Gym / R2E-GymSWE-Gym 显式 "train for SWE-Bench"
MCP / tool-useMCP-Atlas (#19) / MCP-UniverseToolathlon-GymToolathlon-Gym 提供同源训练环境
GUIOSWorld / AndroidWorldUI-TARS-2 沙箱 (#17) / ClawGUI (#14)
Terminal (本篇)Terminal-Bench 1.0/2.0SETASETA 任务格式直接兼容 TB harness

所以 SETA 在 2026 这一波"agent env / gym 大爆发"里的角色,是 terminal 这一象限的 SWE-Gym 等价物。它不是要取代 TB,而是要做 TB 的"上游训练管线"。

2 · SETA = toolkit + env + 训练 workflow 三合一

看 repo 结构最快理解它的边界:camel-ai/seta(代码 + 训练)+ camel-ai/seta-env(任务数据)共构。

2.1 TerminalToolkit:agent 用什么"敲键盘"

SETA 给 agent 的不是裸 bash,而是一套封装好的 TerminalToolkit(docs/terminal_toolkit_design.md),核心 6 个 API:

API作用
shell_exec(cmd, block, id)blocking / non-blocking 命令执行;Docker 后端自动 bash -c 包装
shell_write_content_to_file直接写文件——绕开 echo 嵌套引号灾难
shell_write_to_process给已运行的非阻塞 session 喂输入(交互式 REPL / vim / 数据库 shell)
shell_view(id)查看后台 session 当前输出
shell_wait(id)事件驱动等待(基于"输出流空闲一段稳定时间")
shell_kill_process(id)结束 session

关键设计点(从 design doc 提炼):

2.2 NoteToolkit:long-horizon 记忆补丁

blog 显式提到第二组工具,用于"long-horizon task"的外部 scratchpad(因为 LLM context 装不下整个 session log):

create_note(name, content)
append_note(name, content)
read_note(name)
list_note()

对比 #17 UI-TARS-2 的"内部 memory token"路线,SETA 这里走的是显式 external memory——朴素但和 Claude Code / Codex CLI 的工程实践一致。

2.3 任务环境:Terminal-Bench 兼容包(seta-env)

每个 task 是一个独立目录,内含:

<task_id>/
├── task.yaml          # instruction + difficulty + category + tags + timeouts
├── Dockerfile         # 完整可复现环境定义
├── docker-compose.yaml
├── solution.sh        # 标准答案(oracle agent 用)
├── run-tests.sh       # 运行测试
├── tests/             # pytest 测试集
└── weights.json       # 评分权重

第一行总是 Terminal-Bench Canary String, DO NOT REMOVE + 一个 GUID——这是 TB 的数据污染检测金丝雀,显示 SETA 任务设计完全沿用 TB 的标准格式。

2.4 训练 workflow:AReaL 主线 + rLLM 备线

训练 workflow 在 seta/training/:

3 · 任务设计:400 task 长什么样

3.1 合成 pipeline:两个 LLM agent 接力

blog 描述任务生成 pipeline:

阶段角色输出
1. 种子收集从 web 内容收集约 1,300 个 Q&A pair
2. Idea Generation AgentLLM把 raw Q&A 转成"详细 task spec"
3. Datapoint Creation AgentLLM输出"complete, executable Terminal-Bench task"(yaml + Dockerfile + tests)
4. 验证oracle agenttb run --agent "oracle" 跑通 → 入库

难度分布:blog 自述"most tasks are medium-level",设计动机是"fill the gap between limited terminal capability of small models and difficult terminal-bench tasks"——也就是给小模型铺中间台阶。

3.2 7 大任务类别

类别典型场景
software-engineering打包安装清单、备份脚本、构建系统
system-administration用户/组管理、文件权限、SSH key 迁移
securitycert/key 操作、cryptography 题
debugging修坏的脚本 / Dockerfile
systems-programming低层 C / 系统调用
networkingiptables / curl / DNS / socket
devopsCI/CD / docker compose / 容器编排

3.3 三个真实 task 例子(实地从 repo 抽出)

例 1 · Dataset/0/task.yaml — software-engineering / medium / 15 min
You need to create a reproducible package inventory from the current
Ubuntu system and prepare it for bulk installation on another system.
Generate a complete list of all currently installed packages
(excluding deinstalled ones), save it to packages.txt in $HOME, and
create install_packages.sh that can reinstall those packages on a
fresh Ubuntu system. The script should handle install errors
gracefully and provide a summary of successful/failed installs.

category: software-engineering
parser_name: pytest
max_agent_timeout_sec: 360
expert_time_estimate_min: 15
junior_time_estimate_min: 30
例 2 · Dataset/100/task.yaml — system-administration / medium / 20 min
Rename user account "olduser" → "newuser" while preserving UID/GID,
moving /home, updating ownership across filesystem, fixing all
config files that contain hardcoded references to the old username,
preserving SSH key functionality, and verifying that the new user
can authenticate. The old username should no longer exist.

category: system-administration
tags: [linux, user-management, system-administration]
max_agent_timeout_sec: 600
例 3 · Dataset/500/task.yaml — software-engineering / medium / 10 min
Create a system backup script /workspace/backup.sh that:
- creates compressed tar archive (backup.tar.gz) of /workspace/system_root/
- EXCLUDES /dev /proc /sys /tmp /media /mnt /lost+found and the archive itself
- INCLUDES /home /etc /var /usr
- uses gzip compression and preserves directory structure
Validation: archive must contain all INCLUDE_MARKER files and
none of the EXCLUDE_MARKER files.

tags: [bash, tar, linux, backup, filesystem]

这三例集中体现了 SETA 任务的风格特征:多步骤、有副作用、需要 robust 错误处理、unit-test 可验证。和 Terminal-Bench 2.0 那种"play-zork / pwntools / bioinfo pipeline"的真实任务相比,SETA 任务更"标准化"——但这正是 RL 训练需要的:reward signal 干净、能批量并行、Docker 化彻底。

注: camel-ai/seta-env/Dataset/ 当前可见目录数已经 ≥ 1000(GitHub API 第一页返回 1000),另有 Harbor-Dataset/ 同样规模。Blog 自述"400 with continuous scaling"是 RLVR-ready 的初始批,实际仓库已超出。

4 · 训练 recipe:AReaL GRPO + RLVR 配方拆解

4.1 框架选择:AReaL(主线)+ rLLM(备线)

主线训练在 AReaL 上完成(training/tbench_areal_workflow/train.py,33 KB)。AReaL 是完全异步的 RL 框架——rollout server (SGLang) 与 trainer 解耦,policy lag 可控(配置里 max_head_offpolicyness: 2)。这与 SETA 这种"任务可能跑 6 分钟、不同任务方差极大"的场景天然契合。rLLM workflow 提供小规模可读 demo。

4.2 实证 hyperparam(从 config.yaml 直接读出)

参数取值解读
base modelQwen/Qwen3-8B非 thinking 版
total epochs10非常短——260 任务 × 10 epoch ≈ 2600 步
n_trajs2每个 task 采 2 条轨迹
max_tokens / trajectory32,768长 horizon
max_concurrent_rollouts64并行 64 个 Docker 环境
algorithmGRPO(experiment_name 显示)group_size=1,实际更像单 traj policy gradient + group baseline
lr1.70e-5constant schedule
weight_decay0.017
eps_clip0.4较大,允许更激进 update
use_decoupled_losstrueoff-policy 修正
behav_imp_weight_cap5.0importance weight clip
kl_ctl0.0⚠️ 完全无 KL 约束
reward_scaling10.0原始 reward × 10
reward_bias-0.5把 [0,1] 平移到 [-0.5, +0.5]
cluster1 node × 8 GPU(default 8×H100 config 存在)
allocation_modesglang:d4p1t1+d4p1t14 GPU 推理 + 4 GPU 训练
backendFSDP

4.3 Reward 设计(RLVR 核心)

blog 明文:

"We use unit test pass ratio for each rollout as reward, with additional bonus reward 1 assigned to fully succeeded rollout. The reward value could be larger than 1 since we add a bonus for full completion trajectories."
R(τ) = (passed_tests / total_tests) + 𝟙[all_passed]

非常朴素的 RLVR 配方:

4.4 训练基础设施(从 README 推断)

4.5 260 / 400 的取舍

blog 直接说 "400 terminal tasks ..., 260 of which have been used for RLVR finetuning"。Notion 报告(持续更新中)未给出明确剔除标准——合理推测:剩下 140 是 oracle 验证不稳定 / Docker 资源占用过大 / 难度偏离目标分布的部分。这部分笔者未在 repo 中找到显式 split 列表

5 · 实证:TB2.0 #1 (46.5%) 与 Qwen3-8B 微调收益

5.1 双线结果:大模型 + CAMEL agent 框架

第一个数字与 RL 训练无关,而是"frontier model + CAMEL agent 框架"在 Terminal-Bench 上的成绩——这是 CAMEL 团队展示 agent infra 价值的数字:

SettingTB 版本分数排名领先
Claude Sonnet 4.5 + CAMEL terminal agent2.0(89 tasks)46.5%#1+3 pp(vs #2)
GPT-4.1 + CAMEL terminal agent1.035.0%#1+4.7 pp(vs #2)

分领域表现(TB 2.0,from blog):

DomainPass rate
Git 操作80% (4/5)
DevOps workflows100% (3/3)
Code security100% (3/3)
Cryptography33% (1/3)
Bioinformatics0% (0/3)

典型的"泛型工程任务很强,垂直领域知识题崩盘"——bioinformatics 0/3 暴露了纯 prompting + 工程 toolkit 的天花板。

5.2 Qwen3-8B 主战场:RLVR 真的有用吗

MetricBefore RLVRAfter RLVRΔ
TB 2.0 task 通过(out of 89)3 tasks(3.4%)3 + 4 = 7 tasks+4 task
Unit-test pass ratio(per rollout 平均)0.380.45+20.2% relative

这组数字老实但不闪亮:

注意区分两个故事: TB2.0 #1 (46.5%) 不是 Qwen3-8B + RLVR 跑出来的,是 Claude Sonnet 4.5 + CAMEL agent 工程框架跑出来的。两者交叉混淆容易误读 SETA 的 RL 价值。 RLVR 训练目前只在 Qwen3-8B 上做了,且收益是温和的 +4 task / +20.2% pass ratio。

6 · 🔍 开源现状清点(repo 实地走查)

这是本篇最关键的一节——直接决定 SETA 能不能被复用。截至 2026-05,走查结果如下:

6.1 仓库清单 & license

资产位置License规模状态
SETA 代码主仓camel-ai/setaApache-2.0~9 MB,104★✓ 全开
SETA 任务数据仓camel-ai/seta-envApache-2.0~22 MB,134★✓ 全开
HF datasetcamel-ai/seta-envApache-2.010.9 MB(预览)✓ 月下载 735
训练后模型camel-ai/seta-rl-qwen3-8b(继承 Qwen3 协议)Qwen3-8B BF16✓ 权重已放
技术报告Notion(eigent-ai)持续更新✓ 可读
arXiv paper✗ 无,只挂 BibTeX

6.2 camel-ai/seta 内容剖面

seta/
├── dataset/                                  # 任务数据(submodule + 转换)
│   ├── tbench-tasks/  (symlink)             #   终端 bench 原任务
│   └── tbench-tasks_convert/                #   parquet 转换后版
├── docs/terminal_toolkit_design.md          # 详细工具设计文档
├── evaluation/
│   ├── terminal_bench_eval/                 # 跑 TB 1.0 / TB 2.0 官方评测
│   └── terminal_bench_run/                  # single-agent / workforce 试跑
├── training/
│   ├── tbench_areal_workflow/               # 主线 RL 训练(AReaL)
│   │   ├── train.py (33 KB)
│   │   ├── eval.py  (28 KB)
│   │   ├── terminal_toolkit.py
│   │   ├── chat_agent_trace.py
│   │   ├── prompts.py
│   │   └── configs/
│   │       ├── config_8xh100-qwen3-8b.yaml
│   │       └── config_test_tasks_qwen3-8b_synthdata_1-400.yaml
│   ├── tbench_rllm_workflow/                # rLLM 备线(README 自述未充分测试)
│   └── data_utils/                          # 下载 / 转 parquet 工具
├── external/                                # git submodule
├── setup.sh
└── LICENSE  (Apache-2.0)

6.3 自托管要点 / 复现门槛

6.4 开源度对比:同生态三件套

项目训练 code数据权重arXivLicense
SETA(本篇)Terminal✓ AReaL+rLLM✓ 400+,持续增✓ Qwen3-8B无,NotionApache-2.0
Toolathlon-GymMCP部分Apache-2.0
R2E-GymSWE
Agent World Model(#18)多任务合成✓ 1K env / 35K tools✓ 4/8/14B2602.10090
AgentGym-RL(#6)5 类多 env✓ 27 task部分2509.08755
UI-TARS-2(#17)GUI✗ 主线闭✗ 主线 230B 闭2509.02544

7 · 与同类工作横排

维度SETAToolathlon-GymR2E-GymAgentGym-RL(#6)Terminal-Bench 2.0
定位Terminal 训练 envMCP 训练 envSWE 训练 env通用多 env 训练框架Terminal 评测
对应评测TB 1.0 / 2.0MCP-Atlas / UniverseSWE-Bench Verified27 内置 env
任务数400+(目标持续增)27 task89 (v2)
任务生成LLM 自动合成(双 agent 流水线)真实 GitHub issue 来源多源人工 + 社区贡献
动作空间TerminalToolkit (6 tool)+ NoteToolkit (4)MCP-tool 调用code patch + bash每 env 不同bash
Rewardunit-test pass ratio + 全过 bonus测试通过env-specific测试通过(评测)
RL 框架AReaL(主)+ rLLM自有 ScalingInter-RL
训练模型Qwen3-8BQwen / Llama 多
LicenseApache-2.0Apache-2.0

8 · SETA + Terminal-Bench 的训→评闭环

① Web Q&A ~1,300 raw pairs ② Idea Generation LLM agent → task spec ③ Datapoint Creation LLM agent → task.yaml+Dockerfile+tests ④ Oracle 验证 tb run --agent oracle SETA-Env Dataset (400+, Apache-2.0) Terminal-Bench 兼容 / Docker + pytest verifier / 7 categories AReaL GRPO 训练(260 task × 10 ep) Qwen3-8B base · 8×H100 · sglang 异步 rollout R = unit-test pass ratio + 𝟙[all pass] decoupled loss · KL=0 · clip 0.4 · imp cap 5 camel-ai/seta-rl-qwen3-8b 3.4% baseline → +4 task on TB 2.0 unit-test pass: 0.38 → 0.45 (+20.2%) HF 公开权重 Terminal-Bench 2.0(89 真实任务)→ 评测 + 反馈到 ① 收集更难种子 feedback (难样本回流)
SETA 训→评闭环: ①→②→③→④ 是 LLM 自动化任务合成管线(双 agent),产物是 SETA-Env Dataset。下游 AReaL GRPO 在 260 task 上 fine-tune Qwen3-8B,得到 seta-rl-qwen3-8b;最后用 Terminal-Bench 2.0 评测,失败案例回流到种子池(虚线红色 = feedback)。这与 SWE-Gym → SWE-Bench 的范式同构。

9 · 局限与个人 take

9.1 老实的局限

9.2 个人 take

  1. 战略价值 > 工程数字。SETA 的"+4 task on TB 2.0"是个温和数字,但项目真正的价值是把 frontier lab 的"软资产"开源化——任何团队现在都能用 8×H100 复现一个 terminal RL 训练管线,这对学术界和小厂是巨大的杠杆。
  2. 双 agent 合成 pipeline 是核心 IP。"Idea Generation + Datapoint Creation"这种从 1,300 个 Q&A 种子合成可执行 Docker task的能力,本身比合成出来的 400 task 更有复用价值——这与 #18 Agent World Model 的 code-driven env 生成思路相通,但 SETA 走的是 "Docker + pytest"更工程化的路线。
  3. 三件套生态的信号。CAMEL/Eigent 在 2026 初连发 SETA(terminal)+ Toolathlon-Gym(MCP)+(预计的 GUI gym),形成"训练 env 矩阵"打法。这与"先做模型再补 env"的 frontier lab 路径正好相反——是"先把 env 做厚,模型谁来训都行"的赋能策略。 SETA 的 Qwen3-8B 训练某种意义上只是"用例 demo",真正的产品是 env 本身。
  4. 对照 #17 UI-TARS-2 的反讽。UI-TARS-2 是 ByteDance 把 230B MoE + 千机沙箱全闭;SETA 是 CAMEL 把 8×H100 跑得动的训练全栈全开。两者代表了 agent infra 在 2026 的两条路:闭源垂直巨型 vs 开源水平赋能。SETA 这一手开源,大概率会让"frontier lab 花百万买 terminal RL env"这条护城河迅速干涸。
  5. 意外发现: HF dataset 卡片只显示 3 行,但实际 GitHub seta-env/Dataset/ 已经有 1000+ 任务目录,Harbor-Dataset/ 又有 1000+。"400"是 blog 时点的 RLVR-ready 子集,实际开源池子已远超此数——这是用户实际复用时容易忽略的 silver lining。

SETA: Scaling Environments for Terminal Agents 2026-01

Shen, Rainton, Aliev, Awelkair, Ma, Huang, Mao, Fan, Torr, Ghanem, Hu, Thakker, Li · CAMEL-AI + Eigent.AI + SambaNova + KAUST + Imperial / Stanford / Oxford

CAMEL Blog · Notion Tech Report · GitHub seta · GitHub seta-env · HF dataset · HF model

关联阅读