Skip to content

Build1 publisher3 min readPublished

Hashing budget.yaml with the task pack makes an agent eval's token cap part of the run id

A dev.to post lays out a coding-agent eval protocol that hashes the token and tool-call envelope alongside the tasks, so editing a cap changes the run id. No executed runs are published with it.

The Engineer · Build desk

Illustration accompanying Hashing budget.yaml with the task pack makes an agent eval's token cap part of the run id

What happened

  • A dev.to post opens on a Friday review where one agent showed eight greens and the other six, until the traces showed the first had retried until its cap fired and the second stopped after one compile and one test run.
  • The post proposes a protocol: pin a small task pack, declare a budget envelope before the first model call, and write one JSONL object per attempt, including the dull failures.
  • It defines four outcome classes, where truncated means a cap fired before the tests could pass and invalid covers a forbidden-path edit or a runner crash that cannot be attributed.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • constraint A truncation column can only be filled by a harness that sits in the tool-call path and refuses to start without the envelope loaded. Teams whose eval wraps an agent as a black box cannot produce the number that distinguishes a fired cap from a weak model.
  • decision Adopting this means committing the envelope as a hashed file next to the tasks. A reviewer can then reject a pass-rate table on the ground that no envelope_id accompanies it. That argument is cheaper than re-running the eval.
  • cost At eight to twelve tasks the protocol is debuggable and cannot rank vendors, by the author's own statement. Anyone wanting a ranking pays for more tasks, more hashing and more attempts under the same caps.
  • exposure The method arrives inside product outreach, and the free tier offered as the neutral lab imposes limits of its own. Whoever runs it on free access is measuring under a ceiling set by the vendor whose outreach supplied the protocol.

The part of this proposal worth copying first is the hash manifest. The pack is frozen with `find tasks -type f | sort | xargs sha256sum > hashes.sha256`, and then `budget.yaml` and `TASKS.md` are appended to the same file with a second `sha256sum` call [9]. The post's rule is that if a fixture changes, the run id changes [10]. Because the budget file is inside the manifest, raising a cap is a fixture change [20]. Last week's greens stop being comparable.

The sample envelope caps input at 8000 tokens per task, output at 2000, tool calls at 12, repair loops at 2, and wall clock at 180 seconds. Under `envelope_id: "lab-2026-09-19-a"`, `hidden_tests_are_read_only` is set true [11]. The author tells you to pick numbers that fit your lab and not to copy those as a standard. The standard is that both agents get the same envelope and that truncation is recorded as its own outcome class [12].

Set the sample against the asymmetry the post uses to make its case: one agent allowed 40 tool calls and four repair loops, the other given one shot and a 2k-token ceiling [13]. Divide 40 by the sample's 12 and the first agent has 3.3 times the tool-call envelope; four repair loops against two is double [14].

The post's point is that truncated is not fail, and that mixing the two is how a stingy envelope ends up looking like a weak model [8]. The fourth class, `invalid`, absorbs an agent editing a forbidden path and a runner crash you cannot attribute [7]. Filling the `truncated` column means knowing which cap fired, so the counting has to happen where the calls are made. The post's instruction is to refuse to start a run that does not load the envelope, and it calls that a control [15].

Nothing here is measured. The post says the scripts are a proposal to copy, not a claim about any vendor eval and not executed numbers from a production fleet [17]. The recommended pack is eight to twelve tasks. The author says that is enough to debug the protocol and not enough to crown a winner, and asks you to label it that way in `TASKS.md` [16].

Of the three published numbers, tokens-per-success is the one that moves with the envelope [6]. Widen `max_output_tokens_per_task` and a given agent burns more tokens per green while also clearing more tasks. The post's rule follows from that: publish pass rate, truncation rate and tokens-per-success together, or publish none of them [6].

The disclosure at the top says the article was prepared as part of MonkeyCode's product outreach. The free model access and free server option matter only as a lab, so the ledger can be executed without folding a billed retry policy into the ranking. Strip the product name out, it says, and the method still stands [18]. On that, the author writes: "Free is still a cap. Write that cap in the same file as the tasks." [19]

What to watch

  • Whether anyone publishes an executed ledger under this protocol, with an envelope_id and all three columns filled in.
  • Whether agent runners expose tool-call and repair-loop limits that a harness can set and count. The truncated class needs exactly that.
  • Whether the pack grows past eight to twelve tasks with a published hashes.sha256 others can reproduce against.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories