Curia is single-tenant and self-hosted. This guide walks through getting a local instance running, organized into three tiers — start with the minimum and add services as needed.Documentation Index
Fetch the complete documentation index at: https://curia.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
| Tier | Services | What you get |
|---|---|---|
| 1 — Minimum | Anthropic + Postgres | Agents running, CLI and web app working |
| 2 — Recommended | + Nylas + OpenAI | Email channel active, semantic search working |
| 3 — Full | + Tavily + Signal | Web research skill, encrypted Signal messaging |
Prerequisites
- Node.js 22+ — check with
node --version - Docker and Docker Compose — Postgres runs in Docker; install Docker Desktop or the standalone CLI
- pnpm —
npm install -g pnpm
Tier 1 — Minimum
Everything you need to run Curia and interact with it via the CLI and web app.Start Postgres
docker compose ps.Tier 2 — Recommended
Adds the email channel and knowledge graph embeddings for a realistic development environment.Nylas (Email)
Curia uses Nylas as its email layer — a unified API that handles IMAP/SMTP complexity across Gmail, Outlook, and other providers.- Sign up at app.nylas.com (free tier is sufficient for development)
- Create an application and copy your API key
- Add a grant (connects an email account via OAuth) and copy the Grant ID
- Add to
.env:
For development, use a dedicated email account rather than your primary inbox. Curia reads and processes all incoming messages.
OpenAI (Embeddings)
OpenAI’stext-embedding-3-small model powers entity memory and semantic search in the knowledge graph. Without it, lookups are exact-match only.
Tier 3 — Full
Tavily (Web Search)
Powers theweb-search skill for researching topics and looking up current information.
Signal
Signal messaging runs via signal-cli. The socket path is managed automatically by Docker Compose.- Register a phone number with signal-cli and seed the
signal-dataDocker volume with the resulting credentials - Add to
.env:
SIGNAL_PHONE_NUMBER is set and the signal-data volume is populated.
What’s next
With Curia running, open the web app and go through the setup wizard — it walks you through naming your instance, setting its persona, and configuring the CEO profile. Then start a conversation via the CLI:Troubleshooting
macOS: HTTPS requests fail with 'unable to get local issuer certificate'
macOS: HTTPS requests fail with 'unable to get local issuer certificate'
Node installed via nvm or fnm bundles its own CA store and doesn’t trust macOS system certificates. Export your system certs and point Node at them:Then set in
.env:Postgres connection refused
Postgres connection refused
Make sure the Docker container is running (
docker compose ps). If the container is healthy but Curia can’t connect, confirm the credentials in .env match the values in docker-compose.yml.Email channel not activating
Email channel not activating
All three Nylas vars (
NYLAS_API_KEY, NYLAS_GRANT_ID, NYLAS_SELF_EMAIL) must be set. If any are missing, the channel disables itself at startup with a log message indicating which variable is absent.Initial configuration
Environment variables, multi-account email, and configuration layers.
Configuration reference
Every configurable setting: rate limits, security rules, knowledge graph decay, and more.