@evolvingmachines/evolve 0.0.65 → 0.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DK2MGUPB.js → chunk-RFLMRPGK.js} +5 -5
- package/dist/cli/index.cjs +39 -39
- package/dist/cli/index.d.cts +3 -3
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +30 -30
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/{types-B_qmzlMk.d.cts → types-84M4J_Vm.d.cts} +11 -44
- package/dist/{types-B_qmzlMk.d.ts → types-84M4J_Vm.d.ts} +11 -44
- package/package.json +4 -4
- package/skills/create-adapter/SKILL.md +71 -26
- package/skills/create-task/SKILL.md +124 -66
- package/skills/evolve/SKILL.md +37 -20
- package/skills/evolve-evals/SKILL.md +142 -69
- package/skills/evolve-evals/references/cli-reference/agent.md +76 -0
- package/skills/evolve-evals/references/cli-reference/analysis.md +78 -0
- package/skills/evolve-evals/references/cli-reference/analyze.md +95 -0
- package/skills/evolve-evals/references/cli-reference/auth.md +96 -0
- package/skills/evolve-evals/references/cli-reference/check.md +156 -0
- package/skills/evolve-evals/references/cli-reference/dataset.md +154 -0
- package/skills/evolve-evals/references/cli-reference/filesystem.md +168 -0
- package/skills/evolve-evals/references/cli-reference/index.md +149 -0
- package/skills/evolve-evals/references/cli-reference/job.md +198 -0
- package/skills/evolve-evals/references/cli-reference/run.md +187 -0
- package/skills/evolve-evals/references/cli-reference/secrets.md +77 -0
- package/skills/evolve-evals/references/cli-reference/session.md +56 -0
- package/skills/evolve-evals/references/cli-reference/skill.md +52 -0
- package/skills/evolve-evals/references/cli-reference/skills.md +85 -0
- package/skills/evolve-evals/references/cli-reference/trial.md +115 -0
- package/skills/evolve-evals/references/cli-reference/upload.md +72 -0
- package/skills/evolve-evals/references/core-concepts/agents.md +96 -0
- package/skills/evolve-evals/references/core-concepts/analyze.md +143 -0
- package/skills/evolve-evals/references/core-concepts/check.md +116 -0
- package/skills/evolve-evals/references/core-concepts/compatibility.md +39 -0
- package/skills/evolve-evals/references/core-concepts/compose.md +103 -0
- package/skills/evolve-evals/references/core-concepts/datasets.md +234 -0
- package/skills/evolve-evals/references/core-concepts/index.md +52 -0
- package/skills/evolve-evals/references/core-concepts/jobs.md +223 -0
- package/skills/evolve-evals/references/core-concepts/models.md +73 -0
- package/skills/evolve-evals/references/core-concepts/multi-step.md +93 -0
- package/skills/evolve-evals/references/core-concepts/rewardkit.md +341 -0
- package/skills/evolve-evals/references/core-concepts/sandboxes.md +73 -0
- package/skills/evolve-evals/references/core-concepts/secrets.md +86 -0
- package/skills/evolve-evals/references/core-concepts/sharing.md +81 -0
- package/skills/evolve-evals/references/core-concepts/skills.md +100 -0
- package/skills/evolve-evals/references/core-concepts/task-config.md +169 -0
- package/skills/evolve-evals/references/core-concepts/task-environment.md +127 -0
- package/skills/evolve-evals/references/core-concepts/task-reference.md +191 -0
- package/skills/evolve-evals/references/core-concepts/task-verifiers.md +209 -0
- package/skills/evolve-evals/references/core-concepts/tasks.md +90 -0
- package/skills/evolve-evals/references/core-concepts/teams.md +128 -0
- package/skills/evolve-evals/references/core-concepts/trial-outputs.md +225 -0
- package/skills/evolve-evals/references/core-concepts/trials.md +129 -0
- package/skills/evolve-evals/references/core-concepts/upload-sdk-session.md +240 -0
- package/skills/evolve-evals/references/core-concepts/upload.md +166 -0
- package/skills/evolve-evals/references/dashboard/checks.md +54 -0
- package/skills/evolve-evals/references/dashboard/datasets.md +65 -0
- package/skills/evolve-evals/references/dashboard/jobs.md +106 -0
- package/skills/evolve-evals/references/dashboard/traces.md +54 -0
- package/skills/evolve-evals/references/dashboard/trial-viewer.md +77 -0
- package/skills/evolve-evals/references/getting-started/first-task.md +228 -0
- package/skills/evolve-evals/references/getting-started/installation.md +79 -0
- package/skills/evolve-evals/references/getting-started/quick-start.md +100 -0
- package/skills/evolve-evals/references/index.md +58 -0
- package/skills/evolve-evals/references/sdk/http.md +110 -0
- package/skills/evolve-evals/references/sdk/python.md +108 -0
- package/skills/evolve-evals/references/sdk/typescript.md +104 -0
- package/skills/evolve-evals/references/sdk-reference/agents.md +75 -0
- package/skills/evolve-evals/references/sdk-reference/analyses.md +124 -0
- package/skills/evolve-evals/references/sdk-reference/auth.md +171 -0
- package/skills/evolve-evals/references/sdk-reference/checks.md +145 -0
- package/skills/evolve-evals/references/sdk-reference/datasets.md +170 -0
- package/skills/evolve-evals/references/sdk-reference/error-codes.md +231 -0
- package/skills/evolve-evals/references/sdk-reference/errors.md +98 -0
- package/skills/evolve-evals/references/sdk-reference/filesystem.md +166 -0
- package/skills/evolve-evals/references/sdk-reference/index.md +161 -0
- package/skills/evolve-evals/references/sdk-reference/jobs.md +250 -0
- package/skills/evolve-evals/references/sdk-reference/meta.md +54 -0
- package/skills/evolve-evals/references/sdk-reference/methods/agents.md +154 -0
- package/skills/evolve-evals/references/sdk-reference/methods/analyses.md +211 -0
- package/skills/evolve-evals/references/sdk-reference/methods/auth.md +257 -0
- package/skills/evolve-evals/references/sdk-reference/methods/checks.md +460 -0
- package/skills/evolve-evals/references/sdk-reference/methods/datasets.md +687 -0
- package/skills/evolve-evals/references/sdk-reference/methods/filesystem.md +527 -0
- package/skills/evolve-evals/references/sdk-reference/methods/jobs.md +1021 -0
- package/skills/evolve-evals/references/sdk-reference/methods/meta.md +209 -0
- package/skills/evolve-evals/references/sdk-reference/methods/secrets.md +157 -0
- package/skills/evolve-evals/references/sdk-reference/methods/skills.md +125 -0
- package/skills/evolve-evals/references/sdk-reference/methods/trials.md +371 -0
- package/skills/evolve-evals/references/sdk-reference/secrets.md +104 -0
- package/skills/evolve-evals/references/sdk-reference/skills.md +66 -0
- package/skills/evolve-evals/references/sdk-reference/trials.md +164 -0
- package/skills/evolve-evals/references/sdk-reference/types.md +1249 -0
- package/skills/publish/SKILL.md +103 -79
- package/skills/rewardkit/SKILL.md +78 -23
- package/spec/openapi.yaml +19 -74
- package/skills/evolve-evals/references/cli-reference/agent.mdx +0 -79
- package/skills/evolve-evals/references/cli-reference/analysis.mdx +0 -160
- package/skills/evolve-evals/references/cli-reference/analyze.mdx +0 -84
- package/skills/evolve-evals/references/cli-reference/auth.mdx +0 -133
- package/skills/evolve-evals/references/cli-reference/check.mdx +0 -263
- package/skills/evolve-evals/references/cli-reference/dataset.mdx +0 -151
- package/skills/evolve-evals/references/cli-reference/index.mdx +0 -108
- package/skills/evolve-evals/references/cli-reference/job.mdx +0 -278
- package/skills/evolve-evals/references/cli-reference/run.mdx +0 -204
- package/skills/evolve-evals/references/cli-reference/secrets.mdx +0 -95
- package/skills/evolve-evals/references/cli-reference/skill.mdx +0 -61
- package/skills/evolve-evals/references/cli-reference/skills.mdx +0 -81
- package/skills/evolve-evals/references/cli-reference/trial.mdx +0 -181
- package/skills/evolve-evals/references/cli-reference/upload.mdx +0 -36
- package/skills/evolve-evals/references/core-concepts/agents.mdx +0 -106
- package/skills/evolve-evals/references/core-concepts/analyze.mdx +0 -86
- package/skills/evolve-evals/references/core-concepts/check.mdx +0 -64
- package/skills/evolve-evals/references/core-concepts/datasets.mdx +0 -138
- package/skills/evolve-evals/references/core-concepts/index.mdx +0 -42
- package/skills/evolve-evals/references/core-concepts/jobs.mdx +0 -151
- package/skills/evolve-evals/references/core-concepts/models.mdx +0 -68
- package/skills/evolve-evals/references/core-concepts/sandboxes.mdx +0 -52
- package/skills/evolve-evals/references/core-concepts/secrets.mdx +0 -41
- package/skills/evolve-evals/references/core-concepts/sharing.mdx +0 -35
- package/skills/evolve-evals/references/core-concepts/skills.mdx +0 -42
- package/skills/evolve-evals/references/core-concepts/tasks.mdx +0 -216
- package/skills/evolve-evals/references/core-concepts/teams.mdx +0 -36
- package/skills/evolve-evals/references/core-concepts/trial-outputs.mdx +0 -117
- package/skills/evolve-evals/references/core-concepts/trials.mdx +0 -103
- package/skills/evolve-evals/references/core-concepts/upload.mdx +0 -93
- package/skills/evolve-evals/references/dashboard/checks.mdx +0 -21
- package/skills/evolve-evals/references/dashboard/datasets.mdx +0 -24
- package/skills/evolve-evals/references/dashboard/jobs.mdx +0 -65
- package/skills/evolve-evals/references/dashboard/traces.mdx +0 -17
- package/skills/evolve-evals/references/dashboard/trial-viewer.mdx +0 -30
- package/skills/evolve-evals/references/getting-started/installation.mdx +0 -56
- package/skills/evolve-evals/references/getting-started/quick-start.mdx +0 -94
- package/skills/evolve-evals/references/index.mdx +0 -48
- package/skills/evolve-evals/references/sdk/python.mdx +0 -161
- package/skills/evolve-evals/references/sdk/typescript.mdx +0 -163
- package/skills/evolve-evals/references/sdk-reference/agents.mdx +0 -108
- package/skills/evolve-evals/references/sdk-reference/analyses.mdx +0 -222
- package/skills/evolve-evals/references/sdk-reference/auth.mdx +0 -116
- package/skills/evolve-evals/references/sdk-reference/checks.mdx +0 -300
- package/skills/evolve-evals/references/sdk-reference/datasets.mdx +0 -346
- package/skills/evolve-evals/references/sdk-reference/errors.mdx +0 -210
- package/skills/evolve-evals/references/sdk-reference/index.mdx +0 -60
- package/skills/evolve-evals/references/sdk-reference/jobs.mdx +0 -822
- package/skills/evolve-evals/references/sdk-reference/meta.mdx +0 -52
- package/skills/evolve-evals/references/sdk-reference/skills.mdx +0 -69
- package/skills/evolve-evals/references/sdk-reference/trials.mdx +0 -302
- package/skills/evolve-evals/references/sdk-reference/types.mdx +0 -274
- package/skills/evolve-evals/references/snippets/global-options.mdx +0 -13
- package/skills/evolve-evals/references/snippets/list-flags.mdx +0 -23
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Task verifier"
|
|
3
|
+
description: "Turn the agent's work into a reward you can compare."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The verifier runs after the agent. Its entry point is `tests/test.sh`, and its result comes from a reward file.
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
1. Agent output
|
|
10
|
+
/app/answer.txt
|
|
11
|
+
↓
|
|
12
|
+
2. Run the verifier
|
|
13
|
+
/tests/test.sh
|
|
14
|
+
↓
|
|
15
|
+
3. Read the reward
|
|
16
|
+
/logs/verifier/reward.json
|
|
17
|
+
or /logs/verifier/reward.txt
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Write a reward
|
|
21
|
+
|
|
22
|
+
This verifier checks the [example instruction](/core-concepts/tasks#write-a-clear-instruction):
|
|
23
|
+
|
|
24
|
+
```bash tests/test.sh
|
|
25
|
+
#!/bin/bash
|
|
26
|
+
set -uo pipefail
|
|
27
|
+
mkdir -p /logs/verifier
|
|
28
|
+
|
|
29
|
+
if python3 - <<'PYTEST'
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
assert Path("/app/answer.txt").read_text() == "Hello, world!\n"
|
|
32
|
+
PYTEST
|
|
33
|
+
then
|
|
34
|
+
echo 1 > /logs/verifier/reward.txt
|
|
35
|
+
else
|
|
36
|
+
echo 0 > /logs/verifier/reward.txt
|
|
37
|
+
fi
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The reward file determines the score. The script's exit code alone does not.
|
|
41
|
+
|
|
42
|
+
| File | Shape |
|
|
43
|
+
| --- | --- |
|
|
44
|
+
| `reward.txt` | One finite number from `0` to `1` |
|
|
45
|
+
| `reward.json` | An object of named finite numbers |
|
|
46
|
+
|
|
47
|
+
A nonempty `reward.json` takes precedence over `reward.txt`. The primary reward is the `reward` field, or the only field in a one-field object. A primary reward must be in `[0, 1]`.
|
|
48
|
+
|
|
49
|
+
```json /logs/verifier/reward.json
|
|
50
|
+
{"reward": 1, "tests_passed": 12, "tests_total": 12}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Multiple metrics without a `reward` key produce a scored trial with no primary reward. That trial cannot contribute a primary success to pass@k.
|
|
54
|
+
|
|
55
|
+
| Outcome | Trial status |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| Valid reward, including `0` | `SCORED` |
|
|
58
|
+
| No reward file | `INDETERMINATE` |
|
|
59
|
+
| Invalid reward | `SCORING_ERROR` |
|
|
60
|
+
|
|
61
|
+
## Choose where verification runs
|
|
62
|
+
|
|
63
|
+
### Shared · default
|
|
64
|
+
|
|
65
|
+
The verifier runs in the agent's sandbox. It can inspect the filesystem and processes left by the agent. Agent credentials are revoked before verification begins.
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
One sandbox
|
|
69
|
+
┌─────────────────────┐
|
|
70
|
+
│ 1. Agent works │
|
|
71
|
+
│ ↓ │
|
|
72
|
+
│ 2. Verifier checks │
|
|
73
|
+
└─────────────────────┘
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```toml task.toml
|
|
77
|
+
[verifier]
|
|
78
|
+
environment_mode = "shared"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Test files are uploaded to `/tests/`. Install verifier dependencies in the task image; a `tests/Dockerfile` is not built in this mode.
|
|
82
|
+
|
|
83
|
+
### Separate
|
|
84
|
+
|
|
85
|
+
The verifier starts in a fresh sandbox. Declare the outputs it needs under `artifacts`. Evolve also transfers `/logs/artifacts/` and the collection script’s patch file; it does not copy the whole agent filesystem.
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
1. Agent sandbox
|
|
89
|
+
/app/answer.txt
|
|
90
|
+
↓ copy artifact
|
|
91
|
+
2. Fresh verifier sandbox
|
|
92
|
+
/app/answer.txt
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Separate verification supports [regrading eligible trials](/core-concepts/jobs). It is not available for multi-step tasks.
|
|
96
|
+
|
|
97
|
+
## Separate verification
|
|
98
|
+
|
|
99
|
+
A verifier with its own Dockerfile keeps grading dependencies out of the agent's image.
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
my-task/
|
|
103
|
+
├── instruction.md
|
|
104
|
+
├── task.toml
|
|
105
|
+
├── environment/
|
|
106
|
+
│ └── Dockerfile
|
|
107
|
+
└── tests/
|
|
108
|
+
├── Dockerfile
|
|
109
|
+
└── test.sh
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```toml task.toml
|
|
113
|
+
artifacts = ["/app/answer.txt"]
|
|
114
|
+
|
|
115
|
+
[verifier]
|
|
116
|
+
environment_mode = "separate"
|
|
117
|
+
|
|
118
|
+
[verifier.environment]
|
|
119
|
+
cpus = 2
|
|
120
|
+
memory_mb = 2048
|
|
121
|
+
workdir = "/app"
|
|
122
|
+
network_mode = "no-network"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```dockerfile tests/Dockerfile
|
|
126
|
+
FROM python:3.12-slim
|
|
127
|
+
WORKDIR /app
|
|
128
|
+
COPY . /tests/
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
With `environment_mode` omitted, `[verifier.environment]` selects separate mode. An explicit `environment_mode = "shared"` keeps verification in the agent sandbox.
|
|
132
|
+
|
|
133
|
+
### How the verifier image is selected
|
|
134
|
+
|
|
135
|
+
The effective configuration is `[verifier.environment]` when present; otherwise, it copies `[environment]`.
|
|
136
|
+
|
|
137
|
+
| Effective configuration | Behavior |
|
|
138
|
+
| --- | --- |
|
|
139
|
+
| No `docker_image` | Build `tests/Dockerfile`; it must provide `/tests/test.sh` |
|
|
140
|
+
| Same pinned image as the agent | Reuse that image and upload the task's test files |
|
|
141
|
+
| A distinct pinned image | Use that image as-is; it must contain `/tests/test.sh` |
|
|
142
|
+
|
|
143
|
+
The task source must still contain a nonempty `tests/test.sh`, including when a distinct prebuilt verifier image already contains it.
|
|
144
|
+
|
|
145
|
+
A `tests/Dockerfile` is not built when the effective configuration pins an image. The import records a `tests_dockerfile_not_built` note if that unused file exists.
|
|
146
|
+
|
|
147
|
+
## Prepare outputs for collection
|
|
148
|
+
|
|
149
|
+
Most tasks only need an `artifacts` list. If outputs need preparation after the agent finishes, add `pre_artifacts.sh` at the task root. It runs from the task's working directory.
|
|
150
|
+
|
|
151
|
+
```bash pre_artifacts.sh
|
|
152
|
+
#!/bin/bash
|
|
153
|
+
set -euo pipefail
|
|
154
|
+
mkdir -p /logs/artifacts
|
|
155
|
+
[ -e /logs/artifacts/model.patch ] || : > /logs/artifacts/model.patch
|
|
156
|
+
if [ -f /app/summary.json ]; then
|
|
157
|
+
cp /app/summary.json /logs/artifacts/summary.json
|
|
158
|
+
fi
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
This example assumes the agent produces `/app/summary.json`. A custom collection script must also provide `/logs/artifacts/model.patch`; it can be empty when the task does not produce a patch. If you omit the script, Evolve prepares that file for you.
|
|
162
|
+
|
|
163
|
+
### Collect from a service
|
|
164
|
+
|
|
165
|
+
`[[verifier.collect]]` runs a command before artifact collection. For a [multi-container task](/core-concepts/compose), use `service` to choose the container. For a single container, omit it or use `main`.
|
|
166
|
+
|
|
167
|
+
```toml task.toml
|
|
168
|
+
artifacts = [
|
|
169
|
+
{ source = "/tmp/stats.json", service = "api" }
|
|
170
|
+
]
|
|
171
|
+
|
|
172
|
+
[[verifier.collect]]
|
|
173
|
+
service = "api"
|
|
174
|
+
command = "curl -fsS http://localhost:8000/stats > /tmp/stats.json"
|
|
175
|
+
timeout_sec = 60
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
This example assumes an `api` service with a `/stats` endpoint and `curl` installed. Hook failures are logged and do not stop the run. Make the verifier reject missing evidence when it is required for a valid score.
|
|
179
|
+
|
|
180
|
+
Main-service hooks run before collecting its files. In separate verification, Evolve then stops `main`, runs sidecar hooks, and collects sidecar files. Shared verification keeps the containers running. Sidecar artifacts retain their source paths in the separate verifier.
|
|
181
|
+
|
|
182
|
+
`timeout_sec` defaults to 60 seconds. Compose hooks can set `user` to choose an existing container user. Single-container hooks do not accept that override.
|
|
183
|
+
|
|
184
|
+
## Grade with a model
|
|
185
|
+
|
|
186
|
+
[Reward Kit](/core-concepts/rewardkit) combines reusable checks, custom Python, and model judges.
|
|
187
|
+
|
|
188
|
+
A verifier can request model access for an LLM judge:
|
|
189
|
+
|
|
190
|
+
```toml task.toml
|
|
191
|
+
[verifier.env]
|
|
192
|
+
ANTHROPIC_API_KEY = "${ANTHROPIC_API_KEY}"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Evolve supplies a gateway credential and the matching base URL. Recognized credential families are Anthropic and OpenAI; these templates are not job secrets. They also work under `no-network` through the judge gateway.
|
|
196
|
+
|
|
197
|
+
For a Reward Kit judge, override its agent and model for one job with:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
evolve run -d my-dataset@1.0 -a codex -m gpt-5.6-luna \
|
|
201
|
+
--ve REWARDKIT_JUDGE=claude \
|
|
202
|
+
--ve REWARDKIT_MODEL=sonnet
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
These are the only accepted `--ve` keys. Judge spend is reported separately from agent spend. Its independent cap is the smaller of the agent’s per-trial cap and $5. Judge-enabled trials are not currently regradable.
|
|
206
|
+
|
|
207
|
+
**Tip:**
|
|
208
|
+
|
|
209
|
+
Ask a coding agent to load `evolve skills get rewardkit` for verifier authoring guidance. Use `evolve skills get create-task` for the complete task workflow.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Tasks"
|
|
3
|
+
description: "Define the work, the environment, and how to score it."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
A task is one problem for an agent to solve. It packages an instruction, a Linux environment, and a verifier that scores the result.
|
|
7
|
+
|
|
8
|
+
Evolve accepts the **Harbor task format**, with the [managed capabilities and limits](/core-concepts/compatibility) described in these guides.
|
|
9
|
+
|
|
10
|
+
**Tip:**
|
|
11
|
+
|
|
12
|
+
New to task authoring? [Build your first task](/getting-started/first-task) from five small files.
|
|
13
|
+
|
|
14
|
+
- my-task/
|
|
15
|
+
- instruction.md
|
|
16
|
+
- task.toml
|
|
17
|
+
- environment/
|
|
18
|
+
- Dockerfile
|
|
19
|
+
- tests/
|
|
20
|
+
- test.sh
|
|
21
|
+
- solution/
|
|
22
|
+
- solve.sh
|
|
23
|
+
|
|
24
|
+
| File | Purpose |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| `instruction.md` | What the agent must do |
|
|
27
|
+
| `task.toml` | Timeouts, resources, and policies |
|
|
28
|
+
| `environment/Dockerfile` | Tools and files available to the agent |
|
|
29
|
+
| `tests/test.sh` | Checks the work and writes a reward |
|
|
30
|
+
| `solution/solve.sh` | Optional reference solution |
|
|
31
|
+
|
|
32
|
+
For a single-step task, `instruction.md`, `task.toml`, and a nonempty `tests/test.sh` are required. Define the environment with a Dockerfile, a pinned image, or supported Docker Compose configuration.
|
|
33
|
+
|
|
34
|
+
## What happens in a trial
|
|
35
|
+
|
|
36
|
+
```mermaid
|
|
37
|
+
%%{init: {"flowchart": {"nodeSpacing": 16, "rankSpacing": 20, "padding": 10}, "themeVariables": {"fontSize": "14px", "fontFamily": "Google Sans Flex, sans-serif"}}}%%
|
|
38
|
+
flowchart TB
|
|
39
|
+
A["1. Start the task environment"] --> B["2. Give the agent the instruction"]
|
|
40
|
+
B --> C["3. Agent works on the task"]
|
|
41
|
+
C --> D["4. Run the verifier"]
|
|
42
|
+
D --> E["5. Save reward, logs, and outputs"]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The agent receives the instruction and environment. The verifier and reference solution are not handed to it as task inputs.
|
|
46
|
+
|
|
47
|
+
## Write a clear instruction
|
|
48
|
+
|
|
49
|
+
State the requested change, the output path, and the conditions for success. The verifier should check those same conditions.
|
|
50
|
+
|
|
51
|
+
```markdown instruction.md
|
|
52
|
+
Create /app/answer.txt containing exactly:
|
|
53
|
+
|
|
54
|
+
Hello, world!
|
|
55
|
+
|
|
56
|
+
End the file with a newline.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Use absolute paths when the location matters. A benchmark canary marker is removed before the instruction reaches the agent.
|
|
60
|
+
|
|
61
|
+
## Add a reference solution
|
|
62
|
+
|
|
63
|
+
`solution/solve.sh` demonstrates a correct answer. For the instruction above:
|
|
64
|
+
|
|
65
|
+
```bash solution/solve.sh
|
|
66
|
+
#!/bin/bash
|
|
67
|
+
printf 'Hello, world!\n' > /app/answer.txt
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Keep it separate from the environment image. [Task checks](/core-concepts/check) can use it to test whether the verifier accepts a valid solution.
|
|
71
|
+
|
|
72
|
+
## Build the rest
|
|
73
|
+
|
|
74
|
+
**[Environment](/core-concepts/task-environment)**
|
|
75
|
+
|
|
76
|
+
Images, working directories, services, and MCP tools.
|
|
77
|
+
|
|
78
|
+
**[Verifier](/core-concepts/task-verifiers)**
|
|
79
|
+
|
|
80
|
+
Write a reward and choose where grading runs.
|
|
81
|
+
|
|
82
|
+
**[Configuration](/core-concepts/task-config)**
|
|
83
|
+
|
|
84
|
+
Resources, network access, variables, and timeouts.
|
|
85
|
+
|
|
86
|
+
**[Multiple steps](/core-concepts/multi-step)**
|
|
87
|
+
|
|
88
|
+
Continue work across ordered instructions in one environment.
|
|
89
|
+
|
|
90
|
+
When the task is ready, [publish it as a dataset](/core-concepts/datasets).
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Teams"
|
|
3
|
+
description: "Put evaluations in a shared workspace and give teammates access through membership."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Every account starts with a personal organization. Create a team organization to run and inspect work together.
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
Your account
|
|
10
|
+
├── Personal workspace
|
|
11
|
+
└── Team workspace
|
|
12
|
+
├── Members and roles
|
|
13
|
+
├── Jobs, checks, and sessions
|
|
14
|
+
├── Datasets
|
|
15
|
+
├── Registered agents
|
|
16
|
+
└── Uploaded skills
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Create and join
|
|
20
|
+
|
|
21
|
+
### 1. Create the team
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
evolve auth org create acme --display-name "Acme Lab"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 2. Create an invitation
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
evolve auth org invite acme
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Only an owner can create invitations. The command prints a token once; give it to the person you want to invite. By default, it expires after 7 days and allows unlimited joins.
|
|
34
|
+
|
|
35
|
+
### 3. Join from the invited account
|
|
36
|
+
|
|
37
|
+
Set `$INVITE_TOKEN` to the token from the owner, then run:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
evolve auth org join "$INVITE_TOKEN"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The invited account joins as a member.
|
|
44
|
+
|
|
45
|
+
| Role | Access |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| Member | Read team work and run evaluations. |
|
|
48
|
+
| Owner | Member access, plus team and membership management. |
|
|
49
|
+
|
|
50
|
+
Membership does not make every record yours to delete or share. Those operations retain their creator-specific rules.
|
|
51
|
+
|
|
52
|
+
## Manage the team
|
|
53
|
+
|
|
54
|
+
Use the dashboard's **Members** and **Settings** pages, or the [HTTP team-management endpoints](/sdk-reference/auth#manage-teams-over-http).
|
|
55
|
+
|
|
56
|
+
| Action | Rule |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| Rename the team | An owner can change its slug or display name. |
|
|
59
|
+
| Change roles or remove someone | Owner required. The last owner cannot be demoted or removed. |
|
|
60
|
+
| Leave | Any member can leave, except the last owner. Promote another owner first. |
|
|
61
|
+
| Revoke an invitation | Owner required. This stops new joins; it does not remove existing members. |
|
|
62
|
+
| Delete the team | Owner required. Deletion is refused while the team owns jobs or datasets. |
|
|
63
|
+
|
|
64
|
+
Personal organizations cannot be renamed, deleted, or have their membership changed. For invitation expiry and use limits, use the [HTTP invitation options](/sdk-reference/auth#manage-teams-over-http); the CLI and SDKs use the defaults.
|
|
65
|
+
|
|
66
|
+
## Run under a team
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
evolve run \
|
|
70
|
+
-d harbor-examples@1.0 -i hello-world \
|
|
71
|
+
-a codex -m gpt-5.6-luna \
|
|
72
|
+
--max-trial-spend 1 -r 0 --org acme
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Set a default for later CLI commands, or return to your personal organization:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
evolve auth org use acme
|
|
79
|
+
evolve auth org use personal
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Dataset publishing, custom-agent registration, and skill upload also accept an organization. A new version of an existing dataset stays in that dataset's organization.
|
|
83
|
+
|
|
84
|
+
```typescript TypeScript
|
|
85
|
+
import { hosted } from "@evolvingmachines/evolve";
|
|
86
|
+
|
|
87
|
+
const client = hosted({ org: "acme" });
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```python Python
|
|
91
|
+
from evolve import hosted, HostedClientConfig
|
|
92
|
+
|
|
93
|
+
client = hosted(HostedClientConfig(org="acme"))
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The SDK client default applies to operations that accept organization ownership, such as job creation and dataset publishing. It is not a filter on every read.
|
|
97
|
+
|
|
98
|
+
## Choose what to list
|
|
99
|
+
|
|
100
|
+
| Scope | Shows |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| `my` | Work you created. The default. |
|
|
103
|
+
| `shared` | Teammates' work and runs shared with your email address. |
|
|
104
|
+
| `org` | Work in your organizations, including your own. |
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
evolve job list --scope org
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## In the dashboard
|
|
111
|
+
|
|
112
|
+
Use the workspace switcher beneath your account to choose **Personal** or a team. Team pages include Datasets, Jobs, Traces, Members, and Settings.
|
|
113
|
+
|
|
114
|
+
| Page | Use it for |
|
|
115
|
+
| --- | --- |
|
|
116
|
+
| **Members** | Read roles; owners manage membership and invitation links. |
|
|
117
|
+
| **Settings** | Read the workspace name; owners manage the team. |
|
|
118
|
+
| **Traces** | Team runs with a Created by column. |
|
|
119
|
+
|
|
120
|
+
Skills, Integrations, Secrets, API Keys, Usage, and Billing remain account pages. Selecting a team does not turn these into shared team settings.
|
|
121
|
+
|
|
122
|
+
**[Organization commands](/cli-reference/auth)**
|
|
123
|
+
|
|
124
|
+
Create, join, inspect, and select a team.
|
|
125
|
+
|
|
126
|
+
**[Share one run](/core-concepts/sharing)**
|
|
127
|
+
|
|
128
|
+
Give access without adding a team member.
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Trial outputs"
|
|
3
|
+
description: "Find the record, trace, logs, and files from an evaluation."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Choose the output that answers your question:
|
|
7
|
+
|
|
8
|
+
| Question | Open |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| What score did it earn? | `result.json` and verifier output. |
|
|
11
|
+
| What did the agent do? | Parsed trace or ATIF trajectory. |
|
|
12
|
+
| What did the process print? | Raw stdout and stderr. |
|
|
13
|
+
| What files did it change? | Run filesystem and changes list. |
|
|
14
|
+
| What state did the harness keep? | Captured agent home. |
|
|
15
|
+
|
|
16
|
+
## The trial directory
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
evolve trial download "$TRIAL_ID" -o trials/
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
A typical Codex trial looks like this. Files appear only when recorded.
|
|
23
|
+
|
|
24
|
+
- trials/
|
|
25
|
+
- TRIAL_ID/
|
|
26
|
+
- config.json
|
|
27
|
+
- result.json
|
|
28
|
+
- evolve.json
|
|
29
|
+
- exception.txt
|
|
30
|
+
- agent/
|
|
31
|
+
- trajectory.json
|
|
32
|
+
- trace-parsed.jsonl
|
|
33
|
+
- codex.txt
|
|
34
|
+
- stderr.log
|
|
35
|
+
- agent-home.json
|
|
36
|
+
- .codex/
|
|
37
|
+
- verifier/
|
|
38
|
+
- test-stdout.txt
|
|
39
|
+
- reward.json
|
|
40
|
+
|
|
41
|
+
### What each file contains
|
|
42
|
+
|
|
43
|
+
| File | Contents |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| `config.json` | Task and agent identity |
|
|
46
|
+
| `result.json` | Reward, timing, and exception |
|
|
47
|
+
| `evolve.json` | Evolve's detailed trial record |
|
|
48
|
+
| `exception.txt` | Present when an exception exists |
|
|
49
|
+
| `trajectory.json` | ATIF conversation |
|
|
50
|
+
| `trace-parsed.jsonl` | Parsed events |
|
|
51
|
+
| `codex.txt` | Raw stdout |
|
|
52
|
+
| `stderr.log` | Raw stderr |
|
|
53
|
+
| `agent-home.json` | Capture manifest |
|
|
54
|
+
| `.codex/` | Captured harness state |
|
|
55
|
+
| `test-stdout.txt` | Verifier log |
|
|
56
|
+
| `reward.json` | Recorded rewards |
|
|
57
|
+
|
|
58
|
+
The stdout filename follows the harness. A registered custom agent uses `stdout.log`.
|
|
59
|
+
|
|
60
|
+
### Trial download or job archive?
|
|
61
|
+
|
|
62
|
+
| Download | Includes |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| `evolve trial download "$TRIAL_ID"` | One trial reconstructed by the CLI, including the text view of its agent home. |
|
|
65
|
+
| `evolve job download "$JOB_ID"` | The full server archive: job records, each trial's locks and logs, retained binary home files, and recorded artifacts. |
|
|
66
|
+
|
|
67
|
+
A job archive also includes per-step records for multi-step tasks. Platform-specific fields in Harbor-format records use `x_evolve` extensions.
|
|
68
|
+
|
|
69
|
+
Existing output folders require `--overwrite`. This permits writing into the folder; it does not remove unrelated old files.
|
|
70
|
+
|
|
71
|
+
### Declared artifacts in the job archive
|
|
72
|
+
|
|
73
|
+
Each trial in the full job archive contains `artifacts/manifest.json`. For native Evolve runs, artifact payloads come from the retained inputs of **separate verification**. Shared verification does not export the task's artifact list; inspect its live or captured files through [sandbox files](#sandbox-files).
|
|
74
|
+
|
|
75
|
+
Files normally mirror their absolute source path under `artifacts/`. A task's `destination` changes that downloaded location. For example, one generated manifest entry can be:
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"source": "/app/reports/result.json",
|
|
80
|
+
"destination": "artifacts/reports/result.json",
|
|
81
|
+
"type": "file",
|
|
82
|
+
"status": "ok",
|
|
83
|
+
"service": null
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Artifact manifest fields
|
|
88
|
+
|
|
89
|
+
The manifest is a JSON array of entries.
|
|
90
|
+
|
|
91
|
+
| Field | Meaning |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| `source` | Original absolute file path in the sandbox. |
|
|
94
|
+
| `destination` | Export path relative to the trial directory, including `artifacts/`. |
|
|
95
|
+
| `type` | `"file"` for generated entries. Directory declarations expand to individual retained files. |
|
|
96
|
+
| `status` | `"ok"` for an emitted file, or `"skipped"` for a destination conflict. |
|
|
97
|
+
| `service` | Compose service name, or `null` for the main container. |
|
|
98
|
+
|
|
99
|
+
The first file claiming a destination wins. Later equal or nested destinations are skipped, and `artifacts/manifest.json` is reserved for the manifest itself.
|
|
100
|
+
|
|
101
|
+
Generated entries describe retained file candidates; missing, unrecorded files have no entry. A native trial with no retained artifact record has `[]`, including shared-mode trials or a separate-mode trial whose artifact record could not be stored. The separate filesystem capture can still be available.
|
|
102
|
+
|
|
103
|
+
Uploaded archives retain their own artifact files and manifest when present. Their manifest content is preserved rather than rewritten to the generated schema above.
|
|
104
|
+
|
|
105
|
+
## The parsed trace
|
|
106
|
+
|
|
107
|
+
Each event has a sequence position, a type, and data. This illustrative event shows a completed tool call:
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"seq": 3,
|
|
112
|
+
"type": "tool_call_update",
|
|
113
|
+
"data": {
|
|
114
|
+
"update": {
|
|
115
|
+
"sessionUpdate": "tool_call_update",
|
|
116
|
+
"toolCallId": "call-1",
|
|
117
|
+
"status": "completed"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
evolve trial trace "$TRIAL_ID" --json
|
|
125
|
+
evolve trial trace "$TRIAL_ID" --grep 'permission denied' --tail 50
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Gateway usage events carry `data.update.source: "gateway"`. Use them for gateway token and cost accounting; harness-reported usage is a different reading.
|
|
129
|
+
|
|
130
|
+
## The ATIF trajectory
|
|
131
|
+
|
|
132
|
+
ATIF is Harbor's **Agent Trajectory Interchange Format**. Evolve exports `ATIF-v1.7`, built from the stored parsed trace.
|
|
133
|
+
|
|
134
|
+
| Field | Contents |
|
|
135
|
+
| --- | --- |
|
|
136
|
+
| `schema_version` | Format version |
|
|
137
|
+
| `agent` | Harness, version, and model |
|
|
138
|
+
| `steps[].source` | User, system, or agent |
|
|
139
|
+
| `steps[].message` | Conversation content |
|
|
140
|
+
| `steps[].tool_calls` | Agent actions |
|
|
141
|
+
| `steps[].observation` | Tool results |
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
evolve trial download "$TRIAL_ID" --stream trace-atif
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The `trajectory` stream name is reserved for a native harness session and is not served today. Use `trace-atif` for the portable trajectory.
|
|
148
|
+
|
|
149
|
+
## Raw streams and the verifier log
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
evolve trial download "$TRIAL_ID" --stream trace-stdout
|
|
153
|
+
evolve trial download "$TRIAL_ID" --stream trace-stderr
|
|
154
|
+
evolve trial download "$TRIAL_ID" --stream verifier
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
An absent artifact remains absent. It is not replaced with an empty success log.
|
|
158
|
+
|
|
159
|
+
## The agent's home folder
|
|
160
|
+
|
|
161
|
+
The captured home contains harness settings, sessions, and subagent transcripts. `agent-home.json` records paths, sizes, digests, and files excluded or skipped.
|
|
162
|
+
|
|
163
|
+
The `agent-home` stream is a **text view**. Binary files are listed in the manifest but omitted from this view. Download the full job archive to retrieve retained binary files.
|
|
164
|
+
|
|
165
|
+
## Sandbox files
|
|
166
|
+
|
|
167
|
+
The run filesystem is separate from the saved trial directory above.
|
|
168
|
+
|
|
169
|
+
| File in the sandbox | After capture |
|
|
170
|
+
| --- | --- |
|
|
171
|
+
| `/app/report.json` — changed | Metadata and captured bytes |
|
|
172
|
+
| `/app/new.txt` — created | Metadata and captured bytes |
|
|
173
|
+
| `/usr/bin/python` — unchanged | Metadata only |
|
|
174
|
+
|
|
175
|
+
The capture preserves supported files the run created or changed. It is not a complete copy of the base image. Files omitted during capture carry a reason.
|
|
176
|
+
|
|
177
|
+
### 1. Check which source is available
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
evolve trial files status "$TRIAL_ID"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
The state is `live`, `capturing`, `captured`, or `none`.
|
|
184
|
+
|
|
185
|
+
### 2. Browse and read
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
evolve trial files ls "$TRIAL_ID" /app
|
|
189
|
+
evolve trial files cat "$TRIAL_ID" /app/report.json
|
|
190
|
+
evolve trial files changes "$TRIAL_ID"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Reads use the live sandbox when available, otherwise its capture. Force one with `--source live` or `--source capture`.
|
|
194
|
+
|
|
195
|
+
### 3. Keep a subtree
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
evolve trial files archive "$TRIAL_ID" --path /app -o archives/
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
An unchanged image file may be listed but unreadable after capture (`not_captured`). A forced source that is unavailable returns `filesystem_state`.
|
|
202
|
+
|
|
203
|
+
### Logs and processes
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
evolve trial logs "$TRIAL_ID" --stream agent --follow
|
|
207
|
+
evolve trial procs "$TRIAL_ID"
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
| Stream | Availability |
|
|
211
|
+
| --- | --- |
|
|
212
|
+
| `agent` | Recorded harness output. |
|
|
213
|
+
| `verifier` | Recorded verifier output. |
|
|
214
|
+
| `system` | When the job enabled `--system-log`. |
|
|
215
|
+
| `setup`, `metrics` | Reserved; currently empty with an explanation. |
|
|
216
|
+
|
|
217
|
+
Process inspection requires a live sandbox. Analysis runs and task checks expose the same filesystem operations. Published task files have a separate read-only package browser.
|
|
218
|
+
|
|
219
|
+
**[Filesystem API](/sdk-reference/filesystem)**
|
|
220
|
+
|
|
221
|
+
Read ranges, search, changes, and events.
|
|
222
|
+
|
|
223
|
+
**[Trial viewer](/dashboard/trial-viewer)**
|
|
224
|
+
|
|
225
|
+
Inspect the trace in the browser.
|