agentleFS
mirzaaghazadehmirzaaghazadeh/iwsdk-webxr-skills/skills/custom/iwsdk-dev-workflow/SKILL.md

iwsdk-dev-workflow

Skill1 starsChanged 29 days agoMITView on GitHub

Start-here map for making a WebXR game or app with Meta's Immersive Web SDK (IWSDK) and Claude Code, testing it on Meta Quest, getting it ready for Meta VR Glasses (eyes and hands, no controllers), and shipping it on the Meta Horizon Store as a PWA. Gives the end-to-end order (plan, set up, build, test in the IWER emulator, test on the headset, optimise, host and package, VRC audit, store listing, upload, submit), names the skill that handles each step, points to IWSDK's docs on Meta's site and says when to trust the installed package instead, and lists the hard rules (ask before deploys, uploads and installs; never publish the keystore; prove behaviour in the runtime and on the device). Use when starting or planning an IWSDK or WebXR project, when unsure which skill fits, when the user asks "where do I start", "what's next", "how do I ship my WebXR game", "does it work on Meta VR Glasses", or at the start of any multi-step IWSDK task.

  • Installs packages

The file

We split this skill into the rules it gives an agent

3 rules. About 0 are common, 1 is distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Check the tools and the project, and ask before installing anything:

    line 43
  2. Very specific:

    No project, wrong Node, MCP tools missing → iwsdk-project-setup.

    line 49
  3. Very specific:

    Ask first: before: deploying to a public host, any Store upload or channel promotion, scaffolding with --force, installing tools (Node, …

    line 82

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

IWSDK WebXR workflow: start here

Made by Navid Mirzaaghazadeh · part of iwsdk-webxr-skills · MIT

This skill only routes. The detailed steps live in the skills it names. Load the named skill before acting on a step.

  • Plugin installs prefix skill names (<bundle>:iwsdk-dev). Match on the part after the colon.
  • If a named skill isn't installed, say so and point to the library README. Don't improvise its content from memory.
  • Scaffolded projects already contain IWSDK's 12 official skills in .claude/skills/. Don't install a second copy.

1. Before anything

  1. For Quest, Quest Browser or Horizon Store facts, load hz-quest-verify-first and check Meta's live docs (metavr docs search "<topic>"), not memory.
  2. Check the tools and the project, and ask before installing anything:
    node --version                      # >=20.19 <21, >=22.12 <23, or >=24
    npx @iwsdk/cli dev status           # inside an IWSDK app: runtime URLs, browserCommandReady
    adb devices                         # headset connected and authorised
    No project, wrong Node, MCP tools missing → iwsdk-project-setup. An IWSDK 0.4.x project (GLXF, Meta Spatial Editor, vite-plugin-uikitml) → iwsdk-migrate-0-5 first.
  3. For any change to app code, scenes, models or UI, invoke iwsdk-dev first. It picks the greenfield or bounded-change playbook and calls the specialists.
  4. Target devices. Meta VR Glasses (spring 2027; v207 SDKs out now) use gaze to aim, a hand pinch to select, usually no controllers, and a 70° × 66° view. If the app should run there, load iwsdk-vr-glasses while planning: the input plan changes the design, not just the config.
  5. Docs. IWSDK's docs now live on Meta's site (https://developers.meta.com/vr/documentation/iwsdk/guides/overview/, Markdown index at https://developers.meta.com/vr/llmstxt/documentation/iwsdk/llms.txt/), but those pages describe IWSDK 0.5.3 and show some config keys 1.0.1 rejects. When a hosted page and the installed package disagree, the package wins (.d.ts files, npx @iwsdk/cli <domain> --help, npx @iwsdk/cli mcp inspect). Differences: this library's docs/meta-reference/web-iwsdk-docs-on-meta.md; https://iwsdk.dev matches 1.0.1.

2. The path from idea to store

#PhaseSkills, in orderDone when
0Plangame-gdd-author, prototype-fast, hz-immersive-designer, xr-ux-design-and-performance-budgeting, horizon-launch-roadmap; iwsdk-vr-glasses §1 if VR Glasses are a targetCore loop proven; VR vs MR vs browser, immersive vs 2D, hosted web vs Store PWA, controllers required vs optional decided
1Set upiwsdk-project-setup (npm create @iwsdk@latest), quest-browser-webxr (does Quest Browser support the features you need?), iwsdk-vr-glasses §2 (gaze config)npm run dev works; Claude Code sees iwsdk-runtime; xr enter works in the emulator
2Buildiwsdk-dev → iwsdk-build-model, iwsdk-compose-scene, iwsdk-ui, iwsdk-physics, iwsdk-depth-occlusion; assets: iwsdk-asset-pipeline, scenario-blender-expert, scenario-blender-retopology, scenario-blender-uv-baking; gaze-ready UI and controller-free flows: iwsdk-vr-glasses §3-5Feature works in the managed runtime with ECS evidence
3Test in the emulatoriwsdk-grab, iwsdk-ray, iwsdk-debug, iwsdk-testing (smoke test, CI); metaVRGlasses profile + Gaze + Hands (iwsdk-vr-glasses §7)Smoke test green; interactions proven with state
4Test on the Questiwsdk-quest-device-testing (§7 for VR Glasses prep: head-gaze preview, metavr device fov-sim, hands-only run), iwsdk-native-xr-test, hz-vr-debug, metavr-cli, game-playtestHeadset checklist passes; playtest notes logged
5Optimiseiwsdk-performance, quest-browser-webxr, hz-perfetto-debug, threejs-perf-loading; review with the iwsdk-project-code-reviewer agent≥ 60 fps rendered at an allowed refresh rate in the heaviest scene
6Host and packageiwsdk-hosting, then horizon-web-store-publish (release pipeline; iwsdk-pwa-packaging and hz-store-pwa are the upstream guides it builds on)Signed APK sideloaded; launches without a URL bar; assetlinks live; keystore URL is 404
7Store readinesshorizon-web-vrc-checklistEvery applicable VRC passes on the device
8Store listinghorizon-store-listing-assets, review-game-trailerArt, copy, rating, privacy policy ready
9Upload and submithorizon-web-store-publish (ALPHA/BETA first), then the Dashboard (hz-store-submit for the walkthrough only)Build on a test channel, then submitted by the user

3. Hard rules

  • Ask first before: deploying to a public host, any Store upload or channel promotion, scaffolding with --force, installing tools (Node, Playwright browsers, KTX-Software, npm i -g @meta-quest/bubblewrap-cli, OVR Metrics Tool), writing agent config (adapter sync), enabling --allow-browser-automation, or creating a signing key. Store submission happens in the Developer Dashboard, done by the user.
  • Secrets: keystores, key passwords, app secrets and deploy tokens never go in public/, dist/, git or chat output. After every publish, check that https://<domain>/android.keystore returns 404. Remind the user to back up the keystore: without it the app can't be updated.
  • Prove it in the runtime, then on the device. Typecheck → dev up → ECS/XR evidence (xr status shows sessionActive) → headset. A compile or a flat screenshot isn't proof.
  • Versions: all @iwsdk/* packages on one version (1.0.1 = npm latest when checked; 1.1.0-rc.1 on next moves three to super-three 0.185.0: don't adopt it unasked), three aliased to npm:super-three@0.181.0 with an overrides entry, Three.js classes imported from @iwsdk/core.
  • One of each: one scaffold (npm create @iwsdk@latest), one entry skill for app code (iwsdk-dev), one release pipeline (horizon-web-store-publish), one verify-first skill (hz-quest-verify-first).
  • Conflicting guidance: IWSDK APIs → the installed package, then the iwsdk-* official skills plus skills/iwsdk-official/ERRATA.md (Meta's hz-iwsdk-webxr was written for IWSDK 0.4, see iwsdk-performance/references/older-advice.md; Meta's hosted IWSDK pages for 0.5.3). Store values → the horizon-* skills over hz-store-submit and hz-store-pwa. When in doubt, check live docs.
  • Built-ins first: IWSDK already provides grabbing, ray/pointer interaction, UIKitML panels, locomotion, physics and audio. @iwsdk/core 1.0.1 is built on @pmndrs/uikit, @pmndrs/handle and @pmndrs/pointer-events, so use pmndrs-uikit, pmndrs-handle and pmndrs-pointer-events only as low-level references after iwsdk-ui, iwsdk-grab and iwsdk-ray. Don't call pmndrs's forwardHtmlEvents, add a second event forwarder, or run another uikit update loop: IWSDK wires these already (canvas events come from input.canvasPointerEvents), so events would fire twice. Skip their createXRStore and React Three Fiber sections.
  • Side effects to mention once: npm install in a scaffold runs @meta-quest/metavr's postinstall (binary into ~/.metavr, a completions line in your shell profile) and enables IWSDK tool-call telemetry through metavr (iwsdk-project-setup §9).

4. Quick router

The user wants to…Use
start a new WebXR/IWSDK project, fix Node/MCP/dev-server setupiwsdk-project-setup
upgrade a 0.4.x project or a Meta Spatial Editor sceneiwsdk-migrate-0-5
add or change any feature, system, componentiwsdk-dev
build or fix a 3D model in codeiwsdk-build-model
import, convert, compress a GLB/FBX, KTX2/Draco, "won't load"iwsdk-asset-pipeline
arrange a scene, lights, environment, camera viewsiwsdk-compose-scene
spatial UI panels, HUD, buttonsiwsdk-ui, then pmndrs-uikit for layout, text and style details
custom grab constraints (doors, levers, dials, two-handed scale, gizmos)iwsdk-grab, then pmndrs-handle
custom pointers, hit or capture rulesiwsdk-ray, then pmndrs-pointer-events
model or fix assets in Blenderscenario-blender-expert (+ scenario-blender-retopology, scenario-blender-uv-baking, kept as sibling folders); always export glTF 2.0 / GLB, then iwsdk-asset-pipeline
gravity, collisions, throwingiwsdk-physics
passthrough occlusion, depthiwsdk-depth-occlusion
does Quest Browser support X, WebXR session optionsquest-browser-webxr
make it work on Meta VR Glasses, gaze and pinch, eye tracking, controller-free / hands-only play, narrower field of viewiwsdk-vr-glasses (then iwsdk-ray, iwsdk-grab, iwsdk-ui for the code)
IWSDK docs on Meta's site disagree with the code, "which MCP tools exist"docs/meta-reference/web-iwsdk-docs-on-meta.md, npx @iwsdk/cli mcp inspect
check grab or ray interactions in the emulatoriwsdk-grab, iwsdk-ray
a state/physics/interaction bugiwsdk-debug
automated tests, CIiwsdk-testing
open it on the headset, remote DevTools, device logsiwsdk-quest-device-testing, hz-vr-debug, metavr-cli
script a real Quest sessioniwsdk-native-xr-test
it stutters, low FPS, slow loadingiwsdk-performance, hz-perfetto-debug, threejs-perf-loading (ideas only: IWSDK renders with WebGL, some of its examples are WebGPU/TSL)
plan or run a playtestgame-playtest with xr-platforms-audio-and-comfort for comfort observation
comfort, motion sickness, interaction designhz-immersive-designer, xr-platforms-audio-and-comfort, xr-perceptual-constraints-displays-and-tracking
look up an XR number or anti-pattern; stereo rendering and input conceptsxr-reference, xr-rendering-input-and-spatial-understanding
leaderboards, saves, multiplayer backendIWSDK has none built in (guide 18): your own backend; on Cloudflare durable-objects (multiplayer rooms), workers-best-practices
host the app (any host / Cloudflare)iwsdk-hosting; Cloudflare: cf-cli for a new project, wrangler once a wrangler config exists
service worker, offline, stale-after-deploypwa-offline (keep /.well-known/ and the start URL reachable)
plan the launch, PWA vs website, Early Accesshorizon-launch-roadmap
package as a PWA/APK, upload, channelshorizon-web-store-publish (+ iwsdk-pwa-packaging for IWSDK's auto-enter and app-mode notes)
check store requirements (VRCs)horizon-web-vrc-checklist
store art, description, rating, price, trailerhorizon-store-listing-assets, review-game-trailer (its wording is Steam-oriented; Horizon trailer and art specs come from horizon-store-listing-assets)
plain Playwright smoke tests of 2D pageswebapp-testing; in-XR checks use IWSDK's managed browser (iwsdk-testing)

Sources

Last verified: 2026-10-17

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.