Early access — waitlist open

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.

VERDICT TYPES3
VERIFIEDcontainer run

Built and run against a case that asserts observed behaviour.

ADVISORYphysical simulation

Scores whether a task is feasible for a mechanism. Never evidence about the code.

NO DATAprerequisite missing

The check could not run, so the result cannot be promoted.

A run reports which of these applied — including the ones that didn’t run.
01The difference

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.

case_claw_status.py· generated alongside the node
# 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
Failure modes it distinguishes
BUILD_ERRORdid not compile
CRASHran and died
ASSERTIONran, an expectation failed
TIMEOUTnever reported
VACUOUSexited clean, checked nothing

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.

02What we won't claim

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.

Colour is never the only signal. Try it.
03How it works

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.

SCHEMATIC
ATTEMPT 2two attempts, one signature — more attempts cannot help
01
Plan
reads the CAD manifest
02
Retrieve
version-pinned ROS 2 docs
03
Generate
package + verification case
04
Check
static, before a container
05
Verify
containerized run
06
Fix
classify, diagnose, retry
STOPPED — NOT CONVERGINGthe run ends instead of spending a third attempt

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.

Read the loop in depth →
04Who it's for

For teams without a controls department.

Robotics developersSkip the boilerplate between a working mechanism and a node that drives it.
Students and research labsGet from an idea to a running, checked node without a semester of ROS 2 archaeology.
Early-stage robotics teamsSmall teams with no dedicated controls engineer, who need the code checked by something other than optimism.
05The short version

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.

06Early access

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.

Join the waitlist two fields, one of them optional