Elizon Docs
Elizon CLICommand reference

validate

Check a Package project and report every problem at once.

npx @elizon/cli validate [directory] [--dir=<directory>] [--json]

Checks the Package in the current directory (or the one you name) and reports every problem in one run, so you never fix one error only to discover the next. Offline, with no account.

What it checks

StageChecks
Manifest fileelizon.yaml exists, is readable and is valid YAML.
SchemaEvery field against the manifest schema; unknown fields are rejected, not ignored.
SlotsSix known types, unique ids, no credential values, and constraints consistent with the compliance block.
ComplianceInternally consistent, e.g. none isn't combined with other data categories, and the AI Act tier and justification come as a pair.
CompatibilityA supported adapter; requiredCapabilities agree with what's declared (a schedule trigger needs schedule, a knowledge-document trigger needs knowledge, an inbound-call trigger needs voice and sip; a policy_set.floor rule needs the capability it uses: 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).
TriggersKnown types (schedule, webhook, inbound-call, api, manual, email, knowledge-document or app), unique ids, a real time zone on every schedule, a sip-trunk Slot behind every inbound-call trigger, and a credential Slot behind every app trigger's connectionSlot.
ReferencesEvery <collection>.<name> reference resolves, the entry point exists, and nothing refers back to itself in a loop.
Definition filesEvery file a ref points to exists and has the right shape, and no Workflow graph holds two Webhook, Form, Email, App or Recurrence trigger nodes.
SkillsA static scan of each Skill's files. Findings are warnings; see below.

The rules come from the same code the install uses, so a Package that validates on your machine is judged the same way when someone installs it.

Results

✓ /home/you/support-bot/elizon.yaml is valid.
✗ [MANIFEST_MISSING_FIELD] metadata.version
  Missing required field `metadata.version`
  Use semver: `1.0.0`. Bump it for every artifact you distribute.

✗ /home/you/support-bot/elizon.yaml: 1 error.
  • Exit code 0 when there are no errors, even if there are warnings.
  • Exit code 1 when there's at least one error.

Every error has a path (where), a code (what kind) and a hint (what to do). Act on the hint. The full list of codes is in Error codes.

Warnings

These are reported as warnings rather than errors. Warnings never fail the run: a run with only warnings exits 0, and only an error makes it exit 1. Each is something to look at before you publish. What to do about each one is in Error codes.

  • MANIFEST_SLOT_LLM_TIER_COUNT: more than three required LLM Slots. Every one is a question the installer must answer, so the warning asks you to justify the extra friction. See Slots.
  • MANIFEST_APP_PROVIDER_UNDECLARED: a Workflow app node or an Agent's app Tool calls a provider that compliance.providers does not list.
  • SKILL_STATIC_SCAN_FLAGGED: the local Skill scan flagged a file. The scan that counts is the one the installing Organization runs against its own policies at install time. A clean local scan isn't a promise about theirs, and a local flag isn't a verdict.
  • CODE_NODE_STATIC_SCAN_FLAGGED: the same local scan flagged a Workflow Code node's source. The installing Organization re-scans it too.
  • HUMAN_REVIEW_APPROVER_STRIPPED: a Human Review step names a literal approver or fallback approver, which build strips; the installer supplies it.
  • SEND_EMAIL_RECIPIENT_STRIPPED: a Send Email step's to, cc or bcc holds something other than {{ }} expressions, which build strips.
  • DATA_TABLE_NODE_KEY_MISSING: a Data Table node has no key, so the installed Workflow cannot be published or run until it has one.
  • WORKFLOW_NODE_UNBOUND: an AI Agent node has agent: null, or a Team step has team: null, so the node has nothing to run.
  • TOOL_FIXED_HEADER_SECRET: an MCP Tool's fixed header value looks like a secret, and a fixed value is carried verbatim to every installer.
  • VOICE_CONFIG_KEY_IGNORED: a voice configuration holds a key a call never reads, or a credential the Slots supply.
  • VOICE_PROVIDER_UNSUPPORTED: sttProvider or ttsProvider is not a provider this platform runs.
  • KB_INDEX_CONFIG_KEY_IGNORED: a Knowledge Base indexConfig holds a key the platform does not read; it is carried and ignored.
  • PORTABLE_MACHINE_CONTENT_EMAIL: what looks like an email address is in a Tool's embedded OpenAPI spec or a Workflow Code node's source.
  • PORTABLE_SKILL_FILE_SKIPPED: a Skill folder holds build or OS clutter (__pycache__/, .git/, node_modules/, .venv/, *.pyc, .DS_Store, Thumbs.db), which is left out of the Package. The message lists the skipped paths. Any other file that isn't UTF-8 text is an error, PORTABLE_SKILL_BINARY_FILE.

Examples

# the current directory
npx @elizon/cli@0.5.0 validate

# another directory, JSON for a script or agent
npx @elizon/cli@0.5.0 validate ./packages/triage --json