OpenRetriever runtime docs
Build robot agents with explicit time.
Retriever is a Python framework for closed-loop robot systems whose perception, reasoning, and control run together at different rates.
Robots do not usually fit into one clean loop. Cameras stream, robot state updates faster than policies, VLM/VLA calls have variable latency, planners can block, operators intervene, and logs must be replayable. Retriever makes those timing and handoff decisions part of the program instead of hiding them in callbacks, queues, and sleeps.
Learn Retriever In Order¶
Start with the webcam demo or the smallest pure-Python flow.
pixi run demo-webcam-detection
02
Understand the objects
Learn the four building blocks: Flow, Clock, Sync Policy, and Pipeline.
Flow @ Rate → Pipeline.connect
03
Debug before backends
Use the in-process stepper before multiprocessing or dora execution.
pipe.step(dt=0.1)
04
Move toward robots
Record/replay data, connect perception examples, then continue in GoldenRetriever.
pixi run demo-webcam-record
The Core Model¶
Flow
A typed Python class with a step(...) method and local state. It is the unit of robot computation.
Clock
Each Flow declares when it runs. There is no global robot timestep across the graph.
Sync Policy
Each edge declares how upstream events are sampled before the downstream Flow runs.
Pipeline
The graph surface that validates typed connections, builds IR, and runs on execution backends.
First Commands¶
Why This Matters¶
A robot stack becomes hard to maintain when timing is implicit. A callback grabs the latest camera frame, a thread caches a model output, a controller silently holds an old command, and a replay no longer matches the original run. Retriever puts those decisions in the graph so the same system can be inspected, stepped, replayed, and moved across execution backends.