google/xb-automate-app
>- Automation bridge for a running XR Blocks app. Use when exposing readiness, state observations, browser-driver access, embodied controls, or narrow remote-control tools to an external JavaScript, Python, CLI, or agent process.
npx skills add https://github.com/google/xrblocks --skill xb-automate-app
Add a control plane: a bounded way for an external process to know the app
is ready, observe useful state, and request supported actions. This skill owns
the bridge and one connection smoke check. App correctness and experiential
acceptance remain with xb-build-app and the user test handoff.
Record:
Prefer named domain operations such as resetGame or getScore over exposing
arbitrary execution. Use stable object names or context roles for spatial
targets; treat ctx_* ids as values scoped to one live page.
This step is complete when every required command has one observable response
and the controller can identify readiness without sleeping.
DOM input, window.xb, screenshots, or app-owned globals. Read
references/browser.md.
simulator locomotion, hands, screenshots, or app-specific commands. Read
references/remote-control.md.
Choose the browser bridge for ordinary page automation. Add the remote-control
addon when the controller needs an explicit language-neutral protocol or
embodied simulator controls.
This step is complete when one bridge supplies the contract without a second
control layer.
Use new xb.Options().enableAutomationMode() or ?xrAutomation=1 when the
external run benefits from simulator autostart, hands, camera, context, and
hidden human-facing simulator panels. Add ?debug=1 only when the browser
driver needs the public SDK as window.xb and initialization as
window.xbReady.
Expose a separate app-owned readiness signal when domain setup continues after
xb.init(). For remote control, register narrow JSON-serializable tools and
validate every argument at the application boundary. Pair each mutating command
with a state observation that lets the controller see its result.
This step is complete when the bridge can await SDK and domain readiness, list
its supported operations, and serialize every response.
Start the app and any owned relay, then perform one bounded bridge smoke:
ping() or another read-only health operation;Check transport errors and every remote response's ok field. This smoke proves
that the control plane is usable and closes at the bridge boundary.
This step is complete when one external process can connect, inspect the
documented surface, and disconnect without races or leaked bridge resources.
Return:
sessionId where applicable;Finish when another process can use the documented control plane without
reading the app implementation. Hand the working bridge to whichever workflow
or user will drive it.
Verify public behavior in
../../src/debug/DebugGlobals.ts,
../../src/core/Options.ts, and
../../src/addons/remote-control/index.ts.
Use ../../samples/remote_control/ as the live
relay smoke pattern.
Take google/xb-automate-app from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.