Local-first knowledge graphs from your documents: build, search (GraphRAG) and edit on your machine.
Turn your documents into a knowledge graph you can inspect, search, chat with, and take with you — all running on your own machine.
Chaos Cypher is a local-first GraphRAG platform — knowledge you can see,
trust, and own. Point it at your sources (documents, audio, video, images,
pasted text, web pages — 30+ formats, auto-detected), and it extracts entities
and relationships into a knowledge graph you can actually see and explore —
not a black-box vector blob. Search it, chat with it, refine it, and export the
result as a portable Lexicon knowledge package (.ccx) you can back up,
share, or load into another instance.
Core intelligence
Data foundation
Automation & integration
By default, nothing leaves your machine except the LLM calls you configure. Embeddings are computed locally; your documents, graph, and exports stay on disk in a Docker volume you own. If you point Chaos Cypher at a hosted LLM provider (OpenAI, Anthropic, Gemini), the text sent for extraction and chat goes to that provider — choose a local model like Ollama to keep everything on-device.
Read the Self-Hosted Threat Model for exactly what Chaos Cypher defends against, what it accepts by design, and how to harden a LAN or internet-facing deployment.
A quick tour — from dropping in a document to asking a question and tracing the answer back to the exact highlighted sentence in your source:

▶️ Watch the full tour (with audio-free narration captions) on chaoscypher.com.
Dashboard — your knowledge base at a glance: entity and relationship counts, quality and density scores, and a live graph preview.

Knowledge graph — every source becomes an explorable, color-coded graph. Pan, zoom, search, and filter to see exactly what was extracted.

Entities — inspect any extracted entity: typed, directional relationships ranked by importance, with stats and provenance back to the source document.

Sources — each document gets a transparent pipeline view: loaded → cleaned → chunked → extracted → indexed, plus per-source entity distribution.

Chat — ask questions in plain language and get GraphRAG answers with inline entity citations you can click through to the graph.

