[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-meta-iwsdk-grab":3,"mdc--f5zvmd-key":40,"related-org-meta-iwsdk-grab":452,"related-repo-meta-iwsdk-grab":644},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":35,"sourceUrl":38,"mdContent":39},"iwsdk-grab","grab and move objects in WebXR scenes","Grab an object in the WebXR scene using emulated controllers. Use when the user wants to pick up, move, or test grabbing an object. Supports OneHandGrabbable and TwoHandsGrabbable components which use proximity-based grip (squeeze button), not trigger.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"meta","Meta Open Source","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmeta.png","facebook",[13,17,20,23,26],{"name":14,"slug":15,"type":16},"VR","vr","tag",{"name":18,"slug":19,"type":16},"Interaction","interaction",{"name":21,"slug":22,"type":16},"Immersive","immersive",{"name":24,"slug":25,"type":16},"AR","ar",{"name":27,"slug":28,"type":16},"WebXR","webxr",358,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fimmersive-web-sdk","2026-07-24T05:40:20.809536",null,73,[],{"repoUrl":30,"stars":29,"forks":33,"topics":36,"description":37},[],"WebXR made simple. Full-featured framework with interactions, locomotion, and spatial UI. Powered by Three.js.","https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fimmersive-web-sdk\u002Ftree\u002FHEAD\u002Fpackages\u002Fstarter-assets\u002Fclaude-injections\u002Fskills\u002Fiwsdk-grab","---\nname: iwsdk-grab\ndescription: Grab an object in the WebXR scene using emulated controllers. Use when the user wants to pick up, move, or test grabbing an object. Supports OneHandGrabbable and TwoHandsGrabbable components which use proximity-based grip (squeeze button), not trigger.\nargument-hint: \u003Cobject-name> [destination]\n---\n\n# Grab Object\n\nGrab 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.\n\nUser request is in `$ARGUMENTS`.\n\n## Required Core\n\nThese steps always execute in order. A grab cannot succeed without them.\n\n### Step 1: Enter XR\n\nCheck session status. If not in an active XR session, accept and enter.\n\n```\nxr_get_session_status → if not sessionActive → xr_accept_session\n```\n\n### Step 2: Locate the target\n\nFind the object by name in the live runtime hierarchy. Use `scene_get_runtime_hierarchy` and match against the name from `$ARGUMENTS`.\n\n```\nscene_get_runtime_hierarchy → find node matching the target name\n```\n\nIf the object is not found, report the available named objects and stop.\n\n### Step 3: Get its transform\n\nGet the object's world position using its UUID from step 2.\n\n```\nscene_get_object_transform(uuid) → use positionRelativeToXROrigin\n```\n\n### Step 4: Animate controller to target\n\nAnimate the controller to the object's position. Default to `\"controller-right\"` unless the user specified left.\n\n```\nxr_animate_to({\n  device: \"controller-right\",\n  position: { x, y, z },\n  duration: 0.5,\n})\n```\n\n### Step 5: Engage grip\n\nOneHandGrabbable and TwoHandsGrabbable are proximity-based and use the **squeeze\u002Fgrip button (index 1)**, not the trigger.\n\n```\nxr_set_gamepad_state({\n  device: \"controller-right\",\n  buttons: [{ index: 1, value: 1 }],\n})\n```\n\nThe object is now grabbed. If the user only asked to grab (not move), stop here.\n\n## Optional Extensions\n\nApply these based on the user's request.\n\n### Step 6: Move to destination\n\nIf 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.\n\nTo 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.\n\n```\nxr_animate_to({\n  device: \"controller-right\",\n  position: { x, y, z },\n  duration: 0.5,\n})\n```\n\n### Step 7: Release grip\n\nRelease the squeeze button to drop the object.\n\n```\nxr_set_gamepad_state({\n  device: \"controller-right\",\n  buttons: [{ index: 1, value: 0 }],\n})\n```\n\n### Step 8: Return controller\n\nAnimate the controller back to its resting position so it's not overlapping the dropped object.\n\n```\nxr_animate_to({\n  device: \"controller-right\",\n  position: { x: 0.2, y: 1.4, z: -0.3 },\n  duration: 0.5,\n})\n```\n\nDefault resting positions: right `(0.2, 1.4, -0.3)`, left `(-0.2, 1.4, -0.3)`.\n\n### Step 9: Verify\n\nTake a screenshot to confirm the result.\n\n```\nbrowser_screenshot\n```\n\n## Notes\n\n- **Never use `xr_set_device_state` to move controllers** — it teleports instead of animating, which can break grab state.\n- **Never use `xr_select` or trigger (button index 0) for grabs** — OneHandGrabbable\u002FTwoHandsGrabbable respond to squeeze (button index 1).\n- **DistanceGrabbable is different** — it uses ray-based selection, not proximity. This skill does not cover DistanceGrabbable.\n- If the object lacks a name in the hierarchy, suggest adding `mesh.name = \"MyObject\"` in code before `createTransformEntity`.\n",{"data":41,"body":43},{"name":4,"description":6,"argument-hint":42},"\u003Cobject-name> [destination]",{"type":44,"children":45},"root",[46,55,76,90,97,102,109,114,126,132,151,160,165,171,176,185,191,204,213,219,231,240,245,251,256,262,267,288,296,302,307,316,322,327,336,356,362,367,376,382],{"type":47,"tag":48,"props":49,"children":51},"element","h1",{"id":50},"grab-object",[52],{"type":53,"value":54},"text","Grab Object",{"type":47,"tag":56,"props":57,"children":58},"p",{},[59,61,67,69,74],{"type":53,"value":60},"Grab an object in the XR scene using the IWER emulated controllers. The workflow has a ",{"type":47,"tag":62,"props":63,"children":64},"strong",{},[65],{"type":53,"value":66},"required core",{"type":53,"value":68}," (steps 1-5) that must always execute, and ",{"type":47,"tag":62,"props":70,"children":71},{},[72],{"type":53,"value":73},"optional extensions",{"type":53,"value":75}," (steps 6-9) that depend on the user's intent.",{"type":47,"tag":56,"props":77,"children":78},{},[79,81,88],{"type":53,"value":80},"User request is in ",{"type":47,"tag":82,"props":83,"children":85},"code",{"className":84},[],[86],{"type":53,"value":87},"$ARGUMENTS",{"type":53,"value":89},".",{"type":47,"tag":91,"props":92,"children":94},"h2",{"id":93},"required-core",[95],{"type":53,"value":96},"Required Core",{"type":47,"tag":56,"props":98,"children":99},{},[100],{"type":53,"value":101},"These steps always execute in order. A grab cannot succeed without them.",{"type":47,"tag":103,"props":104,"children":106},"h3",{"id":105},"step-1-enter-xr",[107],{"type":53,"value":108},"Step 1: Enter XR",{"type":47,"tag":56,"props":110,"children":111},{},[112],{"type":53,"value":113},"Check session status. If not in an active XR session, accept and enter.",{"type":47,"tag":115,"props":116,"children":120},"pre",{"className":117,"code":119,"language":53},[118],"language-text","xr_get_session_status → if not sessionActive → xr_accept_session\n",[121],{"type":47,"tag":82,"props":122,"children":124},{"__ignoreMap":123},"",[125],{"type":53,"value":119},{"type":47,"tag":103,"props":127,"children":129},{"id":128},"step-2-locate-the-target",[130],{"type":53,"value":131},"Step 2: Locate the target",{"type":47,"tag":56,"props":133,"children":134},{},[135,137,143,145,150],{"type":53,"value":136},"Find the object by name in the live runtime hierarchy. Use ",{"type":47,"tag":82,"props":138,"children":140},{"className":139},[],[141],{"type":53,"value":142},"scene_get_runtime_hierarchy",{"type":53,"value":144}," and match against the name from ",{"type":47,"tag":82,"props":146,"children":148},{"className":147},[],[149],{"type":53,"value":87},{"type":53,"value":89},{"type":47,"tag":115,"props":152,"children":155},{"className":153,"code":154,"language":53},[118],"scene_get_runtime_hierarchy → find node matching the target name\n",[156],{"type":47,"tag":82,"props":157,"children":158},{"__ignoreMap":123},[159],{"type":53,"value":154},{"type":47,"tag":56,"props":161,"children":162},{},[163],{"type":53,"value":164},"If the object is not found, report the available named objects and stop.",{"type":47,"tag":103,"props":166,"children":168},{"id":167},"step-3-get-its-transform",[169],{"type":53,"value":170},"Step 3: Get its transform",{"type":47,"tag":56,"props":172,"children":173},{},[174],{"type":53,"value":175},"Get the object's world position using its UUID from step 2.",{"type":47,"tag":115,"props":177,"children":180},{"className":178,"code":179,"language":53},[118],"scene_get_object_transform(uuid) → use positionRelativeToXROrigin\n",[181],{"type":47,"tag":82,"props":182,"children":183},{"__ignoreMap":123},[184],{"type":53,"value":179},{"type":47,"tag":103,"props":186,"children":188},{"id":187},"step-4-animate-controller-to-target",[189],{"type":53,"value":190},"Step 4: Animate controller to target",{"type":47,"tag":56,"props":192,"children":193},{},[194,196,202],{"type":53,"value":195},"Animate the controller to the object's position. Default to ",{"type":47,"tag":82,"props":197,"children":199},{"className":198},[],[200],{"type":53,"value":201},"\"controller-right\"",{"type":53,"value":203}," unless the user specified left.",{"type":47,"tag":115,"props":205,"children":208},{"className":206,"code":207,"language":53},[118],"xr_animate_to({\n  device: \"controller-right\",\n  position: { x, y, z },\n  duration: 0.5,\n})\n",[209],{"type":47,"tag":82,"props":210,"children":211},{"__ignoreMap":123},[212],{"type":53,"value":207},{"type":47,"tag":103,"props":214,"children":216},{"id":215},"step-5-engage-grip",[217],{"type":53,"value":218},"Step 5: Engage grip",{"type":47,"tag":56,"props":220,"children":221},{},[222,224,229],{"type":53,"value":223},"OneHandGrabbable and TwoHandsGrabbable are proximity-based and use the ",{"type":47,"tag":62,"props":225,"children":226},{},[227],{"type":53,"value":228},"squeeze\u002Fgrip button (index 1)",{"type":53,"value":230},", not the trigger.",{"type":47,"tag":115,"props":232,"children":235},{"className":233,"code":234,"language":53},[118],"xr_set_gamepad_state({\n  device: \"controller-right\",\n  buttons: [{ index: 1, value: 1 }],\n})\n",[236],{"type":47,"tag":82,"props":237,"children":238},{"__ignoreMap":123},[239],{"type":53,"value":234},{"type":47,"tag":56,"props":241,"children":242},{},[243],{"type":53,"value":244},"The object is now grabbed. If the user only asked to grab (not move), stop here.",{"type":47,"tag":91,"props":246,"children":248},{"id":247},"optional-extensions",[249],{"type":53,"value":250},"Optional Extensions",{"type":47,"tag":56,"props":252,"children":253},{},[254],{"type":53,"value":255},"Apply these based on the user's request.",{"type":47,"tag":103,"props":257,"children":259},{"id":258},"step-6-move-to-destination",[260],{"type":53,"value":261},"Step 6: Move to destination",{"type":47,"tag":56,"props":263,"children":264},{},[265],{"type":53,"value":266},"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.",{"type":47,"tag":56,"props":268,"children":269},{},[270,272,278,280,286],{"type":53,"value":271},"To find \"in front of headset\": ",{"type":47,"tag":82,"props":273,"children":275},{"className":274},[],[276],{"type":53,"value":277},"xr_get_transform({ \"device\": \"headset\" })",{"type":53,"value":279}," → place at ",{"type":47,"tag":82,"props":281,"children":283},{"className":282},[],[284],{"type":53,"value":285},"(head.x, head.y - 0.2, head.z - 0.5)",{"type":53,"value":287}," adjusted for head orientation.",{"type":47,"tag":115,"props":289,"children":291},{"className":290,"code":207,"language":53},[118],[292],{"type":47,"tag":82,"props":293,"children":294},{"__ignoreMap":123},[295],{"type":53,"value":207},{"type":47,"tag":103,"props":297,"children":299},{"id":298},"step-7-release-grip",[300],{"type":53,"value":301},"Step 7: Release grip",{"type":47,"tag":56,"props":303,"children":304},{},[305],{"type":53,"value":306},"Release the squeeze button to drop the object.",{"type":47,"tag":115,"props":308,"children":311},{"className":309,"code":310,"language":53},[118],"xr_set_gamepad_state({\n  device: \"controller-right\",\n  buttons: [{ index: 1, value: 0 }],\n})\n",[312],{"type":47,"tag":82,"props":313,"children":314},{"__ignoreMap":123},[315],{"type":53,"value":310},{"type":47,"tag":103,"props":317,"children":319},{"id":318},"step-8-return-controller",[320],{"type":53,"value":321},"Step 8: Return controller",{"type":47,"tag":56,"props":323,"children":324},{},[325],{"type":53,"value":326},"Animate the controller back to its resting position so it's not overlapping the dropped object.",{"type":47,"tag":115,"props":328,"children":331},{"className":329,"code":330,"language":53},[118],"xr_animate_to({\n  device: \"controller-right\",\n  position: { x: 0.2, y: 1.4, z: -0.3 },\n  duration: 0.5,\n})\n",[332],{"type":47,"tag":82,"props":333,"children":334},{"__ignoreMap":123},[335],{"type":53,"value":330},{"type":47,"tag":56,"props":337,"children":338},{},[339,341,347,349,355],{"type":53,"value":340},"Default resting positions: right ",{"type":47,"tag":82,"props":342,"children":344},{"className":343},[],[345],{"type":53,"value":346},"(0.2, 1.4, -0.3)",{"type":53,"value":348},", left ",{"type":47,"tag":82,"props":350,"children":352},{"className":351},[],[353],{"type":53,"value":354},"(-0.2, 1.4, -0.3)",{"type":53,"value":89},{"type":47,"tag":103,"props":357,"children":359},{"id":358},"step-9-verify",[360],{"type":53,"value":361},"Step 9: Verify",{"type":47,"tag":56,"props":363,"children":364},{},[365],{"type":53,"value":366},"Take a screenshot to confirm the result.",{"type":47,"tag":115,"props":368,"children":371},{"className":369,"code":370,"language":53},[118],"browser_screenshot\n",[372],{"type":47,"tag":82,"props":373,"children":374},{"__ignoreMap":123},[375],{"type":53,"value":370},{"type":47,"tag":91,"props":377,"children":379},{"id":378},"notes",[380],{"type":53,"value":381},"Notes",{"type":47,"tag":383,"props":384,"children":385},"ul",{},[386,405,422,432],{"type":47,"tag":387,"props":388,"children":389},"li",{},[390,403],{"type":47,"tag":62,"props":391,"children":392},{},[393,395,401],{"type":53,"value":394},"Never use ",{"type":47,"tag":82,"props":396,"children":398},{"className":397},[],[399],{"type":53,"value":400},"xr_set_device_state",{"type":53,"value":402}," to move controllers",{"type":53,"value":404}," — it teleports instead of animating, which can break grab state.",{"type":47,"tag":387,"props":406,"children":407},{},[408,420],{"type":47,"tag":62,"props":409,"children":410},{},[411,412,418],{"type":53,"value":394},{"type":47,"tag":82,"props":413,"children":415},{"className":414},[],[416],{"type":53,"value":417},"xr_select",{"type":53,"value":419}," or trigger (button index 0) for grabs",{"type":53,"value":421}," — OneHandGrabbable\u002FTwoHandsGrabbable respond to squeeze (button index 1).",{"type":47,"tag":387,"props":423,"children":424},{},[425,430],{"type":47,"tag":62,"props":426,"children":427},{},[428],{"type":53,"value":429},"DistanceGrabbable is different",{"type":53,"value":431}," — it uses ray-based selection, not proximity. This skill does not cover DistanceGrabbable.",{"type":47,"tag":387,"props":433,"children":434},{},[435,437,443,445,451],{"type":53,"value":436},"If the object lacks a name in the hierarchy, suggest adding ",{"type":47,"tag":82,"props":438,"children":440},{"className":439},[],[441],{"type":53,"value":442},"mesh.name = \"MyObject\"",{"type":53,"value":444}," in code before ",{"type":47,"tag":82,"props":446,"children":448},{"className":447},[],[449],{"type":53,"value":450},"createTransformEntity",{"type":53,"value":89},{"items":453,"total":643},[454,478,492,513,534,551,562,580,593,608,620,630],{"slug":455,"name":455,"fn":456,"description":457,"org":458,"tags":459,"stars":475,"repoUrl":476,"updatedAt":477},"relay-best-practices","write idiomatic Relay code","Best practices for writing idiomatic Relay code. ALWAYS use this skill when writing or modifying React components that use Relay for data fetching. Covers fragments, queries, mutations, pagination, and common anti-patterns. Use when you see `useFragment`, `useLazyLoadQuery`, `usePreloadedQuery`, `useMutation`, `usePaginationFragment`, `graphql` template literals, `react-relay` imports, or `__generated__\u002F*.graphql` files. Also use when asked to explain Relay concepts, debug Relay issues, or review Relay code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[460,463,466,469,472],{"name":461,"slug":462,"type":16},"Engineering","engineering",{"name":464,"slug":465,"type":16},"Frontend","frontend",{"name":467,"slug":468,"type":16},"GraphQL","graphql",{"name":470,"slug":471,"type":16},"React","react",{"name":473,"slug":474,"type":16},"Relay","relay",18950,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Frelay","2026-04-22T04:58:15.370563",{"slug":479,"name":479,"fn":480,"description":481,"org":482,"tags":483,"stars":475,"repoUrl":476,"updatedAt":491},"relay-performance","optimize Relay application performance","Performance best practices for Relay applications. Use when optimizing data fetching, reducing re-renders, configuring caching, or improving time to first meaningful paint. Covers query placement, @defer, pagination, fetch policies, garbage collection, fragment granularity, and server-side filtering. Companion to the relay-best-practices skill which covers correctness and architecture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[484,485,486,489,490],{"name":464,"slug":465,"type":16},{"name":467,"slug":468,"type":16},{"name":487,"slug":488,"type":16},"Performance","performance",{"name":470,"slug":471,"type":16},{"name":473,"slug":474,"type":16},"2026-06-10T07:30:28.726513",{"slug":493,"name":493,"fn":494,"description":495,"org":496,"tags":497,"stars":510,"repoUrl":511,"updatedAt":512},"add-shape-types-to-torch-model","annotate PyTorch models with tensor shapes","Port a PyTorch model to use pyrefly's tensor shape type system (Tensor[[B, C, H, W]], Int[T]). Use this skill whenever the user wants to add shape annotations to a PyTorch model, type a model with tensor dimensions, port a model to use shape tracking, or annotate model forward methods with tensor shapes. Also use when the user mentions tensor shape ports, Int types for PyTorch, or pyrefly shape checking on a model file. Invoke BEFORE starting any model port — the skill's gated workflow prevents common failure modes.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[498,501,504,507],{"name":499,"slug":500,"type":16},"Data Modeling","data-modeling",{"name":502,"slug":503,"type":16},"Deep Learning","deep-learning",{"name":505,"slug":506,"type":16},"Python","python",{"name":508,"slug":509,"type":16},"PyTorch","pytorch",6833,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fpyrefly","2026-07-18T05:12:08.515952",{"slug":514,"name":514,"fn":515,"description":516,"org":517,"tags":518,"stars":531,"repoUrl":532,"updatedAt":533},"camera-streaming","configure camera streaming and photo capture","Stream, video frames, photo capture, resolution\u002Fframe rate configuration",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[519,522,525,528],{"name":520,"slug":521,"type":16},"Camera","camera",{"name":523,"slug":524,"type":16},"Hardware","hardware",{"name":526,"slug":527,"type":16},"iOS","ios",{"name":529,"slug":530,"type":16},"Video","video",488,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fmeta-wearables-dat-ios","2026-05-15T06:14:43.555881",{"slug":535,"name":535,"fn":536,"description":537,"org":538,"tags":539,"stars":531,"repoUrl":532,"updatedAt":550},"dat-conventions","develop iOS applications with DAT SDK","Swift patterns, async\u002Fawait, naming conventions, key types for DAT SDK iOS development",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[540,541,544,547],{"name":526,"slug":527,"type":16},{"name":542,"slug":543,"type":16},"Mobile","mobile",{"name":545,"slug":546,"type":16},"SDK","sdk",{"name":548,"slug":549,"type":16},"Swift","swift","2026-05-15T06:14:42.334435",{"slug":552,"name":552,"fn":553,"description":554,"org":555,"tags":556,"stars":531,"repoUrl":532,"updatedAt":561},"debugging","debug wearable device software","Common issues, Developer Mode, version compatibility, state machine diagnosis",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[557,559,560],{"name":558,"slug":552,"type":16},"Debugging",{"name":461,"slug":462,"type":16},{"name":526,"slug":527,"type":16},"2026-05-15T06:14:38.626606",{"slug":563,"name":563,"fn":564,"description":565,"org":566,"tags":567,"stars":531,"repoUrl":532,"updatedAt":579},"display-access","manage display capabilities on wearable devices","Display capability setup, display-capable device selection, UI DSL, icons, buttons, images, and video playback",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[568,571,574,575,578],{"name":569,"slug":570,"type":16},"Design","design",{"name":572,"slug":573,"type":16},"Images","images",{"name":18,"slug":19,"type":16},{"name":576,"slug":577,"type":16},"UI Components","ui-components",{"name":529,"slug":530,"type":16},"2026-05-15T06:14:39.844502",{"slug":581,"name":581,"fn":582,"description":583,"org":584,"tags":585,"stars":531,"repoUrl":532,"updatedAt":592},"getting-started","set up Meta wearable SDK integration","SDK setup, Swift Package Manager integration, Info.plist configuration, and first connection to Meta glasses",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[586,589,590,591],{"name":587,"slug":588,"type":16},"Configuration","configuration",{"name":526,"slug":527,"type":16},{"name":545,"slug":546,"type":16},{"name":548,"slug":549,"type":16},"2026-05-15T06:14:41.086639",{"slug":594,"name":594,"fn":595,"description":596,"org":597,"tags":598,"stars":531,"repoUrl":532,"updatedAt":607},"mockdevice-testing","test wearable apps with mock devices","MockDeviceKit for testing without physical glasses hardware",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[599,600,601,604],{"name":526,"slug":527,"type":16},{"name":542,"slug":543,"type":16},{"name":602,"slug":603,"type":16},"QA","qa",{"name":605,"slug":606,"type":16},"Testing","testing","2026-05-15T06:14:37.406692",{"slug":609,"name":609,"fn":610,"description":611,"org":612,"tags":613,"stars":531,"repoUrl":532,"updatedAt":619},"permissions-registration","register apps with Meta AI","App registration with Meta AI, camera permission flows",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[614,615,616],{"name":520,"slug":521,"type":16},{"name":526,"slug":527,"type":16},{"name":617,"slug":618,"type":16},"Permissions","permissions","2026-05-15T06:14:46.030253",{"slug":621,"name":621,"fn":622,"description":623,"org":624,"tags":625,"stars":531,"repoUrl":532,"updatedAt":629},"sample-app-guide","build wearable apps with camera streaming","Building a complete DAT app with camera streaming and photo capture",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[626,627,628],{"name":520,"slug":521,"type":16},{"name":526,"slug":527,"type":16},{"name":542,"slug":543,"type":16},"2026-05-15T06:14:36.185947",{"slug":631,"name":631,"fn":632,"description":633,"org":634,"tags":635,"stars":531,"repoUrl":532,"updatedAt":642},"session-lifecycle","monitor device session lifecycle states","Device session states, pause\u002Fresume, availability monitoring",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[636,637,638,641],{"name":526,"slug":527,"type":16},{"name":542,"slug":543,"type":16},{"name":639,"slug":640,"type":16},"Monitoring","monitoring",{"name":487,"slug":488,"type":16},"2026-05-15T06:14:44.790925",27,{"items":645,"total":733},[646,660,671,679,693,709,721],{"slug":647,"name":647,"fn":648,"description":649,"org":650,"tags":651,"stars":29,"repoUrl":30,"updatedAt":659},"iwsdk-debug","debug continuous behavior in WebXR","Debug continuous behavior in WebXR scenes — physics, animations, collisions, game loops, or any real-time interaction that happens too fast for an agent to observe. Uses ECS pause\u002Fstep\u002Fsnapshot\u002Fdiff to freeze time and inspect state frame by frame.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[652,653,654,655,658],{"name":558,"slug":552,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":656,"slug":657,"type":16},"IWSDK","iwsdk",{"name":27,"slug":28,"type":16},"2026-04-06T18:11:37.886889",{"slug":661,"name":661,"fn":662,"description":663,"org":664,"tags":665,"stars":29,"repoUrl":30,"updatedAt":670},"iwsdk-depth-occlusion","implement depth sensing and occlusion in IWSDK","Guide for implementing depth sensing and occlusion in IWSDK projects. Use when adding depth-based occlusion to hide virtual objects behind real-world surfaces, configuring DepthSensingSystem, choosing occlusion modes, or troubleshooting objects that disappear or fail to occlude.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[666,667,668,669],{"name":24,"slug":25,"type":16},{"name":656,"slug":657,"type":16},{"name":14,"slug":15,"type":16},{"name":27,"slug":28,"type":16},"2026-07-21T05:39:07.241041",{"slug":4,"name":4,"fn":5,"description":6,"org":672,"tags":673,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[674,675,676,677,678],{"name":24,"slug":25,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":27,"slug":28,"type":16},{"slug":680,"name":680,"fn":681,"description":682,"org":683,"tags":684,"stars":29,"repoUrl":30,"updatedAt":692},"iwsdk-physics","implement physics in IWSDK projects","Guide for implementing physics in IWSDK projects. Use when adding physics simulation, configuring rigid bodies, collision shapes, applying forces, creating grabbable physics objects, or troubleshooting physics behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[685,686,687,688,691],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":656,"slug":657,"type":16},{"name":689,"slug":690,"type":16},"Physics","physics",{"name":27,"slug":28,"type":16},"2026-07-24T05:40:22.854101",{"slug":694,"name":694,"fn":695,"description":696,"org":697,"tags":698,"stars":29,"repoUrl":30,"updatedAt":708},"iwsdk-planner","plan IWSDK projects and architecture","IWSDK experience pipeline and planning guide. Use when building a new IWSDK app\u002Fgame end-to-end, planning new IWSDK features, designing systems\u002Fcomponents, reviewing IWSDK code architecture, or when the user asks about IWSDK patterns, ECS design, signals, or reactive programming. Runs a phased ideation → design → grounding → architecture → build → verify → ship pipeline, orchestrating sub-agents per phase where the harness supports them.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[699,702,703,704,707],{"name":700,"slug":701,"type":16},"Architecture","architecture",{"name":21,"slug":22,"type":16},{"name":656,"slug":657,"type":16},{"name":705,"slug":706,"type":16},"Strategy","strategy",{"name":27,"slug":28,"type":16},"2026-07-24T05:40:21.856049",{"slug":710,"name":710,"fn":711,"description":712,"org":713,"tags":714,"stars":29,"repoUrl":30,"updatedAt":720},"iwsdk-ray","implement ray-based interactions in WebXR","Ray-based interactions in the WebXR scene — click objects, press UI buttons, or distance-grab with DistanceGrabbable. Use when the user wants to point at and interact with something at a distance, click a UI button, or test ray-based selection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[715,716,717,718,719],{"name":24,"slug":25,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":27,"slug":28,"type":16},"2026-07-24T05:40:19.841604",{"slug":722,"name":722,"fn":723,"description":724,"org":725,"tags":726,"stars":29,"repoUrl":30,"updatedAt":732},"iwsdk-ui","develop IWSDK PanelUI components","Develop and iterate on IWSDK PanelUI components. Use when the user wants to create, modify, debug, or improve UI panels in their IWSDK application. Covers UIKITML editing, full-screen preview with ScreenSpace, and visual verification.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[727,728,729,730,731],{"name":464,"slug":465,"type":16},{"name":21,"slug":22,"type":16},{"name":656,"slug":657,"type":16},{"name":576,"slug":577,"type":16},{"name":27,"slug":28,"type":16},"2026-04-06T18:11:34.083706",7]