Skip to content

Latest commit

History

3,167 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenClinXR

OpenClinXR is a Step 2 CS–inspired XR clinical skills exam platform: timed multi-station encounters, WebXR learner runtime, faculty/admin review, scenario authoring, and an evidence-gated path from case definitions to runtime scenes.

Claim control: this is not an exam-equivalence product and does not claim clinical validity, licensure readiness, or production Quest certification. Early-stage R&D and local tooling first.

Project page:developers.simnova.com/OpenClinXR
Site source (GitHub Pages):docs/ on branch main

Four product tiers

TierWhat it is
Production exam platformAuthor, review, assemble, run, trace, and replay timed clinical encounters (learners, faculty, admins, scenario authors).
Encounter Blueprint FactoryTurn reviewed case definitions into WebXR scenes, actor behavior, dialogue policies, emotion timelines, review packets, and persistence records.
Clinical Asset CommonsReuse rooms, equipment, clothing, humanoids, animation, and provenance across encounters.
Capability ArenaCage-match candidate tech (TTS, speech, humanoid generation, IWSDK sidecars, providers) before any production promotion.

Local/offline is the default development path. Promotion gates for providers, Quest readiness, learner production, and clinical/scoring claims stay false unless explicitly approved and evidenced.


Prerequisites

Pins live in mise.toml and package.jsonengines / packageManager. Prefer mise over nvm/system Python. Full detail: docs/TOOLING.md.

ToolNotes
MustmiseProject pins win; owns Node / pnpm / Python
MustNode 24 (LTS)engines.node: >=24.15.0
Mustpnpm 11.18.xpackageManager: pnpm@11.18.0 — do not use corepack
MustPython 3.13 via miseAsset / Anny / voice scripts (python3)
MustgitClone and worktrees
Mustdirenv (recommended)Activates mise + loads .env.local on cd
OptionalBun 1.3.xLocal experiments (mise pin)
OptionalMongoDBDurable persistence; many smokes use in-memory fixtures
OptionalBlenderAnny / humanoid asset pipeline
OptionalGitHub CLI (gh)PRs/issues — preferred over any GitHub MCP
OptionalDEEPSEEK_API_KEYAgent assist only; never commit
OptionalPlaywright browserspnpm playwright:install for browser evidence

Get started

1. Host setup (once per machine)

# Install mise: https://mise.jdx.dev# Install direnv: https://direnv.net
mkdir -p ~/.config/direnv/lib
mise direnv activate >~/.config/direnv/lib/use_mise.sh
# ~/.zshenv — shims first on PATH:# export PATH="$HOME/.local/share/mise/shims:$PATH"# ~/.zshrc:# eval "$(direnv hook zsh)"# Open a new terminal after editing shell config, or: exec zsh -l

Do not combine eval "$(mise activate zsh)"and direnv use mise — pick direnv + shims (this repo’s pattern).

2. Clone setup (once per clone)

git clone <repo-url> openclinxr &&cd openclinxr
mise trust
mise install
cp .envrc.example .envrc
cp .env.local.example .env.local # optional: DEEPSEEK_API_KEY, MONGODB_URI, …
direnv allow
pnpm install

.envrc is use mise only — secrets go in .env.local, never in .envrc.

Without direnv, from the repo root:

eval"$(mise env -s zsh)"# or: mise activate zsh

3. Verify the workstation

pnpm env:doctor # mise pins, PATH, turbo, install health# or: mise run doctor
pnpm openclaw:preflight # env:doctor + alignment + drift + lease status
pnpm local:exam:smoke # deterministic ED station harness (no cloud)

Useful variants: pnpm env:doctor:json, pnpm env:doctor:strict.

4. Run apps (local)

Each in its own terminal, from repo root with mise/direnv active:

pnpm --filter @openclinxr/api dev
pnpm --filter @openclinxr/ui-admin dev:portless # default port 5174
pnpm --filter @openclinxr/ui-xr dev:portless # default port 5173

Arena / tooling (optional):

pnpm --filter @openclinxr/model-vetting-studio dev:portless # humanoid cage-match UI
pnpm arena:iwsdk:dev # IWSDK WebXR spike

Repo layout

