* feat(engine): add DeepSeek as a first-class cloud provider Adds DEEPSEEK_API_KEY support to the cloud engine, wiring DeepSeek's OpenAI-compatible API (api.deepseek.com/v1) alongside the existing MiniMax, OpenRouter, Anthropic, and Google providers. - Add _DEEPSEEK_MODELS list (deepseek-v4-flash, deepseek-v4-pro) - Add _is_deepseek_model() routing predicate - Init self._deepseek_client from DEEPSEEK_API_KEY in _init_clients() - Add _generate_deepseek() and _stream_deepseek() methods - Wire DeepSeek into generate(), stream(), _stream_full_openai(), list_models(), and health() - Add approximate pricing entries for both models Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(engine): strict cloud model routing + deepseek can_serve branch Builds on the DeepSeek provider (PR #504) with two routing-correctness fixes to CloudEngine._client_for_model: 1. Add the missing DeepSeek branch so can_serve('deepseek-*') agrees with list_models()/health() when only DEEPSEEK_API_KEY is set (mirrors the minimax branch). Without it the engine advertised deepseek models via list_models() but refused to serve them (the #532 can_serve contract). 2. Fix #335: _client_for_model previously fell through to the OpenAI client for ANY unrecognized model name, so an OpenAI key (even a dummy sk-dummy... one) made can_serve('qwen3.5:0.8b') return True. With the local engine transiently down (classic post-Windows-restart Ollama not yet up), model-aware get_engine then mis-selected the cloud engine for a local model and died with "OpenAI client not available". Add a positive _is_openai_model predicate (gpt-/chatgpt-/o1/o3/o4 + _OPENAI_MODELS) and return None for unrecognized names, so can_serve declines them. generate() and stream() keep their OpenAI fall-through, preserving loud failure for an explicitly-requested unknown cloud model. Tests: DeepSeek detection/pricing/health/list_models/generate-routing/ can_serve and a #335 regression (can_serve rejects local names with an OpenAI key; unknown model not served even with all clients set; end-to-end get_engine does not misroute a local model with a dummy OpenAI key). Fixes #335 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Jen Huls <me@jenhuls.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Why OpenJarvis?
Personal AI agents are exploding in popularity, but nearly all of them still route intelligence through cloud APIs. Your "personal" AI continues to depend on someone else's server. At the same time, our Intelligence Per Watt research showed that local language models already handle 88.7% of single-turn chat and reasoning queries, with intelligence efficiency improving 5.3× from 2023 to 2025. The models and hardware are increasingly ready. What has been missing is the software stack to make local-first personal AI practical.
OpenJarvis is that stack. It is a framework for local-first personal AI, built around three core ideas: shared primitives for building on-device agents; evaluations that treat energy, FLOPs, latency, and dollar cost as first-class constraints alongside accuracy; and a learning loop that improves models using local trace data. The goal is simple: make it possible to build personal AI agents that run locally by default, calling the cloud only when truly necessary. OpenJarvis aims to be both a research platform and a production foundation for local AI, in the spirit of PyTorch.
Installation
Pick your platform and run one command. Each installer handles uv, the Python venv, Ollama, and a starter model — about 3 minutes on broadband.
| Platform | One-liner |
|---|---|
| macOS · Linux · WSL2 | curl -fsSL https://open-jarvis.github.io/OpenJarvis/install.sh | bash |
| Native Windows | irm https://open-jarvis.github.io/OpenJarvis/install.ps1 | iex |
| Desktop GUI | Download .exe / .dmg / .deb / .rpm / .AppImage from the latest release |
Then jarvis to start. The Rust extension and larger models continue downloading in the background; jarvis doctor shows status.
Platform-specific notes (WSL2 setup, native-Windows scheduled-task service, desktop prerequisites, manual / contributor install): see the installation docs.
Quick Start
jarvis # start chatting (default: chat-simple)
jarvis init --preset <name> # switch to a starter config
Prefix
jarvis ...withuv run, orsource .venv/bin/activatefirst.
| Preset | What it does |
|---|---|
morning-digest-mac / morning-digest-linux / morning-digest-minimal |
Spoken daily briefing from email, calendar, health, news |
deep-research |
Multi-hop research across indexed docs with citations |
code-assistant |
Agent with code execution, file I/O, and shell access |
scheduled-monitor |
Stateful agent on a schedule with memory |
chat-simple |
Lightweight conversation, no tools |
Example:
jarvis init --preset morning-digest-mac
jarvis connect gdrive # one OAuth covers Gmail / Calendar / Tasks
jarvis digest --fresh # generate and play your first briefing
Per-preset deep dives: morning digest · deep research · code assistant · scheduled monitor · chat simple · or the full quickstart guide.
Skills
Skills teach agents how to better use tools and improve their reasoning. Every skill is a tool — agents discover them from a catalog and invoke them on demand.
# Install skills from public sources
jarvis skill install hermes:arxiv
jarvis skill sync hermes --category research
# Use skills with any agent
jarvis ask "Use the code-explainer skill to explain this Python code: for i in range(5): print(i*2)"
# Optimize skills from your trace history
jarvis optimize skills --policy dspy
# Benchmark the impact
jarvis bench skills --max-samples 5 --seeds 42
Import from Hermes Agent (~150 skills), OpenClaw (~13,700 community skills), or any GitHub repo. Skills follow the agentskills.io open standard.
See the Skills User Guide and Skills Tutorial for details.
Built-in Agents
OpenJarvis ships with eight built-in agents across three execution modes (on-demand, scheduled, continuous):
| Agent | Type | What it does |
|---|---|---|
morning_digest |
Scheduled | Daily briefing from email, calendar, health, news — with TTS audio |
deep_research |
On-demand | Multi-hop research with citations across web and local docs |
monitor_operative |
Continuous | Long-horizon monitoring with memory, compression, and retrieval |
orchestrator |
On-demand | Multi-turn reasoning with automatic tool selection |
native_react |
On-demand | ReAct (Thought-Action-Observation) loop agent |
operative |
Continuous | Persistent autonomous agent with state management |
native_openhands |
On-demand | CodeAct — generates and executes Python code |
simple |
On-demand | Single-turn chat, no tools |
See the User Guide and Tutorials for detailed setup instructions.
Full documentation — including Docker deployment, cloud engines, development setup, and tutorials — at open-jarvis.github.io/OpenJarvis.
Community
- GitHub: github.com/open-jarvis/OpenJarvis
- Discord: discord.gg/CMVBmDQ5Fj
- X / Twitter: @OpenJarvisAI
- Docs: open-jarvis.github.io/OpenJarvis
Contributing
We welcome contributions! See the Contributing Guide for incentives, contribution types, and the PR process.
Quick start for contributors:
git clone https://github.com/open-jarvis/OpenJarvis.git
cd OpenJarvis
uv sync --extra dev
uv run pre-commit install
uv run pytest tests/ -v
Browse the Roadmap for areas where help is needed. Comment "take" on any issue to get auto-assigned.
About
OpenJarvis is part of Intelligence Per Watt, a research initiative studying the intelligence efficiency of AI systems. The project is developed at Hazy Research and the Scaling Intelligence Lab at Stanford SAIL.
Sponsors
Laude Institute • Stanford Marlowe • Google Cloud Platform • Lambda Labs • Ollama • IBM Research • Stanford HAI
Citation
@misc{saadfalcon2026openjarvispersonalaipersonal,
title={OpenJarvis: Personal AI, On Personal Devices},
author={Jon Saad-Falcon and Avanika Narayan and Robby Manihani and Tanvir Bhathal and Herumb Shandilya and Hakki Orhun Akengin and Gabriel Bo and Andrew Park and Matthew Hart and Caia Costello and Chuan Li and Christopher Ré and Azalia Mirhoseini},
year={2026},
eprint={2605.17172},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2605.17172},
}

