action_risk level that determines the minimum autonomy score required to invoke it. Skills with action_risk: none can always run; higher-risk skills trigger the approval workflow when the score is below their floor.
Contact management
| Skill | action_risk | Description |
|---|---|---|
contact-create | low | Create a new contact record |
contact-lookup | none | Look up a contact by name (supports partial matching) |
contact-list | none | List all contacts |
contact-rename | low | Rename a contact |
contact-set-role | low | Set a contact’s role (e.g., CFO, board member) |
contact-set-trust | low | Set a contact’s trust level |
contact-link-identity | low | Link a channel identity (email, phone) to a contact |
contact-unlink-identity | low | Remove a channel identity from a contact |
contact-grant-permission | low | Grant a specific permission to a contact |
contact-revoke-permission | low | Revoke a permission from a contact |
contact-merge | low | Merge duplicate contacts (supports dry-run preview) |
contact-find-duplicates | none | Scan for potential duplicate contacts |
contact-register | low | Register or resolve a contact from outside the dispatcher pipeline (used by direct-channel agents such as ceo-inbox) |
contact-set-identity-status | low | Mark a channel identity as active, defunct, or bounced |
contact-update | low | Set a contact’s canonical attributes (title, organization, primary email/phone, timezone, location, pronouns, and more); phone numbers are normalized to E.164 |
| Skill | action_risk | Description |
|---|---|---|
email-send | medium | Send a new email to specified recipients. Accepts an optional list of attachments (file:// URLs, 20 MB / 10 files) and an optional context_bridge JSON for delegation-aware reply routing. |
email-reply | medium | Reply to an existing email thread. Appends the quoted original message body to the reply (matching standard email-client behaviour). Accepts optional attachments and a context_bridge JSON. |
email-list | none | List recent messages in an inbox |
email-get | none | Fetch the full body of a specific message |
email-draft-save | low | Save a draft reply for CEO review |
send-draft | medium | Send a previously saved draft |
email-archive | low | Archive a message |
context-for-email | none | Assemble context for composing an email |
email-label | low | Apply one or more labels to an email message (creates the label if it doesn’t exist) |
email-mark-read | low | Mark an email message as read |
email-list-folders | none | List all folders and labels in an email account |
email-create-folder | low | Create a new folder or label in an email account |
email-download-attachment | low | Download an email attachment and return content as base64 (10 MB limit) |
drive-download-file | low | Download a Google Drive file (native or Google-native export) to the temp-file store and return a file:// URL, so Drive files can be attached to outbound email |
CEO Inbox
Skills for the CEO Inbox agent to manage the CEO’s personal email account. These skills are pinned exclusively to theceo-inbox agent — they access the CEO’s personal email and should not be called from other agents.
| Skill | action_risk | Description |
|---|---|---|
ceo-inbox-list | none | List recent unread messages from the CEO’s personal inbox |
ceo-inbox-read | none | Read a specific message, returning plain text and HTML body |
ceo-inbox-search | none | Search the CEO’s inbox using Gmail-native query syntax. When unread_only is set alongside a search query, is:unread is embedded into the search string so the filter actually applies. |
ceo-inbox-draft-compose | low | Compose a cold-outreach (new, non-reply) draft into the CEO’s Gmail Drafts for review |
ceo-inbox-draft-reply | low | Create a reply-all draft for CEO review (never sent automatically) |
ceo-inbox-draft-edit | low | Update an existing draft’s recipients, subject, or body, so a wrong-recipient or stale draft can be fixed without recreating it |
ceo-inbox-download-attachment | low | Download an attachment from the CEO’s inbox by its Nylas ID (10 MB limit) |
ceo-inbox-archive | low | Archive a message by removing it from the INBOX folder |
ceo-inbox-label | low | Apply one or more labels to a message, creating labels that don’t yet exist |
ceo-inbox-mark-read | low | Mark a message as read to prevent re-processing on the next triage run |
ceo-inbox-mark-starred | low | Star (or unstar) a message in the CEO’s inbox. Triage auto-stars anything labelled 🚨 Urgent so it surfaces in the native client. |
ceo-inbox-update-folders | low | Add or remove folders/labels on a message (e.g. star, move between folders). Falls back to the computed folder list when Nylas omits folders from the response, guarding against accidental folder wipes. |
Calendar
| Skill | action_risk | Description |
|---|---|---|
calendar-list-calendars | none | List all registered calendars |
calendar-register | low | Register a new calendar |
calendar-list-events | none | List events in a date range |
calendar-create-event | high | Create a new calendar event |
calendar-update-event | high | Update an existing event |
calendar-delete-event | high | Delete a calendar event |
calendar-find-free-time | none | Find available time slots |
calendar-check-conflicts | none | Check for scheduling conflicts |
Memory and knowledge graph
| Skill | action_risk | Description |
|---|---|---|
memory-store | low | Store a fact in the knowledge graph; auto-creates the entity if it doesn’t exist |
memory-query | none | Query the knowledge graph |
memory-confirm | low | Confirm or dismiss a decay-warned KG node, resetting or triggering its archive |
decay-warnings-list | none | List KG nodes currently in the warned state with days remaining until auto-archive |
query-relationships | none | Look up stored relationships for an entity |
delete-relationship | low | Remove a relationship from the knowledge graph |
entity-context | none | Assemble entity context (facts, relationships, history) for a contact |
extract-facts | low | Extract structured facts from text (system skill) |
extract-relationships | low | Extract relationships from text (system skill) |
Scheduling
| Skill | action_risk | Description |
|---|---|---|
scheduler-create | high | Create a recurring or one-shot scheduled task |
scheduler-list | none | List active scheduled jobs |
scheduler-cancel | high | Cancel a scheduled job |
scheduler-report | none | Generate a report on scheduled task activity (system skill) |
Tasks
Track deferred, multi-step, and waiting work in the unified tasks backlog. These are usually auto-pinned onto an agent via theenable_task_management capability rather than listed individually.
| Skill | action_risk | Description |
|---|---|---|
task-create | low | Create a task with an owner (you / the CEO / external), priority, optional due date, and an optional wake_at that schedules a future nudge |
task-list | none | List tasks filtered by status, owner, or tag — the source for “what’s open?”, “what’s waiting on me?” |
task-update | low | Update a task’s status, priority, owner, or wake time; append a progress note |
task-complete | low | Mark a task done (cancels any pending wake-up) |
Communication
| Skill | action_risk | Description |
|---|---|---|
signal-send | medium | Send a Signal message. Accepts an optional context_bridge JSON for delegation-aware reply routing. |
bullpen | low | Open or contribute to an inter-agent discussion thread |
request-clarification | none | Pause a delegated task mid-execution to ask the CEO a clarifying question; the runtime short-circuits the tool loop and returns a typed result with a resume token so the coordinator can re-delegate seamlessly once the CEO replies |
context-bridge-release | none | Coordinator-only — explicitly close an active outbound-context entry once the LLM detects a conversation thread has ended, freeing the slot before TTL expiry |
Web research
| Skill | action_risk | Description |
|---|---|---|
web-search | none | Search the web via Tavily. Requires tavily_api_key in the vault — declared in install.requires_secrets, so the registry will not enable the skill until the key is provisioned. |
web-fetch | none | Fetch and extract content from a URL |
web-browser | none | Interact with JavaScript-rendered pages via Playwright |
File parsing
| Skill | action_risk | Description |
|---|---|---|
file-parse | none | Extract structured data from CSV, PDF, HTML, and image files. Accepts either inline content_base64 or a temp_file_url pointing at a file in the configured CURIA_TEMPFILE_DIR (paths are validated against the base directory). |
Templates
| Skill | action_risk | Description |
|---|---|---|
template-doc-request | medium | Generate a document request |
Autonomy
| Skill | action_risk | Description |
|---|---|---|
get-autonomy | none | Read the current autonomy score, trend, and history |
set-autonomy | critical | Change the autonomy score (CEO only) |
list-pending-actions | none | List all open approval requests |
approve-action | none | Approve a pending Curia action request |
deny-action | none | Deny a pending action request |
dismiss-action | none | Dismiss a pending request without approving or denying |
System and utility
| Skill | action_risk | Description |
|---|---|---|
delegate | none | Delegate a task to a specialist agent |
held-messages-list | none | List messages held for CEO review |
held-messages-process | low | Process a held message (identify, dismiss, or block) |
executive-profile-get | none | Get the CEO’s writing voice profile |
executive-profile-update | low | Update the CEO’s writing voice profile |
behavioral-preferences-update | low | Append or replace entries in OfficeIdentity.behavioralPreferences (used by the setup-wizard and any “remember that I…” turn) |
config-store | low | Read or write namespaced persistent configuration (company info, meeting links, travel preferences, loyalty programs, writing config, and more) |
image-generate | low | Generate an image |
skill-registry | none | Search all registered skills by keyword |
Building custom skills
How to create, test, and register a new skill.
Skill manifest schema
Complete reference for the skill.json manifest format.