Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
c609133
feat(v1): move the runtime config from the harness onto the agent
mikasenghaas Jul 22, 2026
fa82029
feat(v1): stamp the resolved agent config onto the trace
mikasenghaas Jul 22, 2026
14e0a65
fix(v1): keep the provisioned box on debug trace records
mikasenghaas Jul 22, 2026
b33b339
Merge origin/main (pluggable skills, NEEDS_CONTAINER)
mikasenghaas Jul 22, 2026
1cc6917
refactor(v1): keep AgentConfig in agent.py; drop the runtime migratio…
mikasenghaas Jul 22, 2026
f63d1e2
chore(v1): drop redundant TYPE_CHECKING comment
mikasenghaas Jul 22, 2026
af522f6
Merge origin/main (interleaving agents)
mikasenghaas Jul 22, 2026
969be85
refactor(v1): type AgentInfo.config as AgentConfig directly
mikasenghaas Jul 22, 2026
15298ce
refactor(v1): resolve AgentInfo.config at the package root
mikasenghaas Jul 22, 2026
3832dd2
refactor(v1): AgentInfo holds the identity subset, not the agent config
mikasenghaas Jul 22, 2026
c8ee8cf
refactor(v1): separate configs from logic in a configs package
mikasenghaas Jul 23, 2026
9e69dff
feat(v1): stamp the resolved agent config onto the trace
mikasenghaas Jul 23, 2026
20d01f0
feat(v1): read trace records plugin-free via wire agent/harness configs
mikasenghaas Jul 23, 2026
c5c62d0
Merge remote-tracking branch 'origin/main' into feat/agent-runtime-co…
mikasenghaas Jul 23, 2026
9b4cd26
Merge branch 'main' of github.com:PrimeIntellect-ai/verifiers into fe…
mikasenghaas Jul 23, 2026
9c27ec5
refactor(v1): make the strict/wire record read an explicit choice
mikasenghaas Jul 23, 2026
9d158c8
ci: pin ruff-action to the locked ruff version
mikasenghaas Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/style.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,15 @@ jobs:
uses: actions/checkout@v5
with:
submodules: true
# Pin to the ruff uv.lock resolves, so CI and `uv run ruff` agree.
- name: Lint
uses: astral-sh/ruff-action@v4.1.0
with:
version: "0.15.21"
- name: Format
uses: astral-sh/ruff-action@v4.1.0
with:
version: "0.15.21"
args: "format --check"
ty:
name: Ty
Expand Down
2 changes: 1 addition & 1 deletion configs/agentic_judge.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@ id = "null"
[env.judge]
model = "z-ai/glm-5.2"

[env.judge.harness.runtime]
[env.judge.runtime]
type = "docker"
2 changes: 1 addition & 1 deletion configs/gsm8k_rlm.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ id = "gsm8k-v1"
id = "rlm"
version = "main"

[env.agent.harness.runtime]
[env.agent.runtime]
type = "docker"
4 changes: 3 additions & 1 deletion configs/harbor.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ num_tasks = 10
id = "harbor"
dataset = "terminal-bench/terminal-bench-2"

[env.agent]
runtime = { type = "docker" }

[env.agent.harness]
id = "bash"
runtime = { type = "docker" }
4 changes: 2 additions & 2 deletions docs/v1/evaluation.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ id = "primeintellect/terminal-bench-2"
id = "codex"
version = "0.116.0"

[env.agent.harness.runtime]
[env.agent.runtime]
type = "docker"
```

Expand Down Expand Up @@ -109,7 +109,7 @@ Docker harnesses can keep trusted setup online, then restrict the agent to decla
HTTP(S) destinations:

```toml
[env.agent.harness.runtime]
[env.agent.runtime]
type = "docker"
allow = ["https://*.wikipedia.org"]
block = ["https://upload.wikimedia.org"]
Expand Down
3 changes: 2 additions & 1 deletion docs/v1/harnesses.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ verifiers supports a range of harnesses out of the box, including Claude Code, C

```python
from verifiers.v1.clients import ModelContext
from verifiers.v1.harness import Harness, HarnessConfig
from verifiers.v1.configs.harness import HarnessConfig
from verifiers.v1.harness import Harness
from verifiers.v1.runtimes import ProgramResult, Runtime
from verifiers.v1.task import TaskData
from verifiers.v1.trace import Trace
Expand Down
3 changes: 2 additions & 1 deletion environments/compact/compact/harness.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
from pathlib import Path

from verifiers.v1.clients import ModelContext
from verifiers.v1.harness import Harness, HarnessConfig
from verifiers.v1.configs.harness import HarnessConfig
from verifiers.v1.harness import Harness
from verifiers.v1.runtimes import ProgramResult, Runtime
from verifiers.v1.task import TaskData
from verifiers.v1.trace import Trace
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
in a real sandbox and keep the solvers on a cheap tool-less chat loop —

uv run eval proposer-solver-v1 -n 4 \
--env.proposer.harness.id codex --env.proposer.harness.runtime.type prime \
--env.proposer.harness.id codex --env.proposer.runtime.type prime \
--env.solver.harness.id null

Train-side, the seats flip independently per run (`--env.train_solver false`
Expand Down
2 changes: 1 addition & 1 deletion examples/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ async def main() -> None:
last = trace.assistant_messages[-1].content if trace.assistant_messages else None
print("answer:", last)
assert trace.agent is not None
print("agent:", trace.agent.name, trace.agent.model)
print("agent:", trace.agent.name, trace.agent.config.model)
print("runtime:", trace.runtime.type if trace.runtime else None)


Expand Down
14 changes: 8 additions & 6 deletions skills/evaluate-environments/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ When the user requests a full run, do not restrict the number of tasks. Ask for
The leading ID is shorthand for `--env.taskset.id`. A harness belongs to an agent — `--env.agent.harness.*` on the single-agent env, `--env.<agent>.harness.*` on a multi-agent one (there is no run-level `--harness.*`):

```bash
prime eval run owner/name --env.agent.harness.id codex --env.agent.harness.runtime.type prime
prime eval run owner/name --env.agent.harness.id codex --env.agent.runtime.type prime
```

The env — the control flow between agents — owns the whole `[env]` block. Empty `--env.id`
Expand All @@ -61,7 +61,7 @@ env); `--env.id` pairs a reusable env with any taskset, its knobs typed under `-
```bash
prime eval run my-task-v1 --env.id best-of-n --env.n 8 # pass@k / rejection sampling
prime eval run my-task-v1 --env.id agentic-judge \
--env.judge.harness.runtime.type docker # a judge agent verifies each attempt in a sandbox
--env.judge.runtime.type docker # a judge agent verifies each attempt in a sandbox
```

When specifying Hub tasksets, always include the owner to resolve them correctly.
Expand Down Expand Up @@ -90,9 +90,9 @@ Harness and runtime settings:
```bash
prime eval run my-task-v1 \
--env.agent.harness.id rlm \
--env.agent.harness.runtime.type docker \
--env.agent.harness.runtime.cpu 4 \
--env.agent.harness.runtime.memory 8
--env.agent.runtime.type docker \
--env.agent.runtime.cpu 4 \
--env.agent.runtime.memory 8
```

Sampling:
Expand Down Expand Up @@ -122,9 +122,11 @@ model = "openai/gpt-5-mini"
id = "my-task-v1"
split = "test"

[env.agent]
runtime = { type = "subprocess" }

[env.agent.harness]
id = "bash"
runtime = { type = "subprocess" }

[sampling]
temperature = 0.7
Expand Down
Loading
Loading