This codebase mirrors the four workshop notebooks:
- Workshop 1: SDK basics, viewer, robot state, scene state, simple actions
- Workshop 2: perception with camera frames, HSV color blobs, angle estimates, depth hooks
- Workshop 3: custom navigation with global state and vision-only control
- Workshop 4: tool-calling LLM agents
Student notebooks are separated by language:
notebooks/student/en/: English student notebooksnotebooks/student/ko/: Korean student notebooks
Use this option if you want to complete the workshop entirely in a notebook. You do not need to clone the repository, install Python locally, or set up the IDE scaffold.
- Open the English or Korean notebook for the workshop.
- Upload it to Google Drive and open it in Google Colab.
- Run the first setup cell. It installs
menlo_runnerfrom the GitHub repository. - Follow the setup cells in the notebook to configure your API keys. In Colab, store keys in the Secrets manager rather than writing them into a notebook cell.
- Open the printed viewer URL in Google Chrome when instructed.
- Fill in the TODO sections inside the notebook.
- Run the final project cell. Project starter notebooks ask for round timing and stop after at most 12 delivered cubes.
Required Colab secret names:
MENLO_API_KEY: your Menlo API key fromplatform.menlo.ai-> Settings -> API KeysTOKAMAK_API_KEY: required for Workshop 4 and all project starter agents
Optional LLM model override:
import os
os.environ["MENLO_LLM_MODEL"] = "minimaxai/minimax-m3"
os.environ["MENLO_VLM_MODEL"] = "qwen/qwen3.6-35b-a3b"
# Other approved choices for either variable:
# os.environ["MENLO_LLM_MODEL"] = "qwen/qwen3.6-35b-a3b"
# os.environ["MENLO_VLM_MODEL"] = "minimaxai/minimax-m3"Put this in a notebook cell after setup and before the project agent runs. Local
IDE users can set the same value in .env or pass model=... directly to
menlo_runner.llm.call_llm(...).
Use this option when the repository is cloned locally, but you still want to work
mainly inside the project notebook files from notebooks/project/.
- Clone this repository.
- Install the local package from the repository folder with
py -m pip install -e .. - Open a project notebook from
notebooks/project/in your IDE. - Run the API key and robot context cells.
- Open the printed Menlo viewer URL in Chrome.
- Fill in the TODO sections in the notebook or edit the matching Python starter.
- Run the final project cell. It uses the local cloned code, asks for round timing, and stops after at most 12 delivered cubes.
In this workflow, local edits to menlo_runner/ are available to the notebook
because the package is installed in editable mode.
Use this option when you want to edit .py starter files directly and run them
from a terminal or IDE run configuration.
- Clone this repository.
- Install the local package from the repository folder with
py -m pip install -e .. - Fill in the TODO sections in one of the Python starters under
menlo_runner/programs/project/. - Run the matching starter command from a terminal, for example
py -m menlo_runner.cli level-1-starter. - Open the printed Menlo viewer URL in Chrome.
Project starter commands run the same scored workflow used by the starter
notebooks. The starter asks for round1, round2, round3, or manual
timing. Round limits are 5, 10, and 15 minutes, and every round stops after at
most 12 delivered cubes. Level 0 gives 5 points per moved cube. Level 1 gives
60 points for the first successful cube, then 20 points per additional cube.
Level 2 gives 60 points for the first successful cube, then 40 points per
additional cube.
Install the package from this folder:
py -m pip install -e .Copy .env.example to .env if present, or create .env with:
MENLO_API_KEY=...
TOKAMAK_API_KEY=...
MENLO_LLM_MODEL=minimaxai/minimax-m3
MENLO_VLM_MODEL=qwen/qwen3.6-35b-a3b
MENLO_API_KEY comes from platform.menlo.ai -> Settings -> API Keys.
TOKAMAK_API_KEY is required for Workshop 4 and for all project starter agents because the project requires an LLM-assisted decision loop.
Use the long form if the menlo-run script is not on PATH:
py -m menlo_runner.cli basics-demo
py -m menlo_runner.cli perception-demo
py -m menlo_runner.cli navigation-demo
py -m menlo_runner.cli agent-demo
py -m menlo_runner.cli student-program
py -m menlo_runner.cli level-0-starter
py -m menlo_runner.cli level-1-starter
py -m menlo_runner.cli level-2-starter
py -m menlo_runner.cli level-0-starter-ko
py -m menlo_runner.cli level-1-starter-ko
py -m menlo_runner.cli level-2-starter-koThe demos create a simulated robot, print a viewer URL, wait for you to open it in Chrome, run the selected program, and then clean up the robot.
To keep one robot and viewer open while running multiple workshop demos:
py -m menlo_runner.cli sessionUseful commands:
programs List built-in programs
run <program> Run a built-in program
custom <module> Run a custom module with async def run(ctx)
scene Print robot, pad, and cube state
position Print robot position and status
screenshot [path] Save the robot POV image
skills List viewer skills
viewer Print the viewer URL again
reset Use the reset button in the viewer UI
quit Disconnect, delete the robot, and exit
menlo_runner.basics: simple SDK action wrappers used in Workshop 1menlo_runner.perception: Workshop 2 color blob detection,perceive, annotation, depth hooksmenlo_runner.navigation: Workshop 3turn_to_face,my_go_to_global,my_go_to_visualmenlo_runner.agents: Workshop 4 tool registry, executor, ReAct-styleWorkshopAgentmenlo_runner.scene: scene-state helpers and cube/pad utilitiesmenlo_runner.programs: runnable examples for concepts already introduced in the student notebooks
Exercise solutions are intentionally not included. Complete the exercise cells in the
student notebooks, or write the equivalent code in student_program.py when working in an IDE.
For the final project, use the level-specific starters in notebooks/project/.
Project instructions:
- English:
docs/project_instructions.md - Korean:
docs/project_instructions.ko.md - Presentation deck:
docs/project_instruction_kor_updated.pptx - Original presentation deck:
docs/project_instruction_kor.pptx
English Python starters:
menlo_runner/programs/project/en/level_0_starter.pymenlo_runner/programs/project/en/level_1_starter.pymenlo_runner/programs/project/en/level_2_starter.py
Korean Python starters:
menlo_runner/programs/project/ko/level_0_starter_ko.pymenlo_runner/programs/project/ko/level_1_starter_ko.pymenlo_runner/programs/project/ko/level_2_starter_ko.py