Lattice
연구를 위한 작업공간
Marvis는 macOS·Windows·Linux용 개인 AI 비서로, 허가받은 화면을 인식해 회의를 기록하고 선택한 서비스로 답변합니다
Marvis is a private AI assistant for macOS, Windows, and Linux. A floating bar sees your screen with permission, transcribes your meetings, and answers through the providers you choose — your keys and
생산성Rust · TypeScriptGitHub @marvis-ai온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.