LoopMaster is a lightweight agentic robotics layer for the HEI ReBot Lift real robot.
The handler-led subagent structure uses clear execution roles:
| LoopMaster role | Responsibility |
|---|---|
| Handler | Owns the run, workspace, robot connection, and role handoff. |
| Strategist | Selects registry-backed skills from the goal and writes plan.md. |
| Worker | Executes the plan, observes after control actions, and writes summary.md/trace.jsonl. |
| Auditor | Reviews trace evidence, detects missing task-level skills, and writes review.md. |
Motion runs must be closed-loop. A successful action_sent response only means
the command was accepted by the platform; agents must also check periodic or
post-action observe feedback and compare the actual robot state against the
expected target/trend. If feedback is missing or does not match, the run should
be diagnosed as retry/blocked instead of reported as physically complete.
The shipped skill surface is intentionally small and real-platform focused:
observecapture_imagedetect_graspsmove_arm_eemove_arm_jointsset_gripperset_base_velocityset_lift_heightstop_motion
detect_grasps wraps AnyGrasp SDK under third_party/anygrasp_sdk; runtime
requires a valid machine-bound license, a detection checkpoint, and AnyGrasp's
Python dependencies installed in the same uv environment. Run it with
check_only=true to get the exact missing package list. There are no complete
task policies in this tree. Learned skills can be added later under the user
skill root without mixing them into the platform adapter layer.
LoopMaster should not ask the operator to answer questions that can be resolved
from the repository. When a run fails because a shipped skill omits data, has a
schema mismatch, or has stale documentation, the agent loop should first inspect
the local skill implementation and trace evidence, update the relevant
SKILL.md/policy.py when it has write authority, and rerun the check. User
input is reserved for hardware safety decisions, missing task intent, external
runtime state, or changes that would create a new learned behavior.
For example, if observe succeeds but the trace only exposes state_keys while
downstream control needs numeric joint values, the correct repair is to update
the observe skill to return numeric state values in its observation summary,
then rerun. It is not a user-facing research question.
The platform adapter wraps the HEI ReBot Lift LeRobot interfaces already present at:
hei-rebot-lift/software/lerobot-hei-rebot-lift/src/lerobot/robots/hei_rebot_lift/
Use HeiRebotLiftPlatformConfig(remote_ip="...") for the remote host/client
path, or omit remote_ip for direct local hardware access. The adapter imports
LeRobot lazily so framework tests and planning code do not require hardware
dependencies at import time.
uv sync
uv run python -m loopmaster_agentic "inspect robot state" --dry-runFor the full local robot/VR dependency set, use:
uv sync --all-extras --all-groupsDry-run uses an in-memory platform only for framework verification. Production
use should pass a real HeiRebotLiftPlatform to Handler.run(...).
Open a persistent terminal conversation with the Handler:
uv run python -m loopmaster_agentic chat --dry-runEach non-command message is executed as one Handler run. --dry-run only swaps
the robot platform for DryRunPlatform; the Handler, Strategist, Worker, and
Auditor subagents still run through the fnyweg Codex profile by default. Use
--agent-profile <name> or LOOPMASTER_CODEX_PROFILE=<name> to select another
profile, and --local-agents only for offline/debug runs that should not call
Codex.
The transcript is saved under
~/.loopmaster_agentic/handler_chat/handler-direct.jsonl by default, and each
role's Codex session id is saved beside it, so the same --session-id resumes
prior turns across terminal sessions. Use /history, /clear, and /exit
inside the TUI.
For scripted checks without entering the TUI:
uv run python -m loopmaster_agentic chat --dry-run --once "inspect robot state"