個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A privacy-first AI co-pilot that lives on your desktop.
翻譯準備中
正在載入完整 README。 以下為已儲存的摘錄。
Private / Personal AI for All — a privacy-first AI
co-pilot that lives on your desktop.
Marvis is an always-available assistant that floats above your workspace as a
small translucent bar. It can see your screen (with your permission), hear
your meetings, answer questions about what's on screen, and stream responses
into an overlay panel — all while keeping your API keys, history, and screen
data entirely on your machine. No accounts, no cloud sync, nothing leaves
your device except the requests you send to the providers you choose.檢視完整 README ↗Marvis is an always-available assistant that floats above your workspace as a small translucent bar. It can see your screen (with your permission), hear your meetings, answer questions about what's on screen, and stream responses into an overlay panel — all while keeping your API keys, history, and screen data entirely on your machine. No accounts, no cloud sync, nothing leaves your device except the requests you send to the providers you choose.
Tauri 2 + Rust + React — the Rust core owns all sensitive logic (capture, audio, keys, storage) and the webview is UI only.
Cmd/Ctrl+Enter; Marvis grabs
the latest screen frame, sends it with your prompt to your LLM, and
streams the answer back as markdown. Screen content stays in an
in-memory ring buffer (~60 s horizon, capped at 120 frames / 64 MB) —
screenshots are never written to disk. An optional vision provider
can read the frame first and answer over its text description.whisper-cli (bundled whisper.cpp sidecar; tiny / base /
small models downloaded on demand from Hugging Face).Cmd/Ctrl+Alt+Space shows/hides the bar's
input, rebindable (see Hotkeys).marvis://ask?text=... focuses the bar and fires an Ask;
any other marvis:// link just surfaces the app.~/.marvis/marvis.db (0600 on macOS/Linux).| Screen capture | System audio | Screen consent | |
|---|---|---|---|
| macOS (Apple Silicon / Intel) | ScreenCaptureKit | ScreenCaptureKit | Screen Recording permission |
| Windows (x86_64) | Windows.Graphics.Capture | WASAPI loopback | none — WGC is the consent boundary |
| Linux (x86_64) | XDG portal + PipeWire | PulseAudio monitor | portal picker (persisted token) |
Build tooling:
xcode-select --install)webkit2gtk-4.1, gtk-3, appindicator, PipeWire and
PulseAudio dev packages — see .github/workflows/marvis-build.yml
for the exact apt list# install dependencies
bun install
# run the desktop app (vite dev server + tauri dev)
bun run build:dev
On first launch, the onboarding wizard walks you through appearance → screen consent → a provider key (validated before saving, or pick an Ollama model) → optional voice models for local transcription. The floating bar appears once onboarding completes and consent exists — instantly on Windows (no preflight), after the portal pick on Linux.
Other root scripts:
bun run dev # vite/next dev servers only (no desktop shell)
bun run build # build all workspaces
bun run lint # lint all workspaces
bun run check-types # typecheck all workspaces
Rust unit tests for the Tauri core:
cd apps/native/src-tauri && cargo test
The one global chord is rebindable under [hotkeys] in
~/.marvis/config.toml or Settings → Hotkeys:
| Action | Shortcut |
|---|---|
| Show / hide the input | Cmd/Ctrl+Alt+Space |
Fixed keys inside the bar (they fire only while it's focused):
| Action | Shortcut |
|---|---|
| Open settings | Cmd/Ctrl+, |
| Send | Enter |
| New line | Shift+Enter |
| Send with screenshot | Cmd/Ctrl+Enter |
The bar itself moves by pointer drag or the Settings → Bar edge picker — there are no fixed move/scroll/click-through shortcuts.
Turborepo monorepo managed with Bun workspaces:
apps/
native/ # Marvis desktop app (see apps/native/README.md)
src/ # React 19 webview (Vite + Tailwind 4) — UI only
src-tauri/ # Rust core: windows, capture, audio, STT, LLM adapters,
# storage, hotkeys, permissions, deep links
web/ # Next.js marketing/web app
packages/
ui/ # @marvis/ui — shared component library
functions/ # Waitlist endpoint (Neon/Hono)
db/ # Waitlist SQL migrations
assets/ # Brand SVGs and the landing-page prototype
docs/
superpowers/ # design specs and implementation plans
The Rust core (apps/native/src-tauri/src/) is where everything sensitive
happens — screen capture, audio, keystorage, LLM streaming, persistence.
The React webview renders views selected by ?view= per window and talks
to the core through typed invoke() commands and events. Secrets and image
bytes never cross that boundary. See
apps/native/README.md for the full architecture.
Everything Marvis writes lives in a single dotdir — ~/.marvis
(%USERPROFILE%\.marvis on Windows), created 0700 where the OS has
mode bits — no platform application-data dir, no temp files:
~/.marvis/
├── keys.json # 0600 — plaintext provider → API key map (see note)
├── config.toml # 0644 — non-secret prefs (providers, hotkeys, window pos)
├── marvis.db # 0600 — SQLite sessions, messages, transcripts, summaries
└── models/whisper/ # downloaded ggml whisper models (tiny / base / small)
Honest note: keys.json is plaintext inside the 0700 root
(mode bits are macOS/Linux; on Windows the user-profile ACL covers it)
— there is no encryption in the current build. Keys are never
serialized to the UI (masked …last4 only) and never logged.
North star: a screen-aware copilot with a meeting assistant built in — its own memory on your machine, tools and skills, and simple agentic loops under your approval. The full plan lives in ROADMAP.md; phases are ordered by dependency, not date.
exploring — design discussions on GitHub issues first.Contributions are welcome — bug reports and feature requests go to GitHub issues, and pull requests are appreciated. A few conventions that keep the codebase consistent:
cargo test in apps/native/src-tauri — unit tests
live beside their modules; AppState::for_test binds every filesystem
path under a temp root, so tests never touch ~/.marvis.@marvis/ui with Icon-suffixed names (XIcon, InfoIcon).apps/native/DESIGN.md — one accent hue,
hairline borders, motion only when it communicates state.apps/native/src/lib/commands.ts / events.ts and the Rust emits
together.See CONTRIBUTING.md for the full contributor guide.
Marvis handles screen captures, microphone audio, and provider API keys. If you find a vulnerability, please report it privately to [email protected] instead of opening a public issue — see SECURITY.md for the full policy.
Marvis is open source under the Apache License 2.0 © 2026 Marvis AI.
Inspired by Cheating Daddy.