Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Menlo

menlo-sdk

Drive an Asimov robot from Python. One Robot, five verbs, waits that read the robot's own report, and camera, microphone and speaker on the same connection.

pip install menlo-sdk              # UDP on the LAN; Python 3.12+
pip install "menlo-sdk[livekit]"   # + video, audio and remote connections

Quickstart

Once per machine, save a robot. The credential is minted on the robot (asimovctl sdk-token create --role control, or its web UI's SDK page):

menlo login http://asimov.local --credential <credential>

Then a script is just:

from menlo.asimov import Mode, Robot

with Robot().connect() as robot:  # the robot you logged in to
    if robot.state.mode is Mode.DAMP:  # wake up: STAND is the only way out of DAMP
        robot.stand()
        robot.wait_for(Mode.STAND, timeout=15)
    robot.set_velocity(vx=0.25, duration=4.0, wait=True)  # walk 0.25 m/s for 4 s, then zero
    robot.wait_for(Mode.MOVE)  # ends in MOVE at zero velocity: standing still
    print(robot.state.joint("L_Knee").pos, robot.state.battery)
    print(robot.camera.photo().to_jpeg()[:4])  # needs [livekit] and Pillow

Robot() finds the robot from MENLO_MANAGER_URL + MENLO_CREDENTIAL, else from ~/.menlo/robots.toml (menlo robots, menlo use <name>, menlo logout <name>). Or say where it is: Robot(ConnectionConfig(udp=UdpConfig("asimov.local"))).connect("udp").

The verbs

Verb What it does
set_velocity(vx, vy, vyaw, duration=, wait=) walk; held at 10 Hz until superseded, stop(), or duration
stop() zero velocity; the robot keeps balancing in MOVE
stand() stiffen into the standing pose; the wake-up verb, no balance loop
damp() motors compliant now; a standing robot folds. The emergency verb
goto(positions, duration=) / trajectory(positions) joint targets, radians, policy off

Every verb returns a Sent at once. wait_for(Mode.X) and wait_until(pred) block on the robot's report and raise RobotFaultedError, StateStaleError or WaitTimeoutError instead of guessing. robot.state is the latest sample: mode, joints, IMU, alerts, battery.

Three lanes, one API

connect(mode) control + state video + audio when
"udp" UDP 8850 / 8851 — on the robot's LAN, no camera needed
"hybrid" UDP LiveKit on the LAN, with camera
"livekit" LiveKit LiveKit from anywhere the robot's manager is reachable

ManagerConfig(url, credential) asks the robot's manager for the room and a fresh join token on every connect; the SDK never holds a LiveKit secret.

Read before you let go of the robot

  • A walk ends in MOVE at zero velocity, not in stand(). STAND is a stiffen with no balance loop; asking a free-standing biped to stiffen after walking tips it over.
  • The SDK sends zero when your script stops. close(), the end of a with block, a lost link and a fault-DAMP all release a held velocity. The edge DAMPs on its own about two seconds after the last command it heard.
  • damp() folds the robot. It is never implied by anything else.
  • Speeds are clamped client-side (0.6 m/s, 1.5 rad/s by default) and the clamp is visible on Sent.clamped.

More

  • Reference: every option, the safety model in full, the wire, errors, development.
  • SKILL.md: the two-page brief for an agent writing a script against this SDK.
  • Examples and the changelog.
  • Versions follow PEP 440; pre-releases (0.1.0rc1) install only with pip install --pre. How releases are cut: RELEASING.md.
  • Found a security problem? Report it privately: SECURITY.md.

License

MIT. The wire types come from asimov-protocol (MIT).

Metadata

Release files for menlo-sdk 0.1.0rc5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for menlo-sdk 0.1.0rc5
File Size Uploaded Provenance Actions
menlo_sdk-0.1.0rc5.tar.gz 183.2 kB With provenance Details for menlo_sdk-0.1.0rc5.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for menlo-sdk 0.1.0rc5
File Interpreter ABI Platform Actions
menlo_sdk-0.1.0rc5-py3-none-any.whl Python 3 none any Details for menlo_sdk-0.1.0rc5-py3-none-any.whl

Total release size: 258.9 kB

Release files / menlo_sdk-0.1.0rc5.tar.gz

Download URL menlo_sdk-0.1.0rc5.tar.gz
Size 183.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c8e9dead743fc4035987902bcbd6f21c4b4948214b8260ac4bb3407894fec496
BLAKE2b-256 checksum
How to use checksums
9db0c2301d91c57ec5706b7426ac2f6517ccda072d4eee9f19a289a97191a2be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / menlo_sdk-0.1.0rc5-py3-none-any.whl

Download URL menlo_sdk-0.1.0rc5-py3-none-any.whl
Size 75.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
218fb1ea633c16f4dbadd922117dfe7910c28f9099d1b08a25fd08b24934e855
BLAKE2b-256 checksum
How to use checksums
9ff1c6f69cd55565d2f09c7dd14eeedd935cd0c0c8ba6dcbc1ed1f342f18d964
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Security for menlo-sdk 0.1.0rc5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for menlo_sdk-0.1.0rc5.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page