Env Hub

入门指南

写给 eigent.ai 以外的合作方,开始用 Env Hub 之前看这里:登录,或者用 Upload link 交题。有了账号、登录之后,可以看完整的使用指南。

已经有账号了?登录后看使用指南,里面有审核、评审、rollout 等全部功能。

External members

外部成员指南

你不在 eigent.ai,被某个项目的 owner 加成了成员,平台给你发了邀请邮件。这一页讲怎么登录、能做什么。

登录

  1. 打开 hub.env-lab.ai,点 Not at eigent.ai? Sign in with an email code不用注册:项目 owner 加了你的邮箱就行。
  2. 输入 owner 添加的邮箱,点 Send code一分钟内会收到 Env Hub 发来的 6 位验证码;没收到先看垃圾邮件。
  3. 填验证码,点 Sign in验证码 10 分钟内有效,只能用一次。登录保持 7 天。

你能做什么

  • 能看到的项目:只有邀请你的项目。
  • member:可以上传题目和运行结果(Tasks → Upload)、评审、评论、发起 rollout。
  • viewer:只能看。
  • 不能做的事:建项目、创建 CLI token、当管理员。命令行 eh 不对外部成员开放,请用网页上传。

遇到问题

情况怎么办
收不到验证码看看垃圾邮件,并确认邮箱就是 owner 添加的那个。一分钟后可以重发,每小时最多 5 次。
提示 wrong or expired code验证码 10 分钟有效,输错 5 次作废,重新发一个。
提示 no project has added you你已经不在任何项目里,联系项目 owner。
提示 Too many sign-in attempts等一分钟再试。

Upload link

外部交题人指南

