Test Playable Web Games
nirholas/three.ws
Test a playable browser game end to end with deterministic fixtures and real browser evidence.
Routes Meta VR and Horizon OS simulator work to the right metavr command group, and drives a running Meta XR Simulator via metavr xrsim — runtime, device, input, compositor layers and MP4 recording.
$ npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install meta-quest/agentic-tools hz-xr-simulator-control --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/hz-xr-simulator-control .claude/skills/hz-xr-simulator-control && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "hz-xr-simulator-control" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-xr-simulator-control into .claude/skills/hz-xr-simulator-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-xr-simulator-control", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-xr-simulator-controlType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install meta-quest/agentic-tools hz-xr-simulator-control --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/hz-xr-simulator-control .agents/skills/hz-xr-simulator-control && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "hz-xr-simulator-control" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-xr-simulator-control into .agents/skills/hz-xr-simulator-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-xr-simulator-control", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install meta-quest/agentic-tools hz-xr-simulator-control --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/hz-xr-simulator-control .cursor/skills/hz-xr-simulator-control && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "hz-xr-simulator-control" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-xr-simulator-control into .cursor/skills/hz-xr-simulator-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-xr-simulator-control", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/meta-quest/agentic-tools.git --path skills/hz-xr-simulator-control--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install meta-quest/agentic-tools hz-xr-simulator-control --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/hz-xr-simulator-control .gemini/skills/hz-xr-simulator-control && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "hz-xr-simulator-control" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-xr-simulator-control into .gemini/skills/hz-xr-simulator-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-xr-simulator-control", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install meta-quest/agentic-tools hz-xr-simulator-controlInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/hz-xr-simulator-control .github/skills/hz-xr-simulator-control && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "hz-xr-simulator-control" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-xr-simulator-control into .github/skills/hz-xr-simulator-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-xr-simulator-control", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install meta-quest/agentic-tools hz-xr-simulator-control --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/hz-xr-simulator-control .opencode/skills/hz-xr-simulator-control && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "hz-xr-simulator-control" agent skill from https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-xr-simulator-control into .opencode/skills/hz-xr-simulator-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hz-xr-simulator-control", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
hz-xr-simulator-controlRoutes Meta VR and Horizon OS simulator work to the right metavr command group, and drives a running Meta XR Simulator via metavr xrsim — runtime, device, input, compositor layers and MP4 recording.
Hz Xr Simulator Control is an agent skill from meta-quest/agentic-tools. Routes Meta VR and Horizon OS simulator work to the right metavr command group, and drives a running Meta XR Simulator via metavr xrsim — runtime, device, input, compositor layers and MP4 recording. Use when a goal concerns a simulated headset rather than a physical one, when choosing between xrsim, ssim, capture and tapedeck, or when a metavr xrsim command returns a connection error. For installing the simulator or configuring it into a Unity, Unreal or native OpenXR project, use…
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/commands.md`).
It sits in Mobile, covering Mobile testing and debugging and Game development. The repository describes itself as: Agent Skills for Meta Quest/Horizon OS VR Development. The licence is Apache-2.0.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 3a8553d. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(metavr:*)Bash(hzdb:*)From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ffmpegFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Hz Xr Simulator Control loads about 2.4k tokens when it runs, and up to ~4.1k if it reads all its reference files. Until then it costs about 143 tokens; SKILL.md has 1,201 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from meta-quest/agentic-tools at commit 3a8553d, republished under its Apache-2.0 licence (© meta-quest). 1,201 words, ~2,407 tokens.
.claude/skills/hz-xr-simulator-control/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.metavr is overwhelmingly a physical Quest or Glasses CLI: device, app, capture, input, log,
files and ui all talk to a headset over ADB. xrsim is one group among them and drives a
simulated headset instead. Choosing the wrong group is the most common failure here, and it
is quiet: metavr device list prints No devices connected and exits 0, so the wrong answer
looks healthier than the right one.
This skill drives a simulator that already exists. Installing one, or wiring it into a project,
belongs to hz-xr-simulator-install-and-configure.
| The goal concerns | Use | Not |
|---|---|---|
| The simulated headset model, IPD, refresh rate | metavr xrsim device … | metavr device … (physical, ADB) |
| The simulator frontend process | metavr xrsim app … | metavr app … (APKs on a headset) |
| Simulated hands and controllers | metavr xrsim input … | metavr input … (keyevents to hardware) |
| The simulator's synthetic room | metavr xrsim env … | — |
| Compositor layers, simulated frame rate | metavr xrsim layer / xrsim runtime fps | — |
| The simulator's own logs | metavr xrsim runtime logs | metavr log / metavr adb logcat (device logcat) |
| What the simulated headset renders | metavr xrsim record | metavr capture (physical device screen) |
| Recording and replaying an app's OpenXR calls on a real headset | metavr tapedeck | metavr xrsim record (compositor pixels, not a call stream) |
| The SpatialSim emulator | metavr ssim | metavr xrsim (a different simulator) |
Read the Use column as the right tool for that goal and Not as the one you might reach for by
mistake. The last two rows are in this table because they are the mistakes, not because they are
this skill's job.
Three are worth stating outright, because a plausible command exists on both sides:
xrsim record captures
the simulator's compositor output to MP4; tapedeck captures and replays an app's OpenXR call
stream on a physical device. They are not substitutes.ssim is the SpatialSim emulator, xrsim
is the Meta XR Simulator.device, app and input exist both at the top level and under xrsim, so the same verb
means different things depending on the group. capture does not: there is no xrsim capture,
and the simulator equivalent is xrsim record.Once you are inside xrsim, what a command needs decides which error you get.
| Tier | Commands | Needs |
|---|---|---|
| Local | readme, runtime logs, and on Linux bare record --output … --duration … | nothing running |
| Lifecycle | app launch/quit/ensure-running | nothing running — these manage the frontend |
| Frontend | runtime activate/deactivate/list, env set/list | the frontend app |
| Runtime | runtime ping/status/info/fps, device *, input *, layer *, record start/stop/status | the frontend and a connected XR app |
device list and device refresh-rates read like static catalogs but come from the live runtime.
input sources prints a fixed list yet still needs a connection, because the input group opens
one before it dispatches.
Two that a reasonable guess gets wrong in the other direction:
app group is how you fix a down frontend, not something blocked by one. app launch
and app ensure-running start it if it is absent. app quit asks the frontend on --port to
close; --force terminates that same process instead, and --all is the explicit escape hatch
for stopping every MetaXRSimulator on the host. Treating lifecycle commands as frontend-tier
rules out the recovery.record is local on Linux. Without --runtime-addr it never connects — it captures the
framebuffer through ffmpeg, so it needs ffmpeg on PATH but neither tier. The record start
/ stop / status subcommands are runtime-tier and additionally refuse to run on Linux without
--runtime-addr.Each error names exactly one hop, so do not retry blindly.
| Message | What broke | Fix |
|---|---|---|
XR Simulator is not running… | nothing listening on the frontend port | start the app, or pass --port |
XR Simulator is running but no app is connected… | frontend up, no OpenXR app attached | launch the app under test |
Runtime at <addr> is no longer responding… | the attached app died | restart it; the stale endpoint clears itself |
Meta XR Simulator is not installed in a registered system or MQDH location | the frontend binary was never found | an install problem — see hz-xr-simulator-install-and-configure |
native recording subcommands require --runtime-addr on Linux | record start/stop/status on Linux | pass --runtime-addr, or use bare record --output … --duration … |
ffmpeg is required to record XR Simulator MP4s | the Linux record path has no ffmpeg | install ffmpeg |
Check liveness with a frontend-tier command before asking runtime-tier questions. A refused
connection returns XR Simulator is not running immediately, and --timeout is the total
connection budget rather than a fresh budget for every retry. runtime list also distinguishes a
reachable frontend with no attached app from a missing frontend, while runtime status requires
an attached runtime.
So diagnose in tier order — cheapest first, stopping at the first failure:
metavr xrsim runtime logs # local: paths resolve with nothing running
metavr xrsim runtime list --format json --timeout 2 # frontend reachable? how many runtimes?
metavr xrsim runtime status --format json # only once a runtime is attachedruntime logs goes first precisely because it is the one that still answers when everything else
is down: when runtime list fails, the log paths are what say why the frontend will not come up,
and the XR Simulator is not running row above cannot tell you that.
runtime list returning [] is the frontend being up with no app connected — a different failure
from the frontend being down, needing a different fix. More than one entry is its own trap: the
runtime-tier groups follow the frontend's current endpoint, so pin one with --runtime-addr
rather than guessing which answered.
Scope routine shutdown to the frontend's port. The default sends a close request so a live OpenXR
session can tear down cleanly; use --force only after that scoped close fails. Never use --all
as ordinary cleanup because it stops every MetaXRSimulator on the host.
metavr xrsim --port 33794 app quit
metavr xrsim --port 33794 app quit --force # only after graceful close fails
metavr xrsim app quit --all # only when every instance must stopThe quit report names the scoped pid and whether the operation was forced, alongside
was_running, killed, and confirmed_stopped. For --all, the table renders all in the PID
column; the JSON payload omits the internal scope marker.
device set,
device ipd, and device refresh-rate read settings back into an OBSERVED column. Without
--wait, that is one immediate read and may still show the old value; with --wait, the
command waits for convergence or exits with a timeout. Treat unknown as a failed read-back,
never as confirmation that the requested value applied.runtime status is fault-tolerant by default. It can exit 0 after a section fails, so check
device_error / input_error / fps_error. In automation, pass --strict: any failed query
then produces a non-zero exit while the report is still printed for diagnosis.When Meta XR Operator controls the app through a non-default port, set
AGENTICXR_MCP_PORT to the same value for the in-app layer and the process running metavr. The
proxy receives the resulting backend URL from metavr; mismatched environments point the proxy at
a different port from the layer. Restart the affected app and MCP server after changing the
variable.
For everything else — exact flags, output shapes, the two recording engines — metavr xrsim readme
and metavr xrsim --help are authoritative and always current. Ask the binary rather than guessing.
references/commands.md — tier per group, the irregular corners of the surface, what the output meanshttps://github.com/meta-quest/agentic-tools/tree/main/skills/hz-xr-simulator-controlhz-xr-simulator-install-and-configure — installing the simulator and configuring it into a projecthz-vr-debug — debugging against a physical device© meta-quest, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/hz-xr-simulator-control of meta-quest/agentic-tools.
Open the folder on GitHubat commit 3a8553d
Hz Xr Simulator Control next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Hz Xr Simulator Control this skillmeta-quest/agentic-tools | 215 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Test Playable Web Gamesnirholas/three.ws | 229 | 1 repos | ~429 | Automated safety check: Pass | Apache-2.0 | |
| Phone HarnessShawnPana/phone-harness | 3.2k | — | ~7.7k | Automated safety check: Pass | MIT | |
| Maa Issue Log AnalysisMaaAssistantArknights/MaaAssistantArknights | 24k | — | ~4k | Automated safety check: Pass | AGPL-3.0 | |
| Mobile QAtloncorp/tlon-apps | 107 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Store Listing Screenshotstherxmv/Telegram-Themer | 119 | — | ~2.5k | Automated safety check: Pass | None |
nirholas/three.ws
Test a playable browser game end to end with deterministic fixtures and real browser evidence.
ShawnPana/phone-harness
Control the user's phone - an iPhone through the Mac's iPhone Mirroring window, an Android over adb, a rented cloud Android, or a cloud iPhone over HTTPS: open apps, tap, type, swipe, read the screen.
MaaAssistantArknights/MaaAssistantArknights
分析 MaaAssistantArknights 上游仓库公开 Issue(https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/...
tloncorp/tlon-apps
Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.
therxmv/Telegram-Themer
Generate TelegramThemer's Play Store listing images — capture the 8 required app screenshots on a running emulator/device by driving the real UI with adb, then composite them into the final…
ReinaMacCredy/maestro
Turn filed lessons into the smallest doctrine edit. An agent skill from ReinaMacCredy/maestro.
meta-quest/agentic-tools
Guides porting existing Android 2D apps to Meta VR and Horizon OS — input adaptation, panel layout, and design requirements.
meta-quest/agentic-tools
Upgrades Meta VR apps to newer Horizon OS SDK versions — migration guides, deprecated API replacements, changelog.
meta-quest/agentic-tools
Builds WebXR experiences for Meta VR and Horizon OS using the Immersive Web SDK (IWSDK) — ECS architecture, Three.js integration, spatial UI.
meta-quest/agentic-tools
Build multi-window Meta Horizon OS experiences with the MetaVrx Layout SDK in Jetpack Compose or React Native.
meta-quest/agentic-tools
Scaffolds new Meta VR and Horizon OS projects after the build path is selected — Standard Android, Meta Spatial SDK, Unity, Unreal, or WebXR.
meta-quest/agentic-tools
Analyzes Meta VR and Horizon OS VR performance using Perfetto traces — frame timing, CPU/GPU bottlenecks, render pass analysis.
Categories
Routes Meta VR and Horizon OS simulator work to the right metavr command group, and drives a running Meta XR Simulator via metavr xrsim — runtime, device, input, compositor layers and MP4 recording. Hz Xr Simulator Control is an agent skill from meta-quest/agentic-tools. Routes Meta VR and Horizon OS simulator work to the right metavr command group, and drives a running Meta XR Simulator via metavr xrsim — runtime, device, input, compositor layers and MP4 recording.
Hz Xr Simulator Control fits situations like: A goal concerns a simulated headset rather than a physical one; choosing between xrsim; capture and tapedeck; A metavr xrsim command returns a connection error.
Run `npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a claude-code`. Or copy the skill folder (skills/hz-xr-simulator-control in meta-quest/agentic-tools) into .claude/skills/hz-xr-simulator-control in your project. Claude Code loads it when a task matches its description.
Run `npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a codex`. Or copy the skill folder (skills/hz-xr-simulator-control in meta-quest/agentic-tools) into .agents/skills/hz-xr-simulator-control in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add meta-quest/agentic-tools --skill hz-xr-simulator-control -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hz-xr-simulator-control, .gemini/skills/hz-xr-simulator-control, .github/skills/hz-xr-simulator-control and .opencode/skills/hz-xr-simulator-control in your project.
Going by SKILL.md and its folder, Hz Xr Simulator Control needs the command-line tools its instructions call (ffmpeg). Its frontmatter pre-approves these tools: Bash(metavr:*), Bash(hzdb:*).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Hz Xr Simulator Control is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Hz Xr Simulator Control: Test Playable Web Games (nirholas/three.ws, 229 stars), Phone Harness (ShawnPana/phone-harness, 3.2k stars), Maa Issue Log Analysis (MaaAssistantArknights/MaaAssistantArknights, 24k stars) and Mobile QA (tloncorp/tlon-apps, 107 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
meta-quest (a GitHub organization) maintains it in meta-quest/agentic-tools, which has 215 GitHub stars. The repository holds 34 skills in this directory. The repository was last updated on September 24, 2026.
Source: meta-quest/agentic-tools on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.