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:probe login also accepts them directly.
Addressing an entity
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 meantprobe 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:--workspace-id, --workspace, or --project.
Reading output
Every read command prints JSON, sojq works everywhere:
Exit codes
Those two commands use exit 2 as an answer, not an error, so they compose into scripts:
Every command
All 40 command groups, with what each one is for.
Authentication
Device flow, tokens, contexts, and the read-only MCP credential.