Setup
See Quick Start at the top of the README for the fast path.
f62d7985
View source ↗
Prerequisites
- Python 3.13 (managed via uv).
- At least one messaging channel:
- TeamWork (web UI) — the Slack-like web frontend and the primary channel. Requires the sibling TeamWork app running and
TEAMWORK_ENABLED=true(Docker Compose sets this automatically). No external account or ngrok needed. User messages reach Prax over the TeamWork webhook. - Discord (text + attachments) — requires a Discord bot token (free). No ngrok needed — connects via WebSocket.
- Twilio (Voice + SMS) — requires a Twilio account, verified phone number, and ngrok for webhooks (Twilio’s servers must reach Prax from the public internet, which the local Tailscale sidecar can’t provide). Paid per message/minute.
- TeamWork (web UI) — the Slack-like web frontend and the primary channel. Requires the sibling TeamWork app running and
- Optional, recommended for remote access: Tailscale account + a reusable, non-ephemeral auth key. Lets you reach TeamWork over HTTPS from your laptop without exposing the host’s network or installing
tailscaledon the server. See Configuration → Remote access. - OpenAI (or alternate LLM) credentials.
- Java 11+ (for
opendataloader-pdfPDF extraction). - Docker (for sandbox code execution).
- Optional: NVIDIA GPU with 8GB+ VRAM + vLLM + Unsloth (for self-improving fine-tuning). To attach a host GPU to the sandbox container for ad-hoc CUDA work (Whisper acceleration, local LLM inference, ML experiments via
sandbox_shell), installnvidia-container-toolkitand usemake sandbox-gpu(or layer the override in viaCOMPOSE_FILE=docker-compose.yml:docker-compose.gpu.ymlin.env). See Sandbox → GPU access for details. - Optional: Playwright (
pip install playwright && playwright install chromium) for browser automation. - Optional:
ghCLI (for self-modification PR creation).
Installation Details
See Quick Start at the top of the README for the fast path.
Sandbox code execution requires both Docker Desktop running and the sandbox image built. The sandbox lives in the sibling prax-sandbox repo — build it with cd ../prax-sandbox && make build (docker-compose builds it for you). Without the image, sandbox tools fail with a “pull access denied” error — it’s a local image, not on Docker Hub. If Docker isn’t running, the agent falls back to saving source files to the workspace. See Providing Prax a sandbox (incl. remote mode).
Browser automation requires Playwright: uv run playwright install chromium
On startup you’ll see:
Starting Prax — provider=openai model=gpt-5.4-nano temperature=0.7 encoding=o200k_base
Required Configuration
These .env settings are required for Docker Compose deployments:
| Variable | Purpose |
|---|---|
OPENAI_KEY or ANTHROPIC_KEY |
At least one LLM provider API key |
PRAX_USER_ID |
Your workspace directory name (e.g. usr_alice). The sandbox mounts only this folder for user isolation. Pick any slug — Prax creates the directory and associates it with your identity on first run. Prax refuses to start without this. |
Memory System Setup
Prax has a two-layer memory system. Short-term memory (STM) works out of the box with no extra infrastructure. Long-term memory (LTM) requires Qdrant and Neo4j.
Enabling Long-Term Memory
# Start core services + memory infrastructure
docker compose --profile memory up --build
Then set in .env:
MEMORY_ENABLED=true
This starts Qdrant (vector store, port 6333) and Neo4j (knowledge graph, port 7474/7687).
Choosing an Embedding Provider
Memory search quality depends on embeddings — numerical representations of text used for similarity matching. You have three choices:
Option 1: OpenAI (default) — Highest quality, easiest setup. Your memory text is sent to OpenAI’s API for embedding. If you’re already using OpenAI for LLM calls, this is the simplest path.
EMBEDDING_PROVIDER=openai
EMBEDDING_MODEL=text-embedding-3-small
Option 2: Ollama (local) — No data leaves your machine. Good quality. Requires running Ollama (included in Docker Compose).
# Start with Ollama
docker compose --profile memory --profile ollama up --build
# Pull the embedding model (one-time)
docker compose exec ollama ollama pull nomic-embed-text
EMBEDDING_PROVIDER=ollama
EMBEDDING_MODEL=nomic-embed-text
OLLAMA_BASE_URL=http://localhost:11434
Option 3: fastembed (in-process) — Zero infrastructure, runs inside the Prax process. Lower quality but simplest possible setup.
EMBEDDING_PROVIDER=local
See Memory documentation for a detailed comparison of quality, speed, cost, and privacy trade-offs.
Verifying Memory
After starting with memory enabled, you can verify it’s working:
- Qdrant dashboard: http://localhost:6333/dashboard
- Neo4j browser: http://localhost:7474 (login:
neo4j/prax-memory) - In chat: Ask Prax “what’s your memory status?” — it will use the
memory_statstool