name property (how agents reference it), on_open() (called when an agent using it starts), and on_close() (called when it stops). In between, you call self.send_data(...) whenever you have something to report — that’s the whole interface.
Write an input device
Drop the file into~/innate-os/workspace/inputs/. This template sends data every second, as if the user were talking:
Data types
The Innate agent performs better with properly formatted inputs, sosend_data takes a data_type to route data onto the right channel. It is either chat_in or custom, and in both cases expects a dictionary:
chat_in— text input as if the user was talking, e.g.{"text": "Hello robot"}. You can include extra keys such asconfidenceorsource.custom— any other structured data, e.g.{"air_quality": 42, "unit": "AQI"}.
Attach it to an agent
on_open() is called and the Innate agent begins receiving your input’s updates.
Example: the built-in microphone
MARS ships with aMicroInput device. If a microphone is plugged in and the running agent lists it, you can talk directly to MARS — this is the same wiring used by the hello world agent in Anatomy of an Agent:
workspace/inputs/micro_input.py — the best reference for a real input device. MARS has a built-in microphone in the arm; for better directional pickup you can add a USB one (see Extending MARS).

