Purple
Linux · macOS · Local · Powered by Ollama · beta6

Purple

An agentic AI assistant that can actually do things on Linux and macOS.

Execute shell commands, manage your Gmail and Calendar, search the web, read Dropbox files, capture your screen, and run complex multi-step tasks — all from a beautiful local-first desktop window. No cloud, no subscription.

100% Local — zero cloud, zero telemetry
20+ Integrated tools
5 Approval tiers keep you in control
4 Distribution formats — Linux & macOS
What is Purple

A local AI client that goes beyond chat

Purple connects to your local Ollama instance and gives the model real tools to act on your Linux system. Unlike cloud assistants, it has no API key to manage, no usage caps, and no privacy trade-offs.

All data — conversation history, OAuth tokens, user memories, approval preferences — lives in a local SQLite database at ~/.purple/purple.db. Switch models instantly from the UI dropdown: Llama 3, Gemma, Mistral, Qwen, anything Ollama runs.

A configurable approval workflow gates every action by tier: read-only commands run silently, modification commands prompt once and remember your choice, destructive and sudo commands always require explicit confirmation.

Go 1.23 Ollama WebKitGTK 4.1 WKWebView SQLite Lua Linux macOS Gin HTTP
Purple App
Capabilities

Everything the model needs to act

Each tool has a defined approval tier — from fully automatic reads to explicit per-execution approval for destructive operations.

💻

Shell Command Execution

Run any command on your system. Read-only commands (ls, df, ps, find) run automatically. Destructive, sudo, and network-post commands prompt the user — every time, no exceptions.

5 tiers
📧

Gmail, Calendar & Drive

Search threads, read emails, send replies with image attachments, save drafts. Create, update, and delete calendar events. Search Drive, read and write Google Docs.

12 tools · OAuth2
📦

Dropbox Files

List folders, search by name or content, read text files, create new files, and overwrite existing ones — using raw HTTP for maximum compatibility.

5 tools · OAuth2
🔍

Web Search & Fetch

Search via Brave Search API or self-hosted SearXNG. Fetch and read the plain text of any URL. Open links or app URIs (Spotify, Slack, Netflix) via xdg-open.

Automatic · No approval
🧠

Persistent Memory

Facts about you — name, email, location, preferences — are stored across all conversations and injected into every system prompt so the model always knows context.

Cross-session · SQLite
📷

Screenshot & Camera

Capture your full screen with a visible 5-second countdown, or grab a frame from your webcam. Images are sent to multimodal models for analysis or emailed as attachments.

Multimodal
📎

File Upload

Attach images for multimodal prompts or text files that get appended to your message. Configurable upload limit (default 20 MB). Images sent as base64 to Ollama.

Image + text
🎬

Inline YouTube Player

When the model responds with a YouTube URL on its own line, the chat UI automatically embeds it as a playable inline video — no tab switching required.

Auto-embed
⚙️

In-app Settings

Configure Ollama server URL, Google OAuth credentials, Dropbox keys, and search API keys from a settings panel. No environment variables or config files needed.

DB-persisted
🧩

Lua Extensions & Model Adapters

Extend Purple yourself: drop sandboxed Lua scripts into ~/.purple/lua and each becomes a tool the model can call — with JSON helpers and an SSRF-guarded HTTP client. Model adapters bridge models that format their tool calls differently, like coder models, so Purple drives more local models out of the box.

Extensible · Sandboxed
🛡️

Kids Friendly Mode

Age-aware AI companion for children 5–16. Adapts language and tone, blocks sudo and write operations at the system level, and validates every web search result and URL for age-appropriateness. Password-protected.

Child safety
🧙

First-run Setup Wizard

If Ollama is not installed Purple walks you through the full setup: installs Ollama automatically (curl on Linux, Homebrew on macOS), checks your RAM, recommends a model, and streams the download live. Ready in minutes.

Zero-friction setup

Plan Review & Approvals

Agentic tasks propose a plan and wait for your go-ahead before running — approve it or request a change. During the work, anything that modifies your system, runs as root, or sends data asks first. Approvals wait as long as you need, so you can step away and answer hours later.

You're in control
🔁

Loop Detection & Reboot Resume

Detects when the model is stuck in a repetitive cycle and recovers gracefully — nudging it to fix a failing command rather than abandoning the whole task. When the model issues a reboot command, the session is saved and automatically resumed after the machine comes back online.

Reliability
Agentic Task Mode

Give it a complex task. Approve the plan. Watch it execute.

Click ▶ to start an Agentic conversation. Purple analyses your request and lays out a plan first — you Approve it or Request a change before any work runs. Then it executes step by step, dispatching tool calls in parallel and checking off progress, pausing for your approval on anything that touches your system. Approvals wait as long as you need — step away and answer hours later.

Purple App
Ollama Cloud

No strong hardware required

You don't need to have strong hardware — you can use Ollama hosted models with 3 tiers to match your needs and budget. Purple works with cloud-hosted models exactly the same way it works with local ones — just pull and select.

Pull a hosted model in one command:

terminal
$ ollama pull gemma4:31b-cloud
View Ollama pricing →
Purple showing a cloud-hosted Ollama model selected in the model dropdown
Child Safety

Kids Friendly Mode — AI your child can use safely

One button, one password. Enable Kids Friendly Mode and Purple becomes a safe, age-aware learning companion — adapting everything it says and does to the child's age, with no way to disable it without the parent's password.

  • 🧒 Age-adapted responses — tone, vocabulary, and depth tuned for children 5–16. Automatically redirects inappropriate questions.
  • 🚫 Hard-blocked operations — sudo commands and all write/send tools (file creation, Gmail send, Docs write) are blocked at the system level before any approval prompt.
  • 🔍 Web safety protocol — search results are assessed for age-appropriateness before display. Questionable results are silently skipped; unsafe URLs are never fetched.
  • 📚 Safe source preference — when fetching content, Purple prefers educational domains: Khan Academy, NASA, Britannica Kids, PBS Kids, and similar platforms.
  • 🔒 Password protected — enabling kids mode sets a protection password. Only someone with that password can disable the mode. Stored as a salted SHA-256 hash.
Purple App
👨‍👧

Kids Profile Mode — for dedicated child accounts

A deeper, always-on alternative that requires no passwords

Create a dedicated Linux account for your child and set PURPLE_KID_AGE=9 in their environment. Purple detects this automatically at startup — the model is locked to a safe choice, age-adapted responses are always active, conversation history is accessible, and parents can configure integrations from the child's account. The child cannot disable Kids Profile Mode. No passwords involved.

Kids Mode (🧒 toggle)
  • Manual toggle + password to disable
  • History locked
  • Settings hidden
  • Write tools blocked
Kids Profile (Linux account)
  • Always on — child cannot disable
  • History accessible
  • Settings visible for parents
  • File & cloud tools allowed

Kids Friendly Mode operates on a best-effort basis. As with all AI-generated content, accuracy and completeness cannot be guaranteed. This feature does not constitute a certified parental control system and may not prevent all exposure to inappropriate content. Parental supervision is recommended at all times.

Demo

See Purple in action

Watch a demonstration of agentic task execution — from planning through parallel tool calls to a completed result.

Download

Get Purple for Linux & macOS

Four distribution formats across two platforms. All require Ollama running locally at http://localhost:11434.

🐧 Linux
📦

AppImage

Self-contained executable — bundles GTK3 and WebKit2GTK4.1. Runs on any modern Linux with an X11 display. No installation required, no root needed.

115.6 MB AppImage
⬇  Download AppImage
🎁

RPM

Native RPM package. Installs to /usr/bin/purple and registers a desktop entry. Runtime dependencies (gtk3, webkit2gtk4.1) installed automatically via dnf.

7.5 MB RPM
⬇  Download RPM
🗜️

TGZ

Portable tarball with an install.sh helper. Run as a regular user to install to ~/.local, or with DESTDIR=/usr sudo ./install.sh for a system-wide install.

