Elizon Docs
Elizon CLICommand reference

packages ls / packages bind

List installed Packages, and fill in credential Slots an install left for later.

packages ls

npx @elizon/cli packages ls [--target=<name>] [--json]

Lists the Packages installed in an Organization: the same data Studio → Packages shows, from the same source. Run it against several targets to check several Organizations from one script.

Packages installed on `acme` (https://acme.internal:8443), organization 2222…:

  NAME                NAMESPACE  VERSION  STATUS                INSTALLED   SIGNED BY
  After-Hours Triage  acme       1.2.0    installed             2026-03-04  ed25519:4f2c…
  Front Desk          acme       0.9.1    installed-incomplete  2026-03-05  unsigned
      outstanding slot: inbound-trunk (sip-trunk, required, deferred)
      outstanding: knowledge-base-empty on knowledgeBases.faq — The FAQ Knowledge Base has no documents in it.
  • Every outstanding item is listed by name, not just counted, so you can see which setup step was never finished.
  • A failed installation says so, with the command to roll it back or resume it.
  • Installations made before outstanding items were recorded show not recorded, which isn't the same as nothing outstanding.
  • With --json, the rows come back as-is, with statuses spelled as the platform stores them (installed_incomplete).

Read-only, so no --yes. Needs the package.view permission, which every built-in role has.

packages bind

npx @elizon/cli packages bind <installation-id> --slot.<id>=<value> --yes [--target=<name>]

Finishes a Slot that was deferred at install (--slot.<id>=defer, or "Skip for now" in the wizard) without reinstalling. It takes the same values install does:

Slot typeValueExample
credentialA whole {{secret.KEY}} reference--slot.ledger-access='{{secret.LEDGER_KEY}}'
stt, tts<provider>:{{secret.KEY}}--slot.speech-in='soniox:{{secret.SONIOX_API_KEY}}'
sip-trunkThe id of one of your inbound SIP trunks--slot.phone-line=77aa…
✓ ledger-access bound to {{secret.LEDGER_KEY}} on acme (https://acme.internal:8443)
    wrote  tools.ledger → mcp_server 63e6…
  status:        installed

The binding is checked exactly as install checks it, then applied the way install would have applied it:

  • Credential: written into every Tool that uses the Slot.

  • Speech (stt, tts): the voice configuration gets the provider and credential. Choosing the Package's own provider keeps its settings; another provider starts from that provider's defaults.

  • Phone line (sip-trunk): the trunk is linked to the installation. A binding from the CLI carries no number, so it never wires the Package's inbound-call triggers (From the CLI). If the Package has an inbound-call trigger, bind the line in Studio or in the install wizard, where you pick the number. The Slot then leaves the outstanding list, and the installation becomes installed once nothing deferred remains. It's the same action as Bind on the Package's page in Studio.

  • One Slot per run.

  • Credentials are references only: a raw value, anywhere in the binding, is refused before it leaves your machine.

  • An installation made before this was possible doesn't record what binding these types needs, and refuses with INSTALL_STATE_INVALID; reinstall it to bind them.

  • --yes is required, and so is the package.install permission.

  • Find the installation id with packages ls --json.

A deferred Knowledge Base Slot is finished by adding documents to its Knowledge Base.