CLI

Install the command-line client, sign in, and call any operation from your terminal or a script.

Docs menu
npm install -g @substrio/cli

Run it once without installing with npx @substrio/cli <command>.

Sign in and profiles

Save a key once and every later command reuses it:

substrio login --url https://acme.example.com --key - --tenant acme < app.key

--key - reads the key from stdin, never from argv or shell history. Without --url, login saves a profile for the hosted platform, https://mcp.substrio.com. The profile is saved to ~/.substrio/config.toml (owner-only, mode 0600); set SUBSTRIO_CONFIG_DIR to move it. --profile NAME saves under a name other than the default; the default changes only with --default, or when there is none yet. login --list shows saved profiles, login --remove NAME deletes one. login --offline ... --tenant SLUG saves a profile with no round trip to the server, marked unchecked until a later login without --offline confirms it.

An agent given a one-time connect code (substrio_ae_..., made by POST /v1/_accounts/{id}/agent/enrollments; the console connects agents over MCP with OAuth and makes no codes) redeems it with:

substrio connect - < code.txt          # or: substrio connect substrio_ae_...

The command sends one POST /v1/_agent/exchange request to https://mcp.substrio.com unless --url specifies another server. The session acts as the code's owner and is saved as profile agent in the owner-only file. Use --profile NAME for another name or --default to make it the default. The command prints the MCP setup. It does not print the code or secret unless --show is used; then stdout contains only the secret for $(...) in an MCP client setup command. See agent-sessions.md. A spent or expired code exits with AGENT_CODE_INVALID.

Check what is in effect, and where each value came from, with:

substrio whoami

Each run resolves the server URL, key, and app in this order, highest priority first:

  1. Environment variables: SUBSTRIO_URL, SUBSTRIO_TENANT (also set by the --tenant flag), and SUBSTRIO_MASTER_KEY.
  2. substrio.toml in the current directory (the project file substrio init writes).
  3. The saved profile named by SUBSTRIO_PROFILE, --profile, or profile in substrio.toml.
  4. The profiles file's default_profile.

Use a saved profile to keep credentials out of project files and shell history.

Global flags

Global flags are parsed wherever they appear on the command line and removed before the command receives its arguments:

Flag Effect
--help, -h Print the command's usage and exit 0. Nothing runs.
--json Print results as JSON on stdout, and errors as JSON on stderr.
--yes, -y Confirm a destructive command without asking.
--profile NAME Use the saved profile NAME for this run.
--tenant SLUG Talk to the app SLUG for this run.
--version, -v Print the CLI version.
-- Everything after it belongs to the command, not to global flag parsing.

A destructive command returns exit code 9 when it has no --yes and cannot prompt on a terminal. This includes runs under --json.

Calling any operation

Call any operation the server exposes, including one without a dedicated subcommand, with:

substrio op NAME key=value key2=value2

For example:

