Documentation Index
Fetch the complete documentation index at: https://docs.innate.bot/llms.txt
Use this file to discover all available pages before exploring further.
Every agent follows the same structure. Once you understand it, you can create any agent you need.
File Location
Agents are stored in ~/agents on your robot. The system automatically discovers Python files in this directory—no registration or configuration required.
Add a file, and the agent appears. Remove it, and the agent disappears.
Core Interface
Every agent implements four methods:
| Method | Returns | Purpose |
|---|
| id | str | Unique identifier (snake_case). |
| display_name | str | Human-readable name shown in the app. |
| get_skills() | List[str] | Skills this agent can use. |
| get_prompt() | str | Personality and behavioral instructions. |
Optional methods:
| Method | Returns | Purpose |
|---|
| display_icon | str | Path to a 32x32 pixel icon. |
| get_inputs() | List[str] | Input devices to activate (for example: ["micro"]). |
| uses_gaze() | bool | Enable person-tracking eye movement. |
Minimal Example
The simplest possible agent:
from typing import List
from brain_client.agent_types import Agent
class MyAgent(Agent):
@property
def id(self) -> str:
return "my_agent"
@property
def display_name(self) -> str:
return "My Agent"
def get_skills(self) -> List[str]:
return []
def get_prompt(self) -> str:
return "You are a robot."
This agent loads and runs, but does very little—it has no skills and a minimal prompt.
Complete Example
A functional agent with skills, inputs, and a detailed prompt:
from typing import List
from brain_client.agent_types import Agent
class HelloWorld(Agent):
"""Greets visitors with a friendly wave."""
@property
def id(self) -> str:
return "hello_world"
@property
def display_name(self) -> str:
return "Hello World"
@property
def display_icon(self) -> str:
return "assets/hello_world.png"
def get_skills(self) -> List[str]:
return ["navigate_to_position", "wave"]
def get_inputs(self) -> List[str]:
return ["micro"]
def get_prompt(self) -> str:
return """
You are a friendly robot who greets people.
- Speak in a casual, warm tone
- If you don't see anyone, turn around to look for them
- When you see a person, wave and say hello
- Respond to what people say to you
"""
def uses_gaze(self) -> bool:
return True
This agent combines navigation and waving skills, microphone input, a friendly prompt, and gaze tracking for more natural interaction.
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 AI interprets your prompt literally, and vague instructions produce inconsistent behavior.
Template
Copy and modify this template for new agents:
from typing import List
from brain_client.agent_types import Agent
class MyCustomAgent(Agent):
"""One-line description of what this agent does."""
@property
def id(self) -> str:
return "my_custom_agent"
@property
def display_name(self) -> str:
return "My Custom Agent"
@property
def display_icon(self) -> str:
return "assets/my_icon.png" # Optional
def get_skills(self) -> List[str]:
return [
"navigate_to_position",
"wave",
"turn_and_move",
]
def get_inputs(self) -> List[str]:
return ["micro"]
def get_prompt(self) -> str:
return """
Describe who the robot is and what it should do.
Be explicit about personality, goals, strategy, and constraints.
"""
def uses_gaze(self) -> bool:
return True
Save this as my_agent.py in ~/agents, and the system will load it automatically.