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
| Stage | Checks |
|---|---|
| Manifest file | elizon.yaml exists, is readable and is valid YAML. |
| Schema | Every field against the manifest schema; unknown fields are rejected, not ignored. |
| Slots | Six known types, unique ids, no credential values, and constraints consistent with the compliance block. |
| Compliance | Internally consistent, e.g. none isn't combined with other data categories, and the AI Act tier and justification come as a pair. |
| Compatibility | A 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). |
| Triggers | Known 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. |
| References | Every <collection>.<name> reference resolves, the entry point exists, and nothing refers back to itself in a loop. |
| Definition files | Every 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. |
| Skills | A 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
0when there are no errors, even if there are warnings. - Exit code
1when 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 Workflowappnode or an Agent's app Tool calls a provider thatcompliance.providersdoes 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, whichbuildstrips; the installer supplies it.SEND_EMAIL_RECIPIENT_STRIPPED: a Send Email step'sto,ccorbccholds something other than{{ }}expressions, whichbuildstrips.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 hasagent: null, or a Team step hasteam: 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:sttProviderorttsProvideris not a provider this platform runs.KB_INDEX_CONFIG_KEY_IGNORED: a Knowledge BaseindexConfigholds 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 OpenAPIspecor 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