dimos run. You usually compose existing modules first; you write new ones when you need custom sensors, planners, or skills.
Mental model
Flow in one line:
write modules â compose with
autoconnect() into a blueprint â dimos run <name> (or .build().loop() in Python)
Day 0: run something that already exists
How you actually build applications
There are three layers. Most apps touch all of them eventually; you start at the top.1. Compose blueprints (most common)
A blueprint is a frozen recipe of modules. You glue them withautoconnect(), which connects streams by (name, type) (e.g. both have color_image: Image).
dimos run my-app):
- In-repo: add a module-level blueprint variable and regenerate the registry
(
pytest dimos/robot/test_all_blueprints_generation.py) - External package: entry points under
dimos.blueprints(see Blueprints)
2. Write modules (when you need new capability)
A module is a Python class with lifecycle + streams:- Sensors / hardware: produce
Out[...]streams - Perception / planning:
In+Out - Skill containers:
@skillmethods the agent can call - Cross-module RPC: declare a
SpecProtocol; the blueprint injects the matching module at build time
dedicated_worker = True so they get their own process.
You can also run a single module in-process for debugging (webcam demo in Modules) without a full blueprint.
3. Add agent skills (for LLM-driven robots)
@skill = RPC + tool schema for the agent. Docstring and type annotations are required.
McpServer.blueprint()- HTTP tools on port 9990McpClient.blueprint(system_prompt=...)- LLM that calls those tools
Practical path: âmy own robotics appâ
A realistic sequence:- Run a stock blueprint for your robot (or closest stack) and confirm hardware/replay works.
- Clone composition - copy a nearby blueprint under
dimos/robot/.../blueprints/(or an external package) andautoconnectonly what you need. - Add or swap modules - e.g. your camera, detector, custom planner.
- Wire mismatches with
.remappings(...)when stream names differ. - Expose behavior with
@skill+ update the system prompt if you use an agent. - Run & debug with
dimos log, topic tools, and Rerun (--viewer). - Ship as a named blueprint (
dimos list/ entry point).
- 80% composition of existing modules
- 20% one custom module + skills
What goes where in the repo
- Modules - modules + connecting streams
- Blueprints - composition, remapping, skills, RPC
- Configuration -
GlobalConfig/ CLI /.env - A real blueprint, e.g. Go2 agentic under
dimos/robot/unitree/go2/blueprints/
