π€ Why Axon?
Most RAG tools make you choose between cloud power and data privacy. Axon is local-first β full capability with zero egress when you run on Ollama or vLLM; cloud providers (OpenAI, Gemini, Grok, GitHub Copilot, Ollama Cloud) stay optional.
- π Private by default β local inference via Ollama or vLLM is the recommended path; cloud providers (OpenAI, Gemini, Grok, GitHub Copilot, Ollama Cloud) remain opt-in. No telemetry. An offline mode blocks model downloads and web search for air-gapped machines.
- π Ingest anything β 54 file formats (PDF, DOCX, Jupyter, code, images, URLs) in one command. SHA-256 dedup skips unchanged files.
- π€ Works in your tools β
@axonin Copilot Chat, MCP for Claude Code / Codex / Gemini CLI / Cursor, Graph panel in VS Code or your browser. - π€ Built for teams β share your knowledge base with signed, revocable read-only keys. Sealed (AES-256-GCM encrypted) sharing works safely through OneDrive, Dropbox, and Google Drive. Read-only mounts, expiring keys, no extra infrastructure. Quick setup β
- πΈοΈ See your knowledge as a graph β interactive 3D entity-relationship graph. Embedded webview in VS Code; opens in your browser everywhere else. Click any node to inspect its supporting chunks and source excerpt.
- π¬ Production-grade retrieval β hybrid search, reranking, HyDE, multi-query expansion, and automatic web fallback. Zero manual tuning.
β¨ Capabilities
π Retrieval
- Hybrid semantic + keyword search
- HyDE, multi-query, step-back, query decomposition
- Sentence-window context retrieval
- BGE reranker for second-pass precision
- Web fallback via Brave Search (CRAG-Lite)
- Smart per-question query routing
- Structured citations β
sources+citationsarrays with character offsets (Claude / OpenAI compatible)
π§ Graph Intelligence
- GraphRAG β entity/relation/community graph (local / global / hybrid)
- Dynamic Graph β bi-temporal SQLite facts with
valid_at+invalid_at - Federated β weighted RRF over multiple backends, tunable per query
- Point-in-time queries (v0.3.2) β
--graph-retrieve "..." --graph-at TS - Conflict inspection (v0.3.2) β
--graph-conflictssurfacesstatus='conflicted'facts - RAPTOR β hierarchical corpus summaries Β· Code Graph via AST Β· 3D webview
π₯ Ingest Everything
- 54 file formats β PDF, DOCX, XLSX, PPTX, Jupyter, images, 24 code formats
- URL ingestion β any public web page
- SHA-256 dedup skips unchanged files
- Delete by document or chunk ID β deleted text can be re-ingested cleanly
- Stale detection for modified sources
- 4 content-aware chunking strategies
π§ LLMs & Embeddings
- Local: Ollama, vLLM
- Cloud (API key): OpenAI, Gemini, xAI Grok, GitHub Copilot, Ollama Cloud
- Hot-swap provider and model β no restart needed
- Streaming on all providers
- 4 embedding providers; BGE-M3 for multilingual
ποΈ Projects & Privacy
- Isolated knowledge base per project, with nesting
- Federated search across projects (
@projects,@mounts,@store) - Offline / air-gapped mode β local models only, no downloads
- AxonStore β signed read-only sharing across OS users
βοΈ Cloud-Drive Sharing
Sealed (AES-256-GCM encrypted) sharing works through any cloud sync drive. Files are ciphertext on disk β cloud providers see only encrypted bytes.
- OneDrive Personal / Business
- Dropbox
- Google Drive (Mirror mode)
β Sharing Guide | Quick Setup β
π‘οΈ Operations & Agents
- Graceful maintenance states:
normal β draining β readonly β offline - REST API β 69 routes with Swagger docs at
/docs - MCP server β 18 focused tools for Claude Code, Codex, Gemini, Cursor, Copilot (destructive/admin operations stay human-only)
@axonVS Code chat participant with Graph panels
β‘ Quick Start
pip install "axon-rag[starter]" # Python 3.10+. Sealed sharing + extra loaders. Web GUI ships with axon-api.
axon --ingest ./my-notes # index a folder: local embeddings, no LLM calls
axon "What do my notes say about the release plan?" # cited answer from a local Ollama model
The first question pulls the default model (llama3.1:8b) into Ollama if
it is missing, or use a cloud model: axon --model gpt-4o-mini "β¦" with OPENAI_API_KEY set.
axon on its own opens the REPL; on a fresh machine it runs the setup wizard first.
If something doesn't look right:
axon --doctor # Health checks: Python, Ollama, model pulled, store writable.
axon update # Check PyPI and upgrade the package + VS Code extension together.
Local inference uses Ollama or vLLM (self-hosted). Cloud providers (OpenAI, Gemini, Grok, GitHub Copilot, Ollama Cloud) work via API keys.
β Getting Started β from install to a cited answer β
π Sealed Sharing Quick Start
Share an encrypted knowledge base through OneDrive, Dropbox, or Google Drive. Cloud providers see only ciphertext.
pip install "axon-rag[starter]" # on both machines (or the smaller [sealed] extra)
Owner
axon --store-init "/path/to/OneDrive/axon" # 1. put the store in the synced folder
axon --project-new research --ingest /path/to/documents # 2. create a project and index it
axon # 3. open the REPL for the sealed steps:
axon> /store bootstrap <passphrase> first time only; later sessions: /store unlock <passphrase>
axon> /project seal research encrypt the project in place
axon> /share generate research alice prints the share string β send it to alice
Grantee
axon --store-init "/path/to/OneDrive/axon" # 1. the same synced folder
axon --share-redeem "<share string>" # 2. key goes to the OS keyring
axon --project mounts/owner_research "question" # 3. decrypted to a temp cache, wiped on exit
β Full Sharing Guide β OneDrive / Dropbox / Google Drive setup, revocation, expiry, filesystem compatibility matrix.
π Entry Points
Browser UI: start axon-api and open http://localhost:8420/gui/. No extra
command or dependency needed β the GUI ships with the server.
Single-instance routing. If an
axon-apiserver is already running, theaxonCLI detects it (a quick/health/readyprobe) and routes store-mutating commands β--ingestand project create / delete / switch β through that server instead of opening a second in-process copy of the same store. This avoids two processes racing on the vector-store files, skips reloading the embedding model on every CLI call, and keeps a single writer for both the store and the logs. Pass--localto force an in-process brain, or point the CLI at a specific server with theAXON_API_BASEenvironment variable (or theapi_host/api_portconfig fields).Relatedly,
axon-apiitself refuses to start a second server on a store anotheraxon-apiis already serving (one writer per store) β setAXON_ALLOW_MULTIPLE_SERVERS=1if you really want two.
π VS Code + GitHub Copilot
Install the bundled VSIX to unlock the @axon chat participant, Knowledge Graph panel and Code Graph panel β directly inside VS Code alongside Copilot.
Extensions panel β "..." β Install from VSIX...
β run `axon-ext` (or install from VSIX manually)
Or connect via MCP for Copilot agent mode β point .vscode/mcp.json at axon-mcp and all 18 tools appear in the agent hammer menu automatically.
The VS Code extension surfaces 20 LM tools to Copilot Chat β the 18 MCP tools (query, search, ingest, config, graph facts, sharing) plus
show_graphandingest_image.
π Use Axon from Your Python Agent
Drop-in retrievers for LangChain and LlamaIndex agents β no REST round-trips, no extra process. Both wrap the same AxonBrain.search_raw() codepath the REST and REPL surfaces use, so hybrid search, reranking, HyDE, multi-query, and the GraphRAG budget apply automatically.
# pip install "axon-rag[langchain]"
from axon import AxonBrain, AxonConfig
from axon.integrations.langchain import AxonRetriever
brain = AxonBrain(AxonConfig.load()) # ~/.config/axon/config.yaml, or .load("path.yaml")
retriever = AxonRetriever(brain=brain, top_k=5)
docs = retriever.invoke("what does the project do?") # list[Document]
# pip install "axon-rag[llama-index]"
from axon.integrations.llama_index import AxonLlamaRetriever
retriever = AxonLlamaRetriever(brain=brain, top_k=5)
nodes = retriever.retrieve("what does the project do?") # list[NodeWithScore]
Per-call overrides (e.g. force HyDE for one question): retriever.with_overrides({"hyde": True}).invoke(query). From async code, await retriever.aretrieve(query, hyde=True, top_k=8) accepts the same flags as kwargs without rebuilding the retriever (v0.4.1).
π Documentation
π Security
Ingestion is sandboxed to a configurable base directory (RAG_INGEST_BASE). Requests outside it are rejected with 403. See SECURITY.md.
π License
MIT β see LICENSE.