preflight-reach
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
About to grasp or place an object (e.g. "pick up the mug", "put the can on the shelf") but it is unclear the embodiment can physically reach the target from where it currently stands β its reachability from the current base and arm pose is uncertain.
Preconditions
- The reasoner's
## ROBOTself-model block is available (DOF, end-effectors, approximate reach, locomotion, payload limit). - A spatial-memory / detector backend gives the target pose (
recall_object/query_scene/locate_in_viewtools).
Steps
- Read the self-model (
## ROBOT). Note locomotion (a fixed arm vs a mobile base), the arm's approximate reach, and the payload limit. These three facts decide everything that follows. - Locate the target. Call
recall_object(target)(orquery_scene/locate_in_view) β the target's pose. No pose β defer to the find-object playbook before continuing. - Reach check. Is the target within the arm's workspace from the current base pose, and within the payload limit? Compare the target pose against the self-model's reach envelope and the payload against its limit.
- Reachable β done. If the target is in the workspace and under the payload limit, allow the manipulation skill to dispatch.
- Out of reach AND a mobile base exists β
resolve_placean approach stand pose near the target,execute_rskill(NAVIGATE, goal=stand_pose), then re-check (back to step 3) from the new base pose. - Fixed arm and out of reach (or over payload) β do not dispatch the manipulation skill. Hand off (see Fallbacks). A fixed arm cannot stage itself closer, so navigating is not an option.
Verify (done predicate)
The target is inside the reachable workspace β directly, or after staging the mobile base β and within the payload limit. Only then is the downstream manipulation skill allowed to dispatch.
Fallbacks
- Fixed-arm out-of-reach, or target over the payload limit β
emit_promptto the operator ("the mug is outside my workspace / too heavy; please move it closer or reduce the load"). This is the terminal human-handoff rung of the replanning ladder. - Pairs with the stage-for-manipulation playbook: when a mobile base exists, that playbook owns the staging motion; this one owns the reach decision.
- Never loop past
max_steps. Every reach check, stage, and re-check is on the OTel trace, so the decision 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 wrong
reach estimate yields a bad plan the kernel still vetoes, never a relaxed check
(CLAUDE.md Β§1.1).