Skip to main content

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.

Full per-function API reference (generated, agent-readable) ships inside the package — after install:

python -c "import menlo_robot_sdk, pathlib; print(pathlib.Path(menlo_robot_sdk.__file__).parent / 'llms-full.txt')"

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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

menlo_robot_sdk-0.3.0.tar.gz (64.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

menlo_robot_sdk-0.3.0-py3-none-any.whl (54.8 kB view details)

Uploaded Python 3

File details

Details for the file menlo_robot_sdk-0.3.0.tar.gz.

File metadata

  • Download URL: menlo_robot_sdk-0.3.0.tar.gz
  • Upload date:
  • Size: 64.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for menlo_robot_sdk-0.3.0.tar.gz
Algorithm Hash digest
SHA256 7026c6703ea5486e3b8d90658a0c5c6899e6caa620e782de6566dd5313fae4e5
MD5 ab7776dd9bc2b9557fc5e2e19f44c137
BLAKE2b-256 21f59d0c586bf7fa7c3098943701dcb0b22be0bc9187f75061b792c260553a5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for menlo_robot_sdk-0.3.0.tar.gz:

Publisher: menlo-robot-sdk-publish.yml on menloresearch/mono

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file menlo_robot_sdk-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: menlo_robot_sdk-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 54.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for menlo_robot_sdk-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f237fc683b25a98fd4bab5fda466271e7e4e898c84594e7c78c12979b341d5d
MD5 d7a67c559af1e8d33d2812b4dc492435
BLAKE2b-256 14d6450bc3b9aedfc71ee17430756ebbd7785471b4ca47d41625e30175bf08da

See more details on using hashes here.

Provenance

The following attestation bundles were made for menlo_robot_sdk-0.3.0-py3-none-any.whl:

Publisher: menlo-robot-sdk-publish.yml on menloresearch/mono

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page