EAI CLI
eai is the supported command-line interface for building and operating apps on
the EAI platform. It wraps authentication, workspace context, Object Types,
ResourceAPI data, document processing, chat workflows, deployment, diagnostics,
and gofer asset refresh.
Release Snapshot
| Field | Value |
|---|---|
| Version | 3.20.5 |
| Released | 2026-10-14 |
| Last Material Change | Pin parent-owned app deletion to its requested runtime child |
| Source Commit | 68d50619b1ea915a9230f984cbe3e566f67704dc |
Install
For a new desktop computer, use EAI Setup first. It is the standard guided path for Windows, macOS, and Ubuntu/Debian users. It prepares prerequisites, installs the CLI, opens browser sign-in, creates the project, and installs its dependencies.
Use the commands below for CI, managed developer environments, or manual setup.
Recommended install:
npm install -g eai-cli
Canonical package install:
npm install -g @enterpriseai/cli
Static registry fallback:
npm install -g @enterpriseai/cli --@enterpriseai:registry=https://eai-support.github.io/eai/registry/
Persistent static fallback setup:
npm config set @enterpriseai:registry https://eai-support.github.io/eai/registry/ --location=user
npm install -g @enterpriseai/cli
Common Workflow
eai login
eai workspace list --format json
eai workspace select <workspace-slug>
eai whoami
eai types validate
eai types seed --tenant-key <scope-key> --tenant-id <workspace-id> --format json
eai types diff --tenant-key <scope-key> --tenant-id <workspace-id>
eai resources schema --tenant-id <workspace-id> --format json
eai dev
For an app enrolled under a parent workspace with a separate runtime child, use
eai types seed --tenant-key <app-key> --tenant-id <runtime-child-id> --app-tenant-id <parent-id> --format json.
The CLI checks the exact parent/app/child enrollment before publishing through
the parent app route and reads schema visibility from the child. This mode
stops if the manifest route or binding is unavailable; it does not switch to
direct Object Type writes.
Delete that app through its owning parent and explicitly identify the runtime child:
eai app delete <app-key> --tenant-id <parent-id> --target-tenant-id <runtime-child-id> --confirm <app-key> --non-interactive --format json
The CLI keeps the parent as the enrollment owner, passes the child to the ownership
plan and deletion request, and verifies the same owner, child, manifest and runtime
targets in the final receipt. A mismatched plan stops before deletion. Omit
--target-tenant-id for an app whose enrollment and runtime use the same workspace.
Check Source Before EAI Hosting
After building an app, check its source before choosing EAI-managed publication:
eai deploy source validate --format json
The check uses the same source guard as publication. It reads local files without signing in, publishing, or writing a deployment receipt. The upload includes the complete authored app: frontend and backend code, custom runners, tests, scripts, assets, documentation and ordinary config files. Executable script permissions are bound into the source digest and retained in GitHub. NCB's generation layout does not constrain Installer/CLI source.
Deployment-owned Docker, workflow, platform authentication and tenant-binding controls remain protected. Credentials, dependencies, build caches and local agent state are excluded. A custom runtime needs an approved runtime contract; it cannot be silently replaced by the template runtime. The check reports unsupported controls and preserves your changes. A passing source check does not prove that the build, deployment or hosted readiness has completed.
Object Type Identifiers
Do not move every Object Type field to kebab-case. A definition keeps both a
PascalCase source/model name, such as BoardAppUser, and an explicit exact
transport/storage slug, such as board-app-user.
Generated and persisted linkTypes[].targetObjectType, runtime target_type,
path parameters, and other governed v4 fields contain slugs. The CLI accepts a
same-manifest PascalCase relationship target only as authoring shorthand and
resolves it through that target's declared slug before diff or seed. An
unresolved model name is an error; the CLI does not guess.
For existing Object Types, the exact stored slug is authoritative even when
today's derivation from the name would differ. Do not normalize or rename it.
App code should use useResources or client.resources so the SDK owns route
construction.
Command Groups
| Command | Purpose |
|---|---|
eai init | Scaffold an app from the EAI App Template. |
eai start | Detect or open a supported AI workspace for the current EAI app. |
eai login, eai logout, eai whoami | Manage local authentication and inspect active context. |
eai workspace | List, select, create, inspect, and administer workspace context. eai tenant remains available as a compatibility alias. |
eai types | Validate, seed, diff, and pull Object Type definitions. |
eai resources | List, get, create, update, delete, query, aggregate, search, and manage ResourceAPI data. |
eai docs | Upload, classify, and index documents for platform processing and RAG. |
eai chat | Send or stream chat requests through configured AI workflows. |
eai publicapi | Call authorized PublicAPI V4 routes when a named command does not exist yet. |
eai runtime | Validate the host-neutral eai.runtime.json app runtime contract. |
eai deploy | Translate provider env/secrets and black-box doctor deployed EAI app runtimes. |
eai gofer | Install and refresh repo-local agent workflow assets. |
eai template | Check template drift or create a read-only, UI-preserving AI adoption plan. |
eai update | Update the CLI, force-refresh backed-up Gofer assets, and run a read-only template check. |
eai verify, eai doctor | Run connectivity, contract, update, and troubleshooting checks. |
Output Modes
Use machine-readable output for automation:
eai workspace list --format json
eai resources schema --tenant-id <workspace-id> --format json
eai whoami --simple
eai doctor --no-color
Named Commands Before Raw Routes
Prefer product-shaped commands before eai publicapi:
| Need | Preferred CLI |
|---|---|
| Scaffold app | eai init <name> or eai init <name> --current-dir |
| Start AI workspace | eai start --check, then eai start |
| Select workspace | eai workspace list, eai workspace select <slug> |
| Publish Object Types | eai types validate, eai types seed, eai types diff |
| Inspect schemas | eai resources schema --tenant-id <workspace-id> |
| Work with resources | eai resources list/get/create/update/delete/query |
| Search resources | eai resources search "<query>" --mode hybrid |
| Work with documents | eai docs configure-type, eai docs upload, eai docs classify, eai docs job/get |
| Attach resource files | eai resources file upload/get/delete |
| Use chat workflows | eai chat send, eai chat stream |
| Advanced route | eai publicapi <method> /v4/... |
For protected POSIX qualification, named eai init <name> --skip-prompts can
optionally pair --binding-receipt <absolute-path> with
--binding-receipt-nonce <canonical-UUIDv4>. The destination must be fresh, in
an owner-only directory outside the project and Git trees. A pending reservation
grants no creation ownership. An acknowledged eai.init_app_binding.v1 record
retains the original request gateway/actor, actual immutable enrollment and
parent/runtime tenant IDs, and actual creation flags, including after later
scaffold failure. Selected or concurrently reused apps keep false flags.
Preserve an existing receipt and choose a fresh private path/nonce for a new
invocation; an existing destination rejects before provider work. Keep this
private evidence out of Git and source bundles. Normal init produces no extra
binding receipt; Windows delivery requires separate evidence.