stage-for-manipulation
Hand-authored decision procedure (SOP). Unlike the generated
SKILL.mddiscovery view, this file is the content the S2 Reasoner reads and follows. It is injected into the reasoner's system prompt when this playbook is installed. Therskill.yamlplaybook.body_uripoints here.
Trigger
A chosen manipulation rSkill declares a starting_pose (pre-grasp) that the
robot has not yet reached (e.g. a pick policy expects the gripper hovering
above the black bowl, but the arm is parked at home). Dispatching the
manipulation from a bad initial pose is a common, avoidable grasp failure.
Preconditions
- The target manipulation skill and its
starting_poseare known (read from the skill's manifest / contract). - An arm-motion approach skill is installed — the collision-aware MoveGroup
plan-arm rSkill (
openral-moveit-plan-arm) — and/or a navigate skill for mobile bases.
Steps
- Read the pre-grasp. Read the target manipulation skill's
starting_pose(the declared pre-grasp the policy expects to begin from). - Base staging (mobile only). If the robot has a mobile base,
resolve_placea stand pose that puts the target inside the arm's workspace, thenexecute_rskill(NAVIGATE, goal=place). Skip on a fixed-base arm. - Approach to pre-grasp.
execute_rskillthe collision-aware approach skill (the MoveGroup plan-arm rSkill) retargeted atstarting_pose, so the arm moves to the pre-grasp under MoveIt. Never a hand-rolled IK. - Verify.
query_sceneto confirm the pre-grasp ("is the gripper positioned above the black bowl?"). Treat an unconfirmed pose as not staged. - Hand back. Only once verified, return control so the manipulation policy runs from a good initial pose.
Verify (done predicate)
The gripper (and base, for mobile embodiments) are at the declared starting_pose
pre-grasp, confirmed by query_scene. An unverified pose is a failure, not a
success — do not hand control to the manipulation policy.
Fallbacks
- The approach skill cannot plan a collision-free path to
starting_pose(obstructed / unreachable pre-grasp) →emit_promptthat staging failed, so the reasoner replans or hands off rather than dispatching a manipulation from a bad pose. This is the terminal human-handoff rung of the replanning ladder. - Pairs with the preflight-reach playbook (which checks reachability before a skill is even chosen); this one stages and verifies the chosen skill's pose.
- Never loop past
max_steps. Every approach attempt and its outcome are on the OTel trace, so staging is replayable.
Safety
This playbook only decides and sequences. Every motion it triggers is an
execute_rskill → Action chunk that still crosses the C++ safety kernel; a bad
starting_pose yields a plan the kernel still vetoes, never a relaxed check
(CLAUDE.md §1.1).