Skills are the mechanism through which agents interact with external services and take action in the world. When Curia sends an email, searches the web, creates a calendar event, or looks up a contact, it is invoking a skill. Agents don’t call APIs directly — they invoke skills, which handle authentication, validation, and output sanitization on their behalf. The LLM never sees raw credentials.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.
Two types of skills
Curia supports two types of skills, and agents work with both using the same interface — they cannot tell the difference at runtime.- Local skills
- MCP skills
Local skills live in the The manifest declares everything the execution layer needs to validate, authorize, and invoke the skill. The handler implements the actual logic.
skills/ directory as a folder containing a manifest and handler:The skill manifest
Every local skill includes askill.json manifest that the execution layer validates at startup. Here is a real example from the email-send skill:
Manifest fields
| Field | Description |
|---|---|
name | Unique identifier used by agents and the skill registry |
description | Human-readable description — shown to the LLM and in the registry |
sensitivity | normal or elevated — controls first-use approval behavior |
action_risk | Risk level used by the autonomy engine — see below |
inputs | Input schema — validated before the handler is called |
outputs | Output schema — documents what the skill returns |
permissions | Declared capabilities, validated at load time |
secrets | Env-var-backed secrets this skill may request via ctx.secret() |
timeout | Per-invocation timeout in milliseconds (default: 30,000) |
Action risk levels
Every skill declares anaction_risk value that indicates its potential impact on the world. This field is required — Curia will not start if any skill manifest omits it.
| Level | Min autonomy score | Capability class |
|---|---|---|
none | 0 | Read-only, no external effects (web search, summarization) |
low | 60 | Internal state writes — memory, contacts |
medium | 70 | Outbound communications — sending email or Signal messages |
high | 80 | Calendar writes, commitments made on behalf of the CEO |
critical | 90 | Financial, destructive, or irreversible actions |
Sensitivity and first-use approval
Thesensitivity field controls what happens the first time an agent tries to use a skill it was not explicitly configured with:
normal— the skill is auto-approved if the agent hasallow_discovery: trueelevated— skills like payment processing or bulk deletion require your explicit approval the first time an agent requests them; once approved for that agent, they do not ask again
Secrets: credentials the LLM never sees
Skills that need API keys, passwords, or tokens declare them in theirsecrets array. At runtime, the execution layer provides a scoped ctx.secret() accessor:
Output sanitization
Every skill result is sanitized before the LLM sees it. This prevents tool outputs from being used as injection vectors:- XML and HTML tags are stripped — they cannot be interpreted as system instructions
- Outputs longer than 200,000 characters are truncated with a
[truncated]marker - Patterns matching known secret formats (API keys, tokens, passwords) are redacted
- Error strings are wrapped in a structured format that prevents them from being read as instructions
Built-in skills
Curia ships with more than 50 built-in skills across several categories:Email
email-send, email-reply, email-list, email-get, email-archive, email-draft-save — send, reply, browse, and draft emails via the Nylas API across multiple configured accounts.Calendar
Calendar
calendar-list-calendars, calendar-list-events, calendar-create-event, calendar-update-event, calendar-delete-event, calendar-find-free-time, calendar-check-conflicts, calendar-register — full calendar management via Nylas.Contacts
Contacts
contact-create, contact-lookup, contact-list, contact-link-identity, contact-set-role, contact-merge, contact-find-duplicates, contact-grant-permission, contact-revoke-permission, contact-unlink-identity, contact-set-trust — manage contacts and their trust levels.Web research
Web research
web-search, web-fetch, web-browser — search the web via Tavily, fetch static pages, or use a full Playwright-backed browser for JavaScript-rendered sites.Knowledge and memory
Knowledge and memory
entity-context, context-for-email, knowledge-company-overview, knowledge-meeting-links, knowledge-travel-preferences, knowledge-loyalty-programs, query-relationships, delete-relationship, extract-facts, extract-relationships — query and extend the knowledge graph.Scheduling
Scheduling
scheduler-create, scheduler-list, scheduler-cancel, scheduler-report — create and manage recurring or one-shot scheduled tasks.Communication templates
Communication templates
template-meeting-request, template-reschedule, template-cancel, template-doc-request — structured outbound email templates for common executive workflows.Agent coordination
Agent coordination
delegate, bullpen, skill-registry, held-messages-list, held-messages-process, signal-send — inter-agent delegation, the Bullpen discussion space, skill discovery, and held-message management.Autonomy
Autonomy
get-autonomy, set-autonomy — read and update the global autonomy score. Pinned to the Coordinator only.Recommended MCP integrations
These MCP servers are not bundled with Curia but are documented as first-class integrations:| Server | Purpose |
|---|---|
| Google Workspace | Drive, Docs, Sheets, Gmail read/search/write |
| Filesystem | Scoped local file access (read/write/search) |
| GitHub | Repository management, issues, pull requests |
| Brave Search | Additional web search for research agents |
| Fetch | Web fetching with robots.txt compliance |
config/skills.yaml using the mcp_servers block shown above. Curia will discover and register its tools automatically at startup.
Building custom skills
Build a local skill from scratch with a manifest and handler.
Autonomy
See how action_risk values gate skill execution by autonomy score.