Standalone Agent Quickstart
The jarvis_agent.py runtime itself is distro-agnostic: it runs on any Linux system with
Ollama and its Python dependencies installed. The bundled launcher script, however, targets
Arch-based systems — see the note below. The agent does not require the custom kernel: its
system snapshot reads standard /proc and /sys/class/thermal interfaces, and the launcher
selects a model from available RAM in /proc/meminfo. Kernel integration via
/sys/class/misc/jarvis/ is used by the full JARVIS daemon (kernel_client.py), not the
standalone agent.
Quick start
# Ensure Ollama is running
systemctl start ollama
# Launch the agent (handles all setup automatically)
./test-jarvis-ollama.sh
The launcher will:
- Install system dependencies (
portaudio,python-pip,unzip) viapacman - Create a Python venv with
vosk,pyaudio,requests - Download the Vosk small English model (~45 MB) for offline STT
- Select an Ollama model based on available RAM
- Open a dedicated terminal window with the JARVIS agent
Arch-based systems only. The launcher installs dependencies exclusively through
pacmanand aborts on distros without it. On other distros, installportaudio,pip, andunzipwith your package manager, create a venv withvosk,pyaudio, andrequests, then runpython3 jarvis_agent.pydirectly withJARVIS_MODEL,OLLAMA_URL, andVOSK_MODEL_PATHset.
Selecting a model
# Force a specific model
JARVIS_MODEL=qwen3:8b ./test-jarvis-ollama.sh
# Point at a remote Ollama instance
OLLAMA_URL=http://192.168.1.10:11434 ./test-jarvis-ollama.sh
Agent commands
| Input | What happens |
|---|---|
sysmon |
Print current CPU%, RAM, temperature |
update my system |
Plan pacman -Syu, show DANGEROUS confirmation, run on approval |
Hey JARVIS <command> |
Voice wake phrase → transcribe → plan → execute |
quit / exit / Ctrl-C |
Graceful shutdown |
Action security tiers
The model classifies each planned command into a tier as part of its JSON plan; the agent enforces gates on those self-reported tiers:
| Tier | Example | Behaviour |
|---|---|---|
| SAFE | df -h, systemctl status |
Runs silently |
| ELEVATED | systemctl restart NetworkManager |
Runs, writes audit entry to /tmp/jarvis.log — except package-manager commands, which are force-escalated to DANGEROUS |
| DANGEROUS | pacman -Syu, pacman -S htop |
Blocked until user types y (auto-aborts after 30 s without an answer) |
| FORBIDDEN | rm -rf /, dd if=/dev/zero |
Plan rejected outright |
On approval, sudo commands prompt for your password via a KDE dialog
(kdialog/ksshaskpass) when available, and pacman install/remove/upgrade commands run
with --noconfirm — your single y is the only confirmation before execution.
Note: unlike the full JARVIS daemon’s TLA gate, the standalone agent performs no host-side payload inspection — tier accuracy depends on the model. A destructive command the model labels SAFE executes ungated.
No voice input available (vosk/pyaudio missing)? The agent falls back to text-only mode
automatically — see Troubleshooting to enable voice.
Changelog — corrected claims
2026-07-22:
- Removed the
/sys/class/misc/jarvis/sysmon/model-selection claim — the standalone agent reads only standard/procand/sys/class/thermalpaths; the kernel interface is consumed by the full daemon (project-jarvis/jarvis/kernel_client.py). - Scoped the “any Linux” claim:
jarvis_agent.pyis distro-agnostic, but the launcher installs dependencies viapacmanonly and aborts elsewhere (test-jarvis-ollama.sh:59-67); documented the manual non-Arch path. - Security tiers reworded: classification is self-reported by the model, gates read the model’s tier, and no host-side payload inspection exists (contrast the daemon’s TLA in
threat_level.py); “hard-blocked unconditionally” → “plan rejected outright” (jarvis_agent.py:481-497). - DANGEROUS confirmation documented as auto-aborting after 30 s (
jarvis_agent.py:506-513). - Added the previously undocumented sudo-askpass GUI rewrite and pacman
--noconfirminjection applied to every executed command (jarvis_agent.py:269-344, 358-363).