How Plugins Are Discovered
External plugins don't take effect automatically. The main repository needs to know what driver you provide, where the entry class is, and where the profile is through a manifest file. The entire discovery chain:
Manifest
PhyAgentOS_plugin.toml declares driver name, module, class, and profile path
Deploy
Deploy script clones/copies the plugin to the local plugin directory
Register
hal/plugins.py parses the manifest and writes to the local registry
Load
When not found in the built-in driver table, dynamically import from external registry
Launch
Watchdog starts with --driver just like a built-in driver
ReKep Plugin Installation
ReKep is currently the most complete external plugin reference. You can install it online or debug locally.
Online Install
python scripts/deploy_rekep_real_plugin.py \
--repo-url https://github.com/baiyu858/PhyAgentOS-rekep-real-plugin.gitLocal Debug
python scripts/deploy_rekep_real_plugin.py \
--repo-url ../PhyAgentOS-rekep-real-plugin# With solver dependencies
python scripts/deploy_rekep_real_plugin.py \
--repo-url https://github.com/baiyu858/PhyAgentOS-rekep-real-plugin.git \
--with-solver
# Register only, skip dependency install
python scripts/deploy_rekep_real_plugin.py \
--repo-url ../PhyAgentOS-rekep-real-plugin \
--no-install-depsInvoking via Watchdog
This is the closest to real-world usage. The Agent generates actions, and the Watchdog monitors ACTION.md and invokes the plugin to execute.
# Terminal 1
paos onboard
python hal/hal_watchdog.py --driver rekep_real --workspace ~/.PhyAgentOS/workspace
# Terminal 2
paos agentRecommended for demonstrating the complete "perception → decision → execution" closed loop.
Debugging by Writing ACTION.md Directly
Want to bypass the Agent and directly verify whether a specific action can be handled by the plugin? Manually editing ACTION.md is the fastest approach.
Plugin Native Action
{
"action_type": "real_execute",
"parameters": {
"instruction": "pick up the chili pepper and place it in the plate",
"execute_motion": true
},
"status": "pending"
}Generic High-Level Action
{
"action_type": "pick_up",
"parameters": {
"target": "red_apple"
},
"status": "pending"
}ReKep supports both protocols. The former uses plugin-specific capabilities, while the latter is converted to a natural language instruction before execution.
Debugging Runtime Directly
The most common need during development: bypass the Agent and Markdown first, and independently verify whether the runtime itself has issues.
# Preflight
python runtime/dobot_bridge.py preflight --pretty
# Dry-run
python runtime/dobot_bridge.py execute \
--instruction "pick up the red block and place it on the tray" \
--pretty
# Real execution
python runtime/dobot_bridge.py execute \
--instruction "pick up the red block and place it on the tray" \
--execute_motion \
--pretty
# Switch robot family
python runtime/dobot_bridge.py preflight \
--robot_family cellbot \
--robot_driver your_driverWhy ReKep Is Worth Studying
Driver Layer
driver.py interfaces with BaseDriver — the only entry point the main repository can see. Keep it thin.
Runtime Layer
dobot_bridge.py handles preflight, dry-run, and real execution. Carries the heavy logic and third-party dependencies.
Adapter Layer
robot_factory.py and others handle specific adaptations for different robot families. Clear boundaries.
Choosing Between Three Debugging Methods
| Method | Best For | Pros | Note |
|---|---|---|---|
| Watchdog + Agent | Full pipeline verification, demos | Closest to real scenarios | Issues may span multiple layers |
| Write ACTION.md directly | Action mapping tests | Bypass Agent, quickly verify Driver | Still depends on Watchdog |
| Call runtime directly | Plugin development, SDK debugging | Smallest failure scope | Doesn't prove full pipeline works |