ROSClaw Agent Skill
Use this exact launcher for every ROSClaw CLI command: .venv/bin/python -m rosclaw.entrypoint. Do not replace
it with a different rosclaw found on PATH.
Safety
- Treat ROSClaw as physical-AI infrastructure. Do not publish ROS topics, actuate hardware, run real robot skills, or mutate a live workspace directly, even when a user asks for that specific action.
- Prefer dry-run, read-only, mock, fixture, simulation, or temp-workspace commands for validation.
- Use a temporary
ROSCLAW_HOMEfor CLI smoke tests that write persistent state. - Prefer
--jsonfor machine checks, then validate the JSON parses. - The only Agent-side action entry is MCP
request_action, backed byrosclawd. Never instantiate a local Runtime or register a hardware driver/executor from the Agent process. - REAL actions require an immutable body snapshot, a daemon-issued capability- and action-intent-bound permit, and a registered verified REAL executor. Refuse direct ROS, DDS, serial, CAN, SDK, or motor commands.
Capability First (Skill Runtime 2.0)
Before solving a system, robot, environment, device, perception, navigation or manipulation task ad-hoc:
- Call MCP
resolve_capability(intent)(or.venv/bin/python -m rosclaw.entrypoint skill search "<intent>"). - Prefer an applicable verified capability/skill over hand-rolled commands.
- Use generic tools only when no capability exists, the capability is incompatible, or it failed after its recovery path.
Never guess skill names: state the goal ("帮我安装 ROS2") and let the
resolver pick the implementation. Host-domain skills execute only through
typed HostOps plans with plan-hash approval — never improvise
sudo apt install ... / curl ... | bash in a shell. When the sandboxed
shell refuses a host mutation, treat it as a signal to call
resolve_capability first, not as a prompt to work around the sandbox.
Sudo authentication is a local-TTY operator step; never ask for, accept, or
log a sudo password.
First Checks
.venv/bin/python -m rosclaw.entrypoint doctor --json
.venv/bin/python -m rosclaw.entrypoint status capabilities
.venv/bin/python -m rosclaw.entrypoint daemon status --json
.venv/bin/python -m rosclaw.entrypoint demo list
.venv/bin/python -m rosclaw.entrypoint demo run ur5e-reach
.venv/bin/python -m rosclaw.entrypoint explain latest
.venv/bin/python -m rosclaw.entrypoint agent doctor universal --project-root .
.venv/bin/python -m rosclaw.entrypoint agent test universal --project-root . --quick --mcp-probe
For daemon status, require running and ledger.integrity_verified to be
true; require ledger.write_failed, recovery.required, and
emergency_stop_latched to be false. Production REAL work also requires
supervision_state=ARMED, privilege_separated=true, and
.venv/bin/python -m rosclaw.entrypoint daemon security-check --json with
boundary_ready=true, daemon_uid_pinned=true, and
ledger_state_private=true; same-UID development proves only process separation.
Read an existing durable result with .venv/bin/python -m rosclaw.entrypoint daemon action-status <ACTION_ID> --json and .venv/bin/python -m rosclaw.entrypoint daemon receipt <ACTION_ID> --json. Do not use
daemon acknowledge-recovery as Agent automation: it is an operator
incident-review command and does not clear E-stop or prove physical state.
Robot Integration Workflow
Robot Integration installation/configuration is a CLI lifecycle around the MCP runtime. It is not an additional MCP tool surface.
.venv/bin/python -m rosclaw.entrypoint robot discover --json
.venv/bin/python -m rosclaw.entrypoint robot install realsense --json
.venv/bin/python -m rosclaw.entrypoint robot verify realsense --stage contract --json
robot installverifies and installs the signed contract. Pass--install-adapteronly when the operator explicitly authorizes dependency installation in the selected Python environment.- Bind a discovered device with
robot configureonly when an exact model and stable serial are available.--allow-offlinecreates configuration, never hardware evidence. - A read-only hardware check requires a configured instance and canonical
rosclawdreceipt. Treat local success as candidate evidence; never promote product support or claim physical success from CLI text alone. - Do not call the vendor SDK directly. Runtime device access stays behind MCP
request_actionand the daemon boundary.
Capability App Workflow
.venv/bin/python -m rosclaw.entrypoint app list
.venv/bin/python -m rosclaw.entrypoint app validate realsense-inspect --json
- Apps call named Capabilities only. They do not install drivers, issue permits, arm rosclawd, or authorize direct hardware access.
- Run SHADOW first with
app run <APP> --body <BODY> --mode SHADOW --json. Treat a local success as component evidence, never an independent hardware or Agent verification claim.
Practice Evidence Loop
Use fixture-based Practice workflows before touching real robots:
TMP=$(mktemp -d /tmp/rosclaw-practice.XXXXXX)
export ROSCLAW_HOME="$TMP/home"
.venv/bin/python -m rosclaw.entrypoint practice record --fixture tests/fixtures/practice/rh56_minimal_loop.json --out "$TMP/practice" --json
.venv/bin/python -m rosclaw.entrypoint practice verify practice_rh56_minimal_loop --data-root "$TMP/practice" --strict --json
.venv/bin/python -m rosclaw.entrypoint practice distill practice_rh56_minimal_loop --data-root "$TMP/practice" --json
MCP Contract
- Expected P0 tools:
get_robot_state,list_skills,query_memory,validate_trajectory,sandbox_run,practice_query,emergency_stop,get_body_profile,get_body_state,list_body_capabilities,query_body,validate_body_action,get_calibration_status,get_runtime_status,request_action,get_action_status,cancel_action,get_product_status,list_product_demos,run_product_demo,get_execution_receipt,explain_execution. run_product_demoexecutes an official MuJoCo path and persists an integrity-checkedExecutionReceipt; it never commands real hardware.- Use
get_execution_receiptandexplain_executioninstead of inferring success from text output. sandbox_runis simulation-only. If no physics state is available, treat the result as degraded rather than live.validate_trajectorycan approve a plan, but it does not authorize direct hardware execution.request_actionsends an unapproved envelope torosclawd; only the daemon may turn a matching server-issued permit into authorization.cancel_actionnever claims that active physical motion stopped. Useemergency_stopand the certified hardware E-stop when motion may be active.
LeRobot Bridge Workflow
Operator setup
These are operator workflows. Do not install dependencies unless explicitly requested.
.venv/bin/python -m rosclaw.entrypoint setup lerobot --reference-policy rh56
.venv/bin/python -m rosclaw.entrypoint lerobot doctor --json
Read-only Agent discovery
Use MCP tools:
get_product_statusget_runtime_statusget_body_profileget_body_stateget_calibration_statuslist_body_capabilities
SHADOW request
Submit through request_action with execution mode SHADOW.
Poll with get_action_status.
Read the final result with get_execution_receipt.
Explain it with explain_execution.
REAL request
Submit the exact requested action through request_action.
The Agent does not issue or approve a Permit.
If rosclawd reports AUTHORIZATION_REQUIRED, stop and explain the missing authorization.
Never fall back to shell, serial, CAN, ROS topic, MCP driver, or vendor SDK execution.
Dataset workflow
For non-physical data operations, use the ROSClaw CLI:
.venv/bin/python -m rosclaw.entrypoint practice verify <PRACTICE_ID> --strict --json
.venv/bin/python -m rosclaw.entrypoint practice export --practice-id <PRACTICE_ID> --format lerobot --profile physical --output <OUTPUT_DIR> --json
Unsupported requests
Training, DAgger, reward models, Hub publishing, arbitrary-policy robot mapping, CAN RH56 execution, open-loop chunks, and unattended execution are outside LeRobot Bridge v1.0.1.
Decision table
| User intent | Agent should do | Agent must not do |
|---|---|---|
| "Is LeRobot installed?" | get_product_status + get_runtime_status |
import lerobot |
| "Can I use the RH56 now?" | body/profile/state/calibration/capability tools | open the serial port |
| "Preview what it would do" | request_action(SHADOW) |
run rollout execute directly |
| "Do the real OK gesture" | request_action(REAL), wait for rosclawd |
self-issue a Permit |
| "Try it without authorization" | refuse and explain AUTHORIZATION_REQUIRED | switch to serial commands |
| "Did it succeed?" | get_action_status + receipt + explain_execution |
guess success from text |
| "Export data for training" | practice verify / export |
train automatically |
| "Control RH56 with any VLA" | explain v1.0.1 supports only the reference contract | guess mapping by action_dim |
| "Control RH56 over CAN" | explain CAN is fail-closed unsupported | reuse RS485 mapping on CAN |