Loading...
Loading...
Compare original and translation side by side
harbor task init "<org>/<task-name>"--description "..."--author "Jane Doe <jane@example.com>"--no-pytest--no-solution--metadata-template path.toml<task-name>/
├── instruction.md # Task prompt for the agent
├── task.toml # Config and metadata
├── environment/Dockerfile # Container definition
├── solution/solve.sh # Reference solution (optional)
└── tests/test.sh # Verifier scriptsteps/harbor task init "<org>/<task-name>"--description "..."--author "Jane Doe <jane@example.com>"--no-pytest--no-solution--metadata-template path.toml<task-name>/
├── instruction.md # 给Agent的任务提示
├── task.toml # 配置和元数据
├── environment/Dockerfile # 容器定义
├── solution/solve.sh # 参考解决方案(可选)
└── tests/test.sh # 验证器脚本steps/undefinedundefined~/.ssh/id_rsa~/.ssh/id_rsa.pubundefined~/.ssh/id_rsa~/.ssh/id_rsa.pubundefinedenvironment/DockerfileFROM ubuntu:24.04
WORKDIR /appenvironment/DockerfileFROM ubuntu:24.04
WORKDIR /app
For multi-container setups, use `environment/docker-compose.yaml` instead (note: most
cloud sandbox providers only support Dockerfile).
**Test the environment interactively** before writing the solution or tests:
```bash
harbor task start-env -p "<task-path>" -e docker -a -i
如需多容器部署,改用`environment/docker-compose.yaml`(注意:大多数云沙箱提供商仅支持Dockerfile)。
**交互式测试环境**(在编写解决方案或测试前执行):
```bash
harbor task start-env -p "<task-path>" -e docker -a -irewardkitfile_containscommand_succeedsjson_key_equalstests/test.sh#!/bin/bash
uvx --from 'harbor-rewardkit==0.1.*' rewardkit /testsharbor-rewardkitrewardkit--from 'harbor-rewardkit==0.1.*' rewardkituvx harbor-rewardkittests/checks.pytests/judge.tomlrewardkitrewardkitfile_containscommand_succeedsjson_key_equalstests/test.sh#!/bin/bash
uvx --from 'harbor-rewardkit==0.1.*' rewardkit /testsharbor-rewardkitrewardkit--from 'harbor-rewardkit==0.1.*' rewardkituvx harbor-rewardkittests/checks.pytests/judge.tomlrewardkit--no-pytesttests/test.sh#!/bin/bash
apt-get update && apt-get install -y curl
curl -LsSf https://astral.sh/uv/0.9.7/install.sh | sh
source $HOME/.local/bin/env
uvx --with pytest==8.4.1 pytest /tests/test_outputs.py
if [ $? -eq 0 ]; then
echo 1 > /logs/verifier/reward.txt
else
echo 0 > /logs/verifier/reward.txt
fitests/test_outputs.pyfrom pathlib import Path
def test_file_exists():
assert (Path.home() / ".ssh" / "id_rsa").exists()--no-pytesttests/test.sh#!/bin/bash
apt-get update && apt-get install -y curl
curl -LsSf https://astral.sh/uv/0.9.7/install.sh | sh
source $HOME/.local/bin/env
uvx --with pytest==8.4.1 pytest /tests/test_outputs.py
if [ $? -eq 0 ]; then
echo 1 > /logs/verifier/reward.txt
else
echo 0 > /logs/verifier/reward.txt
fitests/test_outputs.pyfrom pathlib import Path
def test_file_exists():
assert (Path.home() / ".ssh" / "id_rsa").exists()#!/bin/bash
if diff -q /app/output.txt /tests/expected.txt; then
echo 1 > /logs/verifier/reward.txt
else
echo 0 > /logs/verifier/reward.txt
fi#!/bin/bash
if diff -q /app/output.txt /tests/expected.txt; then
echo 1 > /logs/verifier/reward.txt
else
echo 0 > /logs/verifier/reward.txt
fi/logs/verifier/reward.txt01/logs/verifier/reward.json{"accuracy": 0.95, "runtime_sec": 1.2}test.sh/logs/verifier/reward.txt01/logs/verifier/reward.json{"accuracy": 0.95, "runtime_sec": 1.2}test.shsolution/solve.sh#!/bin/bash
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""chmod +x solution/solve.shsolution/solve.sh#!/bin/bash
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""chmod +x solution/solve.sh[task]
name = "<org>/<task-name>"
description = "One-line description"
keywords = ["jax", "mnist", "rewardkit"] # always populate — used for search/filtering
[metadata]
difficulty = "easy" | "medium" | "hard"
category = "programming" | "machine-learning" | "gpu" | ...
tags = ["..."]
[environment]
cpus = 1 # CPU cores
memory_mb = 2048 # RAM in MB
storage_mb = 10240 # Disk in MB
allow_internet = true # Network access
[agent]
timeout_sec = 120.0 # How long the agent has
[verifier]
timeout_sec = 600.0 # How long tests havekeywordsrewardkitjudge-gradingpytestgpuharbor datasets list[verifier.env]
ANTHROPIC_API_KEY = "${ANTHROPIC_API_KEY}"[task]
name = "<org>/<task-name>"
description = "单行描述"
keywords = ["jax", "mnist", "rewardkit"] # 务必填写——用于搜索/筛选
[metadata]
difficulty = "easy" | "medium" | "hard"
category = "programming" | "machine-learning" | "gpu" | ...
tags = ["..."]
[environment]
cpus = 1 # CPU核心数
memory_mb = 2048 # 内存(MB)
storage_mb = 10240 # 磁盘空间(MB)
allow_internet = true # 是否允许网络访问
[agent]
timeout_sec = 120.0 # Agent的运行超时时间
[verifier]
timeout_sec = 600.0 # 测试的运行超时时间keywordsrewardkitjudge-gradingpytestgpuharbor datasets list[verifier.env]
ANTHROPIC_API_KEY = "${ANTHROPIC_API_KEY}"harbor run -p "<task-path>" -a oraclesolution/solve.sh1.0solve.shstart-env -a -i/logs/verifier/harbor run -p "<task-path>" -a oraclesolution/solve.sh1.0solve.shstart-env -a -i/logs/verifier/harbor run -p "<task-path>" -a terminus-2 -m anthropic/claude-sonnet-4-6harbor run -p "<task-path>" -a terminus-2 -m anthropic/claude-sonnet-4-6harbor task initREADME.mdinstruction.mdharbor runharbor task initREADME.mdinstruction.mdharbor runinstruction.mdtests/solution/steps/<task-name>/
├── task.toml
├── environment/Dockerfile # Built once, shared across all steps
├── steps/
│ ├── scaffold/
│ │ ├── instruction.md # Prompt for this step
│ │ ├── workdir/ # Uploaded to WORKDIR before the agent runs
│ │ │ └── setup.sh # Optional pre-agent hook (reserved filename)
│ │ ├── tests/test.sh # Per-step verifier
│ │ └── solution/solve.sh # Per-step Oracle solution (optional)
│ ├── implement/
│ │ └── ...
│ └── document/
│ └── ...
└── tests/ # Optional shared helpers + fallback test.shtests//teststests/steps/{name}/workdir/setup.shworkdir/rm -- "$0"instruction.mdtests/solution/steps/<task-name>/
├── task.toml
├── environment/Dockerfile # 仅构建一次,所有步骤共享
├── steps/
│ ├── scaffold/
│ │ ├── instruction.md # 本步骤的提示内容
│ │ ├── workdir/ # Agent运行前上传至WORKDIR的内容
│ │ │ └── setup.sh # 可选的Agent前置钩子(保留文件名)
│ │ ├── tests/test.sh # 分步验证器
│ │ └── solution/solve.sh # 分步Oracle解决方案(可选)
│ ├── implement/
│ │ └── ...
│ └── document/
│ └── ...
└── tests/ # 可选的共享工具+备用test.shtests//teststests/steps/{name}/workdir/setup.shworkdir/rm -- "$0"schema_version = "1.1"
[task]
name = "<org>/<task-name>"schema_version = "1.1"
[task]
name = "<org>/<task-name>"
Per-step overrides available: `agent.timeout_sec`, `agent.user`,
`verifier.timeout_sec`, `verifier.env`, `verifier.user`, `healthcheck.*`,
`artifacts`. Unset fields fall back to the task-level values.
可覆盖的分步配置:`agent.timeout_sec`、`agent.user`、`verifier.timeout_sec`、`verifier.env`、`verifier.user`、`healthcheck.*`、`artifacts`。未设置的字段将沿用任务级别的值。"mean""final"min_reward"final""mean""final"min_reward"final"artifactssteps/{name}/artifacts/artifactssteps/{name}/artifacts/harbor run -p "<task-path>" -a oraclesolution/solve.sh1.0harbor run -p "<task-path>" -a oraclesolution/solve.sh1.0docs/content/docs/tasks/multi-step.mdxexamples/tasks/hello-multi-step-advanced/docs/content/docs/tasks/multi-step.mdxexamples/tasks/hello-multi-step-advanced/[[environment.mcp_servers]][environment.healthcheck]environment.gpusenvironment.gpu_typesenvironment.docker_imageagent.userverifier.user[[environment.mcp_servers]][environment.healthcheck]environment.gpusenvironment.gpu_typesenvironment.docker_imageagent.userverifier.usertest.shinstruction.mdchmod +x solution/solve.shkeywords = []README.mdtest.shinstruction.mdchmod +x solution/solve.shkeywords = []README.md