PathRole
apps/api, apps/ui-admin, apps/ui-xrProduction-facing API and UIs
apps/arena/*Capability Arena sidecars (IWSDK, voice, model vetting, …)
packages/openclinxr/*Domain, runtime, gateways, persistence, review, fixtures
packages/openclinxr/arena/*Spike / experimental packages
tools/openclinxr/factory/*Blueprint → runtime / review / materialization generators
tools/openclinxr/evidence/*Validators, benchmarks, capture helpers
tools/openclinxr/openclaw/*Build-ops CLIs (env doctor, lease, preflight, …)
docs/openclinxr/Product docs, runbooks, evidence
docs/TOOLING.mdToolchain, PATH, agent shells

Encounter flows are meant to be blueprint-driven through the factory, not hand-authored one-off scenes.


Asset licensing constraints

OpenClinXR ships generated 3D assets. Several tools that can produce them carry licences whose terms depend on facts about the product, not about the code — so the same tool can be fine today and prohibited later. The parameters are recorded in MADR 0046:

ParameterCurrent value
Annual revenuebelow USD 1,000,000
Operating territoryUnited States only
Distribution modelnot yet stated — affects notice obligations

If either of the first two changes, re-read this table before generating another asset. Two of the restrictions below terminate or reach backwards into assets already produced.

Restricted by REVENUE

ToolGateWhat happens at the threshold
Stable Fast 3DStability AI Community License, ~USD 1M annual revenue (org-wide, any source)The licence terminates automatically. An Enterprise licence is required to continue. Commercial use below the threshold also requires registration at stability.ai/community-license.

Treat the revenue threshold as a hard product gate with a tripwire, not a reminder. Outputs you already generated are yours (§IV.c.iii), but continued use of the model is not.

Restricted by GEOGRAPHY

ToolGateWhat happens outside it
Hunyuan3D-2Tencent Community License: Territory is worldwide excluding the EU, the UK and South KoreaAUP §5.c bars distributing or displaying the Outputs outside Territory — not just the model. Expanding to those markets re-blocks meshes already generated.

Because the restriction follows the Output, anything generated this way must record its generator in the MADR 0016 asset manifest, not merely its licence — otherwise a future territory change means auditing every asset by hand.

Hunyuan also carries a 1M-monthly-active-user gate measured at its 2025-01-21 release date, and an AUP whose medicine clauses (§14 high-stakes automated decisions, §20 unlicensed practice) restrict automated clinical decision-making, not the generation of props for a training simulator. Neither binds today.

Restricted by COPYLEFT — unchanged by revenue or geography

ToolLicencePosture
MPFB2GPL-3.0-or-laterOut-of-repo authoring tool. Never vendored, never imported by repo code, never shipped.
StableGenGPL-3.0Same. Also does not complete headless — its generation is a modal Blender operator.
ComfyUIGPL-3.0Same. Output textures are governed by the checkpoint licence, not ComfyUI's.

The outputs of these tools ship; their code does not. That split is the whole posture — see MADR 0044.

For MakeHuman-derived assets the safer factual basis is the asset licence, not the tool's: the hm08 base mesh is explicitly CC0, and each community garment carries its own license: field in its .mhclo header — machine-readable, so a parser can feed the manifest directly.

Blocked for other reasons

ToolWhy
TRELLISCore is MIT, but diffoctreerast and the Inria gaussian-splatting family are research / non-commercial. Also requires CUDA, which this workstation does not have.
Infinigen (whole rooms)BSD-3-Clause and licence-clean. Blocked on geometry, not licence: ~15.5M triangles against a 180,000 per-station budget. Its infinigen_gpl submodule is snow and particles, and is not on the indoor path.

Permissive, no gate

Poly Haven and ambientCG are CC0 by site policy — but their APIs carry no per-asset licence field, so record the policy URL plus a byte hash in the manifest rather than scraping a page. NIH 3D is per-entry and must be read individually.

This section is an engineering reading of licence texts, not legal advice. Counsel should sign anything that ships.


Useful links

DocRole
PROJECT_STATUS.mdCanonical project state (priority, active work, backlog, strategy)
docs/openclinxr/worker-backlog-and-validation-matrix.mdWorker ownership + validation matrix
docs/TOOLING.mdmise, direnv, env doctor, MCP→CLI
AGENTS.mdAgent operating contract (for AI/agent contributors)
docs/openclinxr/Product docs and evidence
docs/madr/README.mdArchitecture decision records / arena-to-decision map
docs/madr/0046-...Licence gate parameters — revenue band, territory, and what they unblock

Not live SSOT (historical names only — recover from git history if needed; do not recreate as living ledgers):

  • AUTONOMOUS_WORK_PLAN.md / PROJECT_COORDINATION_INDEX.md → purged 2026-08-05; successor is PROJECT_STATUS.md

Warehouse process: docs/agent-ops/DOC-WAREHOUSE.md. Status purge audit: docs/openclinxr/reviews/2026-08-05-status-doc-purge-manifest.md.


How we build (OpenClaw)

OpenClaw is the repo-native build operating model, not the product. There is no external OpenClaw daemon or SaaS required to develop.

Work is sliced, lease-gated, and checked with deterministic scripts so humans and coding agents share the same guardrails. Day-to-day for developers:

pnpm env:doctor # “can I run tools?”
pnpm openclaw:preflight # broader readiness (env + docs alignment + drift + lease)
pnpm local:exam:smoke # cheap product-path smoke without cloud services

Agents and long-running automation also use pnpm openclaw:post-slice, leases, and the protected runbooks under docs/openclinxr/. Contributors who only need apps and packages can stay on the Get started path above and ignore agent automation until they need it.

Copy-paste kickoff prompts

Condensed host prompts (full contract: AGENTS.md). State SSOT is PROJECT_STATUS.md (not archived coordination ledgers).

Codex

Continue in repo-native OpenClaw mode in /Volumes/files/src/openclinxr using Codex local tools.
Read AGENTS.md, PROJECT_STATUS.md (snapshot), docs/openclinxr/worker-backlog-and-validation-matrix.md, docs/openclinxr/openclaw-runbook-2026-05-27.md, docs/openclinxr/openclaw-tool-adapters-2026-05-27.md, and docs/openclinxr/blueprint-factory-drift-guardrails-2026-05-27.md as needed.
Use terminal, file edits, focused verification. Run pnpm docs:drift-check and pnpm agent:alignment before long unattended work. Select the next approved product slice from PROJECT_STATUS.md Next dequeue and continue without treating slice completion as a stop condition.

Claude

Operate as a repo-native OpenClaw agent for /Volumes/files/src/openclinxr, not as generic Claude chat.
Use AGENTS.md, PROJECT_STATUS.md, docs/openclinxr/openclaw-runbook-2026-05-27.md, and docs/openclinxr/openclaw-tool-adapters-2026-05-27.md as the source of truth. Keep work blueprint/factory-driven.
If you have shell and file access, implement the next smallest approved product slice and run focused verification. If not, act as a bounded planner/reviewer without inventing status ledgers.

Grok

Main session = orchestrator only (chief-coordinator). Spawn role-mapped subagents for product IC.
Use AGENTS.md BLUF, PROJECT_STATUS.md snapshot, docs/agent-ops/PATH-SCOPE.md / TEMPORAL-DECISIONS.md / TASK-COST-ROLLUP.md as needed.
Prefer pnpm openclaw:slice-token:start → team work → openclaw:slice-token:finish for token + task cost lines.

Cursor

Run Cursor in repo-native OpenClaw mode for /Volumes/files/src/openclinxr.
Use AGENTS.md, PROJECT_STATUS.md, docs/openclinxr/openclaw-runbook-2026-05-27.md, and blueprint-factory-drift-guardrails before editing.
Make focused diffs against the next approved product slice; run the smallest relevant verification before claiming completion.

More verification (when you need it)

pnpm agent:alignment # cheap coordination check
pnpm docs:drift-check # doc / coordination drift
pnpm pages:validate # public site (docs/) consistency# Focused package test example:
pnpm --filter @openclinxr/api test -- app.test.ts -t "name"

Prefer focused filters over full monorepo pnpm verify unless you are closing a release-style gate. See docs/TOOLING.md for turbo agent vs human scripts and known tooling constraints.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages