Skip to main content

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​

FieldValue
Version3.20.5
Released2026-10-14
Last Material ChangePin parent-owned app deletion to its requested runtime child
Source Commit68d50619b1ea915a9230f984cbe3e566f67704dc

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​

CommandPurpose
eai initScaffold an app from the EAI App Template.
eai startDetect or open a supported AI workspace for the current EAI app.
eai login, eai logout, eai whoamiManage local authentication and inspect active context.
eai workspaceList, select, create, inspect, and administer workspace context. eai tenant remains available as a compatibility alias.
eai typesValidate, seed, diff, and pull Object Type definitions.
eai resourcesList, get, create, update, delete, query, aggregate, search, and manage ResourceAPI data.
eai docsUpload, classify, and index documents for platform processing and RAG.
eai chatSend or stream chat requests through configured AI workflows.
eai publicapiCall authorized PublicAPI V4 routes when a named command does not exist yet.
eai runtimeValidate the host-neutral eai.runtime.json app runtime contract.
eai deployTranslate provider env/secrets and black-box doctor deployed EAI app runtimes.
eai goferInstall and refresh repo-local agent workflow assets.
eai templateCheck template drift or create a read-only, UI-preserving AI adoption plan.
eai updateUpdate the CLI, force-refresh backed-up Gofer assets, and run a read-only template check.
eai verify, eai doctorRun 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:

NeedPreferred CLI
Scaffold appeai init <name> or eai init <name> --current-dir
Start AI workspaceeai start --check, then eai start
Select workspaceeai workspace list, eai workspace select <slug>
Publish Object Typeseai types validate, eai types seed, eai types diff
Inspect schemaseai resources schema --tenant-id <workspace-id>
Work with resourceseai resources list/get/create/update/delete/query
Search resourceseai resources search "<query>" --mode hybrid
Work with documentseai docs configure-type, eai docs upload, eai docs classify, eai docs job/get
Attach resource fileseai resources file upload/get/delete
Use chat workflowseai chat send, eai chat stream
Advanced routeeai 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.