Skip to main content

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.

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.
TierServicesWhat you get
1 — MinimumAnthropic + PostgresAgents running, CLI and web app working
2 — Recommended+ Nylas + OpenAIEmail channel active, semantic search working
3 — Full+ Tavily + SignalWeb 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
  • pnpmnpm install -g pnpm

Tier 1 — Minimum

Everything you need to run Curia and interact with it via the CLI and web app.
1

Clone and install

git clone https://github.com/josephfung/curia.git
cd curia
pnpm install
2

Configure .env

cp .env.example .env
Open .env and fill in:
# Postgres — credentials for the Docker Compose container
DB_USER=curia
DB_PASSWORD=curia_dev
DATABASE_URL=postgres://curia:curia_dev@localhost:5432/curia

# Anthropic — powers all agents
ANTHROPIC_API_KEY=sk-ant-...

# HTTP API authentication
API_TOKEN=your-secret-token-here

# Web app access
WEB_APP_BOOTSTRAP_SECRET=replace-with-a-long-random-secret

# Your identity
CEO_PRIMARY_EMAIL=you@yourdomain.com
TIMEZONE=America/Toronto
3

Start Postgres

docker compose up -d
This starts Postgres with pgvector and pgAudit. Confirm it’s healthy with docker compose ps.
4

Start Curia

pnpm local
On first run this applies all database migrations, then starts the full stack.
5

Verify

CLI: Type a message at the prompt to interact with Curia directly.Web app: Open http://localhost:3000 and enter your WEB_APP_BOOTSTRAP_SECRET. The knowledge graph browser is available once authenticated.
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.
  1. Sign up at app.nylas.com (free tier is sufficient for development)
  2. Create an application and copy your API key
  3. Add a grant (connects an email account via OAuth) and copy the Grant ID
  4. Add to .env:
NYLAS_API_KEY=nyk_v0_...
NYLAS_GRANT_ID=<grant-id-from-dashboard>
NYLAS_SELF_EMAIL=curia@yourdomain.com
Restart Curia — the email channel activates automatically when all three Nylas vars are present.
For development, use a dedicated email account rather than your primary inbox. Curia reads and processes all incoming messages.
For multiple email accounts with per-account outbound policies, see Initial configuration.

OpenAI (Embeddings)

OpenAI’s text-embedding-3-small model powers entity memory and semantic search in the knowledge graph. Without it, lookups are exact-match only.
OPENAI_API_KEY=sk-...

Tier 3 — Full

Powers the web-search skill for researching topics and looking up current information.
TAVILY_API_KEY=tvly-...
No restart required — the skill picks up the key on next use.

Signal

Signal messaging runs via signal-cli. The socket path is managed automatically by Docker Compose.
  1. Register a phone number with signal-cli and seed the signal-data Docker volume with the resulting credentials
  2. Add to .env:
SIGNAL_PHONE_NUMBER=+12223334444
Restart Curia — the Signal channel activates when 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:
pnpm local
Type a message at the prompt. You’re talking to Curia.

Troubleshooting

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:
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain > ~/.config/curia/macos-ca-certs.pem
Then set in .env:
NODE_EXTRA_CA_CERTS=/Users/yourname/.config/curia/macos-ca-certs.pem
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.
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.