Skip to main content

CLI Overview

Open source at https://github.com/CloudCruise/cloudcruise-cli. Report bugs via GitHub issues or Discord. The CloudCruise CLI provides a command-line interface for managing workflows, workflow components, runs, vault credentials, and builder agent sessions. It’s designed for coding agents to build, diagnose, fix, and verify workflows, but works just as well for manual use. All output is JSON on stdout; errors go to stderr.

Installation

Or run without installing:

Setup

Log in with your browser. The CLI opens a browser window for OAuth + PKCE:
After you sign in, tokens are saved to your OS keychain. If your account requires MFA, the CLI prompts for a TOTP code (or pass --mfa-code for non-interactive login). Use --no-open to print the login URL instead of opening a browser. Then select the workspace you want to use:

Profiles

Each login is saved to a named profile, so you can keep separate credentials for different environments or accounts:
Every command accepts --profile <name> and --workspace-id <id> to override the active profile and workspace for a single call.

CI and Non-Interactive Use

For CI or other environments without a browser, set CLOUDCRUISE_TOKEN. It takes precedence over any saved profile. Legacy API keys are still supported. Pass one via stdin, or set the CLOUDCRUISE_API_KEY environment variable:

Environment Variables

Secrets passed as command-line flags (--api-key, --encryption-key, --value) are rejected by default because they leak into shell history and ps output. Use the matching --*-stdin flag or an environment variable instead.

Coding Agent Integration

Claude Code: install the plugin from the CLI repo’s marketplace. This registers the CloudCruise skills (workflow build, test, debug, CLI and DSL reference) and keeps them updated with /plugin update cloudcruise:
Other agents (Cursor, Codex, Devin, or Claude Code without plugins): install the skill files into your project:
This copies a CLI usage reference and a complete workflow DSL reference (all node types, XPath best practices, variables, JSONata, error classification) into your project where the agent can discover them.

Staying Up to Date

  • CLI: the CLI tells you, and your coding agent, when a newer version exists. Update with npm i -g @cloudcruise/cli@latest. CI and NO_UPDATE_NOTIFIER turn the check off.
  • Skills: after a CLI upgrade, the next command refreshes the skills that cloudcruise install --skills wrote into the current project. Skills you edited are left alone; cloudcruise install --skills overwrites them. Plugin-installed skills update with the plugin.
To turn off the skills refresh, set this in ~/.cloudcruise/config.json:
CLOUDCRUISE_SKILLS_AUTO_UPDATE=0 or =1 overrides the setting. With the refresh off, the CLI warns about outdated skills instead.

Quick Start

Run Options

--dry-run ends the run at the node marked end_here_on_dry_run. Nodes before it still run, and a workflow without the marker runs in full. To check a payload before starting a run, validate it against the workflow’s saved input schema:
It exits 0 if the payload is valid, 1 if it’s invalid (per-field errors in errors), and 2 if the workflow’s input schema itself doesn’t compile. Validation runs against the saved schema, so push schema edits with workflows update first.

Error-Fix-Verify Loop

You can use the CLI to fix existing workflow errors. Here’s how a coding agent could sequence CLI commands:
The --debug flag forces every node to capture a page snapshot, which is essential for diagnosing selector issues. Without it, failed runs often lack snapshots.

Debugging with Snapshots

After a --debug run, the snapshot commands let you work with a node’s captured page:
run snapshots <session_id> <node_id> returns the raw snapshot metadata without downloading anything.

Watching a Live Session

Returns a viewer URL and its auth token. The token is single-use: if the viewer link was already opened (reloaded, or reopened later), it fails to connect. Run the command again to mint a fresh token and link. Only works while the session is still active.

Responding to User Interaction

When a run is waiting on a User Interaction node, submit the data it expects with run respond. The body is a JSON object matching the node’s expected_datamodel, passed via exactly one of --data, --file, or --stdin:

Builder Agent

The builder commands drive the Builder Agent from the terminal, so a coding agent can build a new workflow or edit an existing one.
builder send returns as soon as the agent accepts the message. builder await-turn blocks until the turn settles, and builder status reports the current state. Both encode the result in the exit code so a script can branch without parsing stdout: Commands target the workspace’s current conversation by default. Pass --conversation <id> (or set CLOUDCRUISE_CONVERSATION) to target a specific one. builder conversations list shows live conversations, and builder conversations get <id> fetches an archived transcript.

