# JARVIS-QVAC Local-first Ubuntu GNOME voice assistant. The cognitive core is the already-extracted `/home/raven/dev/agent-harness`, copied into `vendor/agent-harness`; Jarvis does not copy or depend on `/home/raven/dev/dlinux`. ## Bootstrap ```bash npm install npm test npm run cu-doctor npm run gpu-doctor npx qvac doctor npm run qvac:serve:diagnostic # optional; never run beside jarvisd ``` The daemon bridge loads the harness in-process with `Agent.engine.load()` and creates sessions with `Agent.create()`. The optional QVAC HTTP sibling is configured for `127.0.0.1:11434`. The GNOME extension is an intentionally thin ESM panel shell; inference, audio, portals, and computer-use actuation belong in user services. GPU inference is a hard requirement. `gpu-doctor` must report a QVAC-visible GPU and `jarvisd` refuses to continue if the loaded model reports `device: cpu`. This prevents a misleading CPU mode and competing QVAC workers. The repository contains the daemon, single GPU-only QVAC master, copied agent harness, voice loop, GNOME ARC extension, GTK4/libadwaita control center, computer-use observation and safety boundaries, and the full QVAC capability skill registry. See [docs/ROADMAP.md](docs/ROADMAP.md), [docs/agent-harness-map.md](docs/agent-harness-map.md), and [docs/cu-acceptance.md](docs/cu-acceptance.md). Runtime inference refuses to start until the QVAC SDK reports a usable GPU. The RemoteDesktop/libei input bridge also remains unavailable until the local GNOME portal session and a real EIS injector are present; Jarvis never claims that an action succeeded when the backend is missing.