Global commands reference
The command reference covers the service groups (products, orders, and so on). This page is the lookup for everything else: the global commands that manage the CLI itself, and the global options that work on every command. Each command has a narrative page with the why and the walkthroughs; this page holds the flags and the exit codes in one place.
Run revenexx <command> --help for the authoritative list on your installed version. This page was checked against CLI 0.5.0 (as of 2026-09). The tenants commands were rechecked on CLI 0.6.1 (as of 2026-10).
Global options
These work on every command, before or after the command name.
| Option | What it does |
|---|---|
-h, --help | Show help for the CLI or a command. |
-v, --version | Print the CLI version and whether a newer one exists. |
-V, --verbose | Show the complete error log on failure. |
-o, --output <format> | Output format: table (default), json, jsonl, csv, yaml or markdown. md and ndjson are accepted as value aliases. |
-j, --json, --jsonl, --csv, --yaml, --markdown, --md | Shorthand for the matching --output value. |
--fields <fields> | Comma-separated list of fields or columns to keep in the output. |
-q, --quiet | Suppress the tenant and endpoint banner and human output. On failure, print a machine-readable error to stderr and exit with a meaningful code. |
--data <data> | Request body for create and update commands: inline JSON, @file.json, or - to read stdin. |
-f, --force | Confirm all warnings. |
--report | On a CLI error, print a prefilled bug-report link. |
--endpoint [endpoint] | API URL for this command. Overrides REVENEXX_API_URL and saved config. |
--token [token] | API key for this command. Overrides REVENEXX_API_KEY and saved config. |
--tenant [tenant] | Tenant slug for this command. Overrides REVENEXX_TENANT and saved config. |
--request-timeout <ms> | Per-request HTTP timeout in milliseconds. Default 30000. |
--no-retry | Turn off automatic retries of transient failures. Only reads and idempotent requests are retried at all; POST and PATCH never are. |
--debug | Log each HTTP request (method, path, status, duration, request id) to stderr, with secrets redacted. |
Output formats and field selection are covered in Scripting & output. How --endpoint, --token and --tenant rank against environment variables and files is in Configuration.
Exit codes
Failed API calls map to the exit codes in Scripting & output: 4 for authentication, 5 for not found, 8 for rate limited, 1 for everything else. A misspelled command or bad global flag exits 2.
Global commands do not all follow that scheme, and the gaps matter in a script:
0.whoami and status when nobody is signed in, the errors alias reports itself, repl without a terminal, tenants current --check when the check fails, and update when it cannot reach the release feed or the install step fails all report the problem on the screen and return success. Don't branch on the exit code of those commands. To test that a credential works, run a real API read such as revenexx products list --limit 1 --json and check that command's exit code: 4 means the credential was rejected or lacks access to that resource. tenants list does not work for this, because it reports a rejected or missing credential in its table and still exits 0. whoami and tenants list print JSON-like output under --json that jq can't parse, so don't pipe them. (As of 2026-09.)An unknown flag or a missing argument on a subcommand (for example alias set -x foo) exits 1, not 2. The exit codes for watch are listed in its section below.
whoami
Show the active auth method, where the credential came from, the tenant, and the endpoint. It makes no network call.
revenexx whoami
No command-specific options. With no credential it prints No user is signed in and exits 0.
status
The same identity, tenant and endpoint as whoami, plus the token expiry and a gateway health probe. An SSO token that has expired is refreshed first, so the expiry shown is the session the next command will actually use.
revenexx status
No command-specific options. Same exit 0 when nobody is signed in.
tenants
Choose and inspect the tenant that commands run against. The saved choice lives in ~/.revenexx/tenant and beats REVENEXX_TENANT and every .revenexx.yaml — read the warning in Configuration before you rely on it. Sign-in is covered in Authentication.
| Command | What it does |
|---|---|
tenants list | List the tenants your account can access, plus any slug configured on this machine, with the places each was found and whether your current credential reaches it. |
tenants use [slug] | Save slug as the active tenant. The slug is checked against the gateway first. Without a slug, a terminal gets a picker (from CLI 0.6.1); a script gets the list of tenants and exit code 1. |
tenants current [--check] | Print the active slug. --check also verifies it against the gateway. |
revenexx tenants list
revenexx tenants use acme
revenexx tenants use
revenexx tenants current --check
tenants listshows columnsTenant,Active,SourcesandAccess.Accessisok, the reason the gateway refused, or(not signed in)/(session expired).tenants usewithout a slug opens a picker when the CLI runs on a terminal, with the active tenant marked and preselected. In a script, or with--json, it never prompts: it prints the list of tenants, saves nothing and exits1. (From CLI 0.6.1.)tenants usewith a slug the gateway rejects as an invalid tenant printsCannot switchand saves nothing; pass the global--forceto save it anyway. In a script it prints the list of tenants and exits1, or printsNo tenants foundand exits1when none are known. On a terminal it opens the picker instead, and picking a tenant switches to it and exits0. Any other failed check (gateway unreachable, key rejected) or no credential at all only warns, and the slug is saved unchecked. The exit1and the picker are new in CLI 0.6.1; earlier versions exit0.tenants usewarns, when you run it, that the slug it saves overridesREVENEXX_TENANTor thetenant:in.revenexx.yaml. It still overrides them. See Project configuration.- Under
-q,useandcurrentprint the bare slug, which$(...)can capture. Under--jsonthey print the rowsTenantandActive(current --checkaddsAccess), but not as valid JSON, sojqcan't parse them: use-q. (From CLI 0.6.1.) tenants currentprints the slug as a status line, so capture it with-q, not by parsing the line. It reads only~/.revenexx/tenantandREVENEXX_TENANT. It ignores--tenantand thetenant:in.revenexx.yaml, so it can print a different slug from the one your next command uses. To see the tenant a command really used, read the banner that API commands print, or runwhoami.- The only option specific to these commands is
tenants current --check. When its check fails,currentstill exits0.tenants listexits0on the failures described above.
alias
Manage your own short forms for commands. Built-in abbreviations are fixed and appear in alias list. How aliases resolve is in Aliases.
| Command | What it does |
|---|---|
alias set <name> <expansion...> | Create or update an alias. Quote a multi-word expansion. |
alias list (ls) | List your aliases and the built-in ones. --json prints the rows as JSON. |
alias remove <name> (rm) | Remove one of your aliases. |
revenexx alias set deploy "apps create-deployment --activate true"
revenexx alias ls
revenexx alias rm deploy
- A name must be one word without spaces and not start with
-.aliasandhelpare reserved. - A name that matches a real command is saved with a warning; the real command always wins, so the alias never resolves.
- Those errors, and removing a name that does not exist, exit
0. A missing argument exits1. - Aliases only resolve when the command name comes first; a global flag in front of it stops the rewrite.
repl
Open an interactive shell that stays signed in. See Interactive shell.
revenexx repl
No command-specific options. It needs an interactive terminal on both stdin and stdout, so it is for people, not CI. Without one it prints The REPL needs an interactive terminal and exits 0; in a script, call the command you want directly.
watch
Poll a get-by-id command until one field reaches a condition. The conditions, field paths and the app flow are in Background watchers.
| Command | What it does |
|---|---|
watch add --until <expr> -- <command...> | Start a watcher. Outside a repl or tui session it blocks until the watcher settles. |
watch list (ls) | Show this session's watchers. |
watch rm [id] (cancel) | Cancel one watcher by id. |
watch add options:
| Option | Default | Meaning |
|---|---|---|
-u, --until <expression> | required | When to stop: [<field>] changed, equals <v>, matches <re>, terminal or truthy. |
--field <path> | none | Dot path into the response. Can instead be the first word of --until; --field wins if both are given. |
-e, --every <duration> | 5s | Poll interval. The floor is 2s. |
--for <duration> | 5m | Give up after this long. Capped at one hour. |
--wait-for-create | off | Treat 404 as "not there yet" instead of a failure. |
watch rm takes --all to cancel every active watcher. --every below 2s and --for above one hour are raised or lowered to the limit, not rejected.
watch add needs an interactive terminal, so in a CI job it exits 2 at once; write your own loop around <get command> --json there. watch list and watch rm only see watchers of the current repl or tui session, so run on their own they find none.
Blocking watch add exits with:
| Code | Meaning |
|---|---|
0 | Condition satisfied. |
1 | The poll failed with a generic error or kept failing transiently, or eight watchers are already active in the session. A missing --until or command also exits 1. |
2 | No terminal, an unknown command, or an unparseable --until, --every or --for. Also watch rm with no id and no --all. |
5 | The polled resource returned 404 (unless --wait-for-create), or watch rm <id> for an id that does not exist. |
7 | Timed out before the condition was met. |
130 | Cancelled with Ctrl-C. |
4, 8, other | The failing poll's own code, as in the general table. |
update
Update the CLI to the latest release. It detects an npm or Homebrew install and runs the matching update; otherwise it asks which method to use.
revenexx update --dry-run
revenexx update
| Option | What it does |
|---|---|
--dry-run | When a newer release exists, print the detected install method and the command it would run, without changing anything. |
--manual | Show manual update instructions instead of updating. |
When you already run the latest version it says so and exits 0. If it cannot reach the release feed, it prints Failed to check for updates, and if the install step fails it prints the failure; both exit 0. revenexx --version reports the version and whether a newer one exists.
client
Set the API endpoint, key or TLS behavior stored by the CLI, or reset it.
revenexx client --sensitive-tenants "acme,globex"
revenexx client --self-signed false
| Option | What it does |
|---|---|
-e, --endpoint <endpoint> | Set the API endpoint. The CLI calls GET /health/version on it first and refuses an endpoint that does not answer. |
-k, --key <key> | Set the API key. Fails with Session not found if no session exists yet. |
-ss, --self-signed <true|false> | Trust self-signed certificates. Same Session not found failure without a session. |
--sensitive-tenants <list> | Comma-separated tenant slugs always treated as production, so commands that print the context banner mark them PRODUCTION. The banner is hidden under --json and --quiet and is not shown by every command. An empty string clears the list. |
-d, --debug | Print the stored configuration with the key and cookie masked. |
-r, --reset | Remove the locally saved sessions, which signs you out. |
-p, --project-id <id> | Writes a legacy projectId into a local revenexx.config.json. It does not select a tenant; use tenants use. |
Run with no options, client prints its help. To set up a new machine, use revenexx login or the environment variables in Configuration rather than client; that page explains why.
types and generate
revenexx.config.json that is meant to list resource definitions, and nothing in the CLI writes those definitions; the only thing it can put in that file is the legacy project id from client --project-id. On CLI 0.5.0 in a folder without that file, revenexx types ./out -l ts fails with No tables or collections found in configuration (exit 1) and revenexx generate fails with No project found. Please run 'revenexx init project' first (exit 1), pointing at an init command that does not exist. With only a project id set, generate writes an empty scaffold and types still fails. Neither uses your tenant's schema or its OpenAPI document. (As of 2026-09.)For reference, the options they accept:
| Command | Options |
|---|---|
types <output-directory> | -l, --language <language> (auto by default, or ts, js, php, kotlin, swift, java, dart, cs); -s, --strict. |
generate | -d, --dir <directory> (default generated); -l, --language <language> (typescript only in 0.5.0); --server <auto|true|false>; --sdk-import-source <source>; --import-extension <ext>. |
Use an SDK for typed calls, and see Type generation for the current state.
Commands documented elsewhere
| Command | Where |
|---|---|
login, logout, register | Authentication |
tui | Full-screen app |
skills | Skills |
create, deploy, apps generate, apps capabilities | Scaffolding |
Service groups such as products and orders | Command reference |