Sigils are bracketed tokens such as [ENV.SMTP_PASSWORD] that Arthexis expands at runtime. They make it possible to reference configuration secrets, system metadata, or records stored in other apps without duplicating values across the project. This cookbook explains how the system resolves sigils, how to inspect the available prefixes, and how to introduce new ones safely.
Use sigils whenever an integration needs values that already live elsewhere in the platform. Common examples include:
[ENV.SMTP_PASSWORD], [ENV.DATABASE_URL]).[CONF.DEFAULT_FROM_EMAIL]).[SYS.ROLE], [SYS.VERSION]).[USER=username.email]).Because sigils resolve just before the data is used, they keep configurations DRY and ensure updates propagate everywhere without editing multiple files.
Sigils always start with [ and end with ]. The following patterns are supported:
[PREFIX.KEY] — returns a field or attribute. Hyphens and casing are normalized automatically so [env.smtp-password] and [ENV.SMTP_PASSWORD] behave the same.[PREFIX=IDENTIFIER.FIELD] — selects a specific record by primary key or any unique field declared as a natural key.[PREFIX:FIELD=VALUE.ATTRIBUTE] — filters by a custom field instead of the primary key.[PREFIX.FIELD=[OTHER.SIGIL]] — nests sigils so the value after = resolves before the outer token.[PREFIX] — for entity prefixes, returns the serialized object in JSON; for configuration prefixes, resolves to an empty string when the key is missing.Arthexis ships with several prefixes out of the box:
ENV reads environment variables.CONF reads Django settings.SYS exposes computed system information such as build metadata, the active node role, and runtime versions.Additional prefixes become available as soon as they are defined as Sigil Roots. Each root maps a short code (for example ROLE, ODOO, or USER) to a Django model and enumerates which fields can be resolved.
The Sigil Builder interface lives in the Django admin under Admin → Sigil Builder (/admin/sigil-builder/). From there you can:
When adding a root:
notes field so future operators understand the context.Changes take effect immediately—no service restart is required—so review tokens carefully in the test console before saving.
[UNKNOWN.VALUE]) and are logged so you can spot typos quickly.python manage.py sigil_resolve "[PREFIX.KEY]" from a shell (when available) or the Sigil Builder test console to verify a token outside of production workflows.ENV rather than duplicating credentials in plain text.By centralizing dynamic configuration behind sigils, administrators can keep installations consistent, minimise drift between environments, and grant integrators self-service access to the data they need without exposing sensitive details directly.