salahasfan02/Jarvis

🟒 A private, local AI assistant for macOS β€” voice, vision, and automation powered by local LLMs via Ollama. 100% on your machine. No cloud, no API keys.

Python

2

73 commits

updated Oct 16, 2026

See the code

See what people are saying

SourceMessageScoreDate

I built Jarvis β€” a local AI assistant for macOS that runs on Ollama: voice, screen reading, Mac control, web research with sources, and agent teams (r/coolgithubprojects)

I've been building a JARVIS-style assistant for my Mac that runs on local models through Ollama. No accounts and no API keys, and the model never leaves the machine. It's free for noncommercial use and on GitHub: [https://github.com/salahasfan02/Jarvis](https://github.com/salahasfan02/Jarvis) What…

1

Oct 18, 2026

I built Jarvis β€” a local AI assistant for macOS that runs on Ollama: voice, screen reading, Mac control, web research with sources, and agent teams (r/ollama)

I've been building a JARVIS-style assistant for my Mac that runs on local models through Ollama. No accounts and no API keys, and the model never leaves the machine. It's free for noncommercial use and on GitHub: [https://github.com/salahasfan02/Jarvis](https://github.com/salahasfan02/Jarvis) What…

0

Oct 18, 2026

README

🟒 Jarvis

A private, local AI operating system for your Mac.

Voice. Vision. Automation. Memory. 100% on your machine β€” no cloud, no API keys, no subscriptions.

Jarvis turns your MacBook into the AI assistant from the movies: talk to it, let it see your screen and camera, control your apps, remember everything about you, and get real work done β€” all powered by local LLMs through Ollama. Nothing ever leaves your Mac.

macOS Python TypeScript Ollama Local & Private License: Noncommercial

⭐ If this looks cool, star the repo β€” it genuinely helps.

Buy Me A Coffee


Jarvis demo


🧠 Why Jarvis?

Every AI assistant wants your data in the cloud. Jarvis doesn't.

  • πŸ”’ Totally private β€” runs on local models via Ollama. No accounts, no API keys, no telemetry. Your conversations, screen, camera, files, and memories never leave your machine.
  • πŸŽ™οΈ Voice-first β€” say "Jarvis…" and it wakes up (with a chime), listens with offline Whisper, and replies in a human neural voice. Have a real back-and-forth conversation, hands-free.
  • πŸ‘οΈ It can actually see β€” reads your screen with Apple's OCR, watches through your camera, and answers questions about whatever's in front of you.
  • 🌐 It knows what's going on β€” researches the web, reads the best pages and answers with numbered sources; live weather without an API key.
  • 🦾 It does things β€” opens apps, controls your browser, plays anything on Apple Music, switches your smart lights, makes FaceTime calls, takes photos, drafts emails, manages files, runs code β€” with a permission prompt before anything touches your system.
  • πŸ“± It's in your pocket β€” message it on Telegram, and "send that to me" puts any answer, chat or document on your phone.
  • 🧩 It's an OS, not a chatbot β€” a living command-center dashboard with agents, agents and teams of agents you build on a canvas and talk to by name, projects, long-term memory, and a plugin system it can extend itself.
  • πŸ†“ Free & source-available β€” free for any noncommercial use. Fork it, hack it, make it yours.

πŸ“Έ Screenshots

The Core β€” ask anything by voice or text; answers come with their sources, and your Mac's vitals sit alongside Core

Research with sources β€” Jarvis searches the web, reads the best pages and cites every claim Chat

Agents β€” make an agent for a job, or a team of agents on a canvas, and bring agents and teams into bigger teams Agents

A team with a whole IT team and a Writer linked inA single agent's finished job, with the file it saved
Team with linked cardsAgent results

Talk to β€” choose who your message goes to: Jarvis, or any of your agents and teams (shown over the new glyph-field background) Talk to

Routines β€” things it does on its ownSetup check β€” every permission, one click to fix
RoutinesSetup check
Long-term MemoryCustom Skills
MemorySkills
Smart lights in Settings⌘K β€” jump anywhere, or just ask
SettingsCommand palette

Self-improvement β€” what it couldn't do yet, logged and ranked so it can build it Capabilities


✨ What it can do

πŸŽ™οΈ Voice

  • Wake word ("Jarvis…") with an audible chime β€” robust to room noise, no phantom wakes
  • Offline speech recognition (Whisper small.en) β€” works in any browser
  • Say "stop" any time to halt what it's doing Β· talk over it β€” it lowers its voice at once, and "Jarvis…" (or, in conversation mode, any reply) interrupts
  • Short spoken answers β€” a couple of sentences when you're talking, with "Want the details?"
  • Human-sounding neural voices (Kokoro TTS)
  • Sentence-streaming replies (talks as it thinks)
  • Conversation mode β€” reply without repeating the wake word

πŸ‘οΈ Vision

  • Read the exact text on your screen (Apple Vision OCR)
  • Live camera β€” "open the camera and tell me what you see"
  • Take photos β€” "take a picture" counts down, snaps and saves it in Pictures β€Ί Jarvis (or press the shutter, with a 3 s or 10 s timer) Β· "take a selfie and send it to me" / "send me that picture" puts it on your phone, as a photo in the Telegram chat
  • You always know β€” a glowing frame surrounds your screen whenever Jarvis reads or controls it
  • Screen watch β€” "tell me when the download finishes"
  • Screen memory β€” auto-journals what you're working on

🦾 Mac Automation

  • Full control of any app β€” presses buttons (even icon-only ones) by name through macOS Accessibility, fills in fields, types, keyboard shortcuts, scrolls and drags Β· Esc is the emergency stop Β· password managers, System Settings, terminals and banking sites are off-limits (editable)
  • Shortcuts β€” runs any of your macOS Shortcuts (HomeKit scenes, Focus modes…)
  • Activity & undo β€” every action logged; "undo that" moves files back, restores overwritten or trashed ones, removes what it created
  • Open apps and files by name ("open my CV"), control windows, notifications, clipboard
  • Browser agent β€” clicks links and buttons on any page, closes tabs by name, reuses your tabs
  • Apple Music β€” "play Espresso by Sabrina Carpenter" plays any song in the Apple Music catalogue, not just your library (needs a subscription), without adding it to your library Β· "put on some relaxing jazz" Β· YouTube when you ask for it
  • Smart lights β€” Tapo & Kasa bulbs on your Wi-Fi: "lights off", "dim the lights", "make the bedroom light blue", "warm white at 40%", or a routine like "turn the lights off at 11pm every night" Β· works alongside Alexa
  • Calendar β€” "what's on my calendar tomorrow?" (all calendars, repeating events included) Β· Notes, Reminders β€” read and create; "remind me at 6 to call Sam" keeps the time (in Arabic too)
  • Email β€” "summarize my emails", "any new mail from Sam?", reply, draft, or send with attachments by name ("email my CV to…"); you approve every email first Β· draft iMessages
  • Knows your people β€” "email my landlord" finds them in Jarvis's memory or your Contacts
  • FaceTime β€” "FaceTime Salah's business number", "video call mum", "FaceTime audio Sam" β€” finds the person and the right number (the one labelled work, mobile, home…) in your saved people and Contacts, shows you exactly who and which number, then calls Β· with Accessibility allowed it also presses FaceTime's own Call prompt Β· "phone the office through my iPhone" makes an ordinary call

πŸ§‘β€πŸ’» Developer Workspace

  • Unified Chat + Code modes
  • Run code in a sandbox β€” Python, JS/TS, C/C++, Go, Rust, Java
  • Multi-file projects, package installs, live HTML preview
  • Senior-engineer coding agent (review, refactor, tests, docs)

🧠 Memory & Knowledge

  • Long-term memory β€” remembers your preferences & projects
  • Auto-capture β€” learns facts as you talk (toggleable)
  • Document RAG β€” drop in PDFs/Word/Excel, or index a whole folder, and search it by meaning
  • Documents β€” read & compare PDFs/Word, create Word, Excel and PowerPoint files, fill in PDF forms, then email or send them
  • Projects β€” per-project memory across conversations

πŸ•΅οΈ Research

  • Researches the web for you β€” searches (DuckDuckGo, then Bing), reads the top pages, keeps the passages that answer the question and replies with numbered citations and a Sources list
  • Live weather β€” "do I need an umbrella tomorrow?" (Open-Meteo, no API key)
  • Research reports β€” "research the best budget e-bikes and write me a Word doc" β†’ a .docx with its sources
  • Scoped search: GitHub, Stack Overflow, Reddit, arXiv, YouTube

πŸ€– Intelligence

  • Auto-routing agents (research, coding, media, vision…)
  • Agents & teams β€” make a single agent for a job (say what it does; let it research the web and make files), or a team on a canvas: connect agents and the one you talk to works out what's needed, briefs each agent it's connected to (backend, frontend, marketing, market research…) and brings their work together. Web pages they make go live straight away. Ready-made Startup, Research & writing and IT teams (an IT lead with helpdesk, Microsoft 365, network, servers, security, scripting, software, SQL, assets and documentation specialists)
  • Teams inside teams β€” Import any of your agents or teams into another team as a linked card: it stays in step with the original, and its own lead runs it when the bigger team hands it work
  • Talk to any of them β€” pick an agent or team under Talk to on the Core or in Chat, or just say "ask the IT team to set up a new starter on Monday" / "ask Writer to draft a welcome email"; it works in the background and the answer comes back into the chat
  • Multi-step task planner with a live checklist
  • Custom Skills β€” save prompts, invoke with /name, import/export
  • Self-improving β€” logs what it can't do and can write its own tools
  • Multi-model β€” assign models per task, benchmark them
  • Fast by design β€” only the tools a request needs go into the prompt, so even a 14B model answers quickly
  • Honest by design β€” it never says it sent, saved or booked something unless a tool actually did it, it respects a "no", and it doesn't repeat itself
  • Built-in eval suite β€” nearly 100 real requests replayed against fake tools to check every model change, and it learns from real mistakes: slips and "that's wrong" become new test cases
  • Long conversations β€” older turns are summarized in the background so nothing falls out of the model's memory
  • Instant commands β€” "open YouTube", "open Safari", "pause" run in well under a second, no model needed

🎨 Make it yours

Themes (hacker green, dark blue, cyberpunk, light), four Core designs, your own accent colour or picture β€” and a glyph field background: a quiet field of characters with waves of light drifting through it, rippling out from wherever you click.

πŸ–₯️ Menu-bar Quick Command

Hit βŒ₯Space from any app to summon a floating command bar β€” ask about what's on your screen, get an answer, and get back to work without switching windows. Inside Jarvis, ⌘K jumps to any page, chat or action β€” or just asks.

β˜€οΈ Daily Briefing

"Jarvis, give me my daily briefing" β†’ live weather, today's calendar, and your reminders, narrated.

πŸ“± Text Jarvis from your phone

Message Jarvis on Telegram from anywhere. It does the work on your Mac and replies in the chat:

  • "Send me the lease PDF from my Downloads" β†’ finds the file and sends it to you
  • "Research the best budget e-bikes and send me a Word doc" β†’ searches, writes a .docx with sources, sends it
  • πŸŽ™ Voice notes in, voice notes back Β· send it files or photos to ask about Β· approve risky actions with one tap
  • "Send that to me" at the Mac β†’ the answer you just got arrives on your phone Β· "send me the whole chat" Β· "put that in a document and send it to me" β†’ a Word file in Telegram
  • A message cut off by a restart is offered back, so nothing you asked for gets lost

Two-minute setup β€” see Phone setup.


πŸš€ Quick Start

# 1. Python 3.11+  β€”  macOS's built-in python3 is 3.9, which can't run Jarvis
brew install [email protected]          # skip if `python3 --version` already says 3.11+

# 2. Install Ollama and pull a model (https://ollama.com/download)
ollama pull qwen2.5:14b

# 3. Clone and run everything with one command
git clone https://github.com/Salahasfan02/Jarvis.git
cd Jarvis
chmod +x start.sh && ./start.sh

start.sh finds a Python 3.11+ on its own, installs everything on the first run (and again whenever a git pull changes the dependencies), and retries an install that was interrupted.

Your browser opens at http://localhost:5173 and Jarvis is live. Press Ctrl+C (or ./stop.sh) to turn it off. Nothing auto-starts; it only runs when you start it.

πŸ”§ Your model is picked for you. If the configured model (llama3.1 by default) isn't installed, Jarvis switches to one you have β€” qwen2.5:14b above. Change it anytime in Settings β†’ Model.

πŸ” macOS will ask for permissions. The first time Jarvis reads your screen, uses the camera, reads your calendar, or drives another app, macOS prompts for Screen Recording, Camera, Microphone, Calendars, Automation (Mail, Safari, Music) and Accessibility. Grant them in System Settings β†’ Privacy & Security. Email features use the Mail app, so add your accounts (iCloud, Gmail, Outlook…) there.

Prefer the native desktop app?

The Electron shell is a wrapper around the running stack, not a standalone build β€” in dev it loads the Vite UI from http://localhost:5173, and it launches the backend using backend/.venv. So bring the stack up first:

./start.sh          # terminal 1 β€” leave this running

cd desktop          # terminal 2
npm install
npm start           # run it from the repo, or:
npm run install-app # build Jarvis.app, put it in Applications and open it

The desktop app adds a menu-bar icon, the βŒ₯Space quick command, a βŒ˜β‡§J floating window, and "Open at Login."

Note that npm run package records the path to this clone's backend in ~/.jarvis/backend_path. The resulting Jarvis.app still needs this repo on disk β€” a fully self-contained bundle is on the roadmap.

Run each piece manually
# Terminal 1 β€” Ollama
ollama serve

# Terminal 2 β€” backend   (use an explicit 3.11+ interpreter, not bare `python3`)
cd backend && /opt/homebrew/bin/python3.12 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python run.py            # β†’ http://127.0.0.1:8765

# Terminal 3 β€” UI
cd frontend && npm install && npm run dev   # β†’ http://localhost:5173

Level up (optional, all local)

ollama pull nomic-embed-text   # semantic memory + smarter agent routing
ollama pull llama3.2:3b        # a small, fast helper for titles and background work
ollama pull qwen3.5            # camera & screen vision

Then open Settings to enable them, download the offline Whisper and human Kokoro voice models, pick your theme, and set your wake word.

πŸ–₯️ Install as a Mac app

cd desktop && npm run install-app builds Jarvis.app (with its own icon), signs it locally and installs it in Applications. It starts Ollama if needed, only ever runs once, and can open at login (Settings β†’ Desktop app). It's a new app to macOS, so allow the microphone, camera, Accessibility, Screen Recording, Calendars and Reminders once β€” Setup check lists anything still missing, with a fix button for each (and a restart button when macOS needs one).

The installer signs with a certificate it makes once on your Mac (Jarvis Local Signing), so the permissions you grant survive every rebuild β€” no re-allowing after an update.

πŸ“± Phone setup (Telegram)

  1. In Telegram, message @BotFather, send /newbot, pick a name, and copy the token it gives you.
  2. In Jarvis, open Settings β†’ Phone (Telegram), paste the token, and press Connect.
  3. Send the /pair 123456 code shown there to your new bot from your phone β€” or press Open in Telegram if Telegram is on your Mac. That's it.

Things to know:

  • Nothing is exposed to the internet. Jarvis polls Telegram with outbound requests only β€” no port forwarding, tunnel, or public URL. Your Mac must be awake with Jarvis running (on power, enable Prevent automatic sleeping in System Settings β†’ Battery/Energy).
  • Only paired accounts get answers; everyone else is ignored. Anything that needs permission (sending a file, reading your messages…) asks with Allow / Deny buttons, or reply yes / no. Dangerous tools (shell, AppleScript, deleting files) are blocked from the phone unless you switch them on.
  • Privacy trade-off: Telegram bot chats aren't end-to-end encrypted, so what you send and receive passes through Telegram's servers. The feature is off until you set it up.
  • Telegram bots can't take phone calls β€” voice notes are the hands-free way in (needs the Whisper model; voice replies need Kokoro). Files: up to 50 MB to your phone, 20 MB from it.
  • Word documents are saved in ~/Documents/Jarvis; files you send Jarvis land in ~/Downloads/Jarvis. /new starts a fresh conversation, /stop cancels.
  • Once paired, "send that to me" at the Mac goes to this chat too.

πŸ’‘ Smart lights setup (Tapo / Kasa)

  1. Make sure your Mac is on the same Wi-Fi as the lights.
  2. In Jarvis, open Settings β†’ Smart lights, type your Tapo account email and password, and press Connect. Jarvis finds every light on the network and lists it with a switch, brightness and colours.
  3. Say "lights off" β€” or put the lights in a routine.

Things to know:

  • Your password isn't saved. It's used once to connect; Jarvis keeps only a key for each light (~/.jarvis/lights.json, readable only by you), which can't sign in to your Tapo account.
  • Jarvis talks to the lights directly on your Wi-Fi, so Alexa and the Tapo app keep working. Cameras and other Tapo devices are left alone.
  • If a light moves to a new address on your network, Jarvis finds it again by itself.
  • Newer Tapo firmware only lets other apps in when Third-Party Compatibility is on in the Tapo app (Me β†’ Tapo Lab, or Me β†’ Third-Party Services). If Jarvis says your light didn't accept a correct password, turn that on.

πŸ”§ Troubleshooting

"backend/.venv uses Python 3.9" / ResolutionImpossible for onnxruntime

An environment from an older setup was built with macOS's Python 3.9. Install a newer Python, delete the backend/.venv folder, and start again β€” start.sh rebuilds it with 3.11+:

brew install [email protected]
rm -rf backend/.venv && ./start.sh
"Jarvis" doesn't react to the wake word
  • In a browser, click anywhere on the Jarvis page once after it opens β€” browsers keep audio off until you do (the Core says "Click anywhere so I can hear you"). The desktop app doesn't need this.
  • Download the Whisper model in Settings β†’ Voice (offline, and far more reliable than the browser's recognizer).
  • Grant Microphone access to your browser / Jarvis.app in System Settings β†’ Privacy & Security.
First message fails with a model error

The active model doesn't exist locally. Run ollama list to see what you actually have, then pick one of those in Settings β†’ Model. The out-of-the-box default is llama3.1.

The desktop app opens a blank window

In dev mode it loads http://localhost:5173, so the Vite dev server has to be running β€” start the stack with ./start.sh before npm start.

Replies feel slow

Simple commands ("open YouTube", "pause") skip the model entirely. For everything else, the local model is the cost:

  • Settings β†’ Task models β†’ Utility: pick a small model (e.g. ollama pull qwen2.5:1.5b). Titles and background work then stop competing with your conversation.
  • Settings β†’ Keep model in memory: -1 keeps the model loaded, so replies never wait for it to load (uses RAM while Jarvis runs).
  • Developer β†’ Audit shows a timing line per message: how many tokens the model had to read and how long that took. After the first message in a conversation, that number should drop to a few hundred β€” that's the prompt cache working.
Ctrl+C didn't stop everything

./start.sh cleans up when you interrupt it from the terminal it's running in. If you launched it detached (nohup, &, or from another script), the backend and UI survive β€” use ./stop.sh, which kills by port instead. Add --all to stop Ollama too.

Screen reading, camera, or app automation does nothing

Missing macOS permissions. Open System Settings β†’ Privacy & Security and grant Screen Recording, Camera, Microphone, and Accessibility to your terminal (or to Jarvis.app if you packaged it), then restart Jarvis. Setup check shows which ones are missing and opens the right page.

Smart lights: "No Tapo or Kasa lights answered" / "macOS is keeping Jarvis off your Wi-Fi"
  • Check the light works in the Tapo app and your Mac is on the same Wi-Fi (not a guest network).
  • macOS's Local Network privacy has to allow it. Jarvis talks to the lights through a small helper that macOS lists as Python: turn Python on in System Settings β†’ Privacy & Security β†’ Local Network (or press Allow when macOS asks). This works around a macOS bug that blocks some apps without ever asking or listing them.
  • "Your light didn't accept that Tapo email and password" with the right details means Third-Party Compatibility is off in the Tapo app (Me β†’ Tapo Lab, or Me β†’ Third-Party Services).
"Play …" doesn't start the song

Playing from the Apple Music catalogue needs an Apple Music subscription, the Music app signed in, and Accessibility for Jarvis (it queues the song with Play Next). Songs already in your library play without either.

"FaceTime …" opens FaceTime but the call doesn't start
  • macOS always asks before a call starts (a notification with a Call button). Jarvis presses it for you when it has Accessibility (System Settings β†’ Privacy & Security β†’ Accessibility); otherwise press Call yourself.
  • FaceTime must be signed in with your Apple Account. FaceTime reaches iPhones and Apple IDs, not landlines β€” for those, ask for a phone call ("phone the office through my iPhone"), which needs Calls from iPhone turned on in the FaceTime app's settings.
  • "…has no work number saved": Jarvis never guesses which number you meant. Label the number in Contacts (work, mobile, home…), or say the number itself.

πŸ“‹ Requirements

OSmacOS on Apple Silicon (built & tested on an M-series Mac)
Ollamawith at least one model (e.g. qwen2.5:14b)
Python3.11+ β€” macOS's built-in python3 is 3.9 and will not install the backend. brew install [email protected]
Node.js18+
RAM16 GB minimum, 24 GB+ recommended for larger models
PermissionsScreen Recording, Camera, Microphone, Accessibility, Calendars, Reminders (prompted on first use) Β· Local Network for smart lights
OptionalApple Music subscription (play any song) Β· Tapo / Kasa smart lights Β· Telegram (phone access)

πŸ’‘ Model tip: qwen2.5:14b is the sweet spot for tool-calling on a 16–24 GB Mac. The app is fully model-agnostic β€” switch models anytime in Settings, and even benchmark them on your hardware.


πŸ” Security & Privacy

Jarvis is built to earn your trust:

  • Runs 100% locally β€” the AI never leaves your Mac. The only things that go online are what you ask for: web research and weather (DuckDuckGo/Bing, the pages they find, Open-Meteo), song lookups for Apple Music (Apple's search API), and Telegram if you turn on the phone channel. Smart lights are controlled on your own Wi-Fi, not through the cloud.
  • No passwords kept β€” your Tapo password is used once and forgotten; Jarvis keeps only a per-light key. The Telegram token is stored readable only by you.
  • Permission system β€” every action has a risk level. Safe actions run instantly; anything that touches your system (shell, AppleScript, deleting files) asks first, every time.
  • Audit log β€” every tool call, confirmation, and denial is recorded.
  • Nothing is sent behind your back β€” iMessages are only drafted; an email goes out only when you say send and approve that exact message (this approval can't be switched off).
  • Websites can't drive it β€” the local API only accepts changes and chat connections from Jarvis's own UI, so a page you visit can't talk to Jarvis behind your back.
  • Sandboxed code β€” generated code runs with no network, can't read your keys, mail or messages, can't script other apps, and can only write to its own folder.
  • Agents and teams stay in their lane β€” they can only research the web and write files into their run's own workspace; the pages they publish are sandboxed too, so nothing they make can reach Jarvis or the rest of your Mac.
  • Calls show you who first β€” before Jarvis rings anyone you see the person and the exact number it found; calls never start from the phone or a routine, when you're not at the Mac to talk.

πŸ—οΈ Tech Stack

Backend: FastAPI Β· Ollama Β· SQLite Β· faster-whisper (STT) Β· Kokoro (TTS) Β· Apple Vision (OCR) Β· pyobjc Β· trafilatura (reading web pages) Β· python-kasa (Tapo / Kasa lights) Β· Open-Meteo (weather) Frontend: React Β· TypeScript Β· Vite Β· Vitest Β· Lucide icons (ISC) Desktop: Electron (tray, global hotkeys, floating window), signed locally so permissions persist

Modular by design β€” new tools, agents, models, and integrations drop in without touching the core. See docs/architecture.md.


πŸ—ΊοΈ Roadmap

  • Encrypted memory & conversation storage
  • First-run setup wizard (auto-pulls the right models)
  • Self-contained .app (bundled backend)
  • Meeting transcription with speaker separation
  • Git integration in the coding workspace
  • Community skill & plugin packs

🀝 Contributing

PRs, ideas, and bug reports are welcome. Jarvis is designed to be extended β€” writing a new tool or plugin is a few lines of Python (see docs/architecture.md).

Run the tests (no Ollama needed):

cd backend && .venv/bin/pip install pytest && .venv/bin/python -m pytest   # 240+ backend tests, any OS
cd frontend && npm test                                                    # interface helpers (Vitest)

Check how well a model handles real requests (needs Ollama; tools are faked, nothing on your Mac is touched): cd backend && .venv/bin/python -m evals.run --model qwen2.5:14b β€” prints pass/fail and timing for nearly 100 requests like "email my CV to…", "send the weather you just gave me to my phone", "make the bedroom light blue" and "facetime mum".

⭐ Star it

If Jarvis is useful or just fun to poke at, drop a star β€” it helps other people find it and keeps the project going.

β˜• Support

Jarvis is free and built in my spare time. If it saved you time or made you smile, you can buy me a coffee β€” it fuels the next late-night feature. Thank you! πŸ™

Buy me a coffee

πŸ“„ License

PolyForm Noncommercial 1.0.0 β€” free for any noncommercial use: personal projects, hobby, research, education, and nonprofits. You can use, modify, and share it freely β€” just not sell it or use it commercially. Commercial use requires a separate license from the author.

ai-assistant
electron
fastapi
jarvis
local-llm
macos
ollama
privacy
python
react
self-hosted
voice-assistant

salahasfan02/Jarvis

🟒 A private, local AI assistant for macOS β€” voice, vision, and automation powered by local LLMs via Ollama. 100% on your machine. No cloud, no API keys.

Python

2

73 commits

updated Oct 16, 2026

See the code

See what people are saying

SourceMessageScoreDate

I built Jarvis β€” a local AI assistant for macOS that runs on Ollama: voice, screen reading, Mac control, web research with sources, and agent teams (r/coolgithubprojects)

I've been building a JARVIS-style assistant for my Mac that runs on local models through Ollama. No accounts and no API keys, and the model never leaves the machine. It's free for noncommercial use and on GitHub: [https://github.com/salahasfan02/Jarvis](https://github.com/salahasfan02/Jarvis) What…

1

Oct 18, 2026

I built Jarvis β€” a local AI assistant for macOS that runs on Ollama: voice, screen reading, Mac control, web research with sources, and agent teams (r/ollama)

I've been building a JARVIS-style assistant for my Mac that runs on local models through Ollama. No accounts and no API keys, and the model never leaves the machine. It's free for noncommercial use and on GitHub: [https://github.com/salahasfan02/Jarvis](https://github.com/salahasfan02/Jarvis) What…

0

Oct 18, 2026

README

🟒 Jarvis

A private, local AI operating system for your Mac.

Voice. Vision. Automation. Memory. 100% on your machine β€” no cloud, no API keys, no subscriptions.

Jarvis turns your MacBook into the AI assistant from the movies: talk to it, let it see your screen and camera, control your apps, remember everything about you, and get real work done β€” all powered by local LLMs through Ollama. Nothing ever leaves your Mac.

macOS Python TypeScript Ollama Local & Private License: Noncommercial

⭐ If this looks cool, star the repo β€” it genuinely helps.

Buy Me A Coffee


Jarvis demo


🧠 Why Jarvis?

Every AI assistant wants your data in the cloud. Jarvis doesn't.

  • πŸ”’ Totally private β€” runs on local models via Ollama. No accounts, no API keys, no telemetry. Your conversations, screen, camera, files, and memories never leave your machine.
  • πŸŽ™οΈ Voice-first β€” say "Jarvis…" and it wakes up (with a chime), listens with offline Whisper, and replies in a human neural voice. Have a real back-and-forth conversation, hands-free.
  • πŸ‘οΈ It can actually see β€” reads your screen with Apple's OCR, watches through your camera, and answers questions about whatever's in front of you.
  • 🌐 It knows what's going on β€” researches the web, reads the best pages and answers with numbered sources; live weather without an API key.
  • 🦾 It does things β€” opens apps, controls your browser, plays anything on Apple Music, switches your smart lights, makes FaceTime calls, takes photos, drafts emails, manages files, runs code β€” with a permission prompt before anything touches your system.
  • πŸ“± It's in your pocket β€” message it on Telegram, and "send that to me" puts any answer, chat or document on your phone.
  • 🧩 It's an OS, not a chatbot β€” a living command-center dashboard with agents, agents and teams of agents you build on a canvas and talk to by name, projects, long-term memory, and a plugin system it can extend itself.
  • πŸ†“ Free & source-available β€” free for any noncommercial use. Fork it, hack it, make it yours.

πŸ“Έ Screenshots

The Core β€” ask anything by voice or text; answers come with their sources, and your Mac's vitals sit alongside Core

Research with sources β€” Jarvis searches the web, reads the best pages and cites every claim Chat

Agents β€” make an agent for a job, or a team of agents on a canvas, and bring agents and teams into bigger teams Agents

A team with a whole IT team and a Writer linked inA single agent's finished job, with the file it saved
Team with linked cardsAgent results

Talk to β€” choose who your message goes to: Jarvis, or any of your agents and teams (shown over the new glyph-field background) Talk to

Routines β€” things it does on its ownSetup check β€” every permission, one click to fix
RoutinesSetup check
Long-term MemoryCustom Skills
MemorySkills
Smart lights in Settings⌘K β€” jump anywhere, or just ask
SettingsCommand palette

Self-improvement β€” what it couldn't do yet, logged and ranked so it can build it Capabilities


✨ What it can do

πŸŽ™οΈ Voice

  • Wake word ("Jarvis…") with an audible chime β€” robust to room noise, no phantom wakes
  • Offline speech recognition (Whisper small.en) β€” works in any browser
  • Say "stop" any time to halt what it's doing Β· talk over it β€” it lowers its voice at once, and "Jarvis…" (or, in conversation mode, any reply) interrupts
  • Short spoken answers β€” a couple of sentences when you're talking, with "Want the details?"
  • Human-sounding neural voices (Kokoro TTS)
  • Sentence-streaming replies (talks as it thinks)
  • Conversation mode β€” reply without repeating the wake word

πŸ‘οΈ Vision

  • Read the exact text on your screen (Apple Vision OCR)
  • Live camera β€” "open the camera and tell me what you see"
  • Take photos β€” "take a picture" counts down, snaps and saves it in Pictures β€Ί Jarvis (or press the shutter, with a 3 s or 10 s timer) Β· "take a selfie and send it to me" / "send me that picture" puts it on your phone, as a photo in the Telegram chat
  • You always know β€” a glowing frame surrounds your screen whenever Jarvis reads or controls it
  • Screen watch β€” "tell me when the download finishes"
  • Screen memory β€” auto-journals what you're working on

🦾 Mac Automation

  • Full control of any app β€” presses buttons (even icon-only ones) by name through macOS Accessibility, fills in fields, types, keyboard shortcuts, scrolls and drags Β· Esc is the emergency stop Β· password managers, System Settings, terminals and banking sites are off-limits (editable)
  • Shortcuts β€” runs any of your macOS Shortcuts (HomeKit scenes, Focus modes…)
  • Activity & undo β€” every action logged; "undo that" moves files back, restores overwritten or trashed ones, removes what it created
  • Open apps and files by name ("open my CV"), control windows, notifications, clipboard
  • Browser agent β€” clicks links and buttons on any page, closes tabs by name, reuses your tabs
  • Apple Music β€” "play Espresso by Sabrina Carpenter" plays any song in the Apple Music catalogue, not just your library (needs a subscription), without adding it to your library Β· "put on some relaxing jazz" Β· YouTube when you ask for it
  • Smart lights β€” Tapo & Kasa bulbs on your Wi-Fi: "lights off", "dim the lights", "make the bedroom light blue", "warm white at 40%", or a routine like "turn the lights off at 11pm every night" Β· works alongside Alexa
  • Calendar β€” "what's on my calendar tomorrow?" (all calendars, repeating events included) Β· Notes, Reminders β€” read and create; "remind me at 6 to call Sam" keeps the time (in Arabic too)
  • Email β€” "summarize my emails", "any new mail from Sam?", reply, draft, or send with attachments by name ("email my CV to…"); you approve every email first Β· draft iMessages
  • Knows your people β€” "email my landlord" finds them in Jarvis's memory or your Contacts
  • FaceTime β€” "FaceTime Salah's business number", "video call mum", "FaceTime audio Sam" β€” finds the person and the right number (the one labelled work, mobile, home…) in your saved people and Contacts, shows you exactly who and which number, then calls Β· with Accessibility allowed it also presses FaceTime's own Call prompt Β· "phone the office through my iPhone" makes an ordinary call

πŸ§‘β€πŸ’» Developer Workspace

  • Unified Chat + Code modes
  • Run code in a sandbox β€” Python, JS/TS, C/C++, Go, Rust, Java
  • Multi-file projects, package installs, live HTML preview
  • Senior-engineer coding agent (review, refactor, tests, docs)

🧠 Memory & Knowledge

  • Long-term memory β€” remembers your preferences & projects
  • Auto-capture β€” learns facts as you talk (toggleable)
  • Document RAG β€” drop in PDFs/Word/Excel, or index a whole folder, and search it by meaning
  • Documents β€” read & compare PDFs/Word, create Word, Excel and PowerPoint files, fill in PDF forms, then email or send them
  • Projects β€” per-project memory across conversations

πŸ•΅οΈ Research

  • Researches the web for you β€” searches (DuckDuckGo, then Bing), reads the top pages, keeps the passages that answer the question and replies with numbered citations and a Sources list
  • Live weather β€” "do I need an umbrella tomorrow?" (Open-Meteo, no API key)
  • Research reports β€” "research the best budget e-bikes and write me a Word doc" β†’ a .docx with its sources
  • Scoped search: GitHub, Stack Overflow, Reddit, arXiv, YouTube

πŸ€– Intelligence

  • Auto-routing agents (research, coding, media, vision…)
  • Agents & teams β€” make a single agent for a job (say what it does; let it research the web and make files), or a team on a canvas: connect agents and the one you talk to works out what's needed, briefs each agent it's connected to (backend, frontend, marketing, market research…) and brings their work together. Web pages they make go live straight away. Ready-made Startup, Research & writing and IT teams (an IT lead with helpdesk, Microsoft 365, network, servers, security, scripting, software, SQL, assets and documentation specialists)
  • Teams inside teams β€” Import any of your agents or teams into another team as a linked card: it stays in step with the original, and its own lead runs it when the bigger team hands it work
  • Talk to any of them β€” pick an agent or team under Talk to on the Core or in Chat, or just say "ask the IT team to set up a new starter on Monday" / "ask Writer to draft a welcome email"; it works in the background and the answer comes back into the chat
  • Multi-step task planner with a live checklist
  • Custom Skills β€” save prompts, invoke with /name, import/export
  • Self-improving β€” logs what it can't do and can write its own tools
  • Multi-model β€” assign models per task, benchmark them
  • Fast by design β€” only the tools a request needs go into the prompt, so even a 14B model answers quickly
  • Honest by design β€” it never says it sent, saved or booked something unless a tool actually did it, it respects a "no", and it doesn't repeat itself
  • Built-in eval suite β€” nearly 100 real requests replayed against fake tools to check every model change, and it learns from real mistakes: slips and "that's wrong" become new test cases
  • Long conversations β€” older turns are summarized in the background so nothing falls out of the model's memory
  • Instant commands β€” "open YouTube", "open Safari", "pause" run in well under a second, no model needed

🎨 Make it yours

Themes (hacker green, dark blue, cyberpunk, light), four Core designs, your own accent colour or picture β€” and a glyph field background: a quiet field of characters with waves of light drifting through it, rippling out from wherever you click.

πŸ–₯️ Menu-bar Quick Command

Hit βŒ₯Space from any app to summon a floating command bar β€” ask about what's on your screen, get an answer, and get back to work without switching windows. Inside Jarvis, ⌘K jumps to any page, chat or action β€” or just asks.

β˜€οΈ Daily Briefing

"Jarvis, give me my daily briefing" β†’ live weather, today's calendar, and your reminders, narrated.

πŸ“± Text Jarvis from your phone

Message Jarvis on Telegram from anywhere. It does the work on your Mac and replies in the chat:

  • "Send me the lease PDF from my Downloads" β†’ finds the file and sends it to you
  • "Research the best budget e-bikes and send me a Word doc" β†’ searches, writes a .docx with sources, sends it
  • πŸŽ™ Voice notes in, voice notes back Β· send it files or photos to ask about Β· approve risky actions with one tap
  • "Send that to me" at the Mac β†’ the answer you just got arrives on your phone Β· "send me the whole chat" Β· "put that in a document and send it to me" β†’ a Word file in Telegram
  • A message cut off by a restart is offered back, so nothing you asked for gets lost

Two-minute setup β€” see Phone setup.


πŸš€ Quick Start

# 1. Python 3.11+  β€”  macOS's built-in python3 is 3.9, which can't run Jarvis
brew install [email protected]          # skip if `python3 --version` already says 3.11+

# 2. Install Ollama and pull a model (https://ollama.com/download)
ollama pull qwen2.5:14b

# 3. Clone and run everything with one command
git clone https://github.com/Salahasfan02/Jarvis.git
cd Jarvis
chmod +x start.sh && ./start.sh

start.sh finds a Python 3.11+ on its own, installs everything on the first run (and again whenever a git pull changes the dependencies), and retries an install that was interrupted.

Your browser opens at http://localhost:5173 and Jarvis is live. Press Ctrl+C (or ./stop.sh) to turn it off. Nothing auto-starts; it only runs when you start it.

πŸ”§ Your model is picked for you. If the configured model (llama3.1 by default) isn't installed, Jarvis switches to one you have β€” qwen2.5:14b above. Change it anytime in Settings β†’ Model.

πŸ” macOS will ask for permissions. The first time Jarvis reads your screen, uses the camera, reads your calendar, or drives another app, macOS prompts for Screen Recording, Camera, Microphone, Calendars, Automation (Mail, Safari, Music) and Accessibility. Grant them in System Settings β†’ Privacy & Security. Email features use the Mail app, so add your accounts (iCloud, Gmail, Outlook…) there.

Prefer the native desktop app?

The Electron shell is a wrapper around the running stack, not a standalone build β€” in dev it loads the Vite UI from http://localhost:5173, and it launches the backend using backend/.venv. So bring the stack up first:

./start.sh          # terminal 1 β€” leave this running

cd desktop          # terminal 2
npm install
npm start           # run it from the repo, or:
npm run install-app # build Jarvis.app, put it in Applications and open it

The desktop app adds a menu-bar icon, the βŒ₯Space quick command, a βŒ˜β‡§J floating window, and "Open at Login."

Note that npm run package records the path to this clone's backend in ~/.jarvis/backend_path. The resulting Jarvis.app still needs this repo on disk β€” a fully self-contained bundle is on the roadmap.

Run each piece manually
# Terminal 1 β€” Ollama
ollama serve

# Terminal 2 β€” backend   (use an explicit 3.11+ interpreter, not bare `python3`)
cd backend && /opt/homebrew/bin/python3.12 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python run.py            # β†’ http://127.0.0.1:8765

# Terminal 3 β€” UI
cd frontend && npm install && npm run dev   # β†’ http://localhost:5173

Level up (optional, all local)

ollama pull nomic-embed-text   # semantic memory + smarter agent routing
ollama pull llama3.2:3b        # a small, fast helper for titles and background work
ollama pull qwen3.5            # camera & screen vision

Then open Settings to enable them, download the offline Whisper and human Kokoro voice models, pick your theme, and set your wake word.

πŸ–₯️ Install as a Mac app

cd desktop && npm run install-app builds Jarvis.app (with its own icon), signs it locally and installs it in Applications. It starts Ollama if needed, only ever runs once, and can open at login (Settings β†’ Desktop app). It's a new app to macOS, so allow the microphone, camera, Accessibility, Screen Recording, Calendars and Reminders once β€” Setup check lists anything still missing, with a fix button for each (and a restart button when macOS needs one).

The installer signs with a certificate it makes once on your Mac (Jarvis Local Signing), so the permissions you grant survive every rebuild β€” no re-allowing after an update.

πŸ“± Phone setup (Telegram)

  1. In Telegram, message @BotFather, send /newbot, pick a name, and copy the token it gives you.
  2. In Jarvis, open Settings β†’ Phone (Telegram), paste the token, and press Connect.
  3. Send the /pair 123456 code shown there to your new bot from your phone β€” or press Open in Telegram if Telegram is on your Mac. That's it.

Things to know:

  • Nothing is exposed to the internet. Jarvis polls Telegram with outbound requests only β€” no port forwarding, tunnel, or public URL. Your Mac must be awake with Jarvis running (on power, enable Prevent automatic sleeping in System Settings β†’ Battery/Energy).
  • Only paired accounts get answers; everyone else is ignored. Anything that needs permission (sending a file, reading your messages…) asks with Allow / Deny buttons, or reply yes / no. Dangerous tools (shell, AppleScript, deleting files) are blocked from the phone unless you switch them on.
  • Privacy trade-off: Telegram bot chats aren't end-to-end encrypted, so what you send and receive passes through Telegram's servers. The feature is off until you set it up.
  • Telegram bots can't take phone calls β€” voice notes are the hands-free way in (needs the Whisper model; voice replies need Kokoro). Files: up to 50 MB to your phone, 20 MB from it.
  • Word documents are saved in ~/Documents/Jarvis; files you send Jarvis land in ~/Downloads/Jarvis. /new starts a fresh conversation, /stop cancels.
  • Once paired, "send that to me" at the Mac goes to this chat too.

πŸ’‘ Smart lights setup (Tapo / Kasa)

  1. Make sure your Mac is on the same Wi-Fi as the lights.
  2. In Jarvis, open Settings β†’ Smart lights, type your Tapo account email and password, and press Connect. Jarvis finds every light on the network and lists it with a switch, brightness and colours.
  3. Say "lights off" β€” or put the lights in a routine.

Things to know:

  • Your password isn't saved. It's used once to connect; Jarvis keeps only a key for each light (~/.jarvis/lights.json, readable only by you), which can't sign in to your Tapo account.
  • Jarvis talks to the lights directly on your Wi-Fi, so Alexa and the Tapo app keep working. Cameras and other Tapo devices are left alone.
  • If a light moves to a new address on your network, Jarvis finds it again by itself.
  • Newer Tapo firmware only lets other apps in when Third-Party Compatibility is on in the Tapo app (Me β†’ Tapo Lab, or Me β†’ Third-Party Services). If Jarvis says your light didn't accept a correct password, turn that on.

πŸ”§ Troubleshooting

"backend/.venv uses Python 3.9" / ResolutionImpossible for onnxruntime

An environment from an older setup was built with macOS's Python 3.9. Install a newer Python, delete the backend/.venv folder, and start again β€” start.sh rebuilds it with 3.11+:

brew install [email protected]
rm -rf backend/.venv && ./start.sh
"Jarvis" doesn't react to the wake word
  • In a browser, click anywhere on the Jarvis page once after it opens β€” browsers keep audio off until you do (the Core says "Click anywhere so I can hear you"). The desktop app doesn't need this.
  • Download the Whisper model in Settings β†’ Voice (offline, and far more reliable than the browser's recognizer).
  • Grant Microphone access to your browser / Jarvis.app in System Settings β†’ Privacy & Security.
First message fails with a model error

The active model doesn't exist locally. Run ollama list to see what you actually have, then pick one of those in Settings β†’ Model. The out-of-the-box default is llama3.1.

The desktop app opens a blank window

In dev mode it loads http://localhost:5173, so the Vite dev server has to be running β€” start the stack with ./start.sh before npm start.

Replies feel slow

Simple commands ("open YouTube", "pause") skip the model entirely. For everything else, the local model is the cost:

  • Settings β†’ Task models β†’ Utility: pick a small model (e.g. ollama pull qwen2.5:1.5b). Titles and background work then stop competing with your conversation.
  • Settings β†’ Keep model in memory: -1 keeps the model loaded, so replies never wait for it to load (uses RAM while Jarvis runs).
  • Developer β†’ Audit shows a timing line per message: how many tokens the model had to read and how long that took. After the first message in a conversation, that number should drop to a few hundred β€” that's the prompt cache working.
Ctrl+C didn't stop everything

./start.sh cleans up when you interrupt it from the terminal it's running in. If you launched it detached (nohup, &, or from another script), the backend and UI survive β€” use ./stop.sh, which kills by port instead. Add --all to stop Ollama too.

Screen reading, camera, or app automation does nothing

Missing macOS permissions. Open System Settings β†’ Privacy & Security and grant Screen Recording, Camera, Microphone, and Accessibility to your terminal (or to Jarvis.app if you packaged it), then restart Jarvis. Setup check shows which ones are missing and opens the right page.

Smart lights: "No Tapo or Kasa lights answered" / "macOS is keeping Jarvis off your Wi-Fi"
  • Check the light works in the Tapo app and your Mac is on the same Wi-Fi (not a guest network).
  • macOS's Local Network privacy has to allow it. Jarvis talks to the lights through a small helper that macOS lists as Python: turn Python on in System Settings β†’ Privacy & Security β†’ Local Network (or press Allow when macOS asks). This works around a macOS bug that blocks some apps without ever asking or listing them.
  • "Your light didn't accept that Tapo email and password" with the right details means Third-Party Compatibility is off in the Tapo app (Me β†’ Tapo Lab, or Me β†’ Third-Party Services).
"Play …" doesn't start the song

Playing from the Apple Music catalogue needs an Apple Music subscription, the Music app signed in, and Accessibility for Jarvis (it queues the song with Play Next). Songs already in your library play without either.

"FaceTime …" opens FaceTime but the call doesn't start
  • macOS always asks before a call starts (a notification with a Call button). Jarvis presses it for you when it has Accessibility (System Settings β†’ Privacy & Security β†’ Accessibility); otherwise press Call yourself.
  • FaceTime must be signed in with your Apple Account. FaceTime reaches iPhones and Apple IDs, not landlines β€” for those, ask for a phone call ("phone the office through my iPhone"), which needs Calls from iPhone turned on in the FaceTime app's settings.
  • "…has no work number saved": Jarvis never guesses which number you meant. Label the number in Contacts (work, mobile, home…), or say the number itself.

πŸ“‹ Requirements

OSmacOS on Apple Silicon (built & tested on an M-series Mac)
Ollamawith at least one model (e.g. qwen2.5:14b)
Python3.11+ β€” macOS's built-in python3 is 3.9 and will not install the backend. brew install [email protected]
Node.js18+
RAM16 GB minimum, 24 GB+ recommended for larger models
PermissionsScreen Recording, Camera, Microphone, Accessibility, Calendars, Reminders (prompted on first use) Β· Local Network for smart lights
OptionalApple Music subscription (play any song) Β· Tapo / Kasa smart lights Β· Telegram (phone access)

πŸ’‘ Model tip: qwen2.5:14b is the sweet spot for tool-calling on a 16–24 GB Mac. The app is fully model-agnostic β€” switch models anytime in Settings, and even benchmark them on your hardware.


πŸ” Security & Privacy

Jarvis is built to earn your trust:

  • Runs 100% locally β€” the AI never leaves your Mac. The only things that go online are what you ask for: web research and weather (DuckDuckGo/Bing, the pages they find, Open-Meteo), song lookups for Apple Music (Apple's search API), and Telegram if you turn on the phone channel. Smart lights are controlled on your own Wi-Fi, not through the cloud.
  • No passwords kept β€” your Tapo password is used once and forgotten; Jarvis keeps only a per-light key. The Telegram token is stored readable only by you.
  • Permission system β€” every action has a risk level. Safe actions run instantly; anything that touches your system (shell, AppleScript, deleting files) asks first, every time.
  • Audit log β€” every tool call, confirmation, and denial is recorded.
  • Nothing is sent behind your back β€” iMessages are only drafted; an email goes out only when you say send and approve that exact message (this approval can't be switched off).
  • Websites can't drive it β€” the local API only accepts changes and chat connections from Jarvis's own UI, so a page you visit can't talk to Jarvis behind your back.
  • Sandboxed code β€” generated code runs with no network, can't read your keys, mail or messages, can't script other apps, and can only write to its own folder.
  • Agents and teams stay in their lane β€” they can only research the web and write files into their run's own workspace; the pages they publish are sandboxed too, so nothing they make can reach Jarvis or the rest of your Mac.
  • Calls show you who first β€” before Jarvis rings anyone you see the person and the exact number it found; calls never start from the phone or a routine, when you're not at the Mac to talk.

πŸ—οΈ Tech Stack

Backend: FastAPI Β· Ollama Β· SQLite Β· faster-whisper (STT) Β· Kokoro (TTS) Β· Apple Vision (OCR) Β· pyobjc Β· trafilatura (reading web pages) Β· python-kasa (Tapo / Kasa lights) Β· Open-Meteo (weather) Frontend: React Β· TypeScript Β· Vite Β· Vitest Β· Lucide icons (ISC) Desktop: Electron (tray, global hotkeys, floating window), signed locally so permissions persist

Modular by design β€” new tools, agents, models, and integrations drop in without touching the core. See docs/architecture.md.


πŸ—ΊοΈ Roadmap

  • Encrypted memory & conversation storage
  • First-run setup wizard (auto-pulls the right models)
  • Self-contained .app (bundled backend)
  • Meeting transcription with speaker separation
  • Git integration in the coding workspace
  • Community skill & plugin packs

🀝 Contributing

PRs, ideas, and bug reports are welcome. Jarvis is designed to be extended β€” writing a new tool or plugin is a few lines of Python (see docs/architecture.md).

Run the tests (no Ollama needed):

cd backend && .venv/bin/pip install pytest && .venv/bin/python -m pytest   # 240+ backend tests, any OS
cd frontend && npm test                                                    # interface helpers (Vitest)

Check how well a model handles real requests (needs Ollama; tools are faked, nothing on your Mac is touched): cd backend && .venv/bin/python -m evals.run --model qwen2.5:14b β€” prints pass/fail and timing for nearly 100 requests like "email my CV to…", "send the weather you just gave me to my phone", "make the bedroom light blue" and "facetime mum".

⭐ Star it

If Jarvis is useful or just fun to poke at, drop a star β€” it helps other people find it and keeps the project going.

β˜• Support

Jarvis is free and built in my spare time. If it saved you time or made you smile, you can buy me a coffee β€” it fuels the next late-night feature. Thank you! πŸ™

Buy me a coffee

πŸ“„ License

PolyForm Noncommercial 1.0.0 β€” free for any noncommercial use: personal projects, hobby, research, education, and nonprofits. You can use, modify, and share it freely β€” just not sell it or use it commercially. Commercial use requires a separate license from the author.

ai-assistant
electron
fastapi
jarvis
local-llm
macos
ollama
privacy
python
react
self-hosted
voice-assistant