substrio op collection.create name=orders
substrio op data.insert collection=orders data='{"total": 42}'
  • key=value sets one field; dotted keys nest (data.total=42 sets data: {total: 42}). A value that parses as JSON (a number, true, false, null, a quoted string, an array or object) is sent as that type; anything else is sent as a string.
  • --data '{...}' sends a whole JSON body instead of (or in addition to) key=value fields.
  • --file PATH reads the body from a file (- for stdin).
  • Route path parameters ({id} in the operation's route) come from positional arguments, in order, before any key=value.

substrio op prints the operation's JSON result. substrio call is the same command under another name.

JSON output

Pass --json on any command to get machine-readable output instead of the human-readable default:

substrio op collection.list --json

Results are JSON on stdout. Errors are JSON objects on stderr with error, code, and detail when supplied by the server. A command that streams records, such as substrio data import or substrio logs --follow, writes one JSON object per line (NDJSON) under --json.

Exit codes

Code Meaning
0 Success.
1 Failure (anything not listed below).
2 Usage: bad arguments or input.
3 Auth: no credentials, or refused.
4 Not found.
5 Conflict: it exists already, or changed meanwhile.
6 Server error (5xx).
7 Network: the server could not be reached.
8 Partial: a bulk operation stored some documents and refused others.
9 Confirm: a destructive command needs --yes (no terminal to ask on, or --json).

Script against these codes instead of parsing error text: substrio op data.get collection=orders id=1 --json || exit $? exits 4 when the order does not exist, 3 when the key is refused.

Command reference

Commands listed by substrio --help are grouped by section. Run substrio COMMAND --help for help with a command.

Start

CommandWhat it doesNeeds
substrio init [--url URL] [--tenant SLUG] [--yes]Create a project (the key is stored in a profile, not substrio.toml)Nothing
substrio signup --email E [--name AGENT] [--url URL] [--wait SECONDS]Sign in as with "substrio login --email". A new address gets an account and a free plan; the agent gets a refreshable session, not a permanent keyNothing
substrio login --email E [--name AGENT] [--url URL] [--wait SECONDS]Sign your owner in. The page opens in their browser, and they check that it shows the match code printed here. They finish there, or give you the code from their email. The browser has 100 s by default, then the CLI exits 75Nothing
substrio login --wait [--wait SECONDS]Give the browser more time to finish the pending sign-in, on the same port
substrio login --code CODE|-Finish the pending sign-in with the code from your owner's email. It works for you even after their browser used it
substrio login [--url URL] --key - [--tenant SLUG] [--profile NAME] [--default]Save a profile; the key from stdin, the tenant found from it, the server https://mcp.substrio.com unless --url names another. Without --profile it is the default; with --profile the default changes only with --default (or when there is none)
substrio login --offline --url URL --tenant SLUG --key - [--profile NAME] [--default]Saves the profile with no round trip (the server need not be up yet); --tenant is required, the profile is marked unchecked until a login without --offline saves it again
substrio login --list | --remove NAMEList or remove saved profiles
substrio connect CODE|- [--url URL] [--profile NAME] [--default] [--show]Redeem the one-time connect code (substrio_ae_...) from the console Agents page. The session acting for the owner is saved in profile NAME (default agent) with owner-only access, and the MCP setup is printed. With --show, stdout contains only the secret for $(...) in an MCP client setup; otherwise the secret is not printedNothing
substrio whoamiTenant, server and profile in use, and where each came fromA project or profile
substrio statusServer health and configA server URL
substrio openOpen the server in a browserDepends on the arguments
substrio open --dashboardOpen your dashboard in this machine's browser, signed in once (a one-time console link)
substrio skills listThe server's agent skills: name, title, descriptionA server URL
substrio skills show NAMEOne skill's markdown
substrio skills install [NAME...] [--for claude|cursor|codex|agents-md|all] [--dir DIR]Install skills where each client reads them (default: all skills, --for all, --dir the project root)
substrio key rotate [--overlap 1h] [--expires-in 90d] [--print]Replace the tenant key; saved to the profileDepends on the arguments
substrio key listThe tenant keys: ids, created, expires, state
substrio key revoke IDEnd the previous key overlap now
substrio key export --env FILE [--var NAME] [--force]Write NAME=KEY (default SUBSTRIO_KEY) of the key in use to FILE, owner-only, never printed; for an MCP client config

Apps

CommandWhat it doesNeeds
substrio tenants list | show SLUGEvery tenant; one tenant (platform-admin key)A server URL and a key
substrio tenants create SLUG [--save-profile N] [--print]Create a tenant; its key is saved to profile N
substrio tenants delete SLUG --yesDelete a tenant and all its data
substrio tenants WORD ... [ARG ...] [key=value ...]Run a app.*, apps.*, tenant.* operation by name (app.a.b: tenants a b)
substrio pull (--for PROFILE | --seal-to PUBKEY) [--out FILE]Stream the app's bundle, sealed to one server's keyA server URL and a key
substrio push-bundle FILE --to PROFILE [--slug S] [--replace]Stream a bundle into PROFILE's server as an appNothing
substrio move --to PROFILE [--slug S] [--replace] [--save-profile NAME]Pipe the app, sealed, into PROFILE's serverA server URL and a key
substrio move --live --to PROFILEMove the app to PROFILE's server while it takes writes: copy, follow, fence, drain, flip (both profiles hold their server's master key; a failed drain rolls back)
substrio move --failover --to PROFILEMove writes to PROFILE's server, a replica of the app, when this profile's server no longer responds (a responsive server is moved live instead)

Ship

