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
failedinstallation 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 type | Value | Example |
|---|---|---|
credential | A whole {{secret.KEY}} reference | --slot.ledger-access='{{secret.LEDGER_KEY}}' |
stt, tts | <provider>:{{secret.KEY}} | --slot.speech-in='soniox:{{secret.SONIOX_API_KEY}}' |
sip-trunk | The 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: installedThe 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'sinbound-calltriggers (From the CLI). If the Package has aninbound-calltrigger, 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 becomesinstalledonce 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. -
--yesis required, and so is thepackage.installpermission. -
Find the installation id with
packages ls --json.
A deferred Knowledge Base Slot is finished by adding documents to its Knowledge Base.