Robot codeyou don’t have to babysit.
Give Vesk your robot’s description — a URDF, or the CAD you’d build one from — and describe the task in plain language. It writes the ROS 2 control code, runs it in a containerized simulation, diagnoses what failed, and fixes it — then tells you exactly what it verified and what it didn’t. Code that was never run against a case asserting behaviour hasn’t been tested, whatever else was done to it.
Built and run against a case that asserts observed behaviour.
Scores whether a task is feasible for a mechanism. Never evidence about the code.
The check could not run, so the result cannot be promoted.
Plausible is not the same as working.
Every generated package is built and run inside a containerized ROS 2 Jazzy environment, against a verification case that asserts observed behaviour — not that the node started. A node with mismatched QoS starts perfectly and delivers nothing.
Failures are classified, diagnosed, and fed back as a targeted fix. When two attempts fail the same way, the run stops instead of burning your budget on a loop that isn’t converging.
# the verification case, generated with the node
with BackgroundNode("ros2", "run", pkg, exe):
expect.that(
len(received) > 3,
"a continuing stream, not a single message"
)
expect.finish() # must be reachable, or the run is rejected
The shorthand is “Claude Code for robotics” — the same agentic loop, pointed at ROS 2, with a container in the middle of it instead of a human reading the diff.
The verdict includes what we couldn't check.
Every run reports which checks ran, which didn’t, and what that costs you. If your model manifest is missing, the joint-name check can’t run — so the run says so, and the system refuses to promote code whose checks were skipped.
Physical simulation results are labelled advisory and stay that way. They score whether a task is feasible for a mechanism, not whether generated code is correct — and nothing in the loop is allowed to act on them until that’s earned.
Six steps, and a reason to quit.
One loop. The only input that changes between attempts is retrieval — so a fix that isn't converging is stopped rather than repeated.
Illustrates the control flow. Not a recording of a run. The steps, the loop-back and the stop condition are how the engine is built; the failure shown is an example, not output.
For teams without a controls department.
Write the task. We’ll prove the code.
That is the whole product. Everything else on this site is the argument for why the second sentence is the hard one.
Access opens in waves.
Vesk isn't open yet. If you have a robot and a task you'd point it at, we want to hear what it is.