Simulate grabbing objects in WebXR scenes for interaction testing and movement validation.
The material indicates an open-source, prompt-oriented WebXR interaction workflow with no required secrets or remote endpoints, so overall risk is low. It can drive XR scene interactions and may take screenshots for verification, but no clear red flags beyond its stated purpose are evident.
The material explicitly states that no keys or environment variables are required, with no indication of token requests, credential storage, or credential exfiltration, so credential abuse exposure appears low.
Neither the system checks nor the material declare any remote endpoints; the described actions are limited to local XR session control, scene queries, and screenshot verification, with no evidence of sending user data to external services.
This skill invokes XR/scene-related tools to perform interactions such as entering XR, moving controllers, setting gamepad button states, and taking screenshots; this is normal execution capability for such a skill, with no sign of arbitrary local code execution or requests for excessive system privileges.
It can read scene hierarchy, object transforms, and headset/controller state, and may capture the current view via screenshot; this access scope aligns with the stated purpose of grabbing/moving XR objects, with no described access to the filesystem or unrelated sensitive data.
The source points to GitHub under facebook/immersive-web-sdk, and the system marks it as open-source and prompt-only, which supports auditability. Although it has 0 stars, no declared license, and unknown maintenance status, there is no sign of closed-source distribution, tampering, or other clear supply-chain red flags.
Copy the install command and let the AI configure it · recommended for beginners
Please install the "iwsdk-grab" skill from askskill: 1. Download https://raw.githubusercontent.com/facebook/immersive-web-sdk/main/packages/starter-assets/claude-injections/skills/iwsdk-grab/SKILL.md 2. Save it as ~/.claude/skills/iwsdk-grab/SKILL.md 3. Reload skills and tell me it's ready
In the current WebXR scene, move the emulated controller near the cube with the OneHandGrabbable component, use the grip/squeeze action to grab it, and move it to the center of the table.
The object is successfully picked up and moved, confirming one-hand grabbing and position updates work correctly.
Find the rod with the TwoHandsGrabbable component in the WebXR scene, bring two emulated controllers close, press grip/squeeze on both, and test whether it can be grabbed and rotated with two hands.
The rod can be stably grabbed and rotated with two hands, validating the two-hand interaction logic.
In the scene, try using both trigger and grip/squeeze on a grabbable object, and verify that grabbing only activates when near the object and pressing grip/squeeze.
You get clear test results confirming the grab mechanic relies on proximity and grip/squeeze, not the trigger.
Grab an object in the XR scene using the IWER emulated controllers. The workflow has a required core (steps 1-5) that must always execute, and optional extensions (steps 6-9) that depend on the user's intent.
User request is in $ARGUMENTS.
These steps always execute in order. A grab cannot succeed without them.
Check session status. If not in an active XR session, accept and enter.
xr_get_session_status → if not sessionActive → xr_accept_session
Find the object by name in the scene hierarchy. Use scene_get_hierarchy and match against the name from $ARGUMENTS.
scene_get_hierarchy → find node matching the target name
If the object is not found, report the available named objects and stop.
Get the object's world position using its UUID from step 2.
scene_get_object_transform(uuid) → use positionRelativeToXROrigin
Animate the controller to the object's position. Default to "controller-right" unless the user specified left.
xr_animate_to({
device: "controller-right",
position: { x, y, z },
duration: 0.5,
})
OneHandGrabbable and TwoHandsGrabbable are proximity-based and use the squeeze/grip button (index 1), not the trigger.
xr_set_gamepad_state({
device: "controller-right",
buttons: [{ index: 1, value: 1 }],
})
The object is now grabbed. If the user only asked to grab (not move), stop here.
Apply these based on the user's request.
If the user specified a destination position, animate the controller there. If no position was given but the user asked to "move" the object, animate it to in front of the headset.
To find "in front of headset": xr_get_transform({ "device": "headset" }) → place at (head.x, head.y - 0.2, head.z - 0.5) adjusted for head orientation.
xr_animate_to({
device: "controller-right",
position: { x, y, z },
duration: 0.5,
})
Release the squeeze button to drop the object.
xr_set_gamepad_state({
device: "controller-right",
buttons: [{ index: 1, value: 0 }],
})
Animate the controller back to its resting position so it's not overlapping the dropped object.
xr_animate_to({
device: "controller-right",
position: { x: 0.2, y: 1.4, z: -0.3 },
duration: 0.5,
})
Default resting positions: right (0.2, 1.4, -0.3), left (-0.2, 1.4, -0.3).
Take a screenshot to confirm the result.
browser_screenshot
xr_set_device_state to move controllers — it teleports instead of animating, which can break grab state.xr_select or trigger (button index 0) for grabs — OneHandGrabbable/TwoHandsGrabbable respond to squeeze (button index 1).mesh.name = "MyObject" in code before createTransformEntity.Test XR session lifecycle and mode transitions to verify behavior and debug state issues.
Build, debug, and refine IWSDK PanelUI panels more efficiently.
Test multiple grab interaction modes with the iwsdk CLI.
Test XR interactions, panels, and audio behavior with the iwsdk CLI.
Debug WebXR real-time behavior frame by frame with pause, snapshots, and diffs.
Plan IWSDK features, architecture, and code patterns with best-practice guidance.
Implement physics simulation, interactions, and collision debugging in IWSDK projects.
Test slide, snap turn, teleport, and jump locomotion with iwsdk CLI.
Find and click XR target objects to verify UI interactions work correctly.
Test Havok physics behaviors with the iwsdk CLI against example scenes.
Implement depth sensing occlusion in IWSDK and troubleshoot rendering issues.
Capture any URL as a shareable image, including full-page protected pages.