Branches and Pull Requests

Workflow branches and pull requests work like git and gh pr. Branches are named by name or id, pull requests by number (12, #12) or id, and every command takes --workflow <workflow_id>.
branches list|create|delete|set-default manage branches, and prs list|view|create|diff|approve|close|merge manage pull requests. A branch’s ruleset can block direct saves and require approvals before a merge. You can’t approve your own pull request, and an API key approves as the user who created it.

Merging with Conflicts

When both branches changed the same item differently, prs merge exits 14 (MERGE_CONFLICTS) and names each conflict. prs diff shows each one with a key, a one-line summary and the base, source and target values, plus the match_heads to merge against:
--resolve <key>=source|target|delete answers one conflict, --take source|target answers the rest, and --resolutions-file sets custom values (prs diff --resolutions-template writes a file to start from). If either branch changed since the diff, nothing is merged and the command exits 13; run prs diff again. To resolve conflicts and test the result before merging, merge the base into your branch first, as in git: open a pull request from the base into your branch (--head main --base fix-login), merge it with resolutions, test your branch with run start --branch, then merge your branch. It no longer conflicts.

Workflow Folders

Moving Workflows Between Environments

Export a workflow as a portable bundle and import it into another environment or workspace. Import always creates a new workflow:
The workspace is resolved from --workspace-id, then CLOUDCRUISE_WORKSPACE_ID, then the profile’s active workspace.

Deleting Workflows

Delete one or more workflows by id. The delete is permanent and asks no confirmation. Runs and results of the workflow are kept:
stdout is one array with an entry per id: { id, status: "deleted" | "not_found" | "error", message? }. The command continues past failures and exits non-zero if any id failed. A workflow’s webhooks are deleted with it. With OAuth, deleting requires the workspace Owner role.

Workflow Components

Components are reusable groups of nodes that can be pasted into many workflows. Updating a component automatically propagates the change to every workflow that embeds it (--no-propagate to skip). See the Workflow Components concept page for the full model.
Before updating, check what propagation will affect:

Error Codes

Error codes are the workspace-level IDs that a node’s error_on_false_message (Bool Condition), error_message (User Interaction), and selector_error_message (selector nodes) point to.
error-codes create is find-or-create: if a code with the same name already exists (ignoring case and surrounding whitespace), it’s returned with "created": false and nothing changes, so it’s safe to run again. Use error-codes update to change an existing code. To use a code, put its returned id into the node field and save with workflows update. Saving links the code to the workflow. --action accepts alert (default), cancel, pause, retry, or input_required. Fields can also be passed as one JSON object via --file or --stdin, using the API field names (error_code, description, enriched_description, error_action).

Vault Credentials

vault create and vault update encrypt --user-name, --password, and --tfa-secret client-side, so they need an encryption key (CLOUDCRUISE_ENCRYPTION_KEY or one saved on the profile). Prefer --password-stdin and --tfa-secret-stdin over the plain flags, which are visible in ps output. Entries also support TFA (--tfa-method AUTHENTICATOR|EMAIL|SMS) and per-entry proxies (--proxy random|static|country|custom). You can also pass a pre-encrypted JSON payload via --file or --stdin. vault clear-state clears the stored browser state (cookies, localStorage, sessionStorage) for an entry. vault encrypt and vault decrypt work locally with the workspace encryption key and make no API call.

Secret Providers (1Password)

If your workspace has a 1Password connection, you can bind a vault entry to a 1Password item instead of storing a username and password. CloudCruise resolves the credentials from 1Password at run time, and the secret values are never stored in CloudCruise.
--secret-provider-id and --secret-ref must be passed together. --secret-cache-ttl-seconds is optional; omit it to use the connection’s default. Because provider-backed entries carry no --user-name/--password, no encryption key is required to create or update them.

Commands

Next Steps

  • Explore the Run API for detailed execution options
  • Learn about Vault API for secure credential management
  • Check out Workflow API to manage your workflows
  • Set up Webhooks for event notifications