Skip to main content
Channels have two configuration surfaces:
  1. The channel registry — a DB-backed record of which channels are installed and enabled, plus their credentials in the vault. Managed from the Channels page in the console, not from YAML. See Managing skills, agents, and channels.
  2. config/local.yaml under channel_accounts — used only for the multi-account email layout (one set of credentials per logical account). Single-account email, Signal, CLI, and HTTP do not need this block.

The channel registry

Each channel is described by a catalog entry and tracked by a row in the channel_registry table (enabled, is_toggleable, install/enable provenance). A channel implements a small interface:
interface Channel {
  readonly name: string;          // 'email' | 'signal' | 'http' | 'cli'
  readonly isToggleable: boolean; // false for http and cli — see below
  start(): Promise<void>;         // connect / begin listening
  stop(): Promise<void>;          // graceful, idempotent teardown
}
Outbound delivery does not go through this interface — all sends are routed through the outbound gateway.
HTTP and CLI are always on. They have isToggleable: false and cannot be disabled or uninstalled — this is an operator-lockout safeguard, so you can never accidentally cut off your own access to the instance. Email and Signal are toggleable: install/enable them from the Channels page once their credentials are in the vault.

Credential fields and vault keys

Each channel declares its credential fields in the catalog. Every field is stored in the vault under a namespaced key following the convention channel.<name>.<field>:
ChannelVault keys
emailchannel.email.nylas_api_key, channel.email.nylas_grant_id, channel.email.nylas_self_email
signalchannel.signal.signal_phone_number
A field marked required must resolve before the channel can be enabled — the registry blocks enabling a channel whose required credentials are missing, the same way install.requires_secrets gates skills.

Email accounts

The channel_accounts.email block in config/local.yaml is for connecting multiple email accounts. A single-account deployment does not need it — its credentials come from the vault keys above.
# config/local.yaml
channel_accounts:
  email:
    <account-name>:
      nylas_grant_id: string          # Nylas grant ID (supports "env:VAR_NAME")
      self_email: string              # email address this account sends from (supports "env:VAR_NAME")
      excluded_sender_emails: [string] # optional, supports "env:VAR_NAME"

Field details

account-name

The logical name for this account (e.g., curia, personal, work). Used as the account parameter in email skills (email-list, email-get, email-draft-save, email-archive).

nylas_grant_id

The Nylas grant identifier for the connected email account. Supports env:VAR_NAME references to pull the value from an environment variable.

self_email

The email address this account reads from and sends as. Supports env:VAR_NAME references.

excluded_sender_emails

Additional sender email addresses to suppress from this account’s inbox, beyond the account’s own self_email. Primary use case: exclude other connected accounts’ addresses to prevent processing loops. Supports env:VAR_NAME references.

env:VAR_NAME references

Use env:VAR_NAME syntax in any string field to reference an environment variable rather than inlining credential values in the YAML:
channel_accounts:
  email:
    curia:
      nylas_grant_id: "env:NYLAS_GRANT_ID_CURIA"
      self_email: "env:NYLAS_SELF_EMAIL_CURIA"

Example: multi-account setup

channel_accounts:
  email:
    # Curia's own email
    curia:
      nylas_grant_id: "env:NYLAS_GRANT_ID_CURIA"
      self_email: "env:NYLAS_SELF_EMAIL_CURIA"

    # CEO's personal inbox
    personal:
      nylas_grant_id: "env:NYLAS_GRANT_ID_PERSONAL"
      self_email: "env:NYLAS_SELF_EMAIL_PERSONAL"
      excluded_sender_emails:
        - "env:NYLAS_SELF_EMAIL_CURIA"
When channel_accounts.email is present in config/local.yaml, the single-account mode sourced from the vault keys channel.email.nylas_api_key / channel.email.nylas_grant_id / channel.email.nylas_self_email is ignored.

Email setup

Step-by-step guide to connecting your email.

Initial configuration

Environment variables and first-run config.