个人 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.