你拿到的是一条 Upload link(形如 https://hub.env-lab.ai/u/hl_…)。不用注册、不用登录,打开就能交题。

  1. 按准备题目整理好题目目录放进一个文件夹,有运行结果也一起放。
  2. 打开链接,把文件夹(或它的 .zip / .tar.gz)拖进 Upload tasks and runs每个题目目录和 job 目录单独上传;断线会自动重试,或者给出 Resume 按钮。
  3. 看预览,再点 Publish点之前什么都没发布。不通过的会列出规则编号和原因,改完重新上传;内容变了会生成新版本。
  4. 跟进审核Your tasks 每道题一行,显示当前版本、走到了哪一步(Being checked、Needs a fix 及原因、Measuring difficulty、Waiting for review、Accepted 或 Rejected)和下一步做什么;点开 Checks 看审核、评审和各项检查结果。
  5. 查看和修改点开一道题可以看它每个版本的文件和改动;Edit files 在网页上直接改,先看对比再发布成新版本。当前版本还没人评审时,可以点 Remove upload 撤掉这次上传:上一个版本重新成为当前版本;如果这是这道题唯一的版本,整道题会被删除。项目里的人都能再恢复。
Upload link 页面Upload link 页面
Upload link 页面
一条链接只能更新经它首次发布的题:文件夹和项目里其他题同名会被拒绝,换个名字即可。运行结果只能是同一次上传里的题,或者经这条链接发布过的题的。
链接就是凭证,不要转发给别人。链接可能设了有效期,过期或被撤销后打不开,请联系给你链接的人。

Task format

准备题目

题目是官方 harbor 的 task 目录。一次上传可以放一道题,也可以放很多道,还可以连同它们的运行结果(harbor job 目录)一起放。

目录结构

my-task/
├── task.toml          # harbor 配置:超时、资源、metadata……
├── instruction.md     # 给 agent 的题面
├── environment/
│   └── Dockerfile     # 或 docker-compose.yaml
├── tests/
│   └── test.sh        # verifier
└── solution/
    └── solve.sh       # 参考解(oracle)

题目和运行结果一起上传

my-upload/
├── tasks/
│   └── my-task/            # 题目目录
└── jobs/                   # 可选:这些题的运行结果
    └── 2026-10-08__12-00-00/
        ├── result.json
        └── my-task__a1b2c3/   # trial:result.json + lock.json

题目目录(有 task.toml)和 job 目录(有 result.json)放在上传的文件夹里、或者往下两层以内都能认出来,名字随意。只放题目、或者只放一个 job 目录也行。这样的文件夹打成 .zip 或 .tar.gz 也一样:压缩包里只有一个顶层文件夹时就当作这个文件夹,否则当作和压缩包同名的文件夹;__MACOSX、.DS_Store 和链接会被忽略。每个题目目录和 job 目录单独上传、单独检查,所以大批量和小批量一样好传。

格式规则

每道题和每个运行结果逐条检查,不通过会列出违反了哪条,其他题照常发布。

规则要求
U1每个题目目录和 job 目录单独上传,打包后最大 300 MB、解开后最大 1024 MB(全局参数)
U2题目目录(有 task.toml)和 harbor job 目录(有 result.json),可以一起放也可以只放一种,在上传的文件夹里或往下两层以内
T1task.toml 能被 harbor 解析
T2题名取 [task].name 或目录名,只能用 A-Z a-z 0-9 . _ + -,同一次上传里不能重名
T3instruction.md 不能为空
T4environment/ 里有 Dockerfile 或 docker-compose.yaml
T5有 tests/test.sh
T6有 solution/solve.sh
T7不能有链接,路径不能指到题目目录外面
T8解压后总大小不超过 500 MB(可按项目调)
R1每个 trial 目录有 harbor 的 result.json 和 lock.json
R2trial 跑的题按 lock.json 里的 digest 认:同一次上传里的题,或者本项目已发布的题(通过 Upload link 上传时,只能是这条链接发布过的题)

版本怎么来

同名的题内容一变,重新上传就是新版本(rev 1、rev 2……);内容没变不会多出版本。版本用 harbor 的内容指纹(digest)区分,发布后只读。

hub 按 lock.json 里的 digest 把每个 trial 对到具体版本。题目跑完之后又改过,digest 就对不上了,会提示 task changed after this run:用跑的那一版重新上传,或者重新跑。

FAQ

常见问题

问题回答
收不到登录验证码?看看垃圾邮件,并确认邮箱就是项目 owner 添加的那个。一分钟后可以重发,每小时最多 5 次。
登录提示 wrong or expired code?验证码 10 分钟有效,输错 5 次作废,重新发一个。
登录提示 no project has added you?你已经不在任何项目里了,联系项目 owner。
登录提示 Too many sign-in attempts?等一分钟再试。
Upload link 打不开?链接可能过期或被撤销了,联系给你链接的人。
重新上传了一样的题,为什么没有新版本?内容没变就显示 No change,不会多出版本。
上传运行结果提示 R2?trial 跑的那一版既不在这次上传里,也不是经这条链接发布的。把题放进同一次上传;如果提示 task changed after this run,说明题在跑完之后改过。
能用命令行 eh 吗?不能,eh 只给 eigent.ai 同事用,请用网页上传。

Env Hub

Onboarding guide

For partners outside eigent.ai, before you start: signing in, or submitting tasks with an Upload link. Once you have an account and sign in, you can read the user guide.

Already have an account? Sign in to read the user guide, covering audits, reviews, rollouts and everything else.

External members

Guide for external members

You are not at eigent.ai and a project owner added you as a member; the hub emailed you an invite. This page covers signing in and what you can do.

Sign in

  1. Open hub.env-lab.ai and click Not at eigent.ai? Sign in with an email codeNo account to set up: the project owner adding your email is enough.
  2. Enter the email the owner added and click Send codeA 6-digit code arrives from Env Hub within a minute; check spam if it doesn't.
  3. Enter the code and click Sign inIt is valid for 10 minutes and works once. You stay signed in for 7 days.

What you can do

  • Projects you see: only those that invited you.
  • member: upload tasks and runs (Tasks → Upload), review, comment, start rollouts.
  • viewer: read only.
  • Not available: creating projects, CLI tokens, being an admin. The eh CLI is for staff; upload on the web instead.

Troubleshooting

MessageWhat to do
No code arrivesCheck spam and that the email is the one the owner added. You can ask for a new code after a minute, up to 5 an hour.
wrong or expired codeCodes last 10 minutes and five wrong tries end one; ask for a new code.
no project has added youYou are no longer in any project; contact the project owner.
Too many sign-in attemptsWait a minute, then try again.

Upload link

Guide for external contributors

You received an Upload link (like https://hub.env-lab.ai/u/hl_…). No account or sign-in: open it and submit.

  1. Prepare your task folders as in Preparing tasksPut them in one folder, with their runs if you have them.
  2. Open the link and drop the folder, or a .zip / .tar.gz of it, on Upload tasks and runsEach task and job folder goes up on its own; if the connection drops, the upload retries by itself, or offers Resume.
  3. Read the preview, then click PublishNothing is published before you click. Failures list the rule and the reason; fix and upload again. Changed content becomes a new version.
  4. Follow upYour tasks lists one row per task with its current version, where it stands (Being checked, Needs a fix and why, Measuring difficulty, Waiting for review, Accepted or Rejected) and what to do next; Checks opens its audit, review and check results.
  5. Read and editOpen a task to see its files and changes in every version; Edit files changes them in the browser, shows the changes, then publishes them as a new version. Remove upload on the current version, while no one has reviewed it, takes it back: the version before it becomes current again, or, for the task's only version, the task is deleted. The project can restore either.
The Upload link pageThe Upload link page
The Upload link page
A link only updates the tasks first published through it: a folder named like another task of the project is refused, so give it a new name. Runs must be of tasks in the same upload or published through this link.
The link is your credential: do not forward it. It may expire or be revoked; then ask whoever gave it to you.

Task format

Preparing tasks

A task is an official harbor task folder. One upload can hold one task or many, together with their runs (harbor job folders) if you like.

Folder layout

my-task/
├── task.toml          # harbor config: timeouts, resources, metadata…
├── instruction.md     # the prompt the agent gets
├── environment/
│   └── Dockerfile     # or docker-compose.yaml
├── tests/
│   └── test.sh        # verifier
└── solution/
    └── solve.sh       # reference solution (oracle)

Tasks and runs in one upload

my-upload/
├── tasks/
│   └── my-task/            # a task folder
└── jobs/                   # optional: runs of these tasks
    └── 2026-10-08__12-00-00/
        ├── result.json
        └── my-task__a1b2c3/   # a trial: result.json + lock.json

Task folders (with task.toml) and job folders (with result.json) are found in the folder you upload or up to two folders down, whatever they are called. Tasks alone, or one job folder alone, work too. A .zip or .tar.gz of such a folder works the same: an archive with one top-level folder stands for that folder, otherwise for a folder named after the archive; __MACOSX, .DS_Store and links are left out. Each task folder and job folder goes up and is checked on its own, so a large batch is no harder than a small one.

Format rules

Every task and run is checked rule by rule. A failing task lists the rules it broke; the others are published as usual.

RuleRequirement
U1Each task folder and job folder goes up on its own, at most 300 MB packed and 1024 MB unpacked (global settings)
U2Task folders (with task.toml) and harbor job folders (with result.json), together or alone, in the uploaded folder or up to two folders down
T1task.toml is valid for harbor
T2The name is [task].name or the folder name, using only A-Z a-z 0-9 . _ + -, unique within the upload
T3instruction.md is not empty
T4environment/ has a Dockerfile or docker-compose.yaml
T5tests/test.sh exists
T6solution/solve.sh exists
T7No links, and no path leaves the task folder
T8Files total at most 500 MB unpacked (per-project setting)
R1Each trial folder has harbor's result.json and lock.json
R2Each trial ran a task matched by the digest in its lock.json: a task in the same upload, or one published in this project (through an Upload link: published through that link)

Where versions come from

Upload a task with the same name and changed content and you get a new version (rev 1, rev 2, …); unchanged content adds no version. Versions are identified by harbor's content digest and are read-only once published.

The hub matches each trial to a version by the digest in lock.json. If the task changed after the run, the digests differ and the run shows task changed after this run: upload the task as it was when you ran it, or run again.

FAQ

FAQ

QuestionAnswer
No sign-in code arrives?Check spam and that the email is the one the project owner added. You can ask for a new code after a minute, up to 5 an hour.
Sign-in says wrong or expired code?Codes last 10 minutes and five wrong tries end one; ask for a new code.
Sign-in says no project has added you?You are no longer in any project; contact the project owner.
Sign-in says too many sign-in attempts?Wait a minute, then try again.
My Upload link doesn't open?It may have expired or been revoked; ask whoever gave it to you.
I uploaded the same task again; why no new version?Unchanged content shows No change and adds no version.
Uploading runs fails with R2?The trials ran a version that is neither in the upload nor published through this link. Put the task in the same upload; if it says task changed after this run, the task was edited after the run.
Can I use the eh CLI?No, eh is for eigent.ai staff; upload on the web instead.