Prerequisites: Docker (with Compose). That's it for end users — embeddings run locally on CPU. You'll also want an LLM provider; Ollama keeps everything on-device.
The recommended install path is the all-in-one image published to the GitHub Container Registry:
docker run -d --name chaoscypher \
-p 80:80 \
-p 443:443 \
-v chaoscypher-data:/data \
--add-host=host.docker.internal:host-gateway \
ghcr.io/chaoscypherinc/chaoscypher:latest
# Then open http://localhost (443 is published so HTTPS works if you enable TLS)
Prefer Compose? Save this as docker-compose.yml and run docker compose up -d:
name: chaoscypher
services:
chaoscypher:
image: ghcr.io/chaoscypherinc/chaoscypher:latest
container_name: chaoscypher
ports:
- "80:80"
- "443:443"
volumes:
- chaoscypher-data:/data
extra_hosts:
# Lets the container reach an Ollama running on the host (Linux engines
# don't resolve host.docker.internal without this)
- "host.docker.internal:host-gateway"
restart: unless-stopped
volumes:
chaoscypher-data:
The image is built and pushed on every
vX.Y.Zrelease by.github/workflows/publish-ghcr.yml.
Terminal-first? The standalone CLI installs with pipx (or plain pip):
pipx install chaoscypher-cli
chaoscypher setup # wizard: pick an LLM provider
chaoscypher source add paper.pdf
All four Python packages (chaoscypher-core, -cortex, -neuron,
-cli) are published to PyPI on
every release — chaoscypher-core gives you the same extraction and search
engine as an embeddable library. See the
developer quickstart.
Clone and build the all-in-one image locally — no published image required:
git clone https://github.com/chaoscypherinc/chaoscypher.git
cd chaoscypher
make docker-up # builds + starts the all-in-one container
# Open http://localhost
The quickstart covers this in detail — import and search work within about 5 minutes; extraction and chat come online once your LLM provider is set up (for Ollama, after a one-time model download).
For contributors who need per-service hot-reload (requires Python 3.14+,
Node.js 22+, and uv 0.11+ — uv replaces pip and
reads the committed uv.lock):
make install # First-time setup (packages + hooks + Docker test image)
make docker-dev # Start multi-container dev environment
# Frontend: http://localhost:3000
# Cortex API: http://localhost:8080
chaoscypher/
├── packages/
│ ├── core/ # 🧠 Core (Brain) - Business logic & domain models
│ ├── cortex/ # 🎛️ Cortex (Processing Center) - Full backend API
│ ├── neuron/ # ⚡ Neuron (Worker Cells) - Background task processing
│ ├── interface/ # 💻 Interface (Interaction Layer) - Web UI
│ ├── cli/ # 🔧 CLI - Command-line tools
│ ├── docker/ # 🐳 Docker - Orchestration
│ └── docs/ # 📚 Docs - Docusaurus documentation site
├── e2e/ # Public end-to-end test suite
├── scripts/ # Public build/test helper scripts
└── tools/ # Public lint/license tooling
make docker-up # Start all-in-one container (http://localhost)
make docker-rebuild # Rebuild and restart all-in-one
make docker-dev # Start multi-container dev environment (hot-reload)
make docker-prod # Start multi-container production
make docker-down # Stop all Docker services
# All-in-one
docker logs -f chaoscypher
# Multi-container
cd packages/docker/multi-container
docker compose -f docker-compose.dev.yml logs -f cortex
make docker-test # Run tests in Docker (isolated)
make lint # Python + frontend lint (make ci runs the full linter suite)
make ci # Full CI pipeline
cc-cortex start # Backend API
cc-neuron # Unified worker
cd packages/interface && npm run dev # Frontend UI
chaoscypher --help # CLI
cd packages/docs && npm run build # Build static site
cd packages/docs && npm start # Dev server (http://localhost:3000)
Chaos Cypher is organized using a brain-inspired metaphor, with each package mapped to a specialized role:
┌─────────────────────────────────────────────────────────────┐
│ Interface (UI) │
│ React + TypeScript + Vite │
└─────────────────────────┬───────────────────────────────────┘
│
┌────────▼────────┐
│ Cortex (API) │
│ FastAPI + VSA │
└────────┬────────┘
│
┌────────▼────────┐
│ Core (Brain) │
│ Hexagonal │
└────────┬────────┘
│
┌──────────────┼──────────────┐
┌────────▼────────┐ │ ┌────────▼────────┐
│ Neuron LLM │ │ │ Neuron Ops │
│ (1 concurrent) │ │ │ (8 concurrent) │
└─────────────────┘ │ └─────────────────┘
│
┌────────▼────────┐
│ Storage Adapters│
│ SQLite / Files │
└─────────────────┘
packages/core/) — framework-agnostic business logic (hexagonal architecture)packages/cortex/) — FastAPI backend with vertical-slice architecturepackages/neuron/) — background workers for LLM and operations processingpackages/interface/) — React + TypeScript web UIpackages/cli/) — standalone command-line interfacepackages/docker/) — orchestration (docker-compose files)In plain English: the UI talks to one API, the API delegates all the real work to a framework-agnostic core, and slow jobs (extraction, exports) run in background workers so the app stays responsive.
Features are self-contained vertical slices with complete functionality from API → Service → Repository → Database.
packages/cortex/src/chaoscypher_cortex/features/{feature}/
├── __init__.py # Barrel exports
├── models.py # Pydantic DTOs (Request/Response)
├── repository.py # Data access (SQLModel entities)
├── service.py # Business logic
└── api.py # REST endpoints + factory DI
The packages/core/ library uses Hexagonal Architecture for maximum flexibility and reusability.
Monitor: http://localhost/queues (all-in-one; dev stack: http://localhost:3000/queues)
# Make changes in any package
cd packages/cortex
# Edit code...
# Changes are immediately available (editable install)
# If using Docker, hot-reload will restart services
# Run tests
pytest
# Commit changes (Conventional Commits — see CONTRIBUTING.md)
git add .
git commit -m "feat(cortex): add new feature"
git push
git checkout -b feature/amazing-feature)git commit -m 'feat(scope): add amazing feature')git push origin feature/amazing-feature)If Chaos Cypher is useful to you, a ⭐ on the repo genuinely helps other self-hosters find it.
Chaos Cypher is licensed under the GNU Affero General Public License v3.0 only
(AGPL-3.0-only) — see the root LICENSE file. A separate
proprietary enterprise edition is available; external contributions are accepted
under the project CLA.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx chaoscypher-cliMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-chaoscypherinc-chaoscypher": {
"command": "uvx",
"args": [
"chaoscypher-cli"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceChaos Cypher works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.