Skip to main content
Every machine except isolated ones has run pre-installed. It calls the tools of your connected integrations from the shell, connects new ones, and runs and operates automations. There is nothing to install, start or log in to.
run is not available on isolated machines (boxd machine new --isolated), which have no integrations at all.

Start here: what’s enabled

Bare run shows the integrations enabled for your organization and whether each is connected for you:
An integration is enabled for the organization once anyone in your org connects it or an automation uses it. You get its commands and completion either way, and connect it yourself when you need it.

Discover tools

Integration and tool names are per organization and change over time, so look them up instead of guessing:
run list marks integrations other members of your org already use with a ★ and shows the first 40 of the rest, with a trailer pointing at run list --all and run search. Names are the integration’s id in kebab-case (google-maps, microsoft-teams, googlesheets). An underscore spelling is accepted and redirected. A few integrations serve their tools live from the connection instead of from a fixed list (Granola, for example). run <integration> on one of those prints <integration> - N tools (served live by the connection) and the tools are called the same way.

Call a tool

The result prints as YAML by default, or JSON with --json. Parameters:
  • Flags are the parameter names in kebab-case: issue_id becomes --issue-id.
  • Object and array parameters take a JSON string: --labels '["p1","bug"]'.
  • Boolean parameters are bare flags: --force. Omitting one sends nothing.
  • Enumerated parameters are validated and listed in --help.
  • Required parameters are shown without brackets in --help. A missing one is reported before anything is sent.
A failed call prints run: <command> failed: <reason> and exits non-zero.

Connections and scopes

A human completes the browser step. run auth waits up to three minutes and then reminds you the connection takes effect on its own once you finish. To disconnect, use the console’s Integrations page or run boxd manage integrations disconnect <name>, with --scope <name> for a shared connection. Calls use your personal connection unless you say otherwise:
Calling an integration that isn’t connected at the scope you asked for fails immediately with the link that fixes it:
An unscoped call uses your personal connection, or the org’s single shared one if that is the only option. With several shared connections and no personal one, the call stops and lists them as runnable lines:
On a shared machine only the org’s shared connections are available. An unscoped call that can’t be resolved there says so and links to a shared connect:
The GitHub App, when your org has installed it, is also callable. run github-app prints what it offers, and run github-app get-token mints a short-lived installation token. See the GitHub App.

Scripts and jobs

Each verb confirms what it did: a3f01: stopped - \run my-script.run.ts` or `run restart a3f01` starts it again, a3f01: restarted - `run logs a3f01 -f` to follow, a3f01: removed`. A script that registers no trigger or schedule runs in the foreground and returns. One that does is moved to the background once its top level settles:
Re-running the same file replaces its job under the same id. A script whose integrations aren’t all connected waits instead of failing:
For states, retries and the console, see Jobs. For the SDK a script imports, see Scripts.

Global flags

Shell completion

run completes integration names, tool names and flags dynamically, and *.run.ts paths. Add to your shell profile inside the machine: