* chore: create learning subdirectory structure (routing, agents, intelligence) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: extract classify_query to routing/_utils.py Move the classify_query() function and its regex patterns into a shared utility module so multiple routing policies can import it without depending on the full trace_policy module. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: move routing files to learning/routing/ subdirectory Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: create LearnedRouterPolicy merging trace-driven + SFT routing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add conditional Algolia DocSearch integration Add Algolia DocSearch as an optional search upgrade — native lunr.js search remains the default until credentials are configured. Includes CDN assets, Jinja2 conditional config injection, init script with graceful fallback, light/dark theme CSS, improved search tokenization for snake_case/dotted identifiers, and search boosts for key pages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: move agent_evolver and skill_discovery to learning/agents/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: move learning/orchestrator to learning/intelligence/orchestrator Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: delete removed learning policies, rewrite __init__.py, clean up api_routes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add SFT/GRPO/DSPy/GEPA config dataclasses, update LearningConfig Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add general-purpose SFT trainer (intelligence/sft_trainer.py) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: update stale imports in multi_model_router example Update imports to use new learning/routing/ paths after the subdirectory reorganization. Replace BanditRouterPolicy with LearnedRouterPolicy. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add general-purpose GRPO trainer (intelligence/grpo_trainer.py) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add DSPy agent optimizer (agents/dspy_optimizer.py) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add GEPA agent optimizer (agents/gepa_optimizer.py) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add learning-dspy and learning-gepa optional dependency extras Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: update integration test to check for learned policy instead of grpo Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: clean up stale APIs and unused params in examples - deep_research: remove system_prompt and max_turns params not accepted by Jarvis.ask(), inline system prompt into the query instead - doc_qa: remove unused --top-k CLI arg that was never passed to the API - multi_model_router: fix select_model() call to match single-arg signature Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: import SFT/GRPO trainers in intelligence/__init__.py for registry Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: remove .md file changes from PR Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: restore search boost frontmatter for key docs pages Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
8.3 KiB
title, description, search
| title | description | search | ||
|---|---|---|---|---|
| Installation | Get OpenJarvis running — browser app, desktop app, CLI, or Python SDK |
|
Installation
OpenJarvis runs entirely on your hardware. Choose the interface that fits your workflow.
Browser App
Run the full chat UI in your browser. Everything stays local — the backend runs on
your machine and the frontend connects via localhost.
One-command setup
git clone https://github.com/open-jarvis/OpenJarvis.git
cd OpenJarvis
./scripts/quickstart.sh
The script handles everything:
- Checks for Python 3.10+ and Node.js 18+
- Installs Ollama if not present and pulls a starter model
- Installs Python and frontend dependencies
- Starts the backend API server and frontend dev server
- Opens
http://localhost:5173in your browser
Manual setup
If you prefer to run each step yourself:
=== "Step 1: Clone and install"
```bash
git clone https://github.com/open-jarvis/OpenJarvis.git
cd OpenJarvis
uv sync --extra server
cd frontend && npm install && cd ..
```
=== "Step 2: Start Ollama"
```bash
# Install from https://ollama.com if not already installed
ollama serve &
ollama pull qwen3:0.6b
```
=== "Step 3: Start backend"
```bash
uv run jarvis serve --port 8000
```
=== "Step 4: Start frontend"
```bash
cd frontend
npm run dev
```
Then open http://localhost:5173.
Desktop App
The desktop app is a native window for the OpenJarvis chat UI. All inference and backend processing happens on your local machine — the app connects to the backend you start locally.
Setup
Step 1. Start the backend (same as Browser App):
git clone https://github.com/open-jarvis/OpenJarvis.git
cd OpenJarvis
./scripts/quickstart.sh
Step 2. Download and open the desktop app:
| Platform | Download |
|---|---|
| macOS (Apple Silicon) | :material-download: OpenJarvis.dmg |
| Windows (64-bit) | :material-download: OpenJarvis-setup.exe |
| Linux (DEB) | :material-download: OpenJarvis.deb |
| Linux (RPM) | :material-download: OpenJarvis.rpm |
| Linux (AppImage) | :material-download: OpenJarvis.AppImage |
The app connects to http://localhost:8000 automatically.
!!! warning "macOS: "app is damaged""
If macOS says the app is damaged, clear the Gatekeeper quarantine flag:
bash xattr -cr /Applications/OpenJarvis.app
This is normal for open-source apps distributed outside the App Store.
!!! tip "All releases" Browse all versions on the GitHub Releases page.
Build from source
git clone https://github.com/open-jarvis/OpenJarvis.git
cd OpenJarvis/desktop
npm install
npm run tauri build
The built installer will be in desktop/src-tauri/target/release/bundle/.
CLI
The command-line interface is the fastest way to interact with OpenJarvis programmatically. Every feature is accessible from the terminal.
Install
git clone https://github.com/open-jarvis/OpenJarvis.git
cd OpenJarvis
uv sync
Verify
jarvis --version
# jarvis, version 0.1.0
First commands
jarvis ask "What is the capital of France?"
jarvis ask --agent orchestrator --tools calculator "What is 137 * 42?"
jarvis serve --port 8000
jarvis doctor
jarvis model list
jarvis chat
!!! info "Inference backend required" The CLI requires a running inference backend (e.g., Ollama). See Setting up an inference backend below.
Python SDK
For programmatic access, the Jarvis class provides a high-level sync API.
Install
git clone https://github.com/open-jarvis/OpenJarvis.git
cd OpenJarvis
uv sync
Quick example
from openjarvis import Jarvis
j = Jarvis()
print(j.ask("Explain quicksort in two sentences."))
j.close()
With agents and tools
result = j.ask_full(
"What is the square root of 144?",
agent="orchestrator",
tools=["calculator", "think"],
)
print(result["content"]) # "12"
print(result["tool_results"]) # tool invocations
print(result["turns"]) # number of agent turns
Composition layer
For full control, use the SystemBuilder:
from openjarvis import SystemBuilder
system = (
SystemBuilder()
.engine("ollama")
.model("qwen3:8b")
.agent("orchestrator")
.tools(["calculator", "web_search", "file_read"])
.enable_telemetry()
.enable_traces()
.build()
)
result = system.ask("Summarize the latest AI news.")
system.close()
See the Python SDK guide for the full API reference.
Requirements
| Requirement | Version | Notes |
|---|---|---|
| Python | 3.10+ | Required |
| Inference backend | Any | At least one of Ollama, vLLM, llama.cpp, SGLang, or a cloud API |
| Node.js | 18+ | Required for the browser UI; 22+ for the WhatsApp Baileys channel bridge |
Optional Extras
OpenJarvis uses optional extras to keep the base installation lightweight.
Inference Backends
| Extra | Install Command | Description |
|---|---|---|
inference-cloud |
uv sync --extra inference-cloud |
OpenAI and Anthropic APIs |
inference-google |
uv sync --extra inference-google |
Google Gemini API |
!!! note "Ollama, vLLM, and llama.cpp are HTTP-based" These engines have no additional Python dependencies — OpenJarvis communicates over HTTP. You still need the engine software running on your machine.
Memory Backends
| Extra | Install Command | Description |
|---|---|---|
memory-faiss |
uv sync --extra memory-faiss |
FAISS vector store |
memory-colbert |
uv sync --extra memory-colbert |
ColBERTv2 late-interaction retrieval |
memory-bm25 |
uv sync --extra memory-bm25 |
BM25 sparse retrieval |
!!! tip "SQLite memory is always available" The default SQLite/FTS5 memory backend requires no additional dependencies.
Server & Other
| Extra | Install Command | Description |
|---|---|---|
server |
uv sync --extra server |
OpenAI-compatible API server (jarvis serve) |
dev |
uv sync --extra dev |
Development and testing tools |
docs |
uv sync --extra docs |
Documentation build tools |
Combine extras:
uv sync --extra server --extra memory-faiss --extra inference-cloud
Setting Up an Inference Backend
OpenJarvis requires at least one inference backend. Choose the one that matches your hardware.
Ollama (Recommended)
The easiest way to get started. Handles model downloading and serving automatically.
-
Install from ollama.com
-
Start the server and pull a model:
ollama serve ollama pull qwen3:0.6b -
Verify:
jarvis model list
!!! tip "Best for: Apple Silicon Macs, consumer NVIDIA GPUs, CPU-only systems"
vLLM
High-throughput serving optimized for datacenter GPUs.
- Install following the official guide
- Start:
vllm serve Qwen/Qwen2.5-7B-Instruct - Auto-detected at
http://localhost:8000
!!! tip "Best for: NVIDIA datacenter GPUs (A100, H100), AMD GPUs"
llama.cpp
Efficient CPU and GPU inference with GGUF quantized models.
- Build from github.com/ggerganov/llama.cpp
- Start:
llama-server -m /path/to/model.gguf --port 8080 - Auto-detected at
http://localhost:8080
Cloud APIs
uv sync --extra inference-cloud --extra inference-google
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
Next Steps
- Quick Start — Run your first query
- Configuration — Customize engine hosts, model routing, memory, and more