MarvisGitHub

Marvis AI · Privacy-First Desktop Copilot

Your screen, your meetings, your machine.

Marvis is a private personal AI assistant for macOS, Windows, and Linux. A floating bar sees your screen only with permission, transcribes your meetings, and answers through the AI providers you choose — your keys, history, and screen data never leave your device.

macOS, Windows, and Linux — the latest builds ship on GitHub Releases.

Free & Open Source · Apache-2.0No AccountNo Cloud Sync
Design sync — 4 participants

Design sync

mic + system audio · deepgram nova-2

LISTENING
allyouspeaker 13 lines1:12
0:04You

Before we dive in — did everyone see the new launch date?

0:41Speaker 1

Yes — moved to the 14th. Website copy needs to land by Friday, though.

1:12You

I can take the landing page — draft this week, then share it Friday

TLDR · Launch timing

Launch moved to the 14th; landing-page copy is due Friday; you’re drafting it.

What it does

Two jobs, done quietly — over everything you open.

Answers with your screen in context

Press ⌘⏎ (Ctrl+Enter on Windows/Linux) and the latest screen frame rides along with your prompt — “explain this”, “what changed”, “compare these”. The answer streams back as markdown into the overlay.

frames live in a 60-second memory ring — never on disk

Meetings, transcribed as they happen

Mic plus system audio become a speaker-labeled transcript while the call runs — pause and resume anytime, filter by voice, copy the whole thing. Every five turns, a rolling TLDR lands with follow-up questions you can ask in one click.

deepgram · whisper.cpp · sherpa — your engine, fully local if you want

Private by design

No account, no sync, no Marvis servers. Keys live in ~/.marvis masked to …last4, and calls go straight to the provider you pick — or to Ollama, fully on-device.

free & open source · Apache-2.0

BYOK · on-device speech

Your keys, your voice, your machine.

No accounts, no sync service, no Marvis servers. Marvis is BYOK — your provider keys live in keys.json and go only to the LLM you choose. Speech is local by default: Listen and dictation transcribe on-device with whisper.cpp or sherpa ASR models under models/, with hosted Deepgram strictly opt-in. An ask sends your prompt plus one screen frame to your LLM; every five turns the rolling TLDR sends transcript text to the same provider. Nothing else leaves.

Everything Marvis writes — one folder you own

~/.marvis/ ├── keys.json 0600 · BYOK — provider keys masked as …last4 in the UI ├── config.toml 0644 · providers, models, hotkeys, window position ├── marvis.db 0600 · SQLite — sessions, messages, transcripts, summaries ├── voiceprint.bin enrolled speaker embedding — pins mic’s speaker 0 to you ├── audios/ recording_*.wav at 0600 — retained session recordings ├── models/ on-device whisper + sherpa ASR/STT models, on demand └── tmp/ scratch audio workspace

The folder itself is 0700 — delete ~/.marvis and every trace of Marvis is gone.

0

accounts, cloud syncs, or Marvis servers — keys are never proxied; there is nothing to phone home to.

60s

of rolling screen context kept in memory — ≤120 frames, ≤64 MB, never on disk.

1

folder holds everything Marvis writes — keys, config, history, recordings, models — all under ~/.marvis.

Open source under Apache-2.0 — every claim on this page maps to a file in the repo.

The interface

One bar. Cards when you need them.

Everything floats above your work — a capsule at rest, an input for asks, and cards for chat, listen, and history in one grown window. These are the app’s real views, recreated faithfully. The toggle swaps in its dark theme.

FinderFileEditViewGoWindowHelpFri 9:41 AM

Where do my API keys actually live?

In keys.json inside ~/.marvis — a plaintext file at 0600 in a 0700 folder, with no copy anywhere else. The UI only ever shows the masked form, like …7B2q, so a typed key is never echoed back on screen.

bar · 172px idle → 600px grown · always on topask panel · 600px · drops 8px below the barframeless translucent webviews

At rest — a capsule

The bar idles as a 172px capsule: iris, screen-capture toggle, the Listen recorder, and history. Click the iris or just start typing — it morphs open.

state: mini

Ready to ask

The default gate. Type — or dictate with the mic — and ⌘⏎ (Ctrl+Enter on Windows/Linux) sends the latest screen frame with your question.

gate: main

Permission needed

Without Screen Recording, Marvis can’t see your screen — so the bar asks before anything else.

Screen recording needed
gate: needs_permission

Listen

The transcript writes itself.

Mic and system audio become a speaker-labeled document while the call runs — pause and resume, filter by voice, copy it all. Every five turns a TLDR lands with follow-ups you can fire straight into the session’s own chat. Finished meetings stay readable from History.

Design sync

mic + system audio · deepgram nova-2

LISTENING
allyouspeaker 13 lines1:12
0:04You

Before we dive in — did everyone see the new launch date?

0:41Speaker 1

