Python client for the Menlo Robot Control Service (RCS) control plane.
Project description
menlo-robot-sdk
Python client for the Menlo Robot Control Service (RCS): robot CRUD, session lifecycle, and runtime skill calls through RCS.
Alpha: this package is in active development and may introduce breaking API changes between minor versions.
Install
uv add menlo-robot-sdk
The base package covers the RCS HTTP control plane. Runtime skills, state, and camera capture use LiveKit SFU RPC (runtime.*) when join_livekit=True. Install the LiveKit extra for that path:
uv add "menlo-robot-sdk[livekit]"
Configure
Local development against RCS uses an unsigned development identity:
from menlo_robot_sdk import DevIdentity, MenloSettings
settings = MenloSettings(
rcs_url="http://localhost:8002",
identity=DevIdentity(
sub="user_dev",
organization_id="org_dev",
team_id="team_dev",
).to_header(),
)
You can also load settings from environment variables:
export MENLO_RCS_URL=http://localhost:8002
export MENLO_IDENTITY='{"sub":"user_dev","organization_id":"org_dev","team_id":"team_dev","roles":[],"scopes":[]}'
Alternatively set MENLO_API_KEY (an sk_live_… key from the console) and point MENLO_RCS_URL at the platform-auth edge (https://platform-auth.menlo.ai/rcs) — no identity needed; the edge mints it.
Quick Example
import asyncio
from menlo_robot_sdk import AsyncClient, ConnectCallbacks, DevIdentity, MenloSettings, connect
async def main() -> None:
settings = MenloSettings(
rcs_url="http://localhost:8002",
identity=DevIdentity(
sub="user_dev",
organization_id="org_dev",
team_id="team_dev",
).to_header(),
)
events = []
def on_action_result(event) -> None:
events.append(event)
async with AsyncClient(settings=settings) as client:
created = await client.robots.create(name="sdk-demo", model="asimov-v0")
session = None
try:
session = await connect(
client,
created.robot.id,
worker_names=["sim-worker"],
join_livekit=False,
callbacks=ConnectCallbacks(on_action_result=on_action_result),
)
skills = await session.discover_skills()
status = await session.state.get("robot_status")
# On-demand JPEG from rcw (requires join_livekit=True and a viewer in the room):
# jpeg = await session.get_vision("pov")
result = await session.invoke(
"set_velocity",
{"wz": 0.8, "duration_s": 2.0},
)
print([skill.name for skill in skills], status.runtime.status, result.status)
finally:
if session is not None:
await session.disconnect()
await client.robots.delete(created.robot.id)
asyncio.run(main())
The runtime skill calls above require a running local RCS stack and browser viewer.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file menlo_robot_sdk-0.2.0.tar.gz.
File metadata
- Download URL: menlo_robot_sdk-0.2.0.tar.gz
- Upload date:
- Size: 42.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ba36f6a58d2e61ff60ca41e04a6c0729875d9467df029cfaa8ead3ae4e5ef43
|
|
| MD5 |
d9974d5ef9f8dcf1647b14f603006424
|
|
| BLAKE2b-256 |
84934b9888f9fe2490cafd18e7deb5b3388792e27a0678d95bd67a001293cfa8
|
Provenance
The following attestation bundles were made for menlo_robot_sdk-0.2.0.tar.gz:
Publisher:
menlo-robot-sdk-publish.yml on menloresearch/mono
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
menlo_robot_sdk-0.2.0.tar.gz -
Subject digest:
5ba36f6a58d2e61ff60ca41e04a6c0729875d9467df029cfaa8ead3ae4e5ef43 - Sigstore transparency entry: 1787133724
- Sigstore integration time:
-
Permalink:
menloresearch/mono@bab564054659bc31a245deed4aec55c7bd5b62bb -
Branch / Tag:
refs/tags/menlo-robot-sdk-v0.2.0 - Owner: https://github.com/menloresearch
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
menlo-robot-sdk-publish.yml@bab564054659bc31a245deed4aec55c7bd5b62bb -
Trigger Event:
push
-
Statement type:
File details
Details for the file menlo_robot_sdk-0.2.0-py3-none-any.whl.
File metadata
- Download URL: menlo_robot_sdk-0.2.0-py3-none-any.whl
- Upload date:
- Size: 40.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60576359887017fffe129a38053a1b3e62e6d411caa7ee44af67e9faccc0bc0e
|
|
| MD5 |
7e93a26333167abe27195d919d62cb77
|
|
| BLAKE2b-256 |
7edb7a468de107740693b9b59e452a29b52b3e1fad83bc53ffcd43e00efc44f9
|
Provenance
The following attestation bundles were made for menlo_robot_sdk-0.2.0-py3-none-any.whl:
Publisher:
menlo-robot-sdk-publish.yml on menloresearch/mono
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
menlo_robot_sdk-0.2.0-py3-none-any.whl -
Subject digest:
60576359887017fffe129a38053a1b3e62e6d411caa7ee44af67e9faccc0bc0e - Sigstore transparency entry: 1787133937
- Sigstore integration time:
-
Permalink:
menloresearch/mono@bab564054659bc31a245deed4aec55c7bd5b62bb -
Branch / Tag:
refs/tags/menlo-robot-sdk-v0.2.0 - Owner: https://github.com/menloresearch
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
menlo-robot-sdk-publish.yml@bab564054659bc31a245deed4aec55c7bd5b62bb -
Trigger Event:
push
-
Statement type: