A fully local AI assistant for KDE Plasma 6, inspired by Tony Stark's iconic AI.
Powered by open-source LLM, speech recognition, and text-to-speech — 100% offline, 100% private.
![]() COMM — Chat Interface |
![]() SYSTEMS — Diagnostics |
![]() CONFIG — Quick Controls |
![]() Settings — LLM & Models |
![]() Settings — Voice Commands |
![]() Settings — J.A.R.V.I.S. |
| Feature | Description |
|---|---|
| Local LLM Chat | Conversational AI via llama.cpp — no cloud, no API keys |
| Self-Contained | Bundled llama.cpp + whisper.cpp — no separate installs needed |
| Bundled LLM Server | llama-server included, start/stop from settings UI |
| Wake Word | Say "Jarvis" to activate voice commands (bundled whisper.cpp, CPU-only) |
| Voice Commands | 14 built-in commands + fully customizable mappings |
| System Interaction | LLM can open apps, run commands, write files, type text |
| Text-to-Speech | Piper TTS with downloadable voices (espeak-ng fallback) |
| System Monitor | Real-time CPU, RAM, temperature, uptime display |
| Timers & Reminders | Quick presets and custom timers with audio alerts |
| Iron Man HUD | Arc reactor animation, waveform visualizer, holographic UI |
| Privacy First | Everything runs locally — no data ever leaves your machine |
# Arch Linux / Manjaro
sudo pacman -U jarvis-plasmoid-0.2.0-1-x86_64.pkg.tar.zst
# Or build from source:
sudo pacman -S qt6-base qt6-declarative qt6-multimedia qt6-speech \
plasma-framework extra-cmake-modules ki18n pipewire xdotool
# Fedora
sudo dnf install qt6-qtbase-devel qt6-qtdeclarative-devel qt6-qtmultimedia-devel \
qt6-qtspeech-devel plasma-framework-devel extra-cmake-modules kf6-ki18n-devel \
piper pipewire xdotool
# Ubuntu / Kubuntu (24.04+)
sudo apt install qt6-base-dev qt6-declarative-dev qt6-multimedia-dev qt6-speech-dev \
libplasma-dev extra-cmake-modules libkf6i18n-dev piper pipewire xdotool- llama-server — Automatically built from llama.cpp source during installation
- whisper.cpp — Bundled and built from source (v1.7.3)
- Piper TTS — Optional download via settings UI
Download the tiny English model for wake word detection:
mkdir -p ~/.local/share/jarvis
wget -O ~/.local/share/jarvis/ggml-tiny.en.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en.binJ.A.R.V.I.S. now includes a bundled llama-server. You can start/stop it from the plasmoid settings, or use your own external server.
To use the bundled server:
- Open J.A.R.V.I.S. settings → General tab
- Click "Start Bundled LLM Server"
- Download a model (e.g., Qwen 2.5 0.5B) using the built-in downloader
- The server will load the model automatically
Or continue using an external llama-server:
llama-server -m your-model.gguf --port 8080Works on any Linux distribution with KDE Plasma:
# Clone the repository
git clone https://github.com/novik133/jarvis.git
cd jarvis
# Run the universal installer (handles all dependencies automatically)
chmod +x install.sh
./install.shThe universal installer automatically:
- Detects your Linux distribution (Ubuntu, Debian, Fedora, openSUSE, Arch, etc.)
- Installs all required dependencies using the system package manager
- Builds llama.cpp and whisper.cpp from source
- Installs J.A.R.V.I.S. to your system
# Install from AUR or build package
makepkg -f
sudo pacman -U jarvis-plasmoid-*.pkg.tar.zst# Fedora
sudo dnf install qt6-qtbase-devel qt6-qtdeclarative-devel qt6-qtmultimedia-devel \
qt6-qtspeech-devel plasma-framework-devel extra-cmake-modules kf6-ki18n-devel \
piper pipewire xdotool
# Ubuntu / Kubuntu (24.04+)
sudo apt install qt6-base-dev qt6-declarative-dev qt6-multimedia-dev qt6-speech-dev \
libplasma-dev extra-cmake-modules libkf6i18n-dev piper pipewire xdotoolgit clone https://github.com/novik133/jarvis.git
cd jarvis
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make -j$(nproc)
sudo make install
# Restart Plasma
plasmashell --replace &- Right-click your Plasma panel
- Add Widgets... > Search for "Jarvis"
- Drag it to your panel or desktop
- Right-click the widget > Configure to set up LLM server and download voices
Right-click the J.A.R.V.I.S. widget > Configure to access:
- LLM server URL and model selection
- TTS voice selection and download
- Speech rate, pitch, and volume
- Wake word and audio settings
- Conversation memory length
- AI personality customization
- View and edit all voice command mappings
- Add custom commands (app launchers or shell commands)
- Reset to defaults
J.A.R.V.I.S. can interact with your system through natural language:
"Jarvis, open the terminal and run htop"
"Jarvis, create a file on my desktop called notes.md with today's meeting notes"
"Jarvis, open Kate and write a Python hello world script"
"Jarvis, what's my CPU temperature?"
The LLM generates structured action blocks that the backend executes:
- run_command — execute shell commands silently
- open_terminal — open a terminal with a command
- write_file — create files with content
- open_app — launch GUI applications
- open_url — open URLs in browser
- type_text — type text into the focused window
src/plugin/
jarvisbackend.h/.cpp Coordinator — composes all modules
jarvisplugin.h/.cpp QML plugin registration
settings/
jarvissettings.h/.cpp Persistence, model/voice lists, downloads
tts/
jarvisTts.h/.cpp Piper TTS + espeak-ng fallback
audio/
jarvisaudio.h/.cpp Audio capture, whisper.cpp, transcription
system/
jarvissystem.h/.cpp CPU/RAM/temp monitoring, clock
commands/
jarviscommands.h/.cpp Voice command mappings
package/
metadata.json Plasma applet metadata
contents/
ui/main.qml Main widget UI
ui/configGeneral.qml General settings page
ui/configCommands.qml Voice commands settings page
ui/configAbout.qml About page
config/config.qml Configuration tab model
J.A.R.V.I.S. is designed to be lightweight:
| Component | Memory | CPU (idle) | Notes |
|---|---|---|---|
| Plugin (C++ backend) | ~15 MB | <1% | Modular, lazy initialization |
| Whisper (wake word) | ~40 MB | ~2% | tiny.en model, 2 threads, 512 audio context |
| Piper TTS | ~0 MB idle | 0% idle | Spawns only when speaking, exits after |
| LLM Server | ~500 MB+ | Variable | Bundled llama-server — user starts via UI |
- Whisper runs in a background thread, never blocks the UI
- Piper TTS is a one-shot process per utterance (no persistent daemon)
- Audio buffer has amplitude threshold — whisper skips silent frames
- System monitor polls every 3 seconds (minimal /proc reads)
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.
Kamil 'Novik' Nowicki
- Website: kamilnowicki.com
- GitHub: github.com/novik133
- Email: kamil@kamilnowicki.com
If you find J.A.R.V.I.S. useful, consider supporting its development:
"At your service, Sir. All systems nominal."
Copyright © 2026 Kamil Nowicki. All rights reserved.