Yes — moved to the 14th. Website copy needs to land by Friday, though.

1:12You

I can take the landing page — draft this week, then share it Friday

TLDR · Launch timing

Launch moved to the 14th; landing-page copy is due Friday; you’re drafting it.

listen card · 600pxone window, grown — chat · listen · history share the bandrolling summary every 5 turns

Always in reach

Five chords, all rebindable.

Click a binding in Settings → Hotkeys and press a new one, or edit [hotkeys] in ~/.marvis/config.toml. Inside the bar, four keys stay fixed. The bar itself drags anywhere and remembers; Settings → Bar snaps it to a work-area edge. ⌘ reads Ctrl on Windows and Linux.

Deep links

marvis://ask?text=what+changed+here

Focuses the bar and fires an Ask from any app — a browser, a script, a launcher. Any other marvis:// link just surfaces the overlay.

Global — rebindable

ActionShortcut
Show / hide the input⌘ ⌥ Space
Toggle screen capture⌘ ⌥ R
Start a Listen⌘ ⌥ T
Session history⌘ ⌥ H
Lock bar position⌘ ⇧ L

In the bar — fixed

ActionShortcut
SendEnter
New line⇧ Enter
Send with screen frame⌘ ⏎
Settings⌘ ,

Your model, your call

Bring your own everything.

API keys talk straight to the providers you pick — no Marvis proxy in the middle. Order them into a failover chain: a failed call hands off to the next configured provider.

OpenAIAnthropicGeminiOpenRouterOllama · localOpenAI-compatible

Transcription

Deepgram · streamingwhisper.cpp · localsherpa · local

Keys live in keys.json, shown masked — …last4. An optional vision provider reads each frame first, so any text model can still answer about your screen.

macOS

Apple Silicon & Intel · ScreenCaptureKitAvailable now

Windows

x86_64 · WGC capture · WASAPI audioAvailable now

Linux

x86_64 · XDG portal + PipeWireAvailable now

Built Different

Local-first vs. Cloud AI Copilots

Why privacy-first architecture matters for your screen, your meetings, and your proprietary work.

DimensionMarvis AI (Local & BYOK)Cloud AI Copilots
Architecture & Storage100% on-device; 0 cloud servers or syncCloud servers, remote storage & telemetry
Screen Context60s rolling RAM ring (≤64 MB); never on diskStored in cloud database or disk history
Meeting TranscriptionOn-device whisper.cpp & sherpa ASR (offline ready)Live audio streamed to third-party APIs
Model ChoiceBYOK: OpenAI, Claude, Gemini, Ollama & local serversLocked to single vendor subscription
Account & Identity0 accounts; no sign-in or tracking requiredAccount often required; billing applies to paid plans
License & CostFree & Open Source (Apache-2.0)Free tiers exist; paid plans may cost $20 – $30+ / user / month

Common Questions

Frequently asked questions

Everything you need to know about privacy, architecture, offline local models, and how Marvis works on your machine.

What is Marvis AI?

Marvis is a free, open-source personal AI copilot for macOS, Windows, and Linux. It sits in a subtle floating bar above your workspace, understands your screen with explicit permission, transcribes meetings locally, and connects directly to your chosen AI models with zero cloud storage.

How does Marvis protect user privacy compared to other AI assistants?

Marvis uses a local-first architecture. There are no user accounts, no telemetry servers, and no cloud synchronization. Your API keys are stored locally at 0600 permissions in ~/.marvis/keys.json and masked in the UI. Screen frames are kept only in a rolling 60-second in-memory ring (never saved to disk), and meeting transcription runs on-device using whisper.cpp and sherpa-onnx.

Can Marvis run completely offline with local models?

Yes. You can connect Marvis to local LLMs via Ollama or any OpenAI-compatible local server. Speech recognition runs fully offline using bundled whisper.cpp or sherpa models, enabling 100% air-gapped personal AI assistance on your machine.

Which operating systems and hardware are supported?

Marvis runs natively on macOS (Apple Silicon and Intel via ScreenCaptureKit), Windows (x86_64 via Windows Graphics Capture and WASAPI audio), and Linux (x86_64 via XDG desktop portal and PipeWire).

Which AI providers and speech engines can I use?

Marvis supports Bring Your Own Key (BYOK) for OpenAI, Anthropic Claude, Google Gemini, OpenRouter, and Ollama (local). For speech transcription, it supports on-device whisper.cpp, sherpa ASR, and optional streaming Deepgram.

Is Marvis really free and open source?

Yes, Marvis is 100% free and open-source software licensed under the Apache 2.0 license. The complete source code, build scripts, and desktop application releases are available publicly on GitHub.

Download Marvis for macOS, Windows, and Linux

Free and open source under Apache-2.0. Runs completely on your device with zero telemetry. Builds ship directly on GitHub Releases.

Latest release · v0.1.4