CLI Reference
Use waid --help for the command overview and waid help <command> or
waid <command> --help for focused options. waid version and waid --version
print the installed CLI version.
waid <command> [options] login Sign in to ICE through Splenta ID new <name> Create a Vite + React + shadcn project dev Run Vite and launch the Detir runtime build Package a web or native app deploy Build, install, and launch on iOS or Android app generate-mcp|sync Generate App MCP tools or submit an ICE Develop candidate service generate-mcp|sync Generate Service MCP tools or submit an ICE Develop candidate session --json Check the shared CLI/Studio ICE session apps List registered apps visible to your account whoami, logout Inspect or clear the stored ICE identity doctor Check local tooling and signing devices List iOS or Android devices signing-teams List Xcode signing teams clean Remove generated build artifacts migrate-config Update an older waid.config.json actions, backend Legacy helpers; use app/service for new work version Print the CLI versionSign in and check your session#
waid login --env localwaid login --env staging --tenant <tenant-key>waid session --jsonwaid whoami --jsonwaid logout| Login option | Behavior |
|---|---|
--env local|staging|prod | Choose the ICE environment. Defaults to local; WAID_ENV also selects it. |
--tenant <key> | Select the tenant for the session. |
--force | Request a fresh grant instead of reusing a usable session. |
--browser | Explicitly use the browser login flow. |
Login uses Splenta ID. Local login defaults to file credential custody; hosted
login defaults to the keychain. WAID_CREDENTIAL_STORE=keychain or file overrides
that choice. session --json reports ready, signed_out, or unavailable; a
temporary ICE outage retains the credentials.
new, dev, build, deploy, clean, migrate-config, app/service sync, and
catalog inspection require a usable ICE session. Local app/service MCP generation, help,
version, and local tooling diagnostics do not.
--env selects the login environment. --mode selects the app's Vite
configuration; build, dev, and deploy default to development. Release builds
require an explicit --mode.
App and service lifecycle#
| Command | Reads / writes | ICE session |
|---|---|---|
waid app generate-mcp | Drafts, builds, and verifies App MCP tools from frontend source for review. | Not required |
waid app sync | Submits an immutable App candidate to ICE Develop. | Required |
waid service generate-mcp | Drafts, tests, and verifies Service MCP tools from source for review. | Not required |
waid service sync | Checks generated artifacts and submits a Service candidate to ICE Develop. | Required |
Sync is a Develop operation. Publication, tenant installation, access grants, and activation are separate steps in ICE. A successful sync does not make a candidate live or deploy the service.
waid app generate-mcp#
Run from the frontend root containing package.json and src/, or pass it with
--in.
waid app generate-mcpwaid app generate-mcp --in ./frontendwaid app generate-mcp --in ./frontend --agent claudeIt scans the source, asks your local coding agent (codex or claude) to author
callable App MCP handlers, then builds and verifies them. The result is a worktree
diff for you to review, with the tools in waid/mcp/generated/tools.json. New tools
are appended to waid/mcp/curation.json as denied; set each one you want agents to
reach to exposed. It never syncs or publishes.
waid app sync#
waid login --env local --tenant <tenant-key>waid app sync --in ./frontend| Option | Behavior |
|---|---|
--in <app-root> | App source root; defaults to the current project. |
--tenant <key> | Select an administered tenant. |
--mode <name> | Must match the signed-in ICE environment. |
The default mode follows the session: local → development, staging →
staging, and prod → production. An incompatible explicit mode is rejected.
The app's hosted URL comes from WAID_WEB_URL in the selected mode environment.
Callable actions require authored handlers and a public
.well-known/waid/actions.json catalog. Regenerate after source changes before sync.
ICE stores an immutable Develop candidate; publish and install it separately.
waid service generate-mcp#
Run from the JVM service source root, or pass that directory explicitly:
waid service generate-mcpwaid service generate-mcp --in ./backendwaid service generate-mcp --in ./backend --agent claudeIt scans the service's Java MCP handlers, REST operations, and entity metadata,
asks your local coding agent (codex or claude) to author real Service MCP
handlers, then tests and verifies the regenerated catalog. The result is a worktree
diff for review. New tools are appended to waid/mcp/curation.json as denied; set
each one you want agents to reach to exposed. It never syncs or publishes.
waid service sync#
# Local source-only candidate; no installed release is requiredwaid login --env local --tenant <tenant-key>waid service sync --in ./backend # Staging candidate tied to a verified releasewaid login --env staging --tenant <tenant-key>waid service sync --in ./backend --release <verified-release-id>| Option | Behavior |
|---|---|
--in <service-root> | Service root; defaults to the current source root. |
--tenant <key> | Select an administered tenant. |
--release <id> | Verified splentactl release ID; required for staging. Local sync can omit it for a source-only candidate. |
--url <origin> | Override the service origin declared in its environment profile. |
The default origin comes from splenta.service.public-base-url in
src/main/resources/application-<env>.properties. Local sync can fall back to
server.port in application.properties and use a loopback origin.
Sync checks generated artifacts before any remote write and fails on drift. Run
waid service generate-mcp, review the changes, then retry. Production service sync is
rejected; production uses the splentactl promotion flow. Sync does not activate
catalogs, tenant access, service accounts, or trust.
waid new <name>#
Create a Vite + React + Tailwind + shadcn project with waid.config.json,
package.json, and src/ at the project root. waid init is an alias.
waid new my-appcd my-appnpm install| Option | Behavior |
|---|---|
--template web|mobile | Choose the starter; web is the default. |
--app-name <name> | Set the display name. |
--android-package <id> | Set the Android identity. |
--ios-bundle-id <id> | Set the iOS identity. |
--force, -f | Remove an existing destination and recreate it. |
waid dev#
Run the live Vite module graph and launch Detir. Web edits use Vite HMR; native configuration changes can require a rebuild or reinstall.
waid dev --in .waid dev --in . --port 5173 --no-launchwaid dev --target ios --dev-host <your-lan-ip>| Option | Behavior |
|---|---|
--in <dir> | App source root. Defaults to the current project. |
--target desktop|ios|android | Preview target. Defaults to desktop. |
--mode <name> | Vite mode. Defaults to development. |
--port <port> | Pin the Vite server port; otherwise derived from the project. |
--dev-host <lan-ip> | Required for iOS; available as an Android LAN fallback. |
--runtime-dir <dir> | Use a specific native runtime. |
--no-launch | Start only the managed Vite server. |
waid build#
With no target, stage a web build. Native targets are macos, windows, linux,
ios, and android; desktop means the current host OS.
waid build --src . --mode productionwaid build --target macos --mode productionwaid build --target ios --simulatorwaid build --target ios --release --mode productionwaid build --target android --release --mode production --format aab| Option | Behavior |
|---|---|
--src <dir> | Vite project root. Defaults to the current directory. |
--target <platform> | Native platform; omit for web. |
--mode <name> | Vite mode. Defaults to development; required with --release. |
--runtime-dir <dir> | Override the native runtime. |
--out <dir> | Override the package output directory. |
--clean | Recreate the generated native project before building. |
--debug / --release | Debug build or signed release. iOS release exports an App Store IPA. |
--format apk|aab | Android package format; defaults to APK. |
--android-package <id> | Override the Android application ID. |
--android-keystore <path> | Keystore for an Android release. |
--ios-team <id>, --ios-bundle-id <id>, --ios-profile <name> | iOS identity and signing overrides. |
--ios-device-udid <udid> | Select the iOS device. |
--simulator, --ios-destination device|simulator | Choose the iOS build destination. |
--ios-allow-provisioning-updates, --ios-no-sign | Permit Xcode provisioning updates or produce an unsigned iOS build. |
macOS builds produce an .app and DMG under .waid/build/macos/. Build does not
install the app. See platform builds for outputs and signing.
waid deploy#
Build if needed, sync an ICE candidate, then install and launch on a connected
mobile device. macOS uses waid build --target macos.
waid devices --target ios --jsonwaid deploy --target ioswaid deploy --target android --no-launch| Option | Behavior |
|---|---|
--target ios|android | Required mobile target. |
--src <dir> | App source root. |
--mode <name> | Vite mode; defaults to development. |
--tenant <key> | Tenant used for candidate synchronization. |
--no-launch | Install without launching. |
--ios-device-udid <udid>, --android-serial <serial> | Select a device; a single connected device is selected automatically. |
--skip-ice-registration | Install without registration; device SSO is disabled. The CLI still requires a usable ICE session. |
Diagnostics and maintenance#
waid doctorwaid doctor androidwaid doctor ios-signing --ios-bundle-id com.example.appwaid devices --target android --jsonwaid signing-teams --jsonwaid migrate-config --src .doctor provides a basic CLI check; its Android and iOS subcommands inspect the
respective tooling and signing prerequisites. migrate-config rewrites an older
waid.config.json into the current shape; review its changes before committing.
waid clean --dir <dir> previews removal; add --force to delete that directory.
The default is build, so specify the generated output you intend to clean:
waid clean --dir .waid/buildwaid clean --dir .waid/build --forceCatalog inspection and legacy helpers#
waid apps --jsonwaid actions list --app <app-id> --jsonBoth use the signed-in account. Get the app ID from waid apps.
actions and backend remain legacy helper groups. Use app/service generate-mcp and sync
for new work. Consult waid help actions or waid help backend when maintaining
an older workflow.
waid ice-request --path <path> [--method GET|POST] [--body <json>] is an advanced
helper for allowlisted tenant-app requests to the session's ICE issuer; it is not
a general HTTP client.