For robotics

Teach it in simulation. Run it on the arm.

Arms are devices with channels. Trials run in the simulator first, every run is recorded, and any moment of any run can become the start of the next one.

A desktop robot arm reaching for a wooden block, its shadow long across the bench.

Plate 15 · A desktop arm mid-reach, its shadow long across the bench

One channel model, many arms.

Arms

The servo bus is a channel. Drivers speak it directly:

  • Feetech STS/SCS — the SO-100 and SO-101 arms.
  • Dynamixel Protocol 2.0 — Koch v1.1 and WidowX.
  • UFACTORY xArm and Lite 6 over TCP.
  • The CommandAGI ESP32 arm, polling its host over the LAN.

USB arms connect straight from the browser over WebSerial — the port opens only when you pick it.

Try it a hundred times before the first real one.

A trials file sweeps a parameter — a target, a gain, a mass — across many simulated runs and records every one. Compare them on one time bar, keep the best, and move on.

Many faint copies of one robot arm reaching for the same target.

Plate 16 · Forty reaches, one target, overlaid in the simulator

A hand on a trackpad, with a robot gripper out of focus behind.

Plate 17 · A hand on a trackpad, nudging a simulated gripper

Force dragging

Push it with your mouse. It's recorded.

Grab any body in a simulation world and drag it. The force you applied is written into the run with your name on it, so a disturbance you added by hand replays exactly like everything else.

Every run, replayable and forkable.

A run is a folder of streams, on one clock. Scrub it, replay it at a quarter speed, or fork it at any moment into a new simulation run that starts exactly there.

runs/reach-tuning/streams/arm-1.servoexample records · simulation
00:00:04.020 note    agent:tuner: run_program reach.trials.json #17
00:00:04.031 command goal j1=31.0 j2=-22.0 j3=64.5 j4=10.0
00:00:04.540 state   j1=30.9 j2=-22.1 j3=64.4 j4=10.0
00:00:05.002 event   person:ana: drag gripper f=(0.0, 1.8, 0.0) N
00:00:05.300 state   j1=31.4 j2=-20.8 j3=63.2 j4=10.0
00:00:06.100 note    person:ana: fork @ 00:00:05.002

An agent at the controls, inside your bounds.

Authority

Give an agent a standing grant on one arm, in one world, for one afternoon. It arms the arm and sends goals in real time. An armed arm that sits idle for five minutes disarms itself, and stop and torque-off are always allowed.

Tested against the protocol. Not yet on your bench.

Verification

The arm drivers are verified at loopback: against faithful software fakes of each servo protocol. None has been commissioned on a real arm yet. When one has, its driver will say so — and not a moment before.

Start with a simulation world.

Open the workbench, open a simulation world with an arm in it, and drag it around. No hardware, no grant needed.