APM

>Agent Skill

@facebook/click-target

skilldesign

Find and click a target object in XR. Use when testing UI interactions, clicking buttons, or verifying interactable elements work correctly.

design
apm::install
$apm install @facebook/click-target
apm::skill.md
---
name: click-target
description: Find and click a target object in XR. Use when testing UI interactions, clicking buttons, or verifying interactable elements work correctly.
disable-model-invocation: true
---

# Click Target in XR

Find a target object in the scene and click it using a controller, then verify the click registered.

## Arguments

`$ARGUMENTS` should be a description of the target to find (e.g., "the RESTART button", "the scoreboard", "the settings panel").

## Workflow

### 1. Get Scene Hierarchy

Use `mcp__iwsdk-dev-mcp__scene_get_hierarchy` to find the target object's UUID.

- Look for objects with entityIndex (these are ECS entities)
- PanelUI elements typically have nested children for their content

### 2. Get Target Transform

Use `mcp__iwsdk-dev-mcp__scene_get_object_transform` with the target UUID.

- Use `positionRelativeToXROrigin` for all positioning operations
- Note the position for the next steps

### 3. Position Headset to Look at Target

Use `mcp__iwsdk-dev-mcp__xr_look_at` with device `headset` and the target position.

- This orients the headset to face the target

### 4. Screenshot to Verify Target Visible

Use `mcp__iwsdk-dev-mcp__browser_screenshot` to verify:

- Target is visible in the view
- Target is not occluded by other objects
- If not visible, use `mcp__iwsdk-dev-mcp__xr_look_at` with `moveToDistance` to get closer

### 5. Position Controller

Use `mcp__iwsdk-dev-mcp__xr_get_transform` to check controller position.

- If controller is visible in screenshot and not occluding target, proceed
- If controller is far away or not visible:
  1. Get headset position with `mcp__iwsdk-dev-mcp__xr_get_transform`
  2. Set controller to headset position with `mcp__iwsdk-dev-mcp__xr_set_transform`
  3. Micro-adjust: offset x by +0.25 (right) or -0.25 (left), y by -0.1, z by -0.3

### 6. Point Controller at Target

Use `mcp__iwsdk-dev-mcp__xr_look_at` with the controller device and target position.

- For UI elements on panels, you may need to target a specific child element
- If the target is a button on a panel, the button may be offset from the panel center

### 7. Click

Use `mcp__iwsdk-dev-mcp__xr_select` with the controller device.

### 8. Verify Click

Use `mcp__iwsdk-dev-mcp__browser_get_console_logs` with a pattern to check for expected log messages.

- If no logs match, the click may have missed - adjust target position and retry
- Common adjustments: change x or z by 0.05-0.1 to hit child elements

## Tips

- For PanelUI buttons, the button position is often offset from the panel center
- Use `mcp__iwsdk-dev-mcp__scene_get_object_transform` on child elements to find exact button positions
- Always verify with console logs rather than assuming from visuals
- The ray visual in screenshots can be misleading - test with actual clicks
- Either controller (left or right) can be used

## Example

To click the RESTART button on the pong scoreboard:

1. Find scoreboard entity (entityIndex 6 in the pong game)
2. Scoreboard is at (0, -0.798, -1.25)
3. Button is at approximately (0.05, -0.798, -1.109) - offset toward player
4. Point controller at button position and click
5. Verify "[BUTTON CLICKED]" appears in console logs