home / skills / bdambrosio / cognitive_workbench / nav-descend
This skill safely executes a single forward descent to an adjacent lower cell, aligning to center and cardinal yaw for predictable, collision-free landings.
npx playbooks add skill bdambrosio/cognitive_workbench --skill nav-descendReview the files below or copy the command above to add this skill to your agents.
---
name: nav-descend
type: python
description: "Attempt exactly ONE controlled descent forward into an adjacent lower cell. Covers stepping down slopes, edges, and shallow drops (≤ 1 block)."
schema_hint:
value: "ignored"
step_duration: "float seconds for the move (default: 0.25)"
max_drop: "float maximum allowed drop in Y (default: 1.2)"
min_drop: "float minimum Y decrease to count as descend (default: 0.2)"
out: "$variable"
examples:
- '{"type":"nav-descend","out":"$descend"}'
---
# nav-descend
Attempt exactly ONE controlled descent forward into an adjacent lower cell. Covers stepping down slopes, edges, and shallow drops (≤ 1 block).
## Input
- `step_duration`: Float seconds for the move (default: `0.25`)
- `max_drop`: Float maximum allowed drop in Y (default: `1.2`)
- `min_drop`: Float minimum Y decrease to count as descend (default: `0.2`)
## Output
Success (`status: "success"`):
- `value`: Summary text
- `extra.from`: Starting position `{x, y, z}`
- `extra.to`: Ending position `{x, y, z}`
- `extra.delta_y`: Vertical displacement (negative, within bounds)
- `extra.support_here`: Support type at destination
Failure (`status: "failed"`):
- `reason`: One of `"status_failed"`, `"move_failed"`, `"collision"`, `"observation_failed"`, `"support_ambiguous"`, `"no_descent"`, `"excessive_drop"`
## Invariants
- Automatically aligns agent to block center and cardinal yaw before descent attempt
- Exactly one descent attempt per call (always forward, relative to current yaw)
- Descent must be within bounds: `min_drop` ≤ `|delta_y|` ≤ `max_drop`
- Landing support must be walkable ("solid" or "unsafe")
- Snaps to block center after any position change
- Updates `world_state("nav")` history
## Alignment
Before descent attempt, agent is automatically aligned:
- Position: Block center (x+0.5, y, z+0.5) - eliminates fractional offsets
- Yaw: Nearest cardinal (0°=South, 90°=West, 180°=North, 270°=East)
- Pitch: 0°
This prevents collisions from fractional offsets and ensures predictable forward direction.
## Planning Notes
- Does not handle multi-block drops; compose multiple calls for that
- Use `nav-turn` before descending to change direction (yaw determines forward direction)
- Alignment to block center and cardinal yaw happens automatically (no manual alignment needed)
- Falls within bounds are treated as controlled descent (success if landing is safe)
## Example Workflow
```json
{"type":"nav-turn","direction":"left","out":"$t"}
{"type":"nav-descend","out":"$d1"}
{"type":"nav-descend","out":"$d2"}
```
This skill attempts exactly one controlled descent forward into an adjacent lower cell. It handles stepping down slopes, edges, and shallow drops up to a configurable maximum. The agent automatically aligns to block center and cardinal yaw before the attempt to ensure predictable, collision-free movement. The call reports success with start/end positions and landing support, or a failure reason if the descent cannot be completed.
On invocation the agent snaps to the current block center, sets yaw to the nearest cardinal direction, and levels pitch to 0°. It checks the forward adjacent cell and attempts a single forward move down if the vertical change is within the configured min and max drop bounds. The skill verifies the landing support is walkable and returns detailed extra information on success; otherwise it returns a categorical failure reason. Only one descent is attempted per call and the nav history is updated.
What counts as a successful descent?
Success occurs when the agent moves forward into the adjacent cell with vertical change between min_drop and max_drop and lands on walkable support.
What should I do for larger drops?
Compose multiple nav-descend calls sequentially or use a different, multi-step maneuver; this skill only attempts one adjacent-cell descent per call.
Why did I get excessive_drop?
The observed vertical change exceeded max_drop; reduce forward height difference or increase max_drop if safe.