Skip to content

Latest commit

 

History

124 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PlasmaLLM

PlasmaLLM is a system-aware AI assistant widget for the KDE Plasma 6 desktop. It provides a native interface to various LLM endpoints, integrating system information gathering, web search, and shell command execution directly into your desktop workflow.

License: GPL-2.0-or-later KDE Plasma 6 Qt 6

PlasmaLLM is designed for quick tasks and system-integrated workflows—not as a replacement for full-featured chat applications. It excels at answering technical questions about your system, running terminal commands, and providing an agentic interface for desktop automation.

Features

  • Multi-Provider Support: Connects to Ollama, LM Studio, OpenAI, Anthropic Claude, Google Gemini, OpenCode Zen/Go, and any OpenAI-compatible API.
  • System Awareness: Optionally gathers hardware, OS, and environment info to provide context for assistant responses.
  • Tool-Calling System: Modular architecture allowing LLMs to interact with the filesystem, run shell commands, and fetch web data (with user approval).
  • Interactive Terminal Blocks: View, copy, or execute suggested terminal commands. Supports session multiplexing via tmux or screen.
  • Web Search Integration: Native support for DuckDuckGo and SearXNG.
  • Vision Support: Supports image attachments for providers with multimodal capabilities (e.g., Gemini).
  • Voice Input (STT): Hold-to-talk microphone that transcribes via an OpenAI-compatible /audio/transcriptions API (e.g. OpenRouter openai/gpt-transcribe) or a local OpenAI Whisper CLI, then sends the text to your active chat profile.
  • Secure Storage: Integrates with KWallet for secure management of API keys and secrets.
  • Markdown Rendering: Full support for markdown, including syntax highlighting for code blocks and LaTeX for mathematical notation.
  • Context Compaction: Save tokens and speed up local model processing by reducing the size of the context that needs to process.

Requirements

  • KDE Plasma 6.0+
  • Qt 6
  • Optional: python3-matplotlib, python3-dbus, and python3-gobject (or distro equivalents) for Mathtext LaTeX rendering
  • Optional: qt6-qtmultimedia (or distro equivalent) for microphone capture via Qt Multimedia (Voice Input)
  • Optional: pw-record, ffmpeg, or arecord as a shell fallback if Qt capture is unavailable (Voice Input)
  • Optional: OpenAI Whisper CLI (whisper from the openai-whisper Python package) for local speech-to-text
  • Optional: tmux or screen for session multiplexing.

Voice input setup

  1. Open Configure PlasmaLLM → Speech to Text.
  2. Enable microphone input.
  3. Choose STT backend.

OpenAI-compatible API

  1. Choose a provider (e.g. OpenRouter), confirm endpoint https://openrouter.ai/api/v1.
  2. Click Fetch models (this queries transcription models — OpenRouter does not list them on the normal chat model list).
  3. Select a model such as openai/gpt-transcribe, save your API key.

OpenAI Whisper (local CLI)

  1. Select OpenAI Whisper (local CLI).
  2. Set Command if whisper is not on your PATH. The field is a prefix inserted as-is, for example python3 -m whisper or toolbox run whisper.
  3. Choose a model (base is the default). The first run may download weights into ~/.cache/whisper.
  4. Optional: task (transcribe/translate), device (cpu/cuda), FP16, threads, initial prompt, extra CLI args.
  5. Use Test CLI to confirm the command responds to --help. No STT API key is required.

Then, for either backend:

  1. Mic button mode:
    • Auto (default): short click toggles recording; press and hold (~250 ms+) for push-to-talk until release.
    • Hold to talk: press-and-hold only.
    • Toggle: click to start, click again to stop and send.
  2. Optional: set a Voice shortcut (default Ctrl+M) while the panel is open and focused. It follows the same Mic button mode (auto / hold / toggle). Clear the field to disable. To open the panel from elsewhere, use Activate widget on the dialog’s Shortcuts page.
  3. Your active chat profile (General page) is still used for the conversation; STT is only the speech engine.

Screenshots

image image image image image image

Installation

From the KDE Store

You can install PlasmaLLM directly from the Plasma widget explorer: Add WidgetsGet New WidgetsDownload New Plasma Widgets → Search for "PlasmaLLM".

From GitHub Releases

Download the latest .plasmoid file from the Releases page:

plasmapkg2 --install PlasmaLLM-*.plasmoid

From Source

Note: Building code directly from master branch may pull in unreleased features without translations from English. Translations are only done in release prep. Checkout a specific tag first if you'd prefer to build a particular release.

git clone https://github.com/joshuaeroman/plasmallm.git
cd plasmallm
make install
plasmashell --replace &

For development (symlinks the package directory):

make install-dev

Configuration

Right-click the widget and select Configure PlasmaLLM...:

  • General: Set your provider, model, and API keys.
  • Appearance: Configure fonts, bubble styles, and interface behavior.
  • Tools: Enable/disable specific tools and configure the filesystem whitelist for sandboxed operations. Finished tool results collapse to a small pill by default (per-tool toggle); click to expand.
  • Tasks: Manage custom script tools and shell command templates.
  • Skills: Discover and toggle Agent Skills (SKILL.md folders or <name>.md files) loaded on demand. PlasmaLLM ships a bundled create-skill helper; add your own under ~/.local/share/plasmallm/skills/ or extra directories in Settings. Skills may include .sh scripts run via run_skill_script; enable “Allow running skill scripts without approval” per skill in Settings. Use /skills in chat to list what is available.

Support

If you find this widget useful, please consider supporting the KDE Project.

License

This project is licensed under the GNU General Public License v2.0 or later.

AI Disclosure

This project was created with extensive use of AI-based tooling.

Releases

Used by

Contributors

Languages