Image to make: The agent loop. Diagram of one turn: camera frame and new events (speech, skill feedback, inputs) go into the Innate agent, which sends them with the agent’s prompt and skills to the model, then acts by running a skill, speaking, or waiting. Show the agent file feeding prompt, skills, and inputs into the loop. Replaces the old system diagram, which still says “B.A.S.I.C.” and has “TKTK” labels.
One turn at a time
The agent works in turns, one at a time:- Look. Take the latest camera frame and everything new since the last turn: what you said, what a skill reported, what an input sent.
- Think. Send that to the model with the agent’s prompt, and its skills described as tools.
- Act. Run a skill, say something, or wait.
execute() signature becomes the parameters and guidelines() becomes the description. A few tools are always there:
Watch it think
The web app’s Brain page shows every turn: the frames it saw, what it decided, and how long it took. Click INSPECT TURN to see the full request. It’s the fastest way to learn why the robot did something.
Which model runs it
The default is Gemini,google:gemini-3.6-flash. To pick another, use Model on the web app’s Agent page; see Choose the model. Settings → Agent → Model changes the same setting, and its Custom… option takes any vendor:name. The change applies without a restart.
Add vendor keys in the web app under Settings → Keys → Model providers. A saved key is used from the next model switch or skill call, without a restart. Robots ship with an
INNATE_SERVICE_KEY, which is free for 300 hours; ask on Discord for more. With no key at all, you can still drive and run skills by hand.
Without the web app, set llm_model in config/settings.yaml and the keys in ~/innate-os/.env.
