Curia uses two configuration layers: aDocumentation Index
Fetch the complete documentation index at: https://curia.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
config/default.yaml file that ships with the repository and defines all defaults, and a config/local.yaml file that you create to override specific values for your deployment. Secrets — API keys, credentials, and tokens — always go in .env, never in YAML files.
How configuration works
When Curia starts, it mergesconfig/local.yaml on top of config/default.yaml. Any key you set in local.yaml overrides its default. Keys you omit stay at their default values. You never need to copy the entire default.yaml — only override what you need.
Environment variables
Secrets and deployment-specific values go in.env. The most important ones are listed below.
Authentication and access
Authentication and access
| Variable | Required | Description |
|---|---|---|
API_TOKEN | Yes | Bearer token for all HTTP API requests. Set to any long random string. |
WEB_APP_BOOTSTRAP_SECRET | Yes | Secret for accessing the knowledge graph browser at /. Set to any long random string. |
CEO_PRIMARY_EMAIL | Yes | Your primary email address. Ensures your messages are never held as an unknown sender at startup. |
TIMEZONE | Yes | IANA timezone (e.g. America/Toronto). Used to resolve relative dates in agent prompts. |
LLM providers
LLM providers
| Variable | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY | Yes | Powers all agents. Get your key from console.anthropic.com. |
OPENAI_API_KEY | Recommended | Required for knowledge graph embeddings (text-embedding-3-small) and semantic search. |
Email (Nylas)
Email (Nylas)
All three variables must be set for the email channel to activate. If any are missing, the channel disables itself at startup.
For multiple email accounts with per-account outbound policies, see Multiple email accounts below.
| Variable | Description |
|---|---|
NYLAS_API_KEY | Application API key from the Nylas dashboard. |
NYLAS_GRANT_ID | Identifier for the connected email account (from Nylas Grants). |
NYLAS_SELF_EMAIL | The email address Curia reads and sends from. |
Signal
Signal
| Variable | Description |
|---|---|
SIGNAL_PHONE_NUMBER | Your E.164 phone number (e.g. +12223334444). Must match the number registered via signal-cli register + verify. |
SIGNAL_SOCKET_PATH — the deployment layer manages this automatically.Web search
Web search
| Variable | Description |
|---|---|
TAVILY_API_KEY | API key from tavily.com. Powers the web-search skill. |
Multiple email accounts
The default Nylas setup connects a single email account via environment variables. To connect multiple accounts — each with its own outbound behaviour — define them inconfig/local.yaml using channel_accounts.email.
Each account has a logical name, a Nylas grant ID, a self-email address, and an outbound policy.
Outbound policies:
| Policy | Behaviour |
|---|---|
direct | Send immediately. Content filter and blocked-contact checks are always enforced. |
draft_gate | Save the reply as a Nylas draft for your review before sending. |
autonomy_gated | Check the global autonomy score. If the score meets autonomy_threshold, send directly; otherwise fall back to draft_gate. |
env:VAR_NAME to reference environment variables rather than inlining credential values directly in the YAML file.
When
channel_accounts.email is present in config/local.yaml, the single-account env-var mode (NYLAS_API_KEY / NYLAS_GRANT_ID / NYLAS_SELF_EMAIL) is ignored.Next steps
Set up email
Connect your inbox and configure per-account outbound policies.
Full configuration reference
Every configurable setting: rate limits, security rules, knowledge graph decay, and more.