[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6993PEZ751YR930CS86CKRY":3,"skill-same:01M6993PEZ751YR930CS86CKRY":77},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":46,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M6993PEZ751YR930CS86CKRY","xb-build-app",null,"Build or extend a complete XR Blocks application. Use when the request concerns an app scaffold, a whole experience, several SDK areas, or an end-to-end simulator or XR handoff rather than one focused subsystem.","google\u002Fxrblocks","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M6993A0Y0E9SVC7MR1FQ03S3",513,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-build-app\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"xb build app","build","app","build app","handoff","sdk","scaffold","use","application","end","complete","blocks","request","extend","when","2026-11-10 10:12:30",false,"---\nname: xb-build-app\ndescription: Build or extend a complete XR Blocks application. Use when the request concerns an app scaffold, a whole experience, several SDK areas, or an end-to-end simulator or XR handoff rather than one focused subsystem.\n---\n\n# Build an XR Blocks app\n\nDeliver a **handoff-ready vertical slice**: the smallest complete experience a\nuser can open, operate, and judge.\n\n## 1. Write the experience contract\n\nResolve the first visible state, primary user action, observable result, target\nsurface, headset input, desktop equivalent, permissions, assets, services, and\nunsupported states. Make reasonable spatial choices when the request leaves\nthem open.\n\nComplete this step when the slice can be stated as: “On surface S, the user\ndoes X, the app observes Y, and the experience becomes Z.”\n\n## 2. Choose one executable foundation\n\nRead [`..\u002F..\u002FCONTEXT.md`](..\u002F..\u002FCONTEXT.md). Preserve an existing application's\ndelivery model. For a new browser-module app, start from\n[`..\u002F..\u002Ftemplates\u002F00_basic\u002F`](..\u002F..\u002Ftemplates\u002F00_basic\u002F). For a bundled\nTypeScript app, start from\n[`..\u002F..\u002Ftemplates\u002F13_typescript_vite\u002F`](..\u002F..\u002Ftemplates\u002F13_typescript_vite\u002F).\nChoose a more focused template only when its feature is central.\n\nFor browser modules, read\n[`references\u002Fimport-maps.md`](references\u002Fimport-maps.md) before changing the\nimport map. Verify every XR Blocks symbol in\n[`..\u002F..\u002Fsrc\u002Fxrblocks.ts`](..\u002F..\u002Fsrc\u002Fxrblocks.ts) or an addon's public entry.\n\nComplete this step when the app has one launch command, one entry URL, and one\ndependency graph in which every bare import resolves.\n\n## 3. Build the complete slice\n\nUse the engine-owned shape:\n\n```js\nimport * as THREE from 'three';\nimport * as xb from 'xrblocks';\n\nclass MainScript extends xb.Script {\n  init() {\n    this.add(new THREE.HemisphereLight(0xffffff, 0x666666, 3));\n  }\n\n  dispose() {\n    \u002F\u002F Release resources this script owns.\n  }\n}\n\nconst options = new xb.Options();\nxb.add(new MainScript());\nawait xb.init(options);\n```\n\nRegister scripts before initialization. Use engine-created objects only in or\nafter `init()`. Put frame behavior in `update()` and release owned GPU, media,\nlistener, timer, worker, and network resources in `dispose()`.\n\nUse the focused skill when the slice needs spatial UI, interaction, world\nsensing, or AI. Use the corresponding manual as concept authority and its\nlinked template or sample as executable evidence. Addon-specific setup comes\nfrom that addon's README and public entry, not from an addon skill.\n\nComplete this step when first load, primary action, observable result, and all\nnormal unavailable states are implemented without placeholders.\n\n## 4. Prepare simulator and XR paths\n\nRead\n[`references\u002Fsimulator-and-xr-handoff.md`](references\u002Fsimulator-and-xr-handoff.md).\nKeep normal startup on `formFactor: 'auto'`. Supply an exact desktop simulator\nroute for the primary action. Declare device permissions and session features\nbefore initialization. Share app state and scene setup across simulator and XR\nrather than creating separate applications.\n\nComplete this step when each selected surface has an exact URL, entry action,\ninput instructions, expected result, and named device-only limitations.\n\n## 5. Prove and hand off the slice\n\nBuild or type-check the exact entry, run focused tests, and start the simulator\nroute when the environment permits it. Check module resolution, initialization,\nfirst render, input affordances, handler registration, cleanup, and relevant\nconsole output. Verify intended public imports against the current entry even\nwhen the build is green.\n\nReturn the launch command and URL, target surface, input steps, expected result,\nrequired permissions or services, completed checks, and remaining real-device\nchecks.\n\nFinish when every available check passes and the user can begin meaningful\ntesting without discovering setup, controls, or expected behavior from code.\n","# Build an XR Blocks app\n\nDeliver a **handoff-ready vertical slice**: the smallest complete experience a\nuser can open, operate, and judge.\n\n## 1. Write the experience contract\n\nResolve the first visible state, primary user action, observable result, target\nsurface, headset input, desktop equivalent, permissions, assets, services, and\nunsupported states. Make reasonable spatial choices when the request leaves\nthem open.\n\nComplete this step when the slice can be stated as: “On surface S, the user\ndoes X, the app observes Y, and the experience becomes Z.”\n\n## 2. Choose one executable foundation\n\nRead [`..\u002F..\u002FCONTEXT.md`](..\u002F..\u002FCONTEXT.md). Preserve an existing application's\ndelivery model. For a new browser-module app, start from\n[`..\u002F..\u002Ftemplates\u002F00_basic\u002F`](..\u002F..\u002Ftemplates\u002F00_basic\u002F). For a bundled\nTypeScript app, start from\n[`..\u002F..\u002Ftemplates\u002F13_typescript_vite\u002F`](..\u002F..\u002Ftemplates\u002F13_typescript_vite\u002F).\nChoose a more focused template only when its feature is central.\n\nFor browser modules, read\n[`references\u002Fimport-maps.md`](references\u002Fimport-maps.md) before changing the\nimport map. Verify every XR Blocks symbol in\n[`..\u002F..\u002Fsrc\u002Fxrblocks.ts`](..\u002F..\u002Fsrc\u002Fxrblocks.ts) or an addon's public entry.\n\nComplete this step when the app has one launch command, one entry URL, and one\ndependency graph in which every bare import resolves.\n\n## 3. Build the complete slice\n\nUse the engine-owned shape:\n\n```js\nimport * as THREE from 'three';\nimport * as xb from 'xrblocks';\n\nclass MainScript extends xb.Script {\n  init() {\n    this.add(new THREE.HemisphereLight(0xffffff, 0x666666, 3));\n  }\n\n  dispose() {\n    \u002F\u002F Release resources this script owns.\n  }\n}\n\nconst options = new xb.Options();\nxb.add(new MainScript());\nawait xb.init(options);\n```\n\nRegister scripts before initialization. Use engine-created objects only in or\nafter `init()`. Put frame behavior in `update()` and release owned GPU, media,\nlistener, timer, worker, and network resources in `dispose()`.\n\nUse the focused skill when the slice needs spatial UI, interaction, world\nsensing, or AI. Use the corresponding manual as concept authority and its\nlinked template or sample as executable evidence. Addon-specific setup comes\nfrom that addon's README and public entry, not from an addon skill.\n\nComplete this step when first load, primary action, observable result, and all\nnormal unavailable states are implemented without placeholders.\n\n## 4. Prepare simulator and XR paths\n\nRead\n[`references\u002Fsimulator-and-xr-handoff.md`](references\u002Fsimulator-and-xr-handoff.md).\nKeep normal startup on `formFactor: 'auto'`. Supply an exact desktop simulator\nroute for the primary action. Declare device permissions and session features\nbefore initialization. Share app state and scene setup across simulator and XR\nrather than creating separate applications.\n\nComplete this step when each selected surface has an exact URL, entry action,\ninput instructions, expected result, and named device-only limitations.\n\n## 5. Prove and hand off the slice\n\nBuild or type-check the exact entry, run focused tests, and start the simulator\nroute when the environment permits it. Check module resolution, initialization,\nfirst render, input affordances, handler registration, cleanup, and relevant\nconsole output. Verify intended public imports against the current entry even\nwhen the build is green.\n\nReturn the launch command and URL, target surface, input steps, expected result,\nrequired permissions or services, completed checks, and remaining real-device\nchecks.\n\nFinish when every available check passes and the user can begin meaningful\ntesting without discovering setup, controls, or expected behavior from code.\n",{"name":5,"description":7},"main","ab20b56560350895180bde15e2faa1ebbccb30c0","skills\u002Fxb-build-app",103,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks","https:\u002F\u002Fxrblocks.github.io","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-11 08:50:36",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add google\u002Fxrblocks --skill xb-build-app",{"tool":55,"command":56},"bunx","bunx skills add google\u002Fxrblocks --skill xb-build-app",{"tool":58,"command":59},"pnpm","pnpm dlx skills add google\u002Fxrblocks --skill xb-build-app","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-build-app\u002FSKILL.md",true,[63,69,73],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"agents\u002Fopenai.yaml","REFERENCE","参考文档",271,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-build-app\u002Fagents\u002Fopenai.yaml",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"references\u002Fimport-maps.md",1567,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-build-app\u002Freferences\u002Fimport-maps.md",{"path":74,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Fsimulator-and-xr-handoff.md",1485,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-build-app\u002Freferences\u002Fsimulator-and-xr-handoff.md",[78,104,125,150,171,195],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":89,"publishedAt":34},"01M6993TAHGHAWX3M5S320QZFA","xb-debug-app","Debug and repair XR Blocks applications. Use when an app fails to build or run, produces incorrect UI, interaction, sensing, or rendering behavior, differs between simulator and device, leaks resources, or contains obsolete SDK patterns.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-debug-app\u002FSKILL.md",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[90,91,92,21,24,93,94,95,96,26,20,97,98,99,100,101,102,103,30,33],"xb debug app","debug app","debug","run","ui","applications","behavior","device","patterns","repair","sensing","interaction","resources","rendering",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":34},"01M6993RD0VK0VPN8YYP3FNQX1","xb-contribute-sdk","Complete an XR Blocks SDK change across implementation, runtime wiring, public exports, proof, build output, examples, and canonical documentation. Use when editing the XR Blocks repository rather than an application that consumes it.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-contribute-sdk\u002FSKILL.md",[],[24,111,112,113,114,115,116,117,118,26,119,20,120,121,122,29,30,123,124,33],"xb contribute sdk","contribute","change","documentation","examples","repository","editing","public","implementation","across","runtime","proof","output","wiring",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":34},"01M6993MT5KMBBZEBYCNY4D0Y8","xb-anchors","Pin content to a real place with WebXR spatial anchors, and bring it back in a later session. Use when virtual content must stay put as the headset refines its map of the room, or when an app should remember where things were left. Covers `enableAnchors()`, `enableAnchorPersistence()`, creating and restoring anchors, the `capability` states, and the desktop fallback that lets anchor code be developed without a headset. Pair with xb-world for detecting what to anchor to.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-anchors\u002FSKILL.md",[],[132,133,134,135,136,137,138,139,140,141,142,143,21,144,145,146,147,148,149,33],"xb anchors","webxr","remember","code","virtual","pair","fallback","later","back","world","map","as","states","detecting","bring","for","things","capability",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":34},"01M6993JZJGTVKZT028WFG4E5H","xb-add-world-sensing","Connect physical-world sensing to XR Blocks application state. Use when adding planes, scene meshes, depth, occlusion, world collision evidence, object or human recognition, face tracking, segmentation, or agent-facing scene context.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-add-world-sensing\u002FSKILL.md",[],[157,141,100,158,159,160,161,162,163,26,164,27,165,166,30,167,168,169,170,33],"xb add world sensing","add","connect","state","segmentation","context","tracking","evidence","human","physical","object","occlusion","depth","face",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":180,"publishedAt":34},"01M6993H6WX2Q57A3MGNB1VMQF","xb-add-spatial-ui","Build spatial UI in XR Blocks. Use when adding cards, overlays, panels, text, controls, model-viewer interfaces, layout, styling, themes, or UI placement with the built-in UI system.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-add-spatial-ui\u002FSKILL.md",[177],{"categoryNo":178,"categoryName":179,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000032","设计师",[181,94,182,158,183,184,185,26,186,20,187,188,189,190,30,191,192,193,194,33],"xb add spatial ui","Spatial","system","text","model","styling","layout","panels","themes","controls","with","overlays","ui system","viewer",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":201,"publishedAt":34},"01M6993F57C01XXES7M8654GWD","xb-add-interactions","Design and implement XR Blocks interactions. Use when adding selection, hover, direct touch, grab, gestures, event ownership, propagation, automatic manipulation, or physics-driven object behavior.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-add-interactions\u002FSKILL.md",[],[202,158,203,204,205,206,207,96,26,208,209,210,211,30,212,213,214,167,215,33],"xb add interactions","design","gestures","implement","hover","direct","selection","physics","propagation","touch","ownership","event","grab","automatic"]