CommandWhat it doesNeeds
substrio push [-m MSG] [--branch NAME] [--no-build] [--dry-run] [--sandbox NAME]Build, upload a new version (functions, rules, collections, site), run it in dev; --branch commits it on that branch of the history instead of mainDepends on the arguments
substrio dev [--no-build] [--no-logs]The app on your dev sandbox with hot reload, through the API with your profile. Each save runs there as a new version, and your live app does not change. The sandbox's logs stream. substrio promote makes it liveDepends on the arguments
substrio dev --attach URLThe same on a running server, with the profile's key or SUBSTRIO_MASTER_KEY
substrio promote [N] [--no-backup]Make N live (default: what dev runs); back up the data first unless --no-backup is setA server URL and a key
substrio rollback [--no-backup]Restore the previous live versionA server URL and a key
substrio restore [BACKUP_ID] [--yes] [--wait S]Put the data back from a promote's backupA server URL and a key
substrio versionsList versions: which is live, what each sandbox runs, each backupA server URL and a key
substrio versions WORD ... [ARG ...] [key=value ...]Run a version.* operation by name (version.a.b: versions a b)
substrio diff [A] [B]What changed (default: live to dev)A server URL and a key
substrio deploy [NAME...] [--dry-run] [--prune]Make the declared collections (collections/NAME.json: schema, rules, indexes, expire, aggregates), deploy functions (routes, vars from substrio.toml) and set the rules. Reports a server declaration the files no longer name (drift); --prune drops it. With one or more NAME, only those functions are built and replaced: nothing else is read or sent (--prune, --functions and --assets are refused with names)A server URL and a key
substrio site deploy DIRPublish a website as a release (uploads only changes)A server URL and a key
substrio site releases | activate RELEASE_IDList releases; serve an earlier one
substrio site WORD ... [ARG ...] [key=value ...]Run a site.* operation by name (site.a.b: site a b)
substrio env pull | pushSync secrets with a .env fileA server URL and a key
substrio env WORD ... [ARG ...] [key=value ...]Run a env.* operation by name (env.a.b: env a b)
substrio files ls [PATH] | upload LOCAL [REMOTE] | rm PATHStatic filesA server URL and a key
substrio files sync LOCAL_DIR PREFIX [--concurrency N]Upload files missing from the store or stored at a different size, N at a time
substrio files WORD ... [ARG ...] [key=value ...]Run a file.* operation by name (file.a.b: files a b)
substrio logs [--limit N] [--since D|T] [--until D|T] [--function NAME] [--request-id ID] [--level LEVEL]Cloud function logs; D is a duration ago (30s, 5m, 1h) or T a Unix-second/ISO timestampA server URL and a key
substrio logs --follow (--for D | --lines N | --until-match TEXT)Tails them live over a WebSocket until the given stop is met (ends exit 0); required with no terminal or under --json; on a terminal with none given, Ctrl+C stops it

History

