[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6993CEN5KVVBKM3680C3YKT":3,"skill-same:01M6993CEN5KVVBKM3680C3YKT":82},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6993CEN5KVVBKM3680C3YKT","xb-add-ai",null,"Add AI behavior to an XR Blocks application. Use when implementing Gemini or OpenAI queries, Gemini Live voice or vision, generated images, scene-grounded responses, or model-requested tools with an observable XR outcome.","google\u002Fxrblocks","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M6993A0Y0E9SVC7MR1FQ03S3",516,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-add-ai\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"xb add ai","add","when","gemini","implementing","with","blocks","live","application","queries","images","vision","use","outcome","generated","behavior","model","voice","Tools","openai","2026-11-10 10:12:30",false,"---\nname: xb-add-ai\ndescription: Add AI behavior to an XR Blocks application. Use when implementing Gemini or OpenAI queries, Gemini Live voice or vision, generated images, scene-grounded responses, or model-requested tools with an observable XR outcome.\n---\n\n# Add AI behavior\n\nBuild complete **AI behavior**: intentional input, provider, validated response,\nobservable result, and owned cleanup.\n\n## 1. Write the AI contract\n\nName the input, provider branch, response modality, application consumer, data\nsent off-device, user disclosure, concurrency rule, and visible waiting,\nunavailable, empty, disconnected, and error states. Treat prompts, microphone,\ncamera, screenshots, and scene context as separate disclosures.\n\nComplete this step when success changes scene, UI, speech, or an asset and each\ndisclosed input is necessary for that result.\n\n## 2. Prove the provider path\n\nRead [`..\u002F..\u002Fdocs\u002Fdocs\u002Fmanual\u002FAI.mdx`](..\u002F..\u002Fdocs\u002Fdocs\u002Fmanual\u002FAI.mdx) and\n[`references\u002Fcurrent-api.md`](references\u002Fcurrent-api.md). Verify planned symbols\nin [`..\u002F..\u002Fsrc\u002Fxrblocks.ts`](..\u002F..\u002Fsrc\u002Fxrblocks.ts),\n[`..\u002F..\u002Fsrc\u002Fai\u002FAI.ts`](..\u002F..\u002Fsrc\u002Fai\u002FAI.ts), and the selected provider. For Live,\ntools, camera, or context grounding, also read\n[`references\u002Flive-tools-grounding.md`](references\u002Flive-tools-grounding.md).\n\nUse [`..\u002F..\u002Ftemplates\u002F06_ai_query\u002F`](..\u002F..\u002Ftemplates\u002F06_ai_query\u002F) for bounded\nqueries and\n[`..\u002F..\u002Ftemplates\u002F07_ai_live_assistant\u002F`](..\u002F..\u002Ftemplates\u002F07_ai_live_assistant\u002F)\nfor the common Live loop.\n\nComplete this step when every symbol is public and the selected provider\nsupports every required operation and modality.\n\n## 3. Select one primary branch\n\n- Use `xb.ai.query({prompt})` for a bounded provider-neutral text request.\n- Use Gemini multipart input when a bounded request needs an image or typed\n  parts.\n- Use Gemini Live for an ongoing audio or video conversation.\n- Use `xb.ai.generate()` when the image result becomes an actual app asset.\n- Use a narrow `xb.Tool` when the model requests a validated application\n  action.\n\nComplete this step when latency, modality, provider support, data disclosure,\nand resource ownership match the contract.\n\n## 4. Implement the complete behavior\n\nConfigure and enable the selected provider before initialization. Check\navailability at use time, catch provider failures, and prevent unintended\nconcurrent starts. Accept missing text, `null`, rejected requests,\ninterruption, and disconnection as normal observable states.\n\nFor Live, register callbacks before connecting, make readiness depend on\n`onopen`, use provider-typed nested realtime inputs, and route remote close,\nlocal stop, error, and disposal through one idempotent cleanup owner. Stop the\nLive session, microphone, playback, frame timers, and app-owned tracks.\n\nValidate tool arguments again at execution and resolve targets through an\nallowlist or current scene context. Keep consequential actions behind\napplication authorization or confirmation.\n\nComplete this step when one intentional input reaches its consumer, duplicate\nstarts are controlled, every failure is visible, and every acquired resource\nhas one cleanup owner.\n\n## 5. Prove and hand off provider behavior\n\nBuild or type-check the app and run startup smoke that does not require a long\nconversation. Check configuration, availability guards, request and response\ntypes, visible states, tool validation, disclosures, and cleanup. Use existing\nsafe prototype credentials only for one narrow connectivity check.\n\nGive the user the trigger, required credentials and permissions, data sent\noff-device, waiting\u002Fsuccess\u002Ferror states, and recovery steps. For Live, include\nopen, interruption, remote close, local stop, and restart. For tools, include\nvalid, invalid, unknown, denied, and failed outcomes.\n\nFinish when the user can evaluate real provider behavior without discovering\nsetup, disclosure, expected states, or cleanup from source.\n","# Add AI behavior\n\nBuild complete **AI behavior**: intentional input, provider, validated response,\nobservable result, and owned cleanup.\n\n## 1. Write the AI contract\n\nName the input, provider branch, response modality, application consumer, data\nsent off-device, user disclosure, concurrency rule, and visible waiting,\nunavailable, empty, disconnected, and error states. Treat prompts, microphone,\ncamera, screenshots, and scene context as separate disclosures.\n\nComplete this step when success changes scene, UI, speech, or an asset and each\ndisclosed input is necessary for that result.\n\n## 2. Prove the provider path\n\nRead [`..\u002F..\u002Fdocs\u002Fdocs\u002Fmanual\u002FAI.mdx`](..\u002F..\u002Fdocs\u002Fdocs\u002Fmanual\u002FAI.mdx) and\n[`references\u002Fcurrent-api.md`](references\u002Fcurrent-api.md). Verify planned symbols\nin [`..\u002F..\u002Fsrc\u002Fxrblocks.ts`](..\u002F..\u002Fsrc\u002Fxrblocks.ts),\n[`..\u002F..\u002Fsrc\u002Fai\u002FAI.ts`](..\u002F..\u002Fsrc\u002Fai\u002FAI.ts), and the selected provider. For Live,\ntools, camera, or context grounding, also read\n[`references\u002Flive-tools-grounding.md`](references\u002Flive-tools-grounding.md).\n\nUse [`..\u002F..\u002Ftemplates\u002F06_ai_query\u002F`](..\u002F..\u002Ftemplates\u002F06_ai_query\u002F) for bounded\nqueries and\n[`..\u002F..\u002Ftemplates\u002F07_ai_live_assistant\u002F`](..\u002F..\u002Ftemplates\u002F07_ai_live_assistant\u002F)\nfor the common Live loop.\n\nComplete this step when every symbol is public and the selected provider\nsupports every required operation and modality.\n\n## 3. Select one primary branch\n\n- Use `xb.ai.query({prompt})` for a bounded provider-neutral text request.\n- Use Gemini multipart input when a bounded request needs an image or typed\n  parts.\n- Use Gemini Live for an ongoing audio or video conversation.\n- Use `xb.ai.generate()` when the image result becomes an actual app asset.\n- Use a narrow `xb.Tool` when the model requests a validated application\n  action.\n\nComplete this step when latency, modality, provider support, data disclosure,\nand resource ownership match the contract.\n\n## 4. Implement the complete behavior\n\nConfigure and enable the selected provider before initialization. Check\navailability at use time, catch provider failures, and prevent unintended\nconcurrent starts. Accept missing text, `null`, rejected requests,\ninterruption, and disconnection as normal observable states.\n\nFor Live, register callbacks before connecting, make readiness depend on\n`onopen`, use provider-typed nested realtime inputs, and route remote close,\nlocal stop, error, and disposal through one idempotent cleanup owner. Stop the\nLive session, microphone, playback, frame timers, and app-owned tracks.\n\nValidate tool arguments again at execution and resolve targets through an\nallowlist or current scene context. Keep consequential actions behind\napplication authorization or confirmation.\n\nComplete this step when one intentional input reaches its consumer, duplicate\nstarts are controlled, every failure is visible, and every acquired resource\nhas one cleanup owner.\n\n## 5. Prove and hand off provider behavior\n\nBuild or type-check the app and run startup smoke that does not require a long\nconversation. Check configuration, availability guards, request and response\ntypes, visible states, tool validation, disclosures, and cleanup. Use existing\nsafe prototype credentials only for one narrow connectivity check.\n\nGive the user the trigger, required credentials and permissions, data sent\noff-device, waiting\u002Fsuccess\u002Ferror states, and recovery steps. For Live, include\nopen, interruption, remote close, local stop, and restart. For tools, include\nvalid, invalid, unknown, denied, and failed outcomes.\n\nFinish when the user can evaluate real provider behavior without discovering\nsetup, disclosure, expected states, or cleanup from source.\n",{"name":5,"description":7},"main","ab20b56560350895180bde15e2faa1ebbccb30c0","skills\u002Fxb-add-ai",104,"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-13 09:29:50",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add google\u002Fxrblocks --skill xb-add-ai",{"tool":60,"command":61},"bunx","bunx skills add google\u002Fxrblocks --skill xb-add-ai",{"tool":63,"command":64},"pnpm","pnpm dlx skills add google\u002Fxrblocks --skill xb-add-ai","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-add-ai\u002FSKILL.md",true,[68,74,78],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"agents\u002Fopenai.yaml","REFERENCE","参考文档",276,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-add-ai\u002Fagents\u002Fopenai.yaml",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fcurrent-api.md",2180,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-add-ai\u002Freferences\u002Fcurrent-api.md",{"path":79,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Flive-tools-grounding.md",2821,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-add-ai\u002Freferences\u002Flive-tools-grounding.md",[83,111,133,147,172,192],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":94,"publishedAt":39},"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",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[95,96,97,98,99,100,101,102,34,31,103,104,105,106,107,108,109,110,25,21],"xb debug app","debug app","debug","app","sdk","run","ui","applications","build","device","patterns","repair","sensing","interaction","resources","rendering",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":39},"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",[],[99,118,119,120,121,122,123,124,125,31,126,103,127,128,129,130,25,131,132,21],"xb contribute sdk","contribute","change","documentation","examples","repository","editing","public","implementation","across","runtime","proof","complete","output","wiring",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":39},"01M6993PEZ751YR930CS86CKRY","xb-build-app","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.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fxrblocks\u002Fblob\u002Fmain\u002Fskills\u002Fxb-build-app\u002FSKILL.md",[],[140,103,98,141,142,99,143,31,27,144,130,25,145,146,21],"xb build app","build app","handoff","scaffold","end","request","extend",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":39},"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",[],[154,155,156,157,158,159,160,161,162,163,164,165,98,166,167,168,169,170,171,21],"xb anchors","webxr","remember","code","virtual","pair","fallback","later","back","world","map","as","states","detecting","bring","for","things","capability",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":39},"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",[],[179,163,107,20,180,181,182,183,184,31,185,27,186,187,25,188,189,190,191,21],"xb add world sensing","connect","state","segmentation","context","tracking","evidence","human","physical","object","occlusion","depth","face",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":201,"publishedAt":39},"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",[198],{"categoryNo":199,"categoryName":200,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000032","设计师",[202,101,203,20,204,205,35,31,206,103,207,208,209,210,25,24,211,212,213,21],"xb add spatial ui","Spatial","system","text","styling","layout","panels","themes","controls","overlays","ui system","viewer"]