Architecture
Rusty XR Companion uses a thin-shell architecture.
WPF app / CLI
-> Companion Core
-> Diagnostics layer
-> ADB, optional Quest tooling, optional casting tools
The shared operation catalog and dispatch planner sit in Companion Core so the CLI and MCP server use the same operation ids, input names, and safety labels:
CompanionOperationSurface
-> CLI api surface
-> MCP tools/list
CompanionOperationPlanner
-> CLI api plan
-> MCP tools/call safety gate
-> direct core-service bindings
Projects
RustyXr.Companion.Core
- public models
- tooling discovery
- managed official Quest tooling installer
- managed optional FFmpeg media runtime installer
- ADB command services
- Meta VR CLI / hzdb compatibility wake, proximity, and screenshot helpers
- catalog loading
- API/CLI/MCP operation surface metadata
- scrcpy launch wrapper
- broker H.264 packet receive and optional preview decode services
RustyXr.Companion.Diagnostics
- Windows environment analysis - diagnostics bundle writer
RustyXr.Companion.Cli
- scriptable command surface
RustyXr.Companion.Mcp
- stdio MCP server for read-only operation calls and blocked dispatch plans
RustyXr.Companion.App
- WPF operator app
RustyXr.Companion.PreviewInstaller
- guided portable-release setup helper
Design Rules
- no-hardware diagnostics must stay useful
- external processes are launched through services
- official third-party tooling is downloaded into LocalAppData and remains
licensed by its upstream publisher
- FFmpeg is an optional external media sidecar; the app zip does not bundle it
and the managed installer verifies source hashes before use
- live-device commands require an explicit serial when more than one device is
present
- APK package IDs are user or catalog data, not private hard-coded defaults
- Rusty XR core contracts should be consumed when stable, but app-shell release
logic stays here
- Quest app catalogs use the public Rusty XR
quest-app-catalogschema shape
so future example APK metadata can be shared without coupling the repositories at build time