Actions
Actions
Action Plugins
The Action Plugins are core components of OM1. These plugins map high-level decisions from one or more LLMs into concrete physical or digital actions (e.g. moving a robot or generating speech). This page covers the architecture of a typical Action Plugin, the available action types, and how actions are connected to different hardware and software platforms.
Action Orchestrator
The Action Orchestrator (internal/actions/orchestrator.go) manages the execution of the actions selected in each tick. It supports three execution modes — concurrent (default), sequential, and dependencies — configured via the per-mode action_execution_mode field (set inside a mode block, not at the top level).
Movement (Zenoh)
Movement commands can be sent over Zenoh. See the Unitree Go2 autonomy connector, which publishes cmd_vel over Zenoh: plugins/actions/unitree/go2/autonomy/move.go (registered as unitree_go2_autonomy/move).
Navigation
The navigation action drives the robot to mapped locations: plugins/actions/navigation/navigation.go (registered as navigation/navigation).
Speech and TTS
The Speech and TTS action plugin allows agents to speak using a text-to-speech (TTS) system.
Adding New Actions
An action is exposed to the LLM by its name, and each name can have one or more connectors that carry it out on a specific platform. A connector registers itself with actions.Register("<name>/<connector>", ...) and the runtime resolves it by name + "/" + connector (internal/actions/action.go).
The real layout groups connectors by action name (and, for robots, by platform):
In general, each robot has specific capabilities, so an action's connector is typically hardware-specific. To add a new connector, create a package under plugins/actions/, call actions.Register("<name>/<connector>", <constructor>) in its init(), and add a blank import for it in plugins/actions/actions.go so it is loaded. Then reference it from the agent_actions section of your config (e.g. unitree_g1_conversation.json5).
Last updated
Was this helpful?