File Location
Your agents live in~/innate-os/workspace/custom_agents/ on the robot; shipped agents live next door in workspace/innate_agents/. Both are ordinary Python packages — define an Agent subclass in any .py file and the robot knows it.
Edits hot-reload within a second or two, no restart required. (innate service restart remains the fallback if something doesn’t get picked up.)
Agents and skills share one import namespace: from innate import Agent, InputRef, SkillRef. (Older files that import from brain_client.agents.types still work — it’s the same class.)
Core Interface
Every agent implements four methods: Optional methods:Minimal Example
The simplest possible agent:Complete Example
Skills, inputs, and a real prompt. Import the skill classes and list them — a typo or a renamed skill is then caught by your editor instead of at runtime on the robot:Wave above is a recorded demonstration — the catalog generates a typed reference for every physical skill inside its own folder, so it imports just like a code skill. See Composing Skills.
Referring to skills by ID
A skill ID string works anywhere a class does, which is what you need for a skill you can’t import from your agent:What your agent gets for free
You never list these — every agent can already:- Talk. Plain replies are spoken aloud, sentence by sentence as they’re written.
- Wait. Do nothing when there’s nothing to do.
- Stop a running skill, when one is running.
- Drive to a spot it can see, if
NavigateToPositionis one of its skills — the model points at the floor in the camera frame and the robot goes there.
Enabling the Microphone
To talk to your agent, enable the microphone input — it is not on by default:Writing Effective Prompts
The prompt determines how the robot behaves. Skills define what’s possible; the prompt defines what actually happens. A good prompt defines personality, goals, constraints, and strategy in plain language. Be specific — the model interprets your prompt literally, and vague instructions produce inconsistent behavior.Template
Copy and modify this for new agents:Deploy your agent
1
Save the file in the right place
Save your agent as
my_agent.py in ~/innate-os/workspace/custom_agents/ on the robot.2
Let hot reload pick it up
The runtime watches
custom_agents/ — your new agent loads automatically within a second or two of saving, and so does every later edit. If it ever fails to appear, restart the runtime as a fallback:3
Check it appears in the app
Your agent shows up as a card on the app Home screen — pull down to refresh if needed. From there, tap to start it.

