HarborRAG is a modular, provider-agnostic RAG framework for engineering knowledge. It ingests from the systems your team already uses and resolves retrieval against the authoritative current document version, so a superseded version cannot be cited even while a reindex is in flight.
It is alpha software. The adapter layer contains real connectors, parsers, model clients, and storage providers; the runtime composes ingestion, retrieval, and chat behind the HTTP and CLI surfaces, and retrieval behind the MCP surface.
| You want to… | Go here |
|---|---|
| Use HarborRAG on your own documents - start here | Quick Start (10 minutes, pip install, no clone) |
| Understand what it does before installing | What is HarborRAG? |
| See every install option and extra | Installation |
| Work on HarborRAG itself, or run the Temporal-based durable mode | Running HarborRAG from a checkout |
| Use it as a Python library | Python SDK |
| Connect an IDE or agent | MCP Tools |
pip install "harborrag[local]"
harborrag init my-harbor && cd my-harbor # answer a few questions
docker compose up -d # three small local services
harborrag doctor # all ✓
harborrag ingest run workspace # index the docs/ folder
harborrag chat "What do these documents cover?"
init generates the encryption key and service passwords; the only value you supply is
your model provider’s API key. If anything is missing, harborrag doctor names the exact
variable and the fix. The Quick Start shows the expected output
of every step.
Contributors work from the env/ folder created by scripts/deployment/dev.sh bootstrap.
Two values there have no safe default:
HARBORRAG_SECRETS_ENCRYPTION_KEY in env/.env.database - ships empty, and the API
and worker refuse to start until you set it (openssl rand -hex 32). Server-only data
and Temporal commands do not consume stored connector secrets and may start without it.HARBOR_CHAT_* and HARBOR_EMBED_* values in env/.env.models - the active
model catalog expands references eagerly, so a missing embedding variable fails exactly
as hard as a missing chat one.Running from a checkout, step 5 walks through both.