Quickstart¶
See also Install and First run.
Keprix has two install paths. The CLI / TUI path (Option A) is primary for day-to-day agent use. Docker Compose (Option B) is the full web stack path (UI + API + Postgres + Redis and related services).
Option A: curl installer (CLI / TUI)¶
See Install for the full guide.
curl -fsSL https://raw.githubusercontent.com/malike2356/keprix/main/scripts/install.sh | bash
The public GitHub repository is anonymously readable. This command follows the development channel. For immutable stable releases, download and inspect scripts/install-release.sh, then run it with an exact --version.
Next steps after install:
keprix --version
keprix setup
keprix tui
Option B: Docker Compose (full web stack)¶
Use this when you want the browser workspace plus the API and databases on one machine.
Prerequisites¶
| Requirement | Minimum | Notes |
|---|---|---|
| Docker Engine | 24+ | Install Docker |
| Docker Compose | v2 plugin | Docker Desktop includes it; on Linux: apt install docker-compose-plugin |
| Git | Any | For cloning |
| RAM | 2 GB free | 4 GB recommended if you also run a local LLM |
| Disk | 5 GB free | Images, database, and generated files |
You do not need Python or Node.js on the host. Everything runs in containers.
Start the stack¶
git clone https://github.com/malike2356/keprix.git
cd keprix
cp .env.example .env
# Set at least one of ANTHROPIC_API_KEY, OPENAI_API_KEY, or GEMINI_API_KEY
docker compose -f docker/docker-compose.yml up -d --build
Copy values from .env.example. Leave unused keys empty; set at least one provider key before first run (for example ANTHROPIC_API_KEY= or OPENAI_API_KEY=your-key-here). Do not paste real secrets into docs or tickets.
On Linux hosts, do this first (verified 2026-09-06 against a genuinely fresh clone with no pre-existing ~/.keprix). docker/docker-compose.yml bind-mounts ~/.keprix into the backend container; if that directory does not already exist, the Docker daemon auto-creates it as root, and the container's non-root keprix user then fails on its very first write with PermissionError: [Errno 13] Permission denied. Avoid this by creating the directory yourself, as yourself, and telling the container to match your UID/GID before the first up:
mkdir -p ~/.keprix
echo "KEPRIX_UID=$(id -u)" >> .env
echo "KEPRIX_GID=$(id -g)" >> .env
(Verified reproducing and fixed on Linux with the native Docker Engine. Docker Desktop on macOS/Windows maps file ownership differently and has not been independently verified either way here - running the same two lines before up is harmless if you are unsure.)
| Surface | URL / check |
|---|---|
| Web UI | http://localhost:3000 |
| API health | curl -s http://127.0.0.1:3333/api/health |
Compose depends_on (default full stack): the frontend waits until the backend healthcheck passes; the backend waits until postgres and redis are healthy. That is the default docker/docker-compose.yml behavior.
Marketing-only frontend on Contabo/Cloudflare is optional and not the default Compose stack. See Cloud deploy and VPS deploy. Public origin notes may expand later.
Wait until healthy¶
docker compose -f docker/docker-compose.yml ps
Containers should show healthy or running. The backend runs migrations on startup; wait for health before opening the UI.
curl -s http://127.0.0.1:3333/api/health
# Expect JSON with a status field when the API is up
Setup wizard¶
Open http://localhost:3000. The first-run wizard covers instance name, admin account, LLM provider confirmation, and optional channels. After Finish setup, use Chat in the sidebar to talk to the agent.
Stop and update¶
docker compose -f docker/docker-compose.yml down
Data lives in Docker volumes; stop/restart keeps it. Full reset (deletes volumes):
docker compose -f docker/docker-compose.yml down -v
Update:
git pull
docker compose -f docker/docker-compose.yml up -d --build
Migrations apply on backend startup.
Port conflicts¶
In .env:
FRONTEND_PORT=3001
BACKEND_PORT=3334
Then restart the stack.
Production VPS¶
For Compose behind Caddy on a VPS, see VPS deploy. Compose service reference: Docker Compose reference.
Troubleshooting¶
Logs
docker compose -f docker/docker-compose.yml logs backend
docker compose -f docker/docker-compose.yml logs frontend
Database connection errors
On very slow hosts, restart the backend after Postgres is healthy:
docker compose -f docker/docker-compose.yml restart backend
No LLM responses
- Confirm
.envhas at least one provider key set. docker compose -f docker/docker-compose.yml restart backend- In the wizard or admin UI, confirm the default provider matches that key.
PermissionError: [Errno 13] Permission denied on backend startup
~/.keprix was auto-created by Docker as root before you set ownership. Stop the stack, fix ownership, and set the UID/GID mapping from "Start the stack" above, then rebuild:
docker compose -f docker/docker-compose.yml down
sudo chown -R "$(id -u):$(id -g)" ~/.keprix
echo "KEPRIX_UID=$(id -u)" >> .env
echo "KEPRIX_GID=$(id -g)" >> .env
docker compose -f docker/docker-compose.yml up -d --build
Port 3000 in use
Set FRONTEND_PORT=3001 and open http://localhost:3001.
Slow first build
The first --build downloads base images and compiles the frontend. Later starts are much faster.
Without Docker¶
CLI/TUI without Compose: Install. Manual contributor setup: Manual install.
Next steps¶
| What | Where |
|---|---|
| Messaging channels | Messaging |
| More LLM providers | LLM providers |
| Memory / RAG | Memory |
| Playbooks | Playbooks |
| Hardening | Hardening |
| SDK | SDK |