9.2 MB TGZ
⬇  Download TGZ
🍎 macOS
🍎

macOS DMG

Universal binary — runs natively on both Intel and Apple Silicon (M-series) Macs. Open the DMG, drag Purple.app to Applications, and launch. Requires macOS 12 Monterey or later and Ollama running locally.

28.9 MB macOS DMG
⬇  Download macOS DMG
Changelog

What's new

Recent release notes — tracking improvements from first alpha through beta6.

beta6 Jun 15 2026
  • Fixed: emoji and other special characters in a reply could briefly appear as garbled placeholder symbols while the message was still streaming in. The live text is no longer split in the middle of a character.
  • Fixed: AI-generated visualizations (charts and tables) were cut off at the bottom. The panel now resizes to show the whole thing.
  • Fixed: the chat view again scrolls down to the newest message after each reply.
  • Fixed: visualizations and generated PDFs now reappear when you reopen a conversation from history, instead of leaving only the text that referenced them.
  • Under the hood: a broad code-quality and automated-test pass across the app, with no change to how Purple behaves day to day.
beta5 Jun 12 2026
  • Review the plan before it runs: agentic tasks now show you the plan and wait for your go-ahead — Approve to start, or Request change to refine your instructions. Catches a wrong plan before it wastes time; per-command approvals still apply during the work.
  • Plans are saved in PURPLE.md and tasks resume: the plan and its progress are kept in a PURPLE.md file in your working folder, ticked off as steps finish. Reopen the task later and it continues from the first unfinished step instead of starting over; your own notes in PURPLE.md are preserved.
  • Smarter agentic tasks: in task mode Purple now analyses the request and lays out a short plan before it starts working, instead of jumping straight into commands — far more coherent on local models. Task mode also always runs with a roomy context.
  • Approvals wait for you with no time limit: a command, sudo password, or plan review now waits as long as it takes — step away for hours and it sits idle until you answer, instead of timing out and assuming "no".
  • Live command output follows along, then tidies up: while a command runs its output stays open and auto-scrolls so you see the latest progress; once it finishes the block collapses to just the command so a long task stays readable.
  • Consistent dialogs: Settings, the Lua panel, Kids Mode, feedback, the docs viewer and the first-run wizard now share one common dialog style and behave the same; press Esc to close whichever one is open. Plan checklists stay where they were made instead of overlapping at the top of the screen.
  • Lua extensions: add your own tools by dropping sandboxed Lua scripts into ~/.purple/lua — each becomes a tool the model can use, with new JSON helpers and an approval-gated, SSRF-guarded HTTP client.
  • Works with more local models: model adapters bridge models that format their tool calls differently (coder models in particular), so Purple can now drive models it previously could not. A built-in adapter ships for qwen2.5-coder and you can add your own in ~/.purple/lua/adapters.
  • Roomier context window and clearer limits: long tasks and big files have more room to work; when a request still does not fit, Purple tells you instead of returning a blank reply, and trims oversized attachments to fit.
  • More resilient long tasks: a single repeatedly-failing command no longer ends the whole task — Purple points out the failure and asks the model to fix it or try another way, and keeps work in the folder you pointed it at.
  • Create PDF: ask Purple to write reports, letters, invoices, or résumés and download them as a LaTeX file or a compiled PDF, right in the chat.
  • Automatic memory recall: Purple surfaces relevant remembered facts each message; memory now avoids duplicates and keeps what you use most.
  • More reliable on long tasks: better context management keeps key details to hand, can recall information set aside earlier, wraps up gracefully near the limit, and warns when a reply is cut short.
  • Faster local models: keeps the model loaded between messages, uses a leaner prompt, and adds hardware tuning options; setup now also installs the small embedding model that powers memory and search.
  • Smoother first-run setup: on Linux, when install needs administrator rights Purple gives you the exact command instead of failing silently.
  • Fixed: tasks no longer stall with a blank screen when the model gives no answer; data visualisations no longer get clipped at the top or bottom; code blocks that contain a literal triple-backtick (or a nested fenced block) now render cleanly in both the docs and chat instead of spilling out as plain text.
  • Security: Lua scripts can no longer reach private/local network addresses or leak access tokens and now require approval to run; running commands with administrator rights is hardened against shell injection.
