The manifest (elizon.yaml)
Every section of elizon.yaml, what it's for, and the rules validate enforces.
elizon.yaml sits at the root of a Package project and describes the whole Package. This page
explains each section. The authoritative, always-current definition for your CLI version is:
npx @elizon/cli schemaUnknown fields are rejected, not ignored, so a typo or a field from a newer CLI fails validate
(MANIFEST_UNKNOWN_FIELD).
A complete example
apiVersion: elizon.ai/v1
kind: Package
metadata:
name: support-bot
namespace: acme
version: 1.0.0
displayName: Support Bot
description: Answers product questions from your own documentation.
license: UNLICENSED
compatibility:
minPlatformVersion: 0.21.0
requiredAdapter: agno
requiredCapabilities: [knowledge]
compliance:
dataCategories: [personal_data]
retention:
conversations: 30d
documents: retained_until_deleted
autonomy: advisory
providers: []
entryPoint: agents.support-assistant
agents:
- name: support-assistant
ref: ./agents/support-assistant.yaml
knowledgeBases:
- name: product-docs
ref: ./knowledge/product-docs.yaml
slots:
- id: reasoning
type: llm
required: true
description: The model the assistant answers with.
- id: embedding
type: llm
required: true
description: The model that indexes your documents.
boundTo: [knowledgeBases.product-docs]
- id: product-documents
type: knowledge-source
required: true
description: Your product documentation.
boundTo: [knowledgeBases.product-docs]
triggers:
- id: run-manually
type: manualapiVersion and kind
Always apiVersion: elizon.ai/v1 and kind: Package.
metadata
| Field | Required | Rules |
|---|---|---|
name | Yes | Lowercase letters, digits and single hyphens (after-hours-triage). |
namespace | Yes | Your organization's identifier, as free text. Pick one and keep it: namespace + name is the Package's identity. |
version | Yes | Semantic version (1.0.0, 1.1.0-beta.1). Bump it for every artifact you distribute. |
displayName | Yes | Shown to installers. |
description | Yes | One or two sentences on what the Package does. |
license | Yes | e.g. UNLICENSED, Apache-2.0, or your own licence name. |
The artifact is named <namespace>-<name>-<version>.pkg.
compatibility
| Field | Required | Values |
|---|---|---|
minPlatformVersion | Yes | The oldest Elizon platform version the Package runs on. Installs on an older platform are refused (PKG_INCOMPATIBLE_PLATFORM_VERSION). |
requiredAdapter | Yes | agno. |
requiredCapabilities | Yes | Any of voice, sip, knowledge, schedule, teams, workflows, policy.redaction, policy.ner, policy.routing, or []. An Organization whose deployment lacks one is told before anything is installed. The three policy.* capabilities are Enterprise Edition: on Community the install is refused with PKG_MISSING_CAPABILITY naming, e.g., policy.redaction (Enterprise Edition). |
Declarations must agree (MANIFEST_CAPABILITY_DISAGREEMENT): every capability a trigger or a
policy_set floor rule needs must be in requiredCapabilities. Triggers: schedule
needs schedule, knowledge-document needs knowledge, inbound-call needs voice and sip.
Floor rules: policy.redaction for a redact action or a data.redaction block, policy.routing
for a routing.data_rules rule, policy.ner for an ner.* detector or a data.name_recognition
rule.
A manifest that uses policy_set, the confidential_business data category or a policy.*
capability must set minPlatformVersion: 0.26.0 or newer: older platforms and CLIs reject those
values.
Likewise, a Package whose Agent definitions use skills must set minPlatformVersion: 0.25.0 or
newer: platforms older than 0.25.0 reject the field. npx @elizon/cli validate and build refuse
the combination with MANIFEST_INVALID_FIELD at compatibility.minPlatformVersion.
compliance
The Package's own statement of what it does with data, shown to the installer before anything is installed and pinned in the audit record at install. Make it honest, not merely valid.
| Field | Required | Values |
|---|---|---|
dataCategories | Yes | One or more of personal_data, special_category, financial, confidential_business, or none (which can't be combined with others). Count what the Package's Data Tables accumulate. |
regions | No | Where processing happens, e.g. [EU]. Declare it only if the Package commits to it; there's no default. Every llm Slot's constraints.regions must be within this list (MANIFEST_COMPLIANCE_REGION_CONTRADICTION); a chip such as EU covers Slot regions naming its member countries (e.g. de), not the other way round. |
retention.conversations | Yes | not_retained, retained_until_deleted, or a duration: 24h, 30d, 2w, 12mo, 1y. |
retention.documents | Yes | Same vocabulary. |
| Data Tables | — | Not a field: a table the Package ships is retained until the operator deletes it (and, with onUninstall: keep, survives uninstall), so declare that in retention rather than leaving it unmentioned. |
autonomy | Yes | autonomous, human_in_the_loop or advisory. |
aiActRiskTier | No | minimal, limited, high or unacceptable: your EU AI Act risk assessment. |
aiActJustification | No | Your reasoning. Declared together with aiActRiskTier or not at all. |
providers | Yes | Third-party processors the Package is built around (e.g. [Deepgram, ElevenLabs]), or []. |
When an update changes this block, the operator is shown the change separately and must acknowledge it. See Update.
entryPoint
Exactly one <collection>.<name> reference to a declared object, e.g. workflows.triage-flow. See
Package concepts.
Component lists
agents: [{ name, ref }]
teams: [{ name, ref }]
workflows: [{ name, ref }]
tools: [{ name, ref }]
skills: [{ name, ref }]
knowledgeBases: [{ name, ref }]
dataTables: [{ name, ref }]
voice: { ref }
sip: { ref }nameis the manifest-local name other objects use (agents.<name>). Lowercase and hyphenated, and unique within its list.refis a relative path inside the project to the object's definition file. No absolute paths and no... For a Skill it points at the Skill's folder (trailing/).
slots
What the installer supplies: models, credentials, documents, speech providers, a phone trunk. See Slots.
triggers
What starts the entry point: schedule, webhook, inbound-call, api, manual, email,
knowledge-document, app. See Triggers.
policy_set
Optional. The policy your Package's agents need (see Package floors and Policies), in two parts:
floor: rules the Package fixes, written in the policy rules schema (capability,routing,data,code,egress). Nothing an installer or administrator applies to the Package's objects can go below them while the Package is installed. A floor rule that needs an Enterprise capability must be listed incompatibility.requiredCapabilities, and acustom.*ordictionary.*detector (an Organization's own detection library) is refused in a floor.parameters: named knobs with bounds you declare. Today every install uses each parameter'sdefault; letting the installer choose a value within the bounds comes in a later release. Each has aname(snake_case), atypeand adefault:
type | default | What it sets | bounds |
|---|---|---|---|
host_list | A list of host patterns | egress.allowed_hosts ([] sets no allowlist) | maxItems, allowed (patterns that must cover each host) |
region | EU, US, Local, Other | routing.regions | allowed |
approval_toggle | true or false | capability.approvals.<group>, for group: send, write or delete (every group when omitted) | — |
A default must be inside its bounds and inside the floor, and no two parameters may set the same
rule.
policy_set:
floor:
egress: { allowed_hosts: [api.bank.example] }
code: { enabled: false }
parameters:
- { name: region, type: region, default: EU, bounds: { allowed: [EU, Local] } }
- { name: approve_sends, type: approval_toggle, default: true, group: send }Install creates a Package policy from the floor and the parameters' defaults and attaches it to every Agent, Team and Workflow the install creates. Uninstall removes it; an update replaces it with the new version's.
signature
Optional, and usually omitted. sign records the signature in the archive, not in the manifest.
You may pin signature.signerKeyId (ed25519:<32 hex>) so that only that key's signature is
accepted. signature.attestations must be empty or absent; counter-signing by a registry is
reserved for a future release.
evaluation
Optional. A suite of test cases the installing Organization runs before activating the Package. See Evaluation.
evaluation:
suite: ./eval/triage-suite.yaml
authorBaseline: { pass_rate: 1.0 }
gate: advisory # or must-pass