# Cap Tool Usage

Localize objects and compose low-level CAP MCP actions using observations, Cartesian or...

- Repository: https://github.com/NVlabs/ASPIRE (925 stars)
- Category: AI and agents
- License: Apache-2.0
- Last updated: 2026-10-16
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add NVlabs/ASPIRE --skill cap-tool-usage -g -a claude-code -y`
Codex: `npx skills add NVlabs/ASPIRE --skill cap-tool-usage -g -a codex -y`
Cursor: `npx skills add NVlabs/ASPIRE --skill cap-tool-usage -g -a cursor -y`
Gemini CLI: `npx skills add NVlabs/ASPIRE --skill cap-tool-usage -g -a gemini-cli -y`

## Description

Localize objects and compose low-level CAP MCP actions using observations, Cartesian or synchronized motion, joint targets, and single-arm gripper control.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# CAP Tool Usage

Follow [AGENTS.md](../../../AGENTS.md). Use the native `mcp__cap__*` interface
attached to the ASPIRE CAP session. Keep that session as the only environment and
camera owner; do not create another robot or camera runtime during a physical task.

For a plainly short-horizon task, execute the shortest dependency-ordered MCP sequence immediately.
Skip source inspection, a full planning report, and redundant checks.

## ASPIRE action contract

Native MCP schemas are authoritative. The low-level action tools are:

| Tool | Target |
| --- | --- |
| `cap_move_to_pose` | `target_pose`, with `arm="left"` or `"right"` |
| `cap_move_synchronized` | `targets={"left": pose, "right": pose}` for jointly planned motion |
| `cap_move_to_joints` | `target` containing six joint angles in radians, with `arm` |
| `cap_set_gripper` | `position` from 0 closed to 1 open, with `arm` |

An absolute pose includes `position: [x, y, z]` in metres, `frame`, and exactly one
of `rpy_deg: [roll, pitch, yaw]` or `quaternion_wxyz: [w, x, y, z]`. RPY uses degrees
and fixed-axis XYZ: `R = Rz(yaw) @ Ry(pitch) @ Rx(roll)` in the declared frame.
Returned poses use WXYZ quaternions. Read measured arm poses with `cap_get_robot_state`.

For Cartesian or synchronized pose motion with cuRobo configured, select
`strategy={"ik_solver":"mink","trajectory_planner":"curobo"}`. Never disable
collision checking to force a failed plan through. Do not use direct joint motion
as implicit IK or to bypass a failed collision-aware Cartesian plan.

For a layer turn, derive successive absolute pose targets from the measured cube
axis and EEF pose. An offset EEF needs both its position and orientation rotated
about that axis. Verify contact and actual sticker motion from returned evidence.
Use separate `cap_set_gripper` calls for intended grip changes. Prefer synchronized
motion only when both targets are grounded and neither depends on the other's feedback.

## Object-approach tool chain

The rest: https://github.com/NVlabs/ASPIRE/blob/HEAD/.agents/skills/cap-tool-usage/SKILL.md
