Skip to main content
You need two tools installed; everything else (world geometry, the Docker image, the ROS build) is provisioned automatically on first start:
  • Docker — runs the robot’s software stack in a container.
  • uv — runs the physics world natively on your machine (./innate-sim setup offers to install this one for you).
A machine with 4 CPU cores and 8 GB of RAM is comfortable. The first start downloads and builds a few GB, so it takes a while; later starts take seconds.

Install the prerequisites

Install Docker Desktop and start it:
brew install --cask docker
(or download it from docker.com).

Start the simulator

1

Clone innate-os

git clone https://github.com/innate-inc/innate-os.git
cd innate-os
2

Run setup once

./innate-sim setup
This checks the prerequisites (and offers to install uv if it is missing), then asks which brain the robot’s AI agent should use:
  • Hosted Innate brain — uses your Innate service key (it comes with a MARS robot). The full experience, including voice — the robot speaks.
  • Local brain (Gemini) — runs the open-source agent on your machine against a Gemini API key. Everything works except voice: the web app’s speak bar is disabled without a service key.
  • None — no agent; you can still drive, navigate, and trigger skills manually.
Rerun ./innate-sim setup anytime to switch.
3

Bring it up

./innate-sim up
The first run provisions everything and shows its progress; leave the live dashboard open. Later runs start in seconds.
4

Open the web app

Go to https://localhost and accept the self-signed certificate. You are looking at the robot’s web app: drive with the joystick or WASD, switch between the 3D view, the robot’s cameras, and the map, trigger skills, and chat with the agent.

Everyday commands

./innate-sim status      # startup checks + health snapshot
./innate-sim logs        # startup logs; `logs os` / `logs agent` follow live
./innate-sim sh          # shell into the container
./innate-sim down        # stop
./innate-sim clean       # remove containers/volumes (keeps .env + config)

If something goes wrong

Every error the launcher prints is written to tell you exactly what to do next — missing packages come with the install command, a wedged Docker names itself, and the startup checks end with a health panel that includes the world server and its measured render speed. If you get stuck anyway, ask on Discord — setup reports from new machines are how the rough edges get fixed.