Features & Specs
Error codes
Every error and warning code the CLI and the install engine report, and what to do about each.
Every diagnostic carries a stable code, plus a message and a hint specific to the case. The
codes are shared by the CLI, the Studio wizard and the install engine, so the same problem has the
same code everywhere. Codes starting CLI_ are about the command or the connection; all others are
about the Package or the install.
Warnings
Warnings never fail a command (exit code 0).
| Code | Meaning |
|---|---|
MANIFEST_SLOT_LLM_TIER_COUNT | More than three required llm Slots. Each is a question for the installer, so justify the friction. |
MANIFEST_SLOT_LLM_REGIONS_UNVERIFIABLE | Retired since Story 26.12: no longer emitted, because an llm Slot's constraints.regions is now checked at install against the LLM Configuration's region. Older CLI binaries still print it; upgrade the CLI and ignore it. |
SKILL_STATIC_SCAN_FLAGGED | The local Skill scan flagged a file. The installing Organization re-scans with its own policy, and that result is authoritative. |
MANIFEST_APP_PROVIDER_UNDECLARED | A Workflow app node (or an Agent's app Tool) calls a provider that compliance.providers does not list, so the install review would show the operator an incomplete list of third parties. Add the provider to compliance.providers. Reported by validate and build. |
CODE_NODE_STATIC_SCAN_FLAGGED | The local scan flagged a Workflow Code node's source (a socket, a subprocess, a network client, /proc, or a shared Skill rule). The installing Organization re-scans, and that result is authoritative. |
HUMAN_REVIEW_APPROVER_STRIPPED | A Human Review step names a literal (or mixed) approver or fallback approver. build strips it; the installer supplies it. An expression-only assignedTo is carried. |
SEND_EMAIL_RECIPIENT_STRIPPED | A Send Email step's to, cc or bcc holds anything other than {{ }} expressions. build strips it; set the recipients on the canvas after install. |
DATA_TABLE_NODE_KEY_MISSING | A Workflow's Data Table node has no key: an upsert with no condition, or an update or delete with none and applyToAllRows off. The Package builds and installs, but the installed Workflow cannot be published or run until the node has its key. Reported by validate, build and install. |
VOICE_CONFIG_KEY_IGNORED | A voice configuration's sttConfig, ttsConfig or callBehavior holds a key a call never reads for that provider (it is dropped), or a credential: apiKey (the stt/tts Slot supplies it) or serviceAccountJson (the operator's Google service account). See Voice and SIP. |
VOICE_PROVIDER_UNSUPPORTED | sttProvider or ttsProvider is not a provider this platform runs. None of its sttConfig/ttsConfig reaches a call; the installer has to choose another provider, and these settings are dropped when they do. |
KB_INDEX_CONFIG_KEY_IGNORED | A Knowledge Base indexConfig holds a key the platform does not read, at any level (a misspelling, or the API names field_name/use_builtin_metadata instead of name/use_builtin). It is carried and ignored. See Index settings. |
PORTABLE_MACHINE_CONTENT_EMAIL | What looks like an email address is in machine content: a Tool's embedded OpenAPI spec (such as info.contact.email) or a Workflow Code node's source (data.code). The Package still builds. A vendor contact or a non-address (logo@2x.png, x@self.weights) may stay; a person's address must go. Reported by validate, build and the Workflow export. |
WORKFLOW_NODE_UNBOUND | An AI Agent node (mode: existing) has agent: null, or a Team step has team: null. The Package builds and installs, but the node has nothing to run. Pick the Agent/Team in Studio and export again, or write agent: agents.<name> / team: teams.<name>. Reported by validate and build. |
TOOL_FIXED_HEADER_SECRET | MCP Tools only: an MCP Tool's valueType: fixed header value looks like a secret: it starts with Bearer/Basic/Token/Digest, contains a known API-key prefix (sk-, ghp_, AKIA…), or sits under a credential-bearing header name (Authorization, Cookie, X-Api-Key, …). A fixed value is carried verbatim to every installer; use valueType: credential with a credential Slot. The message never repeats the value. Reported by validate and build. |
PORTABLE_SKILL_FILE_SKIPPED | validate and build left build or OS clutter out of a Skill folder: __pycache__/, .git/, node_modules/ and .venv/ directories at any depth, and *.pyc, .DS_Store and Thumbs.db files. The message lists the skipped paths. Nothing to fix unless you meant to ship one of them; then rename or move it. |
The manifest file
| Code | Meaning / fix |
|---|---|
MANIFEST_NOT_FOUND | No elizon.yaml in the directory. Run in the Package root, or init one. |
MANIFEST_MALFORMED_YAML | elizon.yaml isn't valid YAML, or isn't a mapping. Fix the syntax at the reported position. |
Manifest fields
| Code | Meaning / fix |
|---|---|
MANIFEST_UNSUPPORTED_API_VERSION | apiVersion isn't one this CLI understands. Use elizon.ai/v1. |
MANIFEST_INVALID_KIND | kind must be Package. |
MANIFEST_MISSING_FIELD | A required field is absent. path names it. |
MANIFEST_INVALID_FIELD | A field has the wrong type or value. path names it. |
MANIFEST_UNKNOWN_FIELD | A field the schema doesn't know: a typo, or a field from a newer CLI. Check schema. |
MANIFEST_ENTRY_POINT_MISSING | No entryPoint. |
MANIFEST_ENTRY_POINT_MULTIPLE | More than one entry point. A Package has exactly one. |
MANIFEST_ENTRY_POINT_INVALID_REFERENCE | entryPoint isn't a <collection>.<name> reference. |
MANIFEST_DUPLICATE_NAME | Two objects in one collection share a name. |
MANIFEST_SLOT_UNKNOWN_TYPE | slots[].type isn't one of the six Slot types. |
MANIFEST_SLOT_DUPLICATE_ID | Two Slots share an id. |
MANIFEST_SLOT_INLINE_CREDENTIAL | A Slot has a field that would hold a secret (apiKey, token, value…). Declare the Slot and let the installer bind a Secret. |
MANIFEST_UNSUPPORTED_ADAPTER | compatibility.requiredAdapter isn't supported. Use agno. |
MANIFEST_COMPLIANCE_REGION_CONTRADICTION | A Slot permits a region that compliance.regions doesn't declare. |
MANIFEST_CAPABILITY_DISAGREEMENT | A trigger or a policy_set.floor rule needs a capability that requiredCapabilities doesn't include. 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. |
MANIFEST_POLICY_ORG_DETECTOR | A policy_set.floor rule uses a custom.* or dictionary.* detector, which names a pattern or keyword dictionary in one Organization's own detection library. Remove the rule; no Package can carry it. |
MANIFEST_TRIGGER_UNKNOWN_TYPE | triggers[].type isn't a trigger type: schedule, webhook, inbound-call, api, manual, email, knowledge-document or app. |
MANIFEST_TRIGGER_DUPLICATE_ID | Two triggers share an id. |
MANIFEST_TRIGGER_SLOT_UNRESOLVED | An inbound-call trigger's sipTrunkSlot doesn't name a declared sip-trunk Slot, or an app trigger's connectionSlot doesn't name a declared credential Slot. |
References
| Code | Meaning / fix |
|---|---|
UNRESOLVED_LOCAL_REFERENCE | A <collection>.<name> reference names nothing declared. The hint lists what exists. |
ENTRY_POINT_NOT_FOUND | entryPoint is well-formed but names an object the Package doesn't declare. |
CYCLE_DETECTED | Objects refer to each other in a loop. The error lists the whole loop. |
Portable definitions
| Code | Meaning / fix |
|---|---|
PORTABLE_DEFINITION_INVALID | A definition file doesn't match its schema. |
PORTABLE_UNDECLARED_REFERENCE | A definition refers to something the manifest doesn't declare. |
PORTABLE_ORG_IDENTIFIER_LEAK | An Organization-specific id would be carried in the artifact, or (outside Tool files) a carried string holds a vault: / {{secret.…}} reference. Replace it with a manifest-local reference or a Slot. |
PORTABLE_PERSONAL_DATA_LEAK | Personal data (such as an email address) appears in carried text. Remove it; a Package reaches strangers. If it isn't an address (e.g. logo@2x.png), rename it. |
PORTABLE_UNSUPPORTED_NODE_TYPE | A Workflow node type that can't be packaged, e.g. a retired type. Replace the node in Studio. |
WORKFLOW_UNKNOWN_OUTPUT_FIELD | A node reads {{ upstream.<id>.output.<field> }} and that node's output has no <field>. Except in the nested-Loop case below, checked for code, ai_agent, human_review and data_table nodes, on the first segment after output only. A Code node's returned keys are under output.result; the hint names the right path. A Loop-body node read after the loop has only iterations and loopNodeId. A node inside a nested Loop's body read from the enclosing Loop's body (outside its own) has no output yet, so every {{ upstream.<id>.output… }} reference to it is refused there, whatever its node type, the bare {{ upstream.<id>.output }} included. Reported by validate and build. |
PORTABLE_CONFIG_SCHEMA_VERSION_UNSUPPORTED | The definition's configSchemaVersion is newer than this platform understands. |
PORTABLE_UNRESOLVED_BINDING | At install, a reference or Slot has no matching resource in the target Organization. |
PORTABLE_CONSTRAINT_VIOLATION | At install, the definition breaks a database rule (the message names it), e.g. an invalid Team lead. |
PORTABLE_IDENTIFIER_COLLISION | At install, the target project already has a Tool with this identifier. Reuse it or rename. |
PORTABLE_SKILL_TOO_LARGE | A Skill's files total more than 10 MB. |
PORTABLE_SKILL_BINARY_FILE | A Skill file isn't UTF-8 text: it holds a NUL byte or isn't valid UTF-8 (an image, a compiled file). The message names the file. Skill files are stored as text, so remove the file or replace it with a text form. Build and OS clutter is skipped instead (see PORTABLE_SKILL_FILE_SKIPPED). |
The .pkg archive
| Code | Meaning / fix |
|---|---|
PKG_INVALID_LAYOUT | Not a zip, truncated, or missing a required entry. Rebuild with build. |
PKG_UNSAFE_ENTRY_PATH | An entry path is absolute, contains .., or is a symlink. |
PKG_LIMIT_EXCEEDED | Over a size or count limit. See limits. |
PKG_ENTRY_TOO_LARGE | One file is over 5 MB. |
PKG_DIGEST_MISMATCH | A file doesn't match the digest manifest. It changed after build; rebuild. |
PKG_UNSUPPORTED_FORMAT_VERSION | The artifact's format is newer than this platform understands. |
Signatures
| Code | Meaning / fix |
|---|---|
PKG_UNSIGNED | Built but not signed. Run sign. |
PKG_SIGNATURE_INVALID | Contents don't match the signature. Treat as tampered; don't install. |
PKG_UNKNOWN_SIGNER_KEY | Signed by a key you haven't trusted. Not tampering; add the signer's public key if you trust them. |
PKG_ALREADY_SIGNED | Already signed. Sign an unsigned build, or use --re-sign deliberately. |
Compatibility
| Code | Meaning / fix |
|---|---|
PKG_INCOMPATIBLE_PLATFORM_VERSION | The platform is older than compatibility.minPlatformVersion. |
PKG_PLATFORM_VERSION_UNKNOWN | The platform didn't report a usable version, so compatibility couldn't be checked. |
PKG_MISSING_CAPABILITY | The deployment lacks a required capability (e.g. voice without a voice backend). |
Slot binding
| Code | Meaning / fix |
|---|---|
SLOT_CREDENTIAL_VALUE_REJECTED | A secret value was given where a {{secret.KEY}} reference is required. |
SLOT_CREDENTIAL_UNRESOLVED | The referenced Secret doesn't exist in this Organization. The hint links to Settings → Secrets. |
SLOT_OAUTH_REQUIRES_BROWSER | An OAuth credential can't be connected in a terminal. Use the Studio wizard. Retrying won't help. |
SLOT_LLM_UNRESOLVED | The LLM Configuration doesn't exist here, its region is outside regions, or no model meets the constraints. |
SLOT_LLM_CONSTRAINT_UNVERIFIABLE | The Slot sets regions and the LLM Configuration's region is unknown. Set its region, or pick another. |
SLOT_LLM_NOT_DEFERRABLE | An llm Slot was deferred. Models can't be deferred. |
SLOT_BINDING_UNRESOLVED | A knowledge, speech or trunk Slot names something this Organization doesn't have, or the Slot doesn't allow. |
SLOT_UNDECLARED | A binding for a Slot id the Package doesn't declare (check the spelling). |
Install, recovery and evaluation
| Code | Meaning / fix |
|---|---|
PORTABLE_INSTALL_FAILED | Creation stopped on something that isn't a Package defect (a timeout, a service error). Resume or roll back. |
INSTALL_ROLLBACK_BLOCKED | Rollback kept an object because something outside the Package now uses it. |
INSTALL_STATE_INVALID | The action doesn't apply in the installation's current status (e.g. resuming a finished install). |
EVALUATION_SUITE_MISSING | evaluation.suite names a file the archive doesn't contain. |
EVALUATION_SUITE_INVALID | The suite isn't valid: no cases, a duplicate id, an expectation that can't be evaluated. |
EVALUATION_NOT_ACKNOWLEDGED | Activation was attempted before the operator acknowledged the evaluation results. |
The CLI itself
| Code | Meaning / fix |
|---|---|
CLI_UNKNOWN_COMMAND | Not a command. Check the spelling; run npx @elizon/cli for the list. |
CLI_COMMAND_NOT_IMPLEMENTED | The command exists but isn't available in this version. Retrying won't help. |
CLI_COMMAND_RESERVED | login / publish: reserved for a future release. |
CLI_WRITE_NOT_CONFIRMED | A command that acts on an Organization ran without --yes. |
CLI_INVALID_USAGE | A missing, unknown or malformed flag or argument. |
CLI_INTERNAL_ERROR | The CLI itself failed (exit code 2). Report it. |
CLI_TOOLCHAIN_UNPINNED | .elizon/config.yaml has no cliVersion. |
CLI_TOOLCHAIN_MISMATCH | The running CLI isn't the project's pinned version. |
Connecting to an Organization
| Code | Meaning / fix |
|---|---|
CLI_TARGET_UNREACHABLE | The address can't be reached (DNS, connection or TLS failure), or what answered isn't an Elizon deployment with Package support. |
CLI_TARGET_ERROR | The gateway answered with an HTTP error status (the message names it), such as a 500. The network is fine: check the platform's gateway logs, or retry once it has recovered. |
CLI_TARGET_APPROVAL_EXPIRED | Nobody approved the device within 10 minutes. Run target add again. |
CLI_TARGET_APPROVAL_DENIED | Someone chose Deny on the approval page. |
CLI_TARGET_TOKEN_REJECTED | The device token expired or was revoked. Run target add again. |
CLI_TARGET_NOT_FOUND | --target names a target this machine hasn't connected to. Check target ls. |
CLI_TARGET_STORE_UNSAFE | The credential file would be written inside the project. Point XDG_CONFIG_HOME / ELIZON_CONFIG_HOME elsewhere. |
CLI_TARGET_FORBIDDEN | Your role doesn't allow this. Reconnecting won't help; ask for a role change. |
CLI_PROJECT_NOT_FOUND | --project isn't a live project of the target's Organization: wrong id, archived or deleted, or it belongs to another Organization (connect a target for that one). |