Skip to main content

nullctl CLI

nullctl is the official command-line tool for Null Autos. Anything you can do in the portal you can do with nullctl, which makes it ideal for scripting, automation, and CI/CD. It follows a familiar verb-on-object grammar, similar to kubectl:

nullctl <verb> <object> [name] [flags]
# e.g.
nullctl get emulators
nullctl create emulator --snapshot base-aaos

Installation

nullctl is distributed as a single self-contained binary. Get it from your platform's distribution channel and confirm it is working:

nullctl version

It comes pre-installed in Null Autos cloud workspaces.

Authentication

nullctl resolves credentials from a chain, trying each in order until one succeeds, so the same commands work on your laptop, in CI, and in a workspace:

  1. GitLab CI job token (CI_JOB_TOKEN), automatic in pipelines.
  2. Workspace token, automatic inside a cloud workspace.
  3. Browser single sign-on, interactive, on your machine.

Mint or refresh a token explicitly, or sign out:

nullctl auth token
nullctl auth logout

Contexts & configuration

Connection settings live in contexts (API URL, identity provider, and client details). The active context determines which environment you are talking to.

nullctl get context           # list/show contexts
nullctl edit context # edit a context
nullctl get config # show resolved config
  • Global config: ~/.config/nullauto/config.yaml
  • Select a context per command: --context <name>
  • Use an alternate config file: --config <path>

Common workflows

Emulators

nullctl get emulators                          # list your emulators
nullctl get emulator <id> # inspect one
nullctl create emulator --snapshot <name> # launch (polls until running)
nullctl browse emulator <id> # open in your browser
nullctl adb connect <id> # proxy adb to a local port
nullctl delete emulator <id> # tear down

Snapshots

nullctl get snapshots                          # list snapshots
nullctl get snapshot <name> # inspect one
nullctl create snapshot ... # create a snapshot
nullctl snapshot score # value-based retention scoring
nullctl snapshot promote-root <name> # protect as a retention root
nullctl delete snapshot <name>

Identity & access

nullctl get whoami                             # who am I
nullctl get permissions # what can I do
nullctl get permission-check ... # check a specific permission
nullctl get users / get user <id>
nullctl get tenants / get tenant <id>
nullctl get groups / get group <id>
nullctl get group-members / get group-grants

Raw API access

nullctl api GET /api/v1/emulators              # call the control plane directly

nullctl api is a thin passthrough to the REST API, handy for endpoints without a dedicated subcommand.

Plugins

nullctl is extensible: any executable named nullctl-<name> on your PATH becomes a subcommand. When you run an unknown command, nullctl looks for a matching plugin and hands off to it, passing along your active context and credentials so plugins inherit your auth state.

nullctl plugin list                            # discover installed plugins
nullctl infra cell create ... # example: the infra plugin

Command summary

VerbWorks with
getconfig, context, snapshots, emulators, users, tenants, groups, group-members, group-grants, whoami, permissions
createemulator, snapshot, tenant, group, group-member, group-grant
deleteemulator, snapshot, and other objects
editcontext
authtoken, logout
adbconnect
browseemulator
snapshotscore, promote-root
apiraw request passthrough
pluginlist

Next steps