lace-app-sdk
lace-app CLI reference
One binary for the whole app lifecycle — from credential setup to rollback. Ships with the lace-app-sdk wheel.
Install: pip install lace-app-sdk (or pipx install lace-app-sdk). Verify with lace-app --help.
Source: src/lace_app_sdk/cli.py (verb set D6, APB-019/020).
Auth — lace-app auth
terminalbash
lace-app auth login --api-url https://api.laceplatform.com --api-key $LACE_API_KEY
lace-app auth status
lace-app auth whoami # GET /v1/auth/whoami
| Command | What it does |
|---|---|
auth login --api-url URL --api-key KEY | Store credentials in ~/.config/lace/credentials.toml (mode 0600). Supports --profile NAME. |
auth status | Show whether credentials exist (redacted key). |
auth whoami | GET /v1/auth/whoami — tenant, principal, scopes. |
Env & config
terminalbash
# env overrides (no login needed in CI):
LACE_API_URL=https://api.laceplatform.com
LACE_API_KEY=lace_sk_...
# config file (written by auth login, mode 0600):
~/.config/lace/credentials.toml
# [profile.default]
# api_url = "https://api.laceplatform.com"
# api_key = "lace_sk_..."
Resolution order: LACE_API_KEY env → credentials file. LACE_API_URL env → credentials file → http://localhost:8000.
Every command that talks to the API exits with a clear Not logged in. Run: lace-app auth login if no key resolves.
All verbs
| Verb | Signature | Calls |
|---|---|---|
create | lace-app create <app-id> [--name NAME] [--dir DIR] | POST /v1/apps then GET /v1/apps/{app_id}/git-credential + scaffold |
clone | lace-app clone <app> [--dir DIR] | GET /v1/apps/{app_id}/git-credential + git clone via ephemeral helper |
dev | lace-app dev [--port PORT] [--dir DIR] | Local compose + runtime emulator; needs [runtime] for migrations |
test | lace-app test [--dir DIR] [--json] | Proof harness (needs [runtime]) |
push | lace-app push [--app-id ID] | Upload + poll CI releases (APB-023 will add streaming) |
deploy | lace-app deploy [--dir DIR] [--cloud] | Seal → upload/register/activate, no CI |
open | lace-app open <app-id> | Open /apps/<app_id>/ in the browser |
logs | lace-app logs <app-id> [--lines N] | GET /v1/apps/{app_id}/logs |
status | lace-app status <app-id> | GET /v1/apps/{app_id} + latest release |
releases list | lace-app releases list <app-id> | GET /v1/apps/{app_id}/releases |
releases rollback | lace-app releases rollback <app-id> <rel> | POST /v1/apps/{app_id}/releases/{rel}/rollback |
secrets set | lace-app secrets set <app-id> <key> <value> | PUT /v1/apps/{app_id}/secrets/{key} (server-side) |
Common patterns
- CI: set
LACE_API_URL+LACE_API_KEYenv, thenlace-app pushorlace-app deploy --cloud. Noauth loginneeded. - Local dev without publish:
lace-app devafter anycreateorclone. - Debug a live sidecar:
lace-app status→lace-app logs --lines 500.
Exit codes
0 = success, 1 = error (auth missing, proof lane failed, API error). Failed API calls print detail from the JSON error body.
Next: module reference or publishing.