snxraven 775c33dc09
Rolling release / release (push) Failing after 1m44s
CI / verify (push) Failing after 1m44s
Push to CI
2026-09-11 14:56:12 -04:00
R1
2026-09-11 14:55:34 -04:00
2026-09-11 14:37:56 -04:00
P8
2026-09-11 14:29:47 -04:00
2026-09-11 14:37:56 -04:00
2026-09-11 14:37:56 -04:00
P8
2026-09-11 14:29:47 -04:00
R1
2026-09-11 14:55:34 -04:00
R1
2026-09-11 14:55:34 -04:00
P9
2026-09-11 14:32:35 -04:00
2026-09-11 13:37:34 -04:00
P10
2026-09-11 14:35:22 -04:00
2026-09-11 13:50:53 -04:00
2026-09-11 14:37:56 -04:00
2026-09-11 13:50:53 -04:00
R1
2026-09-11 14:55:34 -04:00
2026-09-11 13:44:05 -04:00
2026-09-11 13:50:53 -04:00
2026-09-11 14:56:12 -04:00

JARVIS-QVAC

JARVIS-QVAC is a local-first voice assistant and computer-use layer for Ubuntu GNOME. It combines a wake-word loop, QVAC speech and language models, the copied agent-harness planner, GNOME-native UI, local memory, and an explicit Wayland computer-use grant.

The implementation covers Phases 011: daemon lifecycle, GPU-gated QVAC ownership, voice, ARC UI, computer use, control center, capability adapters, privacy hardening, packaging, and Gitea release automation. Full production acceptance remains host-dependent on GPU visibility, GNOME portals, the local wake bridge, and EIS input.

Runtime contract

JARVIS-QVAC has one cognitive loop and one QVAC authority.

  • jarvisd owns the QVAC SDK worker, model lifecycle, GPU policy, scheduler, cancellation, voice loop, jobs, and D-Bus service.
  • vendor/agent-harness is a copied repository dependency. It owns sessions, planning, memory, and the tool loop.
  • Skills call the QVAC master facade. They do not create workers or load models.
  • The GNOME Shell extension is presentation-only: no inference, audio capture, or input injection runs inside GNOME Shell.
  • GPU inference is mandatory. If QVAC cannot see a usable GPU, Jarvis reports an unavailable state and refuses CPU fallback.
  • Computer use is off until explicitly granted and is revoked on Escape, lock screen, expiry, or a spoken abort command.
flowchart LR
  U[User] --> G[GNOME Shell / ARC]
  G <--> D[jarvisd / Node 22]
  D --> H[agent-harness]
  D --> M[Single QVAC master]
  D --> V[Voice + PipeWire]
  D --> C[Computer-use session]
  M --> GPU[(GPU backend)]
  C --> P[XDG portals + AT-SPI + EIS]

Capabilities

  • Wake word, push-to-talk, typed fallback, VAD, local ASR, streamed replies, TTS playback, anti-feedback gating, and cancellation.
  • Chat, planning, code, summaries, rewriting, embeddings, RAG workspaces, batch prompts, OCR, image classification, translation, and multimodal input.
  • Image, video, and music generation through serialized local QVAC jobs.
  • Voice enrollment, diarized transcription, LoRA training, and labeled BCI, VLA, and ABot-World lab slots.
  • GNOME app launch/focus/window actions, clipboard, notifications, media, screenshot observation, AT-SPI actions, portal input, and vision fallback.
  • ARC panel indicator and overlay, live waveform, transcripts, suggestions, job progress, target highlights, and visible agent cursor.

Unavailable capabilities remain visible with an honest reason such as missing GPU, insufficient VRAM, missing model, unavailable hardware, or missing desktop permission.

Requirements

Full runtime support requires:

  • Ubuntu GNOME 24.04 or newer, GNOME Shell 46+, and a logged-in user session.
  • Node.js 22.17 or newer.
  • PipeWire and WirePlumber.
  • xdg-desktop-portal with the GNOME backend.
  • AT-SPI2 and, for primary Wayland actuation, libei/libeis plus a local EIS injector.
  • A QVAC-visible Vulkan, CUDA, or supported GPU backend.
  • A local openWakeWord or sherpa-onnx bridge for always-on wake detection.

