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.

Getting Curia running takes around 15 minutes for the minimum setup. The guide is organized into three tiers: a minimum configuration that gets the CLI and web app working, a recommended tier that adds email and semantic search, and a full tier that adds web research and Signal messaging. Complete each tier before moving to the next.
TierWhat you addWhat you get
1 — MinimumAnthropic + PostgresAgents running, CLI and web app working
2 — RecommendedNylas + OpenAIEmail channel active, semantic search and entity memory working
3 — FullTavily + SignalWeb research skill, encrypted Signal messaging

Prerequisites

Before you start, install the following:
  • Node.js 22 or later — verify with node --version
  • Docker and Docker Compose — Postgres runs in Docker; install Docker Desktop or the standalone CLI
  • pnpm — install with npm install -g pnpm
Tier 1 gives you a fully running Curia instance accessible via the CLI and web app. Agents are live and responding; email and embeddings are not yet connected.
1

Clone and install

Clone the repository and install dependencies:
git clone https://github.com/josephfung/curia.git
cd curia
pnpm install
2

Configure your environment

Copy the example environment file:
cp .env.example .env
Open .env and fill in the values below. Leave everything else at its default for now.Postgres — credentials for the Docker Compose container. You can use any values you like; they just need to match each other:
DB_USER=curia
DB_PASSWORD=curia_dev
DATABASE_URL=postgres://curia:curia_dev@localhost:5432/curia
Anthropic — your API key from console.anthropic.com. This powers all agents:
ANTHROPIC_API_KEY=sk-ant-...
HTTP API token — a secret for authenticating API requests. Generate any random string:
API_TOKEN=your-secret-token-here
Web app — required to access the knowledge graph browser at http://localhost:3000. Generate any long random string:
WEB_APP_BOOTSTRAP_SECRET=replace-with-a-long-random-secret
Your email and timezone — your primary email prevents your first message from being held as an unknown sender. The IANA timezone is used to resolve relative dates (“next Friday”) in agent prompts:
CEO_PRIMARY_EMAIL=you@yourdomain.com
TIMEZONE=America/Toronto
3

Start Postgres

Start the Postgres container with pgvector:
docker compose up -d
The first run pulls the image; subsequent starts are fast. Confirm the container is healthy:
docker compose ps
4

Start Curia

pnpm local
On first run, Curia applies all database migrations and then starts the full stack. You should see log output as the bus, agents, and channels initialize.
5

Verify

CLI: In the terminal where Curia is running, type a message at the prompt to interact with it directly.Web app: Open http://localhost:3000 in your browser. Enter your WEB_APP_BOOTSTRAP_SECRET when prompted. Once authenticated, the knowledge graph browser is available.
Checkpoint: Curia is running. Agents are live, the CLI is working, and the web app is accessible. Stop here or continue to Tier 2 to add the email channel and semantic search.

First-time setup

Once Curia is running, open the web app at http://localhost:3000 and complete the setup wizard. It walks you through naming your instance, setting its persona and voice, and configuring the CEO profile it operates on behalf of. This takes a few minutes and makes every subsequent interaction significantly more useful. After setup, start a conversation from 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 uncomment this line in .env:
NODE_EXTRA_CA_CERTS=/Users/yourname/.config/curia/macos-ca-certs.pem
Confirm the Docker container is running:
docker compose ps
If the container is healthy but Curia can’t connect, verify that the credentials in .env match the values in docker-compose.yml.
All three Nylas variables must be present: NYLAS_API_KEY, NYLAS_GRANT_ID, and NYLAS_SELF_EMAIL. If any are missing, the channel disables itself at startup. Check the startup logs for one of these messages:
  • NYLAS_API_KEY/NYLAS_GRANT_ID not set — email channel disabled — the API key or grant ID is missing
  • NYLAS_SELF_EMAIL not set — email adapter disabled — the first two variables are set but NYLAS_SELF_EMAIL is missing

Next steps

Configure your instance

Set up multiple email accounts, tune the autonomy engine, and customize security rules.

Core concepts

Understand how agents, skills, memory, and channels fit together.