Problem
capabilities is a dead field. The runtime validates it is an object and then ignores it. Nothing is ever declared and nothing ever reads it.
Concrete cost: a manifest with tool_usage graders run against an agent that cannot report tool calls fails with "No tool_calls present" on every step. That is indistinguishable from an agent that legitimately used no tools — one is a broken integration, the other a real test failure, and we report them identically.
Proposal
Presence of a key means supported; the value is an options object.
| Capability |
Runtime behaviour when absent |
tool_calls |
Fail fast if the manifest has tool_usage graders |
evaluation_context |
Fail fast if a grader targets that field |
usage |
Report audit usage as unavailable, not zero |
reset |
Warn that scenario isolation is not guaranteed |
multi_turn |
Warn on multi-step scenarios |
Unknown keys MUST be ignored — that is what makes minor versions additive. Vendor extensions use x-<vendor>.<name>.
Acceptance criteria
Problem
capabilitiesis a dead field. The runtime validates it is an object and then ignores it. Nothing is ever declared and nothing ever reads it.Concrete cost: a manifest with
tool_usagegraders run against an agent that cannot report tool calls fails with"No tool_calls present"on every step. That is indistinguishable from an agent that legitimately used no tools — one is a broken integration, the other a real test failure, and we report them identically.Proposal
Presence of a key means supported; the value is an options object.
tool_callstool_usagegradersevaluation_contextusageusageas unavailable, not zeroresetmulti_turnUnknown keys MUST be ignored — that is what makes minor versions additive. Vendor extensions use
x-<vendor>.<name>.Acceptance criteria