beta4 Jun 06 2026
  • Address book: Purple now keeps a local contact list. Before sending an email it looks up the recipient automatically and saves new addresses for next time.
  • Your profile: tell Purple your name and email once and it remembers them across all conversations.
  • Settings panel now shows the app version, copyright, and update status. A download link appears when a newer version is available.
  • Fixed: Stop button now reliably cancels a running task. Feedback button appears immediately on startup.
beta3 Jun 05 2026
  • Setup wizard: on first launch Purple guides you through installing Ollama and downloading a model, with live progress output.
  • Google Workspace and Dropbox are pre-configured — no API credentials needed.
  • Feedback: "Give Feedback" button in the toolbar; auto-prompt after 30 min.
  • Reboot resume: when a task reboots the machine, Purple saves the session and continues automatically after restart.
  • Loop detection: Purple stops gracefully when the AI gets stuck repeating itself.
  • Background app launch: opening apps (Spotify, browser, VS Code) no longer blocks the AI — they start immediately in the background.
  • Live command output: terminal output streams in real time as commands run.
  • macOS: Cmd+C, Cmd+V, Cmd+X, Cmd+A, Undo and Redo now work correctly.
  • Privacy Policy and Terms of Service added to the website.
  • Fixed: update notifications no longer show when already on the latest version.
beta2 Jun 04 2026
  • Website updated with separate download sections for Linux and macOS.
beta1 Jun 04 2026
  • macOS desktop application — Purple now runs as a native window on macOS.
  • Native screen capture, file picker, and keyboard shortcuts on macOS.
  • Universal DMG installer works on both Intel and Apple Silicon Macs.

Cache refreshed: 2026-07-21 07:35 UTC

Matt Mierzwinski
About the author

Hi, I'm Matt.

I'm a Senior Engineering Manager — though ask anyone I work with and they'll tell you I'm still very much in the code most of the time. I genuinely believe that a good engineering manager has to love and understand technology. You can't lead engineers well from a distance; you need to get your hands dirty, feel the friction, and care about the craft. So I do.

I'm a Linux veteran. I've built Linux From Scratch more times than I'd consider sane, and I'm a long-time Gentoo Linux user and supporter. My heart is still with Gentoo — there's something deeply satisfying about understanding exactly what's on your system and why. But I built Purple for Fedora, because that's where most of my daily work happens these days. I've also packaged it as an AppImage so it can be useful to anyone on any modern Linux distribution, Gentoo included.

Purple is the assistant I always wanted: running on Linux, using local models, completely free and offline. No subscription, no API key, no one watching what you ask. I care about liberalising access to LLMs — the idea that powerful AI assistance shouldn't require a credit card or a cloud account. Everyone with decent hardware should be able to run a capable assistant locally. That's what Purple is about.

A few months of evenings and weekends later it had grown into something I was using every day. That's when I thought: maybe others would find this useful too. So I cleaned it up, wrote some documentation, built a proper installer, and decided to put it out there.

Purple is still very much a personal project. I build it for my own workflow, fix things when I hit them, and add features when I need them. It's not a commercial product — there's no support team, no SLA, no guarantee it'll work flawlessly on your setup. Like most open-source software, it comes with the understanding that it works for me and might work for you, and that some rough edges are part of the deal. I've done my best to make it solid, but I'm one person with a day job, and software is never perfect. Use it at your own discretion, and keep backups of anything important.

If Purple genuinely helps you — that makes the evenings worthwhile. And if something breaks, open an issue. I'll take a look.

Purple is provided as-is, without warranties of any kind, express or implied. The author makes no representations about fitness for a particular purpose, reliability, or correctness. Use it knowing it's a passion project, not a product.

Connect on LinkedIn →
Stack

Built with technologies I love

Every layer of Purple is built on open, proven tools — chosen for reliability, not popularity.