Goal and prompt
The two fields reach different halves of the person’s instructions, and the difference is the point.goal is what they are trying to get done. They pursue it every turn, and it is why they push back when the agent stalls.
prompt is the brief they answer from. They do not volunteer it. A broad question earns everything in the brief that answers it; a question never asked earns nothing. An agent that guesses rather than asks will contradict a fact it was never told.
Write the brief the way the person would say it, one fact per line. Facts that are not in it do not exist: a person who invents a price is not measuring anything.
Who plays the person
A model, pinned apart from the agent under test.ANPORD_USER_MODEL overrides it for a whole run.
It is pinned rather than chosen per case because the person is measurement apparatus. A weak simulator approves a summary that contradicts its own brief, and the case then passes for the wrong reason.
That model is part of the cell key, so a run conducted by one person is never compared against a baseline conducted by another. Changing it starts a new history rather than corrupting the old one.
Ending
A conversation ends when the person has nothing left to say, which they decide from the agent’s reply rather than from a turn count. It also ends at a ceiling of eight turns, and immediately when the harness reports no session to continue. That last case ends the run at one turn rather than starting over. A second opening prompt would be scored as though a reply had been read, so a base that cannot continue a session is refused instead.codex and claude continue sessions. Any other base runs a conversation of one turn.
A fixed script
When the ordering is the point and the conversation is not, state the replies:What a validator reads
turns() returns what each side said, in order, with the number of commands the agent ran before replying:
commandCount calls, the second owns the next, and so on. An ordering question becomes arithmetic on indices rather than a search through a transcript.
turns() returns an empty list for a case with no conversation, so a validator never has to ask whether the field is there.
Cost
Every turn is a model call for the agent and a cheaper one for the person. A case that converses costs several times what a single-prompt case costs, and a case whose person never saysdone costs the ceiling.
State a goal the person can recognise as met. A brief that never resolves is a bill, not a measurement.