Terminal-Bench 2.0 完全导读
更新时间:2026/04/17
文章定位:官方资料核对版,重点补齐运行流程、结果目录、trajectory / reward 文件和榜单提交要求。
上一版这篇文章里,最大的问题不是措辞,而是我把 89 个任务写成了一份看起来很完整、其实并不可靠的“中文分类清单”。
这次我重新对照了 Terminal-Bench 官方站点、Terminal-Bench 2.0 论文、Harbor 官方文档,以及 Hugging Face 的官方 leaderboard 提交说明。结论很简单:
- Terminal-Bench 2.0 确实是 89 个任务。
- 官方站点也确实提供任务浏览页面。
- 但我上一版那种“我替官方重新分好的 89 题中文 taxonomy”,并不是官方发布的标准任务结构。
所以这次我不再继续维护那份不准确的清单,而是把文章改成一篇更实用、也更可信的版本:
- Terminal-Bench 2.0 到底是什么
- 官方资料里到底确认了哪些事实
- 现在应该怎么跑
- 跑完之后 job / trial / trajectory / reward 文件分别长什么样
- 如果你想上榜,提交目录到底要怎么组织
官方 benchmark 页面明确写着:Terminal-Bench 2.0 目前展示 89 tasks。
Terminal-Bench 2.0 论文则进一步说明:这 89 个任务来自 93 位贡献者提交的 229 个候选任务,最终筛出 89 个进入正式 benchmark;每个任务都带有独立环境、人工编写的参考解、以及用于验证终态的测试。
论文还强调了一点:它测的不是“你中间说得像不像”,而是最终容器状态有没有满足任务要求。换句话说,这是 outcome-driven benchmark,而不是 chat-style benchmark。
我重新核对后发现,官方资料里可以被稳定确认的是:
- 官方任务总数是 89。
- 官方任务浏览页支持按 category、tag、difficulty 过滤。
- 论文给出了高层类别分布:软件工程是最大类,同时覆盖 system administration、data science、security、scientific computing、file operations 等类别;论文还明确说,数据集中也包含 personal assistant、video processing 这类非传统“纯软件工程”任务。
但官方并没有在我这次核对的文档里,给出一份与我上一版完全对应的“89 个任务中文重分组清单”。所以继续保留那份清单,只会让文章看起来更完整,却更不准确。
如果你真想逐题看,最稳妥的方法是直接用官方任务页:tbench.ai/benchmarks/terminal-bench-2。它本身就是当前最准确的任务浏览入口。
下面这份表格是我在 2026/04/17 直接从 官网任务页抓取并核对的当前 89 个任务。任务顺序、官方分类和难度以官网为准;中文名和任务内容是基于官网任务卡信息做的中文整理,方便快速浏览。
| 任务分类 | 任务名字 | 中文名 | 任务内容 | 难易程度 |
|---|---|---|---|---|
科学计算scientific-computing |
adaptive-rejection-sampler |
自适应拒绝采样器 | 用 R 实现自适应拒绝采样器,校验输入、检测对数凹性并附测试 | 中等medium |
科学计算scientific-computing |
bn-fit-modify |
贝叶斯网络拟合与修改 | 从样本恢复贝叶斯网络 DAG,拟合后对 Y 做干预并重新采样 | 困难hard |
安全security |
break-filter-js-from-html |
突破 HTML 中的 JS 过滤 | 构造可绕过现有 HTML 过滤脚本的页面,使其自动触发 alert | 中等medium |
调试debugging |
build-cython-ext |
构建 Cython 扩展 | 修复 pyknotid 与 Numpy 2.3 兼容问题并编译安装 Cython 扩展 | 中等medium |
软件工程software-engineering |
build-pmars |
构建 pMARS | 从 Debian 源构建无 X11 依赖的 pMARS 并安装 | 中等medium |
软件工程software-engineering |
build-pov-ray |
构建 POV-Ray | 下载并编译 POV-Ray 2.2,使其能渲染给定场景 | 中等medium |
机器学习machine-learning |
caffe-cifar-10 |
Caffe 训练 CIFAR-10 | 安装 CPU 版 Caffe,并训练 CIFAR-10 模型 500 轮 | 中等medium |
软件工程software-engineering |
cancel-async-tasks |
取消异步任务 | 实现支持并发上限且在中断时仍能执行清理的异步任务调度函数 | 困难hard |
游戏games |
chess-best-move |
国际象棋最佳着法 | 从棋盘图片判断白方最佳着法并写入结果 | 中等medium |
软件工程software-engineering |
circuit-fibsqrt |
电路实现 fibsqrt | 编写逻辑门电路文件,使模拟器输出 fib(isqrt(N)) | 困难hard |
软件工程software-engineering |
cobol-modernization |
COBOL 现代化改造 | 修复并现代化 COBOL 程序,使其正确处理输入并更新数据文件 | 简单easy |
软件工程software-engineering |
code-from-image |
从图像还原代码 | 根据图片中的伪代码实现逻辑,并输出最终结果 | 中等medium |
系统管理system-administration |
compile-compcert |
编译 CompCert | 在当前系统上从源码构建并验证 CompCert 3.13.1 编译器 | 中等medium |
系统管理system-administration |
configure-git-webserver |
配置 Git Web 服务器 | 配置 SSH Git 服务器,并将推送内容自动发布为网页 | 困难hard |
个人助理personal-assistant |
constraints-scheduling |
约束式日程安排 | 根据多人可用时间与已有冲突,安排满足约束的一小时会议 | 中等medium |
模型训练model-training |
count-dataset-tokens |
统计数据集 token 数 | 按 README 正确统计指定 Hugging Face 数据集 science 域的 deepseek token 数 | 中等medium |
安全security |
crack-7z-hash |
破解 7z 哈希 | 破解压缩包并恢复 secret_file.txt 中的单词 | 中等medium |
调试debugging |
custom-memory-heap-crash |
自定义内存堆崩溃排查 | 只修改 user.cpp,修复 RELEASE 模式崩溃问题 | 中等medium |
文件操作file-operations |
db-wal-recovery |
数据库 WAL 恢复 | 从损坏或异常的 SQLite WAL 中恢复完整数据库记录 | 中等medium |
机器学习machine-learning |
distribution-search |
分布搜索 | 寻找最符合目标 LLM 置信度指标的概率分布 | 中等medium |
科学计算scientific-computing |
dna-assembly |
DNA 组装 | 设计含 egfp/FLAG 插入的 DNA 组装方案与引物 | 困难hard |
科学计算scientific-computing |
dna-insert |
DNA 插入 | 设计引物,将输入质粒定点改造成目标质粒 | 中等medium |
文件操作file-operations |
extract-elf |
提取 ELF 内容 | 编写 Node 程序从 ELF 二进制中提取指定内存值并输出 JSON | 中等medium |
文件操作file-operations |
extract-moves-from-video |
从视频中提取动作序列 | 下载 Zork 视频,转录并提取全部输入指令 | 困难hard |
数学mathematics |
feal-differential-cryptanalysis |
FEAL 差分密码分析 | 对给定 FEAL-like 实现做选择明文攻击,恢复 key[5] | 困难hard |
数学mathematics |
feal-linear-cryptanalysis |
FEAL 线性密码分析 | 用线性密码分析从明密文对中恢复轮密钥 | 困难hard |
安全security |
filter-js-from-html |
过滤 HTML 中的 JS | 编写 Python 过滤器移除 HTML 中的危险 JavaScript,并尽量保留安全内容 | 中等medium |
数据处理data-processing |
financial-document-processor |
金融文档处理器 | 对混合 PDF/JPG 文档做发票分类、字段抽取和结构化输出 | 中等medium |
安全security |
fix-code-vulnerability |
修复代码漏洞 | 按 CWE 定位并修复仓库中的安全漏洞 | 困难hard |
软件工程software-engineering |
fix-git |
修复 Git 问题 | 找回切回 master 后丢失的个人站点改动,并合并回主分支 | 简单easy |
软件工程software-engineering |
fix-ocaml-gc |
修复 OCaml 垃圾回收 | 修复改造后的 OCaml GC,使编译器和运行时恢复正确 | 困难hard |
文件操作file-operations |
gcode-to-text |
G-code 转文本 | 从 G-code 打印路径判断最终印出的文字内容 | 中等medium |
软件工程software-engineering |
git-leak-recovery |
Git 泄露恢复 | 找回被重写历史删除的 secret,并彻底清理 Git 泄漏 | 中等medium |
系统管理system-administration |
git-multibranch |
多分支 Git 管理 | 通过 SSH 搭建支持 main/dev 双分支部署的 Git 服务器 | 中等medium |
软件工程software-engineering |
gpt2-codegolf |
GPT-2 代码高尔夫 | 写一个无依赖 C 程序,用 TF ckpt 权重做 GPT-2 贪心采样 | 困难hard |
软件工程software-engineering |
headless-terminal |
无头终端模式 | 实现无头终端接口,支持按键、屏幕状态和进程交互 | 中等medium |
数据科学data-science |
hf-model-inference |
Hugging Face 模型推理服务 | 本地部署 Hugging Face 情感分类模型推理服务 | 中等medium |
系统管理system-administration |
install-windows-3.11 |
安装 Windows 3.11 | 在 QEMU 中启动 Windows 3.11,并按要求配置 VNC | 困难hard |
软件工程software-engineering |
kv-store-grpc |
gRPC 键值存储 | 用 Python + gRPC 实现字符串键、数值值的 KV 服务 | 中等medium |
文件操作file-operations |
large-scale-text-editing |
大规模文本编辑 | 用高击键效率的 Vim 宏批量把百万行 CSV 转成目标格式 | 中等medium |
数学mathematics |
largest-eigenval |
最大特征值计算 | 完成函数以求矩阵模最大的特征值和对应特征向量 | 中等medium |
机器学习machine-learning |
llm-inference-batching-scheduler |
LLM 推理批处理调度器 | 为静态图 LLM 推理系统实现 shape-aware 批处理调度器 | 困难hard |
数据处理data-processing |
log-summary-date-ranges |
日志摘要日期区间提取 | 汇总多份日志的日期范围、来源统计与时间覆盖情况 | 中等medium |
系统管理system-administration |
mailman |
配置 Mailman | 启动 Mailman3 + Postfix 邮件列表服务并满足基础邮件流要求 | 中等medium |
软件工程software-engineering |
make-doom-for-mips |
让 Doom 跑在 MIPS 上 | 用给定源码和 vm.js 让 Doom 在 MIPS 环境下跑起来并输出帧图 | 困难hard |
软件工程software-engineering |
make-mips-interpreter |
编写 MIPS 解释器 | 实现 MIPS 解释器,使给定 doomgeneric_mips ELF 可运行 | 困难hard |
数据科学data-science |
mcmc-sampling-stan |
Stan 的 MCMC 采样 | 安装 RStan 并对层次贝叶斯模型做采样,估计后验均值 | 困难hard |
调试debugging |
merge-diff-arc-agi-task |
合并 diff 的 ARC-AGI 任务 | 从两个 bundle 还原分支并合并 diff,完成 ARC-AGI 仓库任务 | 中等medium |
数学mathematics |
model-extraction-relu-logits |
ReLU logits 模型提取 | 通过查询一层 ReLU 网络,恢复模型参数或等价表示 | 困难hard |
科学计算scientific-computing |
modernize-scientific-stack |
现代化科学计算栈 | 将旧的 Python 2.7 气候分析代码迁移到现代 Python | 中等medium |
数据科学data-science |
mteb-leaderboard |
MTEB 榜单处理 | 基于 MTEB 榜单为斯堪的纳维亚文本选择最佳嵌入模型 | 中等medium |
数据科学data-science |
mteb-retrieve |
MTEB 检索任务 | 用指定 embedding 模型检索与查询第五相似的文档 | 中等medium |
数据处理data-processing |
multi-source-data-merger |
多源数据合并 | 融合三种格式的用户数据源,并按优先级去重对齐字段 | 中等medium |
系统管理system-administration |
nginx-request-logging |
Nginx 请求日志配置 | 配置 Nginx 监听、静态服务与高级请求日志格式 | 中等medium |
安全security |
openssl-selfsigned-cert |
生成 OpenSSL 自签证书 | 用 OpenSSL 生成符合要求的自签 TLS 证书与目录结构 | 中等medium |
调试debugging |
overfull-hbox |
修复 Overfull hbox | 修复 LaTeX 文档的 overfull hbox 警告并成功编译 | 简单easy |
安全security |
password-recovery |
密码恢复 | 在 /app 中做数字取证,找回被误删的 launchcode.txt 密码 | 困难hard |
软件工程software-engineering |
path-tracing |
路径追踪实现 | 编写 C 程序生成尽可能接近参考图的渲染图像 | 困难hard |
软件工程software-engineering |
path-tracing-reverse |
逆向路径追踪 | 逆向已编译程序,并用 C 复现完全相同的行为 | 困难hard |
软件工程software-engineering |
polyglot-c-py |
C / Python 多语程序 | 写一个单文件程序,可同时作为 Python 和 C 执行 | 中等medium |
软件工程software-engineering |
polyglot-rust-c |
Rust / C 多语程序 | 写一个单文件程序,可同时作为 Rust 和 C++ 执行 | 困难hard |
优化optimization |
portfolio-optimization |
投资组合优化 | 结合 C 与 Python 优化投资组合风险收益计算性能 | 中等medium |
科学计算scientific-computing |
protein-assembly |
蛋白质组装 | 为 DHFR FRET 实验设计满足滤光片与构建约束的蛋白方案 | 困难hard |
软件工程software-engineering |
prove-plus-comm |
证明加法交换律 | 补全 Coq 证明,证明自然数加法交换律 | 简单easy |
软件工程software-engineering |
pypi-server |
搭建 PyPI 服务 | 创建 vectorops 包,并在本地搭建可安装该包的 PyPI 服务 | 中等medium |
模型训练model-training |
pytorch-model-cli |
PyTorch 模型命令行接口 | 实现 MNIST 模型命令行推理工具,只输出预测数字 | 中等medium |
模型训练model-training |
pytorch-model-recovery |
PyTorch 模型恢复 | 根据权重和样本重建原始 PyTorch 模型结构 | 中等medium |
系统管理system-administration |
qemu-alpine-ssh |
QEMU Alpine SSH | 启动 Alpine 镜像并配置 SSH,使 localhost:2222 可登录 | 中等medium |
系统管理system-administration |
qemu-startup |
QEMU 启动问题 | 以可经 telnet 访问登录提示的方式启动 Alpine QEMU | 中等medium |
数据科学data-science |
query-optimize |
查询优化 | 优化给定 SQLite 查询,使结果不变但性能更好 | 中等medium |
科学计算scientific-computing |
raman-fitting |
拉曼光谱拟合 | 拟合拉曼光谱的 G 峰和 2D 峰参数,并写入结果文件 | 中等medium |
软件工程software-engineering |
regex-chess |
正则国际象棋 | 写正则替换规则,生成某 FEN 下全部合法下一步局面 | 困难hard |
数据处理data-processing |
regex-log |
日志正则提取 | 写正则匹配含 IPv4 日志行中的最后一个 YYYY-MM-DD 日期 | 中等medium |
数据科学data-science |
reshard-c4-data |
重切分 C4 数据 | 编写压缩与验证脚本,按要求重切分并处理数据集 | 中等medium |
数据科学data-science |
rstan-to-pystan |
RStan 迁移到 PyStan | 将给定 RStan 脚本改写为 PyStan 3 版本并完成采样 | 中等medium |
数据科学data-science |
sam-cell-seg |
SAM 细胞分割 | 用 Meta 的分割模型把矩形/折线掩码统一转换为折线 | 困难hard |
安全security |
sanitize-git-repo |
清洗 Git 仓库敏感信息 | 清理 GitHub 仓库中的 API key,并替换为占位值 | 中等medium |
软件工程software-engineering |
schemelike-metacircular-eval |
类 Scheme 元循环求值器 | 编写 metacircular evaluator,解释给定类 Scheme 语言 | 中等medium |
数据查询data-querying |
sparql-university |
大学数据 SPARQL 查询 | 在大学知识图谱上编写 SPARQL 查询回答指定问题 | 困难hard |
调试debugging |
sqlite-db-truncate |
截断损坏的 SQLite 数据库恢复 | 从二进制截断损坏的 SQLite 数据库中尽量恢复词条 | 中等medium |
系统管理system-administration |
sqlite-with-gcov |
带 gcov 的 SQLite 构建 | 用 gcov instrumentation 编译 SQLite 并加入 PATH | 中等medium |
软件工程software-engineering |
torch-pipeline-parallelism |
Torch 流水线并行 | 为 LLaMA 训练实现 PyTorch pipeline parallel | 困难hard |
软件工程software-engineering |
torch-tensor-parallelism |
Torch 张量并行 | 为线性层实现 PyTorch tensor parallel | 困难hard |
模型训练model-training |
train-fasttext |
训练 FastText 模型 | 训练小于 150MB 且达到精度要求的 fastText Yelp 模型 | 困难hard |
科学计算scientific-computing |
tune-mjcf |
调优 MJCF 模型 | 调优 MuJoCo MJCF,使模拟更快且状态误差受控 | 中等medium |
视频处理video-processing |
video-processing |
视频处理 | 编写脚本分析跨栏视频,提取单次跳跃表现指标 | 困难hard |
安全security |
vulnerable-secret |
提取脆弱程序中的 secret | 分析可执行程序并提取其中隐藏的 secret | 中等medium |
软件工程software-engineering |
winning-avg-corewars |
平均胜率更高的 Corewars | 编写 CoreWars 程序,对五个经典对手取得更高平均胜率 | 中等medium |
软件工程software-engineering |
write-compressor |
编写压缩器 | 为给定解压器生成可正确解开的压缩数据 data.comp | 困难hard |
环境发现
先读目录、依赖、配置、日志、测试入口,再决定怎么做。很多题第一步都不是写代码。
长链路执行
任务通常不是单点修补,而是探索、修改、运行、验证、交付的一整条链。
终态验证
最终看的是 verifier 能不能从容器终态里读出“你真的完成了”,而不是中间过程看起来像完成了。
工程收尾能力
文件路径、服务状态、输出格式、模型大小、测试结果,这些都属于真实交付的一部分。
这也是为什么 Terminal-Bench 对 agent engineering 很有价值。它不是在测“会不会答题”,而是在测“会不会把工作做完”。
根据 Harbor 官方教程,Harbor 是 Terminal-Bench 2.0 的官方运行 harness。如果你今天要跑,请优先按 Harbor 的当前文档来,不要依赖旧博客或旧命令。
| 步骤 | 当前官方说法 | 我建议怎么理解 |
|---|---|---|
| 准备环境 | 官方文档明确要求先把 Docker 环境准备好,再安装 Harbor。 | 先把 Docker 跑起来,然后再按当前文档安装 Harbor。 |
| 安装 Harbor | Quickstart 推荐 uv tool install harbor。 |
装完先用 harbor --version 验证。 |
| 验证 Harbor 是否正常 | 官方教程先跑 Oracle:harbor run -d terminal-bench/terminal-bench-2 -a oracle |
这一步是 sanity check,先证明你的 Harbor、本地 Docker 和任务下载链路没问题。 |
| 跑真实 agent | 官方教程示例是 Claude Code + Daytona。 | 本地先小并发试跑,再决定是否上云扩容。 |
uv tool install harbor
harbor --version
先做最小验证:
harbor run -d terminal-bench/terminal-bench-2 -a oracle
然后再跑自己的 agent。这里要分清两件事:官方教程里明确给出的 Claude Code 命令,是 Daytona 版;如果你只是想在本地小并发试跑自己的 agent,可以把并发数调小,但那属于你自己的运行策略,不是官方固定示例。
# 下面这段是本地小并发试跑思路,不是 Harbor 官方教程原文
export ANTHROPIC_API_KEY=<YOUR-KEY>
harbor run \
-d terminal-bench/terminal-bench-2 \
-m anthropic/claude-opus-4-1 \
-a claude-code \
--n-concurrent 4
这里还有一个容易混淆的小点:我在 2026/04/17 核对时,Harbor 的 “Running Terminal-Bench” 专题教程页使用的是 terminal-bench/terminal-bench-2;但 Harbor 的其他通用 eval 文档里,仍然还能看到 terminal-bench@2.0 这种 versioned 写法。也就是说,这两种写法都出现在官方文档中,只是当前 Terminal-Bench 专题教程页展示的是 slash 这一版。
如果你要上 Daytona 跑更高并发,官方教程给的是:
export DAYTONA_API_KEY="<your-daytona-api-key>"
export ANTHROPIC_API_KEY="<your-anthropic-api-key>"
harbor run \
-d terminal-bench/terminal-bench-2 \
-m anthropic/claude-haiku-4-5 \
-a claude-code \
--env daytona \
-n 32
这一部分是我觉得上一版最应该补的。Harbor 官方的 run-jobs 文档已经把 job 和 trial 的基本目录结构写得很清楚了。
jobs/job-name
├── config.json
├── result.json
├── trial-name
│ ├── config.json
│ ├── result.json
│ ├── agent
│ │ ├── recording.cast
│ │ └── trajectory.json
│ └── verifier
│ ├── ctrf.json
│ ├── reward.txt
│ ├── test-stderr.txt
│ └── test-stdout.txt
└── ...
| 文件 | 作用 | 实战里最常怎么用 |
|---|---|---|
jobs/<job>/config.json |
整个 job 的配置 | 回看当时用的 agent、model、dataset、并发参数。 |
jobs/<job>/result.json |
聚合后的 job 结果 | 看总 reward、成功率、错误概况。 |
trial-name/config.json |
单个 trial 的配置 | 排查某一题为何跑法与别题不同。 |
trial-name/result.json |
单个 trial 的结果 | 看单题是否成功、耗时、报错。 |
agent/recording.cast |
终端录屏 / cast 记录 | 复盘 agent 在 shell 里的实际操作顺序。 |
agent/trajectory.json |
标准化 trajectory 文件 | 做调试、SFT、RL 或 viewer 回放。 |
verifier/ctrf.json |
测试报告 | 看验证脚本到底哪一步挂了。 |
verifier/reward.txt |
单 trial 奖励值 | 最直接地判断这题成功没、奖励是多少。 |
verifier/test-stdout.txt / test-stderr.txt |
verifier 输出 | 定位失败原因最快的地方之一。 |
如果你想开浏览器看这些结果,当前文档建议直接运行:
harbor view jobs
Harbor viewer 支持看 job、trial、trajectory、奖励、时长、错误、artifact,属于复盘 benchmark 结果时非常高频的工具。
Harbor 用的是 ATIF,也就是 Agent Trajectory Interchange Format。它不是一份随意日志,而是面向 debugging、trajectory replay、SFT 和 RL 的标准化 JSON 结构。
官方 ATIF 文档里给出的核心字段大致包括:
- 根对象:
schema_version、session_id、agent、steps、可选的final_metrics agent:agent 名称、版本、模型名steps:按顺序记录每一步交互- 每个
Step:通常有step_id、timestamp、source、message - agent step 还可以带
reasoning_content、tool_calls、observation、metrics metrics:prompt tokens、completion tokens、cached tokens、cost 等运行指标final_metrics:总 token、总 cost、总 steps 等聚合指标
如果你只把它当“对话记录”,会低估它的价值。更准确地说,它是一份结构化的 agent 运行轨迹:你能看到用户指令、agent 回复、工具调用、环境返回、token 和成本信息,甚至还能做回放和训练数据导出。
Harbor 的 task 文档把这件事写得非常明确:测试脚本必须在 /logs/verifier/ 里产出 reward 文件,否则 verifier 没法判定任务结果。
| 文件 | 格式 | 适合什么场景 |
|---|---|---|
/logs/verifier/reward.txt |
纯文本数字,比如 1 或 0 |
最简单的 pass / fail 任务。 |
/logs/verifier/reward.json |
JSON 数值字典,比如 {"accuracy": 0.95, "runtime_sec": 1.23} |
你要同时输出多个数值指标时。 |
Harbor 默认会先读 reward.txt,没有的话再回退到 reward.json。官方 task 文档给的示例也很直接:跑测试成功就往 /logs/verifier/reward.txt 写 1,失败就写 0。
#!/bin/bash
uvx pytest /tests/test.py
if [ $? -eq 0 ]; then
echo 1 > /logs/verifier/reward.txt
else
echo 0 > /logs/verifier/reward.txt
fi
另外,Harbor 还定义了几个特殊路径:
/logs/verifier/:reward 和 verifier 日志/logs/agent/:agent 运行日志/logs/:会在运行后下载回 host,方便调试/logs/artifacts/:零配置 artifact 收集目录
如果你的任务会生成模型、输出文件、报告图、日志等需要带出容器的产物,Harbor 官方推荐直接写到 /logs/artifacts/。这样 trial 结束后会自动收集到 host 上。
# Inside the sandbox
echo "result" > /logs/artifacts/output.txt
cp model.pt /logs/artifacts/model.pt
收集后,trial 目录里通常会多出一个 artifacts/ 文件夹,以及对应的 manifest.json:
<trial_dir>/
├── artifacts/
│ ├── manifest.json
│ ├── output.txt
│ └── hello.txt
├── agent/
├── verifier/
├── config.json
└── result.json
这对 leaderboard 提交也很重要,因为 Hugging Face 的官方提交流程明确要求:trial 目录里不能只有 result.json,还需要包含运行产出的其他 artifacts。
这部分官方要求写得相当具体,基本可以直接照着做。
提交仓库是这个 Hugging Face 数据集仓库:
harborframework/terminal-bench-2-leaderboard
官方 README 里给出的提交流程是:
- Fork 仓库
- 新建 branch
- 把提交内容放到
submissions/terminal-bench/2.0/<agent>__<model(s)>/ - 开 Pull Request
README 里给了一个最小示意结构,但它主要是为了说明提交路径和 metadata.yaml 的位置,不代表 trial 目录里只需要放一个 result.json:
submissions/
terminal-bench/
2.0/
<agent>__<model>/
metadata.yaml
<job-folder>/
config.json
<trial-1>/result.json
<trial-2>/result.json
...
metadata.yaml 是必需的,README 里要求至少包含:
agent_url: https://...
agent_display_name: "My Agent"
agent_org_display_name: "Org"
models:
- model_name: gpt-5
model_provider: openai
model_display_name: "GPT-5"
model_org_display_name: "OpenAI"
更重要的是验证规则。要通过自动校验,官方目前要求:
timeout_multiplier必须等于1.0- 不能覆盖 agent timeout
- 不能覆盖 verifier timeout
- 不能覆盖 CPU / memory / storage 资源
- 所有 trial 目录都必须有合法的
result.json - 所有 trial 目录都不能只有
result.json,还必须包含其他运行产物 - 每个 task 至少要评估 5 次,README 直接建议用
-k 5 - agent 不能访问 Terminal-Bench 网站或 GitHub 仓库,否则会被判定为 reward hacking
我现在对 Terminal-Bench 2.0 的看法,比上一版更明确了:
- 它最适合拿来检查一套 agent system 是否真的具备“终端里完成工作”的能力。
- 它不适合被二手转述成“某某类别 12 题、某某类别 9 题”的伪精确清单。
- 真正有价值的,是拿官方任务浏览器看任务本身,再用 Harbor 的 job / trial / trajectory / verifier 文件做失败分析。
如果你是自己在做 coding agent,我会建议用下面这个顺序:
- 先用 Oracle 跑通 Harbor,确认环境没问题。
- 再小并发试跑自己的 agent,看最基础的成功率和失败簇。
- 重点读
trial/result.json、trajectory.json、reward.txt、test-stderr.txt。 - 等单次稳定后,再按 leaderboard 要求做更规范的多 trial 评估和提交。
- Terminal-Bench 2.0 官方任务浏览页:确认当前显示 89 tasks,并提供 category / tag / difficulty 过滤。
- Terminal-Bench 2.0 论文:确认 89 个正式任务、229 个候选任务、93 位贡献者、任务结构与高层类别信息。
- Harbor: Running Terminal-Bench:当前官方运行方式与 dataset 标识。
- Harbor: Run Evals:job / trial 目录结构与结果查看方式。
- Harbor: Tasks:reward.txt / reward.json、/logs/verifier、/logs/agent 等特殊路径。
- Harbor: Agent Trajectory Format (ATIF):trajectory.json 的结构与用途。
- Harbor: Artifact Collection:/logs/artifacts 与 artifacts/manifest.json。
- Hugging Face leaderboard 提交仓库:metadata.yaml、提交目录和自动校验规则。