Skip to main content
The CLI is a thin shell over the SDK — same implementation, different ergonomics, so the two have capability parity.
Setting the device up is the wizard’s job, not the CLI’s. Installing, updating, uninstalling, signing in, switching accounts, turning capture or tracking on or off, and importing existing work all have a screen in the wizard that shows you the current state before it changes anything.The commands below are the scriptable half of those screens. Throughout these docs a Wizard / Command toggle marks a feature that has both — use whichever suits where you are.

Grammar

Connection flags are global and go before the command:
Signing in to another endpoint takes it as a flag: probe wizard --action login --base-url <url>.

Addressing an entity

A bare ref is the slug. An id is written id:<uuid>.
Nothing is ever tried two ways, so a ref cannot mean two things. A bare UUID is refused as an unknown slug rather than resolved as an id.
The rule exists because the clever version was worse. With a resolver that tried a UUID first, a project whose slug happened to be another project’s id meant probe project delete <that string> deleted the wrong project — exit 0, a deleted line echoing the ref, nothing to restore. Refusing an ambiguous question is a good answer; not being able to ask one is better.

Async by default

Some writes queue locally and return immediately. Some do not. The split is deliberate. PROBE_ASYNC=0 turns queueing off for the three that have it. --async on run end skips the barrier. Both flags are also accepted after the subcommand, where they win.
Queued writes are fsynced and atomic, and survive a crash. probe flush (an alias of probe outbox drain) delivers everything and waits. See the outbox.

Scoping

Most commands default to the active workspace and project of the current context:
probe workspace use sets this computer’s workspace: every new project made on this computer, by the CLI, the Probe daemon or an SDK run, is filed there. The install asks for it when your team has more than one workspace. On such a team with none set, creating a project is refused rather than guessed. The active account is the wizard’s to switch (probe wizard --action account); probe context list shows which one is answering. Override per call with --workspace-id, --workspace, or --project.

Reading output

Every read command prints JSON, so jq works everywhere:
A project’s or experiment’s summary (its Overview page) is not part of get. Whoever records the work keeps it, and probe summary checkout --project folding writes it to a file you can read or edit. See Summaries.

Exit codes

Those two commands use exit 2 as an answer, not an error, so they compose into scripts:

Every command

Every command group, with what each one is for.

Authentication

Device flow, tokens, contexts, and the read-only MCP credential.