Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.meetcuria.com/llms.txt

Use this file to discover all available pages before exploring further.

Skill definitions live in skills/<name>/skill.json. Each manifest declares what the skill does, what it needs, and its security classification.

Schema reference

{
  "name": "string",
  "description": "string",
  "version": "string",
  "sensitivity": "normal | elevated",
  "action_risk": "none | low | medium | high | critical | number",
  "inputs": {
    "field_name": "type_string",
    "optional_field": "type_string?"
  },
  "outputs": {
    "field_name": "type_string"
  },
  "permissions": ["string"],
  "secrets": ["string"],
  "timeout": 30000,
  "capabilities": ["string"],
  "entity_enrichment": {
    "param": "string",
    "default": "caller | agent"
  }
}

Field details

name

Unique identifier for the skill. Must match the directory name under skills/. Convention: lowercase kebab-case.

action_risk

Required. The minimum autonomy score required to invoke this skill without explicit CEO approval. Curia will not start if any skill omits this field.
LabelMinimum scoreUse for
none0Read-only operations with no side effects — web search, reading email, summarizing
low60Internal state writes — memory, contacts, configuration
medium70Outbound communications — sending email, Signal messages
high80Calendar writes, commitments on behalf of the CEO
critical90Financial, destructive, or irreversible operations
A raw number (0–100) can be used for precision (e.g., 75 for a skill that should unlock just above “approval required” but below “spot-check”). Numbers outside [0, 100] produce a validation error at load time.

sensitivity

ValueMeaning
normalCan be auto-approved based on autonomy score
elevatedRequires human approval on first use, regardless of autonomy score

inputs and outputs

Shorthand type declarations for skill parameters and return values. Field names map to type strings:
Type stringMeaning
"string"Required string
"string?"Optional string
"number"Required number
"boolean"Required boolean
"object"Required object (any shape)
For MCP-sourced skills, the full JSON Schema from the MCP server’s tools/list response is used directly instead of this shorthand.

permissions

Array of permission names this skill requires. Validated at load time.

secrets

Array of environment variable names this skill needs access to via ctx.secret(). Only secrets declared here are accessible — the skill cannot read arbitrary environment variables.

timeout

Per-invocation timeout in milliseconds. Default: 30000 (30 seconds).

capabilities

Declares which privileged services this skill needs from the execution layer. Only known capability names are accepted — the loader validates against a fixed allowlist at startup and rejects unknown names.
CapabilityService provided
busEvent bus access
agentRegistryAgent registry for delegation
outboundGatewayOutbound message delivery (email, Signal)
heldMessagesHeld message service
schedulerServiceJob scheduling
entityMemoryKnowledge graph read/write
nylasCalendarClientCalendar operations via Nylas
autonomyServiceAutonomy score management
executiveProfileServiceCEO writing voice profile
browserServicePlaywright browser for web interaction
bullpenServiceInter-agent discussion threads
skillSearchSearch the skill registry
Services not listed here (contactService, entityContextAssembler, agentPersona) are universal — available to every skill without declaration.

entity_enrichment

Optional. When declared, the execution layer automatically assembles entity context before invoking the skill handler, injecting it into ctx.entityContext.
FieldDescription
paramThe input key containing contact/entity IDs to enrich
defaultWhat to use when the input is not provided: "caller" (the message sender) or "agent" (the agent’s own contact)

Example

{
  "name": "email-send",
  "description": "Send a new email to specified recipients.",
  "version": "1.0.0",
  "sensitivity": "normal",
  "action_risk": "medium",
  "inputs": {
    "to": "string",
    "cc": "string?",
    "subject": "string",
    "body": "string"
  },
  "outputs": {
    "message_id": "string",
    "to": "string",
    "subject": "string"
  },
  "permissions": [],
  "secrets": [],
  "timeout": 30000,
  "capabilities": ["outboundGateway"]
}

Built-in skills

Catalog of all skills Curia ships with.

Autonomy engine

How action_risk connects to the autonomy score.