CommandWhat it doesNeeds
substrio branchThe app's branches: the version each points at, when it last moved, whether it is protected (branch.list)A server URL and a key
substrio branch create NAME [--from REF]Make a branch at REF (a branch name or a version id; default: the main branch's head)
substrio branch delete NAME [--yes]Free a branch's name; its versions and its log are kept (substrio ref restore branch NAME puts it back)
substrio branch protect NAME [--off] [--checks A,B]A commit or merge onto NAME needs those checks green; --off unprotects it
substrio branch WORD ... [ARG ...] [key=value ...]Run a branch.* operation by name (branch.a.b: branch a b)
substrio log [PATH] [--branch NAME] [--limit N]The commits of a branch, newest first; with PATH, only the commits that changed that one unit (version.log). Function logs are substrio logsA server URL and a key
substrio tagThe app's tags: the version each marks (tag.list)A server URL and a key
substrio tag NAME [VERSION] [--branch NAME]Mark a version with a name that never moves again (default: the head of main, or of --branch)
substrio tag WORD ... [ARG ...] [key=value ...]Run a tag.* operation by name (tag.a.b: tag a b)
substrio merge FROM [--into NAME]Work out the merge of FROM into a branch (default: main) and keep it as that branch's draft; publishes nothing (merge.plan)A server URL and a key
substrio merge status [--into NAME]The merge in hand: both sides, every unit it touched and what is still conflicted (merge.get)
substrio merge resolve PATH (--file F | --text T | -) [--into NAME]Settle one conflicted unit with these bytes (merge.resolve)
substrio merge commit [-m MSG] [--into NAME] [--checks-green]Publish the merge as one commit on the branch (merge.commit)
substrio merge abort [--into NAME] [--yes]Discard the merge draft without moving the branch (merge.abort)
substrio merge WORD ... [ARG ...] [key=value ...]Run a merge.* operation by name (merge.a.b: merge a b)
substrio gc [--yes]Erase history objects no longer reachable from a branch, tag, environment, ref log, or merge (version.gc)A server URL and a key
substrio gc --dry-run | --statusWhat a collection would take, erasing nothing; or where the last one got to (version.gc.status)

Any operation

CommandWhat it doesNeeds
substrio op list [FILTER]Every operation of the server: name, route, summaryA server URL and a key
substrio op NAME --helpIts routes and input schema (read from the server)
substrio op NAME [key=value ...] [--data '{...}' | --file F]Call it; prints JSON
substrio invoke NAME [key=value ...] [--data '{...}']Call a cloud function; --data or key=value is its JSON event (none: {}) (function.invoke; substrio op function.invoke --help for its input)A server URL and a key
substrio undo TOKENUndo a change by its undo_token (null means nothing to undo); prints the token that redoes it (undo; substrio op undo --help for its input)A server URL and a key

Registry groups

CommandWhat it doesNeeds
substrio data list [ARG ...] [key=value ...]data.listDepends on the arguments
substrio data get [ARG ...] [key=value ...]data.get
substrio data insert [ARG ...] [key=value ...]data.insert: --data '{...}' (or --file F, or key=value) is the document itself, no wrapper
substrio data update [ARG ...] [key=value ...]data.update
substrio data delete [ARG ...] [key=value ...]data.delete
substrio data rm [ARG ...] [key=value ...]data.delete
substrio data query [ARG ...] [key=value ...]data.query
substrio data count [ARG ...] [key=value ...]query.count: where.FIELD=VALUE (or --data '{"where":{...}}') filters it as in data query
substrio data aggregate [ARG ...] [key=value ...]query.aggregate
substrio data import [ARG ...] [key=value ...]data.import: --file F (NDJSON .ndjson/.jsonl, a JSON array, {"documents":[...]} or --format csv; - is stdin), streamed and sent in batches (--batch-bytes, --batch-docs, --concurrency); --checkpoint and --resume continue an import that stopped; each rejected document is reported
substrio data export [ARG ...] [key=value ...]data.export
substrio data WORD ... [ARG ...] [key=value ...]Run a data.*, query.* operation by name (data.a.b: data a b)
substrio collections list [ARG ...] [key=value ...]collection.listDepends on the arguments
substrio collections create NAME [ARG ...] [key=value ...]collection.create
substrio collections delete [ARG ...] [key=value ...]collection.delete
substrio collections rm [ARG ...] [key=value ...]collection.delete
substrio collections stats [ARG ...] [key=value ...]collection.stats
substrio collections schema [ARG ...] [key=value ...]schema.get
substrio collections WORD ... [ARG ...] [key=value ...]Run a collection.*, schema.* operation by name (collection.a.b: collections a b)
substrio functions list [ARG ...] [key=value ...]function.listDepends on the arguments
substrio functions get [ARG ...] [key=value ...]function.get
substrio functions invoke [ARG ...] [key=value ...]function.invoke
substrio functions delete [ARG ...] [key=value ...]function.delete
substrio functions rm [ARG ...] [key=value ...]function.delete
substrio functions toggle [ARG ...] [key=value ...]function.toggle
substrio functions source [ARG ...] [key=value ...]function.source.read
substrio functions logs [ARG ...] [key=value ...]function.logs
substrio functions WORD ... [ARG ...] [key=value ...]Run a function.* operation by name (function.a.b: functions a b)
substrio secrets list [ARG ...] [key=value ...]secret.listDepends on the arguments
substrio secrets set [ARG ...] [key=value ...]secrets set KEY: the value from stdin (or -), --from-file PATH, or --from-env NAME; never a plain argument
substrio secrets delete KEY [ARG ...] [key=value ...]secret.delete
substrio secrets rm KEY [ARG ...] [key=value ...]secret.delete
substrio secrets WORD ... [ARG ...] [key=value ...]Run a secret.* operation by name (secret.a.b: secrets a b)
substrio cron list [ARG ...] [key=value ...]schedule.listDepends on the arguments
substrio cron create [ARG ...] [key=value ...]schedule.create
substrio cron update [ARG ...] [key=value ...]schedule.update
substrio cron enable [ARG ...] [key=value ...]schedule.update
substrio cron disable [ARG ...] [key=value ...]schedule.update
substrio cron delete [ARG ...] [key=value ...]schedule.delete
substrio cron rm [ARG ...] [key=value ...]schedule.delete
substrio cron WORD ... [ARG ...] [key=value ...]Run a schedule.* operation by name (schedule.a.b: cron a b)
substrio triggers list [ARG ...] [key=value ...]trigger.listDepends on the arguments
substrio triggers create [ARG ...] [key=value ...]trigger.create
substrio triggers update [ARG ...] [key=value ...]trigger.update
substrio triggers enable [ARG ...] [key=value ...]trigger.update
substrio triggers disable [ARG ...] [key=value ...]trigger.update
substrio triggers delete [ARG ...] [key=value ...]trigger.delete
substrio triggers rm [ARG ...] [key=value ...]trigger.delete
substrio triggers WORD ... [ARG ...] [key=value ...]Run a trigger.* operation by name (trigger.a.b: triggers a b)
substrio domains list [ARG ...] [key=value ...]tenant.domain.listDepends on the arguments
substrio domains add DOMAIN [ARG ...] [key=value ...]tenant.domain.attach
substrio domains remove [ARG ...] [key=value ...]tenant.domain.detach
substrio domains rm [ARG ...] [key=value ...]tenant.domain.detach
substrio rules get [ARG ...] [key=value ...]security.rules.getDepends on the arguments
substrio rules set [ARG ...] [key=value ...]security.rules.set
substrio rules delete [ARG ...] [key=value ...]security.rules.delete
substrio rules WORD ... [ARG ...] [key=value ...]Run a security.* operation by name (security.a.b: rules a b)
substrio permissions get [ARG ...] [key=value ...]permissions.getDepends on the arguments
substrio permissions set [ARG ...] [key=value ...]permissions.set
substrio permissions grant [ARG ...] [key=value ...]permissions grant USER_ID NAME ...: grants that user those declared permissions (user.permissions.set); effective at their next sign in
substrio permissions revoke [ARG ...] [key=value ...]permissions revoke USER_ID NAME ...: revokes those declared permissions (user.permissions.set); ends the user's sessions now if any was actually held
substrio permissions show [ARG ...] [key=value ...]permissions show USER_ID: that user's granted and effective declared permission names
substrio permissions WORD ... [ARG ...] [key=value ...]Run a permissions.* operation by name (permissions.a.b: permissions a b)
substrio memberships grant [ARG ...] [key=value ...]memberships grant USER_ID NAME ... --in COLLECTION:ID: grants that user those declared permissions in the named organization (user.memberships.set); the gate reads it from the next requestDepends on the arguments
substrio memberships revoke [ARG ...] [key=value ...]memberships revoke USER_ID NAME ... --in COLLECTION:ID: revokes those declared permissions in the named organization (user.memberships.set); holds from the next request, no session is ended
substrio memberships show [ARG ...] [key=value ...]memberships show USER_ID [--in COLLECTION:ID]: that organization's held names, or every organization held when --in is omitted
substrio sandbox list [ARG ...] [key=value ...]sandbox.listDepends on the arguments
substrio sandbox create NAME [ARG ...] [key=value ...]sandbox.create
substrio sandbox reset [ARG ...] [key=value ...]sandbox.reset
substrio sandbox delete [ARG ...] [key=value ...]sandbox.delete
substrio sandbox rm [ARG ...] [key=value ...]sandbox.delete
substrio sandbox outbox [ARG ...] [key=value ...]sandbox.outbox
substrio sandbox allow [ARG ...] [key=value ...]sandbox.allow.list
substrio sandbox allow add [ARG ...] [key=value ...]sandbox.allow.add
substrio sandbox allow remove [ARG ...] [key=value ...]sandbox.allow.remove
substrio sandbox WORD ... [ARG ...] [key=value ...]Run a sandbox.* operation by name (sandbox.a.b: sandbox a b)
substrio webhooks list [ARG ...] [key=value ...]webhook.listDepends on the arguments
substrio webhooks get [ARG ...] [key=value ...]webhook.get
substrio webhooks show [ARG ...] [key=value ...]webhook.get
substrio webhooks create [ARG ...] [key=value ...]webhook.create
substrio webhooks update [ARG ...] [key=value ...]webhook.update
substrio webhooks delete [ARG ...] [key=value ...]webhook.delete
substrio webhooks rm [ARG ...] [key=value ...]webhook.delete
substrio webhooks logs [ARG ...] [key=value ...]webhook.logs
substrio webhooks WORD ... [ARG ...] [key=value ...]Run a webhook.* operation by name (webhook.a.b: webhooks a b)
substrio views list [ARG ...] [key=value ...]view.listDepends on the arguments
substrio views data [ARG ...] [key=value ...]view.get
substrio views get [ARG ...] [key=value ...]view.get
substrio views create [ARG ...] [key=value ...]view.create
substrio views update [ARG ...] [key=value ...]view.update
substrio views delete [ARG ...] [key=value ...]view.delete
substrio views rm [ARG ...] [key=value ...]view.delete
substrio views refresh [ARG ...] [key=value ...]view.refresh
substrio views WORD ... [ARG ...] [key=value ...]Run a view.* operation by name (view.a.b: views a b)
substrio backups list [ARG ...] [key=value ...]backup.listDepends on the arguments
substrio backups get [ARG ...] [key=value ...]backup.get
substrio backups show [ARG ...] [key=value ...]backup.get
substrio backups create [ARG ...] [key=value ...]backup.create
substrio backups restore [ARG ...] [key=value ...]backup.restore
substrio backups delete [ARG ...] [key=value ...]backup.delete
substrio backups rm [ARG ...] [key=value ...]backup.delete
substrio backups WORD ... [ARG ...] [key=value ...]Run a backup.* operation by name (backup.a.b: backups a b)
substrio accounts list [ARG ...] [key=value ...]account.listDepends on the arguments
substrio accounts show [ARG ...] [key=value ...]account.get
substrio accounts get [ARG ...] [key=value ...]account.get
substrio accounts members [ARG ...] [key=value ...]account.member.list
substrio accounts keys [ARG ...] [key=value ...]account.key.list
substrio accounts apps [ARG ...] [key=value ...]account.app.list
substrio accounts keys list [ARG ...] [key=value ...]account.key.list
substrio accounts keys create [ARG ...] [key=value ...]account.key.create
substrio accounts keys revoke [ARG ...] [key=value ...]account.key.revoke
substrio accounts invite [ARG ...] [key=value ...]account.invite.create
substrio accounts invites [ARG ...] [key=value ...]account.invite.list
substrio accounts revoke [ARG ...] [key=value ...]account.invite.revoke
substrio accounts role [ARG ...] [key=value ...]account.member.set
substrio accounts remove [ARG ...] [key=value ...]account.member.remove
substrio accounts attach-app ACCOUNT_ID [ARG ...] [key=value ...]account.app.attach
substrio accounts WORD ... [ARG ...] [key=value ...]Run a account.* operation by name (account.a.b: accounts a b)
substrio platform settings [ARG ...] [key=value ...]platform.settings.getDepends on the arguments
substrio platform settings get [ARG ...] [key=value ...]platform.settings.get
substrio platform settings set VALUE [ARG ...] [key=value ...]platform.setting.set
substrio platform WORD ... [ARG ...] [key=value ...]Run a platform.* operation by name (platform.a.b: platform a b)
substrio tools list [ARG ...] [key=value ...]tool.listDepends on the arguments
substrio tools remove NAME VERSION [ARG ...] [key=value ...]tool.remove
substrio tools install [ARG ...] [key=value ...]tools install NAME FILE|-: streams the file once to hash it (sha256) and once as the PUT body (- is stdin, buffered to an owner-only temp file first, removed after)
substrio tools WORD ... [ARG ...] [key=value ...]Run a tool.* operation by name (tool.a.b: tools a b)
substrio ledger catalog [ARG ...] [key=value ...]ledger.catalog.getDepends on the arguments
substrio ledger declare [ARG ...] [key=value ...]ledger.catalog.set
substrio ledger post [ARG ...] [key=value ...]ledger.post
substrio ledger balance [ARG ...] [key=value ...]ledger.balance
substrio ledger entries [ARG ...] [key=value ...]ledger.entries
substrio ledger entry ID [ARG ...] [key=value ...]ledger.entry.get
substrio ledger clear ID [ARG ...] [key=value ...]ledger.entry.clear
substrio ledger void ID [ARG ...] [key=value ...]ledger.entry.void
substrio ledger reverse ID [ARG ...] [key=value ...]ledger.entry.reverse
substrio ledger clear-due [ARG ...] [key=value ...]ledger.clear_due
substrio ledger import [ARG ...] [key=value ...]ledger.import
substrio ledger WORD ... [ARG ...] [key=value ...]Run a ledger.* operation by name (ledger.a.b: ledger a b)
substrio agent WORD ... [ARG ...] [key=value ...]Run a agent.* operation by name (agent.a.b: agent a b)Depends on the arguments
substrio ai WORD ... [ARG ...] [key=value ...]Run a ai.* operation by name (ai.a.b: ai a b)Depends on the arguments
substrio audit WORD ... [ARG ...] [key=value ...]Run a audit.* operation by name (audit.a.b: audit a b)Depends on the arguments
substrio auth WORD ... [ARG ...] [key=value ...]Run a auth.* operation by name (auth.a.b: auth a b)Depends on the arguments
substrio batch WORD ... [ARG ...] [key=value ...]Run a batch.* operation by name (batch.a.b: batch a b)Depends on the arguments
substrio cluster WORD ... [ARG ...] [key=value ...]Run a cluster.* operation by name (cluster.a.b: cluster a b)Depends on the arguments
substrio documentation WORD ... [ARG ...] [key=value ...]Run a documentation.* operation by name (documentation.a.b: documentation a b)Depends on the arguments
substrio edge WORD ... [ARG ...] [key=value ...]Run a edge.* operation by name (edge.a.b: edge a b)Depends on the arguments
substrio graph WORD ... [ARG ...] [key=value ...]Run a graph.* operation by name (graph.a.b: graph a b)Depends on the arguments
substrio job WORD ... [ARG ...] [key=value ...]Run a job.* operation by name (job.a.b: job a b)Depends on the arguments
substrio kv WORD ... [ARG ...] [key=value ...]Run a kv.* operation by name (kv.a.b: kv a b)Depends on the arguments
substrio ref WORD ... [ARG ...] [key=value ...]Run a ref.* operation by name (ref.a.b: ref a b)Depends on the arguments
substrio source WORD ... [ARG ...] [key=value ...]Run a source.* operation by name (source.a.b: source a b)Depends on the arguments
substrio live_view WORD ... [ARG ...] [key=value ...]Run a live_view.* operation by name (live_view.a.b: live_view a b)Depends on the arguments
substrio log_alert WORD ... [ARG ...] [key=value ...]Run a log_alert.* operation by name (log_alert.a.b: log_alert a b)Depends on the arguments
substrio log_drain WORD ... [ARG ...] [key=value ...]Run a log_drain.* operation by name (log_drain.a.b: log_drain a b)Depends on the arguments
substrio mcp config [ARG ...] [key=value ...]a ready MCP client config for this profile's app (--client claude|cursor|generic); the key as an environment variable referenceDepends on the arguments
substrio mcp WORD ... [ARG ...] [key=value ...]Run a mcp.* operation by name (mcp.a.b: mcp a b)
substrio host WORD ... [ARG ...] [key=value ...]Run a host.* operation by name (host.a.b: host a b)Depends on the arguments
substrio node_label WORD ... [ARG ...] [key=value ...]Run a node_label.* operation by name (node_label.a.b: node_label a b)Depends on the arguments
substrio region WORD ... [ARG ...] [key=value ...]Run a region.* operation by name (region.a.b: region a b)Depends on the arguments
substrio root_domain WORD ... [ARG ...] [key=value ...]Run a root_domain.* operation by name (root_domain.a.b: root_domain a b)Depends on the arguments
substrio billing WORD ... [ARG ...] [key=value ...]Run a billing.* operation by name (billing.a.b: billing a b)Depends on the arguments
substrio credits WORD ... [ARG ...] [key=value ...]Run a credits.* operation by name (credits.a.b: credits a b)Depends on the arguments
substrio featured WORD ... [ARG ...] [key=value ...]Run a featured.* operation by name (featured.a.b: featured a b)Depends on the arguments
substrio package WORD ... [ARG ...] [key=value ...]Run a package.* operation by name (package.a.b: package a b)Depends on the arguments
substrio release WORD ... [ARG ...] [key=value ...]Run a release.* operation by name (release.a.b: release a b)Depends on the arguments
substrio subscriptions WORD ... [ARG ...] [key=value ...]Run a subscriptions.* operation by name (subscriptions.a.b: subscriptions a b)Depends on the arguments
substrio dashboard WORD ... [ARG ...] [key=value ...]Run a dashboard.* operation by name (dashboard.a.b: dashboard a b)Depends on the arguments
substrio jet use [ARG ...] [key=value ...]jet use JET: the app picked or made, the key written to an owner-only fileDepends on the arguments
substrio jet WORD ... [ARG ...] [key=value ...]Run a jet.* operation by name (jet.a.b: jet a b)
substrio mesh WORD ... [ARG ...] [key=value ...]Run a mesh.* operation by name (mesh.a.b: mesh a b)Depends on the arguments
substrio meta WORD ... [ARG ...] [key=value ...]Run a meta.* operation by name (meta.a.b: meta a b)Depends on the arguments
substrio namespace WORD ... [ARG ...] [key=value ...]Run a namespace.* operation by name (namespace.a.b: namespace a b)Depends on the arguments
substrio oauth WORD ... [ARG ...] [key=value ...]Run a oauth.* operation by name (oauth.a.b: oauth a b)Depends on the arguments
substrio object WORD ... [ARG ...] [key=value ...]Run a object.* operation by name (object.a.b: object a b)Depends on the arguments
substrio observability WORD ... [ARG ...] [key=value ...]Run a observability.* operation by name (observability.a.b: observability a b)Depends on the arguments
substrio oidc WORD ... [ARG ...] [key=value ...]Run a oidc.* operation by name (oidc.a.b: oidc a b)Depends on the arguments
substrio plans WORD ... [ARG ...] [key=value ...]Run a plans.* operation by name (plans.a.b: plans a b)Depends on the arguments
substrio queue WORD ... [ARG ...] [key=value ...]Run a queue.* operation by name (queue.a.b: queue a b)Depends on the arguments
substrio rag WORD ... [ARG ...] [key=value ...]Run a rag.* operation by name (rag.a.b: rag a b)Depends on the arguments
substrio rate_limit WORD ... [ARG ...] [key=value ...]Run a rate_limit.* operation by name (rate_limit.a.b: rate_limit a b)Depends on the arguments
substrio sql WORD ... [ARG ...] [key=value ...]Run a sql.* operation by name (sql.a.b: sql a b)Depends on the arguments
substrio index WORD ... [ARG ...] [key=value ...]Run a index.* operation by name (index.a.b: index a b)Depends on the arguments
substrio realtime WORD ... [ARG ...] [key=value ...]Run a realtime.* operation by name (realtime.a.b: realtime a b)Depends on the arguments
substrio role WORD ... [ARG ...] [key=value ...]Run a role.* operation by name (role.a.b: role a b)Depends on the arguments
substrio route WORD ... [ARG ...] [key=value ...]Run a route.* operation by name (route.a.b: route a b)Depends on the arguments
substrio search WORD ... [ARG ...] [key=value ...]Run a search.* operation by name (search.a.b: search a b)Depends on the arguments
substrio settings WORD ... [ARG ...] [key=value ...]Run a settings.* operation by name (settings.a.b: settings a b)Depends on the arguments
substrio sync WORD ... [ARG ...] [key=value ...]Run a sync.* operation by name (sync.a.b: sync a b)Depends on the arguments
substrio system WORD ... [ARG ...] [key=value ...]Run a system.* operation by name (system.a.b: system a b)Depends on the arguments
substrio thread WORD ... [ARG ...] [key=value ...]Run a thread.* operation by name (thread.a.b: thread a b)Depends on the arguments
substrio user WORD ... [ARG ...] [key=value ...]Run a user.* operation by name (user.a.b: user a b)Depends on the arguments