Jarvis is a local-first macOS desktop assistant for chat, voice dictation, web research, Notion workflows, document inspection, and browser automation. It supports local Ollama models and hosted models through OpenRouter or OpenCode Go.

Cmd+Shift+Space.git clone https://github.com/Alaud01/assistant-app.git
cd assistant-app
pnpm install
cp .env.example .env
Open .env and add only the credentials for the services you intend to use. You can leave every cloud key empty when using a local Ollama server.
Start the development app:
pnpm dev
Jarvis runs in the macOS menu bar. Open it from the tray icon after Electron starts.
| Variable | Enables |
|---|---|
OPENROUTER_API_KEY | Hosted chat, cloud transcription, and transcript refinement |
OPENCODE_GO_API_KEY | OpenCode Go models |
TAVILY_KEY | Web search |
OLLAMA_BASE_URL | Local Ollama server; defaults to http://localhost:11434 |
OLLAMA_API_KEY | Optional Ollama cloud access |
See .env.example for optional provider, voice-model, and timeout settings. Credentials are read from the environment and are not copied into Jarvis application storage.
Install the lightweight Python sidecar dependencies:
pnpm setup:python
Jarvis will offer to install the larger local Parakeet speech-recognition runtime when voice features are first configured. That managed runtime and its model weights are stored under ~/Library/Application Support/Jarvis, not in this repository.
Without the local model, Jarvis can use OpenRouter for transcription when OPENROUTER_API_KEY is configured. Voice features may request microphone, Accessibility, and Automation permissions for recording, app detection, and cross-app text insertion.
pnpm dev # Vite dev server and Electron app
pnpm start # Production-style local build and launch
pnpm start:python # Run only the voice sidecar on port 8765
pnpm test # TypeScript, lint, JavaScript, and Python tests
pnpm build # Build the macOS application, ZIP, and DMG
The generated macOS application is ad-hoc signed for local development. Public binary distribution requires an Apple Developer certificate and notarization.
Cmd+Shift+Space to dictate.TAVILY_KEY for web search, and use Notion → Connect… to authorize Notion through OAuth..env is ignored by Git but is still a plaintext local file; do not share or commit it.fetch_url accepts only public-internet destinations and rejects non-public DNS results and redirects.browser_evaluate can execute JavaScript inside the Jarvis-owned page. Treat it as a trusted debugging/recovery capability.Read SECURITY.md before using Jarvis with sensitive accounts or data.
Architecture decisions live in docs/adr, and the voice-personalization glossary lives in CONTEXT.md.
jarvis/
├── assets/ # Application and tray icons
├── docs/adr/ # Architecture decision records
├── python-service/ # FastAPI voice sidecar
├── src/main/ # Electron main process and tools
├── src/preload/ # IPC bridge
├── src/renderer/ # React application
├── src/shared/ # Shared types and pure logic
└── tests/ # JavaScript tests
Licensed under the MIT License.
61 commits
TypeScript
82.6%
Python
10.2%
JavaScript
5.1%
CSS
2.0%
Jarvis is a local-first macOS desktop assistant for chat, voice dictation, web research, Notion workflows, document inspection, and browser automation. It supports local Ollama models and hosted models through OpenRouter or OpenCode Go.

Cmd+Shift+Space.git clone https://github.com/Alaud01/assistant-app.git
cd assistant-app
pnpm install
cp .env.example .env
Open .env and add only the credentials for the services you intend to use. You can leave every cloud key empty when using a local Ollama server.
Start the development app:
pnpm dev
Jarvis runs in the macOS menu bar. Open it from the tray icon after Electron starts.
| Variable | Enables |
|---|---|
OPENROUTER_API_KEY | Hosted chat, cloud transcription, and transcript refinement |
OPENCODE_GO_API_KEY | OpenCode Go models |
TAVILY_KEY | Web search |
OLLAMA_BASE_URL | Local Ollama server; defaults to http://localhost:11434 |
OLLAMA_API_KEY | Optional Ollama cloud access |
See .env.example for optional provider, voice-model, and timeout settings. Credentials are read from the environment and are not copied into Jarvis application storage.
Install the lightweight Python sidecar dependencies:
pnpm setup:python
Jarvis will offer to install the larger local Parakeet speech-recognition runtime when voice features are first configured. That managed runtime and its model weights are stored under ~/Library/Application Support/Jarvis, not in this repository.
Without the local model, Jarvis can use OpenRouter for transcription when OPENROUTER_API_KEY is configured. Voice features may request microphone, Accessibility, and Automation permissions for recording, app detection, and cross-app text insertion.
pnpm dev # Vite dev server and Electron app
pnpm start # Production-style local build and launch
pnpm start:python # Run only the voice sidecar on port 8765
pnpm test # TypeScript, lint, JavaScript, and Python tests
pnpm build # Build the macOS application, ZIP, and DMG
The generated macOS application is ad-hoc signed for local development. Public binary distribution requires an Apple Developer certificate and notarization.
Cmd+Shift+Space to dictate.TAVILY_KEY for web search, and use Notion → Connect… to authorize Notion through OAuth..env is ignored by Git but is still a plaintext local file; do not share or commit it.fetch_url accepts only public-internet destinations and rejects non-public DNS results and redirects.browser_evaluate can execute JavaScript inside the Jarvis-owned page. Treat it as a trusted debugging/recovery capability.Read SECURITY.md before using Jarvis with sensitive accounts or data.
Architecture decisions live in docs/adr, and the voice-personalization glossary lives in CONTEXT.md.
jarvis/
├── assets/ # Application and tray icons
├── docs/adr/ # Architecture decision records
├── python-service/ # FastAPI voice sidecar
├── src/main/ # Electron main process and tools
├── src/preload/ # IPC bridge
├── src/renderer/ # React application
├── src/shared/ # Shared types and pure logic
└── tests/ # JavaScript tests
Licensed under the MIT License.
61 commits
TypeScript
82.6%
Python
10.2%
JavaScript
5.1%
CSS
2.0%