What the agent did
Tool calls, normalized commands, work-directory artifacts, skills, transcript, and final response.
01 / VERIFY THE WORK
Use Dynobox to test that your SKILL.md and agent workflows follow the defined steps and produce the expected results across models and runs.
Dynobox records what your agent does, then checks that work against deterministic assertions rather than asking one model to judge another.
$ npx dynobox init ❯ npx dynobox run dyno/dyno-from-skill.dyno.mjs
■ dynobox 0.9.3
discovered 1 dyno · 1 scenario · harnesses: 2
[dyno-from-skill] generates test dyno
create dyno from skill
claude-code/sonnet/da...✓ 13 assertions
✓skill.referenced(dyno-from-skill)
✓artifact.exists(example.dyno.mjs)
✓verify.command(dynobox validate)
…
codex/gpt-5.4-mini/da...✓ 13 assertions
02 / EVIDENCE OVER OPINION
Agents are non-deterministic. Your acceptance criteria shouldn't be. Define what must happen, then evaluate the same evidence every run.
Tool calls, normalized commands, work-directory artifacts, skills, transcript, and final response.
Explicit matchers authored in TypeScript or YAML and compiled before the harness runs.
Evaluator-recorded evidence attached to every result, ready for inspection and comparison.
03 / DEFINE THE CHECKS
A dyno translates skill requirements into deterministic assertions. Each result connects a requirement to evidence captured during the run.
Read the assertion reference →| CHECK | WHAT IT PROVES | OBSERVED EVIDENCE | STATUS |
|---|---|---|---|
skill.referenced | Consult the dyno authoring skill | dyno-from-skill / SKILL.md | PASS |
http.called | Fetch the current authoring reference | config-authoring.md · status 200 | PASS |
artifact.exists | Create the example dyno | dyno / example.dyno.mjs | PASS |
artifact.contains | Use the Dynobox SDK | defineDyno · @dynobox/sdk | PASS |
command.notCalled | Do not run the generated dyno | no dynobox run observed | PASS |
verify.command | Validate the generated dyno | dynobox validate · exit 0 | PASS |
04 / BUILD A RECORD
Saved runs preserve the evidence. Compare a baseline against another run and see exactly which assertion changed.
Open the dashboard ↗verify.commandGenerated dyno passes validationBASELINEPASSED | COMPARISONFAILED |
|---|---|
1 dynobox validate wordcount.dyno.mjs | 1 dynobox validate wordcount.dyno.mjs |
2− exit code 0 · valid dyno | |
| 2+ exit code 1 · invalid assertion |
READY TO VERIFY