ydotool is an optional legacy fallback and is disabled unless explicitly enabled. X11 fallback is used only in an Xorg session. CPU-only systems can run diagnostics and control surfaces, but Jarvis will not run inference on them.

See hardware compatibility and troubleshooting.

Install from a checkout

The harness is copied into vendor/agent-harness. It is not a symlink and the dlinux platform is not vendored.

git clone <gitea-repository-url> jarvis-qvac
cd jarvis-qvac
npm ci
npm test
npm run gpu-doctor
npm run cu-doctor
npm run voice-doctor

Install the user service, extension, and per-user QVAC configuration:

bash packaging/install.sh --enable
bash packaging/first-run.sh
gnome-extensions enable [email protected]

The first-run flow checks GPU/QVAC and PipeWire, records the wake phrase and model profile, optionally previews TTS, and sends a typed smoke-test prompt through the session bus.

Inspect the installed daemon with:

systemctl --user status jarvisd.service
journalctl --user -u jarvisd.service -f

The service uses the application directory ~/.local/share/jarvis-qvac, configuration under ~/.config/jarvis, model cache under the user's cache directory, and user data paths described in Operations.

Development commands

npm test                    # Node tests, including the vendored harness test
npm run gpu-doctor          # QVAC GPU, VRAM, and profile diagnostics
npm run cu-doctor           # Wayland/X11, portals, AT-SPI, and libei
npm run voice-doctor        # PipeWire, wake bridge, and playback diagnostics
npm run qvac:doctor         # QVAC installation diagnostics
npm run qvac:status         # Single-master runtime status
npm run package:test        # Build and inspect release artifacts
npm run first-run           # Interactive first-run setup
npm run start               # Start jarvisd in the current session

The optional QVAC OpenAI-compatible server is diagnostic infrastructure only. If used, it binds to 127.0.0.1 and must not become a second production inference owner beside jarvisd.

Computer use

Computer use is a mode, not default chat behavior. Say “take the wheel” or select Computer in ARC to request a grant. Jarvis then prefers domain actions, app D-Bus/GIO, AT-SPI references, GNOME Shell helpers, and finally vision coordinates. RemoteDesktop plus EIS/libei is the primary Wayland path.

Configure the local injector before live actuation:

export JARVIS_LIBEI_BRIDGE="<local-eis-injector-command>"

The helper will not claim input readiness without this bridge. Password fields, lock screens, dangerous keys, destructive targets, and actions outside the step budget are blocked or require confirmation. See the computer-use acceptance procedure.

Privacy and safety

  • No cloud API is required and no telemetry is enabled.
  • Microphone audio is ring-buffered in memory; raw audio is not saved by default.
  • Computer-use frames stay local in temporary storage and are wiped on revoke unless trace retention is enabled.
  • Audit records contain action metadata and screenshot hashes, not pixels.
  • QVAC is localhost-only. Model fetch and optional P2P features are explicit opt-ins.
  • The daemon runs as the user and must never run as root.

Read Security and privacy before enabling legacy input, retention, synchronization, or computer-use traces.

Build and release

Build the Debian package, extension bundle, and checksums locally:

npm ci
npm test
npm run package
cat dist/SHA256SUMS

Artifacts in dist are:

  • jarvis-qvac__.deb
  • jarvis-qvac-extension.zip
  • SHA256SUMS

Gitea Actions workflows live under .gitea/workflows. CI runs tests, Python checks, and package validation. A push to main additionally builds artifacts and replaces the mutable rolling prerelease using the repository secret RELEASE_TOKEN. Pull requests and non-main pushes do not publish a release.

See Gitea CI and rolling releases and the release checklist.

Uninstall and migration

The uninstall command requires an explicit flag and preserves user data:

bash packaging/uninstall.sh --yes

To remove Jarvis-owned memory, cache, and generated media as well:

bash packaging/uninstall.sh --yes --purge-data

Read Migration notes before upgrading or moving an installation.

Documentation

The documentation index is the authoritative guide.

Project status

Automated checks and repository implementation cover Phases 011. Before calling the deployment production-ready on a particular Ubuntu host, run the doctor commands and confirm QVAC reports the intended GPU, the wake bridge is configured, and the portal/EIS path is available.

S
Description
No description provided
Readme AGPL-3.0
3.3 MiB
Languages
JavaScript 87.8%
Python 7%
Shell 4.2%
CSS 1%