Curia ships with a Coordinator agent that handles all incoming messages and a research analyst that can dig into topics on demand. When your workflow calls for domain-specific expertise — expense tracking, contract review, investor relations — you create a specialist agent that owns that domain and lets the Coordinator delegate to it.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.
When to create a specialist vs. using the Coordinator directly
The Coordinator can handle many tasks on its own using its pinned skills. Create a specialist agent when:- The task requires dedicated memory scopes (e.g., an expense tracker that remembers vendor patterns across weeks)
- You want a focused system prompt that won’t bloat the Coordinator’s context
- The task has a recurring schedule of its own (e.g., generate a weekly summary every Monday)
- You want separate error budgets — caps on LLM turns and spend that are independent of the Coordinator’s limits
Simple agent — YAML only
Most agents need nothing more than a YAML file. Create a file in theagents/ directory:
Required fields
| Field | Description |
|---|---|
name | Unique identifier used in the Bullpen, audit log, and the delegate skill |
description | One-sentence summary; the Coordinator reads this to decide when to delegate |
model | LLM provider and model name |
system_prompt | The agent’s instructions |
Optional fields
model — provider, model, fallback
model — provider, model, fallback
Curia supports three providers. Configure a Supported providers:
fallback so the agent continues working if the primary provider is unavailable:anthropic, openai, ollama. For ollama, set model to the name of a locally pulled model (e.g., llama3).pinned_skills and allow_discovery
pinned_skills and allow_discovery
pinned_skills lists skills that are always available to this agent. allow_discovery: true lets the agent search the skill registry for capabilities beyond the pinned list:allow_discovery: false (the default) for agents that should only ever use their declared skills.memory — scopes
memory — scopes
Memory scopes give the agent access to named segments of entity memory. An agent only reads and writes facts within its declared scopes:Scopes are free-form strings — you define them. Two agents sharing a scope can read each other’s facts within it.
schedule — cron jobs at startup
schedule — cron jobs at startup
Schedule tasks that run automatically on a cron expression:Cron expressions run in Curia’s configured timezone (set via
TIMEZONE in .env). These jobs are created in the scheduler database at startup. If the job already exists from a previous run, it is updated, not duplicated.error_budget — max turns and cost
error_budget — max turns and cost
Every agent task has hard caps. When either limit is exceeded, the task stops immediately — no infinite loops, no surprise bills:Error budgets apply per task execution — a recurring scheduled task gets a fresh budget on each run.
Full example — investor relations specialist
Complex agents — TypeScript handler
If you need custom logic that goes beyond what a system prompt can express, add a TypeScript handler alongside your YAML:Delegating to your agent
Once your agent is running, the Coordinator can delegate to it using thedelegate skill. The Coordinator reads each agent’s description field to decide when to route tasks. Write descriptions clearly — they function as the Coordinator’s routing table.
You can also test delegation directly from the CLI: