CIRCLECI(1)

πŸ“¦ version 1.11.0, in nixpkgs unstable

πŸ’… CIRCLECI(1) β€” The CircleCI CLI πŸŽ€

okay bestie, welcome to the manual page for circleci β€” literally The CircleCI CLI πŸ‘‘. we're keeping every flag, every example, every file path. no cap.


🌸 NAME 🌸

circleci β€” The CircleCI CLI πŸ’–

🌈 SYNOPSIS 🌈

circleci [options...] [argument...]

✨ DESCRIPTION ✨

Work with CircleCI from the command line. that's the whole vibe, and it's honestly iconic πŸ¦‹

πŸ’… OPTIONS πŸ’…

these are the top-level options, bestie β€” the main-character flags ✨

  • -c, --config β€” Path to config file (default: ~/.config/circleci/config.yml)
  • --debug β€” turn on debug logging πŸ”
  • --insecure-storage β€” do not use the system's secure storage for storing tokens πŸ™ˆ
  • --no-color β€” Disable ANSI color output (same as setting NO_COLOR) 🎨
  • -q, --quiet β€” Suppress informational output. Data on stdout is unaffected 🀫
  • --skip-update-check β€” skip checking for CLI and extension updates ⏭️
  • --theme β€” Set the color theme (default: auto) 🌈

πŸš€ COMMANDS πŸš€

πŸ’– api <path> πŸ’–

Call the CircleCI REST API directly β€” yes, you can just hit the API from here, slay πŸ’…

🧸 OPTIONS 🧸

  • -d, --data β€” Raw request body sent verbatim; @file reads from a file, @- from stdin
  • -f, --field β€” Add a field: key=value (query param for GET/DELETE, JSON body for POST/PUT/PATCH)
  • -H, --header β€” Add a request header: "Key: Value"
  • --jq β€” Process values from the response using jq syntax
  • -X, --method β€” HTTP method (default: GET, or POST when -f or -d is used)

πŸŽ€ EXAMPLES πŸŽ€

# Get your user profile
$ circleci api me

# List runs for a project
$ circleci api projects/{project-id}/runs

# Trigger a pipeline on a branch
$ circleci api projects/{project-id}/run -f definition_id=<id> -f "config[branch]=main"

# Send a body read from a file (@- reads from stdin)
$ circleci api projects/{project-id}/run -d @payload.json

# Send a custom header
$ circleci api 'runs?filter[user_id]=me' -H "X-Custom: value"

πŸ¦‹ artifact <job-id> πŸ¦‹

List and download a job's artifact files β€” come get your files, bestie πŸ“

🧸 OPTIONS 🧸

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • -o, --output β€” Download artifacts into this directory

πŸŽ€ EXAMPLES πŸŽ€

# List artifacts for a job
$ circleci artifact 5034460f-c7c4-4c43-9457-de07e2029e7b

# Download all artifacts into ./artifacts
$ circleci artifact 5034460f-c7c4-4c43-9457-de07e2029e7b --output ./artifacts

# Output as JSON for scripting
$ circleci artifact 5034460f-c7c4-4c43-9457-de07e2029e7b --json

🌟 auth <command> 🌟

Log in, sign up and check your CircleCI identity β€” it's giving account-management main character energy πŸ‘‘

πŸ’Œ COMMANDS πŸ’Œ

id β€” Show the device ID for this CLI installation

OPTIONS

  • --json β€” Output as JSON

EXAMPLES

# Print the device ID
$ circleci auth id

# Output as JSON
$ circleci auth id --json

# Use in a script
$ DEVICE=$(circleci auth id)

login β€” Log in to a CircleCI account

OPTIONS

  • --no-browser β€” Print the authorize URL instead of opening a browser

EXAMPLES

# Open the browser and authorize the CLI
$ circleci auth login

# Print the authorize URL instead of opening a browser
$ circleci auth login --no-browser

# Authenticate against a non-default host
$ CIRCLE_HOST=https://example.circleci.com circleci auth login

logout β€” Log out of a CircleCI account

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON

EXAMPLES

# Log out of the current account
$ circleci auth logout

# Log out, then sign in as a different account
$ circleci auth logout && circleci auth login

# Log out without printing the confirmation line
$ circleci auth logout --quiet

# Report where the token was removed from, for scripting
$ circleci auth logout --json --jq '.storage'

me β€” Display active account information

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON

signup β€” Sign-up for a new CircleCI account

OPTIONS

  • --no-browser β€” Print the authorize URL instead of opening a browser

EXAMPLES

# Open the signup page in your browser
$ circleci auth signup

# Print the authorize URL instead of opening a browser
$ circleci auth signup --no-browser

# Authenticate against a non-default host
$ CIRCLE_HOST=https://example.circleci.com circleci auth signup

🧚 certificate <command> 🧚

Manage iOS code signing certificates β€” iconic iOS signing business πŸŽ€

πŸ’Œ COMMANDS πŸ’Œ

delete <cert-id> β€” Delete an iOS certificate

OPTIONS

  • -f, --force β€” skip confirmation prompt

EXAMPLES

# Delete a certificate (with confirmation)
$ circleci certificate delete <cert-id>

# Delete without confirmation
$ circleci certificate delete <cert-id> --force

list β€” List uploaded iOS certificates

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; defaults to git remote

EXAMPLES

# List certificates (org inferred from git remote)
$ circleci certificate list

# List for a specific org
$ circleci certificate list --org gh/acme

# Output as JSON
$ circleci certificate list --json

# Get cert IDs only
$ circleci certificate list --json --jq '.[].id'

upload β€” Upload a .p12 certificate

OPTIONS

  • --cert-file β€” Path to the .p12 certificate file
  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; defaults to git remote
  • --password β€” Password for the .p12 file. Pass - to read from stdin. Prompted if omitted in a terminal.

EXAMPLES

# Upload a certificate (org inferred from git remote, password prompted)
$ circleci certificate upload --cert-file ./Certificates.p12

# Read the password from stdin (no shell history exposure)
$ echo "$P12_PASSWORD" | circleci certificate upload --cert-file ./Certificates.p12 --password -

# Explicit org and capture the new cert id for scripting
$ echo "$P12_PASSWORD" | circleci certificate upload --org gh/acme --cert-file ./Certificates.p12 --password - --json --jq -r '.id'

🐚 completion <command> 🐚

Install, remove or print shell completions β€” tab-completion bestie behavior, honestly essential 🫢

πŸ’Œ COMMANDS πŸ’Œ

install β€” Install shell completion into your shell profile

EXAMPLES

# Install completion (detects shell from $SHELL)
$ circleci completion install

# Then reload your shell
$ source ~/.zshrc

# To install manually instead, source the output directly
$ source <(circleci completion bash)

uninstall β€” Remove shell completion from your shell profile

EXAMPLES

# Remove completion
$ circleci completion uninstall

# Then reload your shell
$ source ~/.zshrc

# Check whether completion is currently installed
$ grep -l "circleci shell completion" ~/.zshrc ~/.bashrc 2>/dev/null

⭐ component-version <command> ⭐

Manage deploy component versions β€” version management, but make it cute πŸ’œ

πŸ’Œ COMMANDS πŸ’Œ

list <component-id> β€” List versions of a deploy component

OPTIONS

  • --environment β€” Filter by deploy environment ID
  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON

EXAMPLES

# List versions of a component
$ circleci component-version list a0000000-0000-4000-8000-000000c00001

# Filter by environment
$ circleci component-version list a0000000-0000-4000-8000-000000c00001 --environment a0000000-0000-4000-8000-000000e00001

# Output as JSON
$ circleci component-version list a0000000-0000-4000-8000-000000c00001 --json

🌈 config <command> 🌈

Generate, validate, process and pack config YAML β€” config YAML is the moment, periodt ✨

πŸ’Œ COMMANDS πŸ’Œ

generate [path] β€” Generate .circleci/config.yml from a repository scan

EXAMPLES

# Generate a config for the current directory
$ circleci config generate

# Generate a config for a specific project path
$ circleci config generate ./my-app

# Re-run is a no-op when a config already exists
$ circleci config generate

βœ“ Using existing config at .circleci/config.yml

pack <path> β€” Bundle split config files into a single YAML document

EXAMPLES

# Pack the default config directory
$ circleci config pack .circleci

# Pack and pipe to validate
$ circleci config pack .circleci | circleci config validate --config -

# Pack a custom directory
$ circleci config pack src/ci

process <path> β€” Compile and expand a pipeline config file

OPTIONS

  • -n, --next β€” Enable config next which previews upcoming potentially breaking config changes
  • --org β€” Organization slug (e.g. gh/myorg) or UUID for private orb resolution; defaults to git remote
  • --pipeline-parameters β€” Pipeline parameters as a YAML map or path to a YAML file

EXAMPLES

# Process the default config
$ circleci config process .circleci/config.yml

# Process with pipeline parameters
$ circleci config process .circleci/config.yml --pipeline-parameters 'env: staging'

# Process against a specific org (otherwise inferred from the git remote)
$ circleci config process .circleci/config.yml --org gh/myorg

# Read from stdin
$ cat .circleci/config.yml | circleci config process -

validate [<path>] β€” Validate a pipeline config file

OPTIONS

  • -c, --config β€” Path to config file (use "-" for stdin)
  • --json β€” Output as JSON
  • -n, --next β€” Enable config next which previews upcoming potentially breaking config changes
  • --org β€” Organization slug (e.g. gh/myorg) or UUID for private orb resolution; defaults to git remote

✨ EXAMPLES ✨

Ok so these are the config validate examples, and honestly they're giving "quick sanity check before you push" energy πŸ’… Run these before your pipeline yells at you, bestie.

# Validate the default config file

$ circleci config validate

# Validate a specific file

$ circleci config validate path/to/config.yml

# Validate against a specific org (otherwise inferred from the git remote)

$ circleci config validate --org gh/myorg

# Validate and output as JSON

$ circleci config validate --json

πŸŽ€ context <command> πŸŽ€

Manage secret env vars shared across pipelines β€” like, the group chat of secrets, but for your whole org πŸ”βœ¨

COMMANDS πŸ‘‡

πŸ“ create <name> πŸ“

Create a new context β€” brand new little vault, freshly spawned 🫢

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; defaults to git remote

EXAMPLES

# Create a context for the org inferred from git remote

$ circleci context create my-context

# Create a context for a specific organization

$ circleci context create my-context --org gh/myorg

# Create and capture the ID

$ circleci context create my-context --org gh/myorg --json --jq '.id'

πŸ¦‹ delete <context-id|context-name> πŸ¦‹

Delete a context β€” yeah this one's a goodbye forever situation, so read the confirmation prompt fr fr 😭

OPTIONS

  • -f, --force β€” skip confirmation prompt
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; used when resolving name to ID

EXAMPLES

# Delete a context by UUID (with confirmation)

$ circleci context delete ctx-uuid-here

# Delete a context by name (org inferred from git remote)

$ circleci context delete my-context

# Delete a context by name in a specific org, without confirmation

$ circleci context delete my-context --org gh/myorg --force

🌸 get <context-id|context-name> 🌸

Get details of a context β€” the little info dump, no cap 🧚

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; used when resolving name to ID

EXAMPLES

# Get a context by UUID

$ circleci context get ctx-uuid-here

# Get a context by name (org inferred from git remote)

$ circleci context get my-context

# Get a context by name in a specific org

$ circleci context get my-context --org gh/myorg

# Output as JSON

$ circleci context get my-context --json

# Get just the org ID

$ circleci context get ctx-uuid-here --json --jq '.org_id'

πŸ’œ list πŸ’œ

List contexts for an organization β€” the full roster, main character lineup energy πŸ‘‘

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --name β€” Find contexts by name (partial match)
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; defaults to git remote

EXAMPLES

# List contexts for the org inferred from git remote

$ circleci context list

# List contexts containing the given name

$ circleci context list --name substring

# List contexts for a specific organization

$ circleci context list --org gh/myorg

# Output as JSON for scripting

$ circleci context list --json

# Get just context names

$ circleci context list --json --jq '.[].name'

🌈 open 🌈

Open the contexts settings page in the browser β€” yes, it will literally pop a browser window, slay πŸ–₯️✨

OPTIONS

  • --org β€” Organization slug (e.g. gh/myorg); defaults to git remote

EXAMPLES

# Open contexts for the org inferred from git remote

$ circleci context open

# Open contexts for a specific organization

$ circleci context open --org gh/myorg

# Open when your remote is on CircleCI server

$ circleci context open --host https://circleci.example.com

🧚 restriction <command> 🧚

Manage context restrictions β€” aka who's allowed in the secret vault πŸ”’

COMMANDS πŸ‘‡

create <context-id|context-name> β€” Add a restriction to a context

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; used when resolving name to ID
  • --type β€” Restriction type: project, expression, or group
  • --value β€” Project ID, pipeline expression, or group ID, matching --type

EXAMPLES

# Restrict context to a specific project

$ circleci context restriction create ctx-uuid --type project --value proj-uuid

# Restrict context using a pipeline expression

$ circleci context restriction create ctx-uuid --type expression --value 'pipeline.git.branch == "main"'

# Restrict context to a security group (--value is the group ID)

$ circleci context restriction create ctx-uuid --type group --value group-uuid

# Capture the restriction ID

$ circleci context restriction create ctx-uuid --type project --value proj-uuid --json --jq '.id'

delete <context-id|context-name> β€” Delete a restriction from a context

OPTIONS

  • -f, --force β€” Skip confirmation prompt
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; used when resolving name to ID
  • --restriction-id β€” UUID of the restriction to delete

EXAMPLES

# Delete a restriction (with confirmation)

$ circleci context restriction delete ctx-uuid --restriction-id r-uuid

# Delete without confirmation

$ circleci context restriction delete ctx-uuid --restriction-id r-uuid --force

πŸŽ€ secret <command> πŸŽ€

Manage context environment variables β€” the actual passwords and tokens, handle with care bestie πŸ™ˆ

COMMANDS πŸ‘‡

delete <context-id|context-name> β€” Delete an environment variable from a context

OPTIONS

  • -f, --force β€” skip confirmation prompt
  • --name β€” Name of the environment variable to delete
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; used when resolving name to ID

EXAMPLES

# Delete a variable (with confirmation)

$ circleci context secret delete ctx-uuid-here --name MY_SECRET

# Delete without confirmation

$ circleci context secret delete ctx-uuid-here --name MY_SECRET --force

list <context-id|context-name> β€” List environment variables in a context

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; used when resolving name to ID

EXAMPLES

# List env vars in a context by UUID

$ circleci context secret list ctx-uuid-here

# List env vars by context name (org inferred from git remote)

$ circleci context secret list my-context

# List env vars by context name in a specific org

$ circleci context secret list my-context --org gh/myorg

# Get variable names only

$ circleci context secret list ctx-uuid-here --json --jq '.[].variable'

set <context-id|context-name> β€” Set an environment variable in a context

OPTIONS

  • --name β€” Name of the environment variable
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; used when resolving name to ID
  • --value β€” Value of the environment variable (prompted if omitted in a terminal)

EXAMPLES

# Set an environment variable by context UUID (value prompted)

$ circleci context secret set ctx-uuid-here --name MY_SECRET

# Set an environment variable by context name

$ circleci context secret set my-context --org gh/myorg --name MY_SECRET --value s3cr3t

# Read a value from a file

$ circleci context secret set ctx-uuid-here --name MY_SECRET --value "$(cat secret.txt)"

# Read a value from stdin

$ circleci context secret set ctx-uuid-here --name MY_SECRET --value "$(cat)"
Ok but fr, piping secrets around with "$(cat)" is iconic β€” just don't echo them into your shell history, bestie 😭

πŸ”₯ deploy <command> πŸ”₯

Track released components and versions β€” your deployment lore, archived πŸ“šβœ¨

COMMANDS πŸ‘‡

🫢 component <command> 🫢

Manage deploy components

COMMANDS πŸ‘‡

get <component-id> β€” Get a deploy component

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON

EXAMPLES

# Get a deploy component by ID

$ circleci deploy component get a0000000-0000-4000-8000-000000c00001

# Output as JSON

$ circleci deploy component get a0000000-0000-4000-8000-000000c00001 --json

# Filter JSON output with jq

$ circleci deploy component get a0000000-0000-4000-8000-000000c00001 --json --jq '.name'

list β€” List deploy components

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --project β€” Project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# List components for the current git remote's project

$ circleci deploy component list

# List components for a specific project

$ circleci deploy component list --project gh/myorg/myrepo

# Output as JSON

$ circleci deploy component list --json

πŸ’œ environment <command> πŸ’œ

Manage deploy environments

COMMANDS πŸ‘‡

get <environment-id> β€” Get a deploy environment

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON

EXAMPLES

# Get a deploy environment by ID

$ circleci deploy environment get a0000000-0000-4000-8000-000000e00001

# Output as JSON

$ circleci deploy environment get a0000000-0000-4000-8000-000000e00001 --json
# Filter JSON output with jq

$ circleci deploy environment get a0000000-0000-4000-8000-000000e00001 --json --jq '.name'

✨ list ✨

Okay so this one just lists out your deploy environments. That's it. That's the whole vibe. πŸ’…

🌸 OPTIONS 🌸

  • --jq β€” run whatever's in the response through jq syntax so you can pluck out exactly the little value you came for ✨
  • --json β€” gimme the output as JSON, bestie. machine-readable and all that 🫢
  • --org β€” organization slug (like gh/myorg); defaults to the git remote. so if you don't say anything, it just sniffs out your remote and goes with it 😌

πŸŽ€ EXAMPLES πŸŽ€

# List environments for the current git remote's org

$ circleci deploy environment list
# List environments for a specific org

$ circleci deploy environment list --org gh/myorg
# Output as JSON

$ circleci deploy environment list --json

🧚 init 🧚

Instrument your config for deploy tracking β€” like, it goes into your config and sprinkles the deploy-tracking magic in there ✨ lowkey the most main-character setup step ngl

πŸ’œ OPTIONS πŸ’œ

  • --component β€” service/component name</c> β€” and yeah, passing it skips the prompt so you don't gotta sit there answering questions πŸ’…
  • --environment β€” the default environment for jobs whose target can't be inferred β€” also skips the prompt πŸ™ˆ
  • --pipeline-config β€” path to your CircleCI pipeline config file πŸ¦‹

⭐ EXAMPLES ⭐

# Interactive setup in the current repo

$ circleci deploy init
# Skip the service-name prompt

$ circleci deploy init --component api
# Fully non-interactive (supply both answers as flags)

$ circleci deploy init --component api --environment production
# Use a non-default config location

$ circleci deploy init --pipeline-config path/to/config.yml

🌈 list 🌈

The deploy highlights reel πŸ’– β€” this lists your recent deploys so you can see what's been going out lately πŸ‘‘

πŸ“ OPTIONS πŸ“

  • --jq β€” process values from the response using jq syntax ✨
  • --json β€” output as JSON, for all your scripting girlies 🫢
  • --limit β€” max number of deploys to return, and yes 0 = all of them 😭 (careful, bestie)
  • --org-wide β€” list deploys across all projects in the org β€” zoom out energy πŸ”₯
  • --project β€” project slug (like gh/org/repo); defaults to git remote 😌

πŸŽ€ EXAMPLES πŸŽ€

# List the 10 most recent deploys (auto-detect project from git remote)

$ circleci deploy list
# List 50 most recent deploys across the entire org

$ circleci deploy list --org-wide --limit 50
# List org-wide deploys for a specific org (via any project in it)

$ circleci deploy list --org-wide --project gh/myorg/myrepo
# Output as JSON for scripting

$ circleci deploy list --json

πŸ‘‘ open πŸ‘‘

Just opens the deploys page in your browser. Iconic, effortless, zero notes. πŸ’…βœ¨

πŸ¦‹ OPTIONS πŸ¦‹

  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote 🫢

πŸ’– EXAMPLES πŸ’–

# Open the deploys page for the current project

$ circleci deploy open
# Open the deploys page for a specific project

$ circleci deploy open --project gh/myorg/myrepo

πŸ”₯ rollback <target-version> πŸ”₯

Roll back a deployed component to an earlier version. Big-deal energy, bestie β€” this is the "undo the oops" button πŸ™ˆ Use it with intention πŸ’€

🌸 OPTIONS 🌸

  • --checkout-ref β€” the git ref that the rollback pipeline checks out 🧚
  • --component β€” deploy component name or ID β€” required, no skipping πŸ’…
  • --config-ref β€” the git ref the rollback pipeline's config is read from πŸ¦‹
  • --environment β€” deploy environment name or ID β€” required too πŸ‘‘
  • -f, --force β€” skip the confirmation prompt β€” for the brave or the scripted 😭
  • --from β€” the version being replaced; defaults to the latest deployed ⭐
  • --jq β€” process values from the response using jq syntax ✨
  • --json β€” output as JSON 🫢
  • --namespace β€” namespace scoping the component (default "default") 🌈
  • --param β€” rollback pipeline parameter as key=value β€” and it's repeatable, so stack 'em if you got 'em πŸ’…
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote 😌
  • --reason β€” why the rollback was requested; it gets recorded in the audit log πŸ“ so, like, be honest bestie

πŸ’œ EXAMPLES πŸ’œ

# Roll production back to 1.2.0 (with confirmation)

$ circleci deploy rollback 1.2.0 --component web-frontend --environment production
# Assert the version being replaced, and skip the prompt

$ circleci deploy rollback 1.2.0 --component web-frontend --environment production --from 1.3.0 --force
# Roll back with a reason and a rollback-pipeline parameter

$ circleci deploy rollback 1.2.0 --component web-frontend --environment production --reason "bad release" --param notify=true

πŸŽ€ settings πŸŽ€

Get the deploy settings for a project β€” a little peek behind the curtain πŸ§šβ€β™€οΈ

⭐ OPTIONS ⭐

  • --jq β€” process values from the response using jq syntax ✨
  • --json β€” output as JSON 🫢
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote 😌

🌈 EXAMPLES 🌈

# Get deploy settings for the current git remote's project

$ circleci deploy settings
# Get settings for a specific project

$ circleci deploy settings --project gh/myorg/myrepo
# Output as JSON

$ circleci deploy settings --json

πŸ¦‹ version <command> πŸ¦‹

Manage deploy component versions β€” the whole version-history situation, handled πŸ’…

πŸ“¦ COMMANDS πŸ“¦

πŸ“ list <component-id> πŸ“

List the versions of a deploy component ✨

πŸ’– OPTIONS πŸ’–

  • --environment β€” filter by deploy environment ID 🧚
  • --jq β€” process values from the response using jq syntax 🫢
  • --json β€” output as JSON ⭐

πŸ‘‘ EXAMPLES πŸ‘‘

# List versions of a component

$ circleci deploy version list a0000000-0000-4000-8000-000000c00001
# Filter by environment

$ circleci deploy version list a0000000-0000-4000-8000-000000c00001 --environment a0000000-0000-4000-8000-000000e00001
# Output as JSON

$ circleci deploy version list a0000000-0000-4000-8000-000000c00001 --json

πŸ’€ dlc <command> πŸ’€

Purge a project's Docker layer cache (DLC) β€” yes, the Docker Layer Cache. yes, purging it. yes, it's as dramatic as it sounds πŸ”₯

πŸ“¦ COMMANDS πŸ“¦

🧚 purge 🧚

Purge the Docker Layer Cache for a project πŸ’…

🌸 OPTIONS 🌸

  • -f, --force β€” skip the confirmation prompt πŸ™ˆ
  • --json β€” output as JSON 🫢
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote 😌

⭐ EXAMPLES ⭐

# Purge DLC for the current git repository's project

$ circleci dlc purge
# Purge DLC for a specific project

$ circleci dlc purge --project gh/myorg/myrepo
# Skip the confirmation prompt (for scripting)

$ circleci dlc purge --project gh/myorg/myrepo --force
# Purge DLC and output result as JSON

$ circleci dlc purge --project gh/myorg/myrepo --force --json
# Purge DLC for a Bitbucket project

$ circleci dlc purge --project bb/myorg/myrepo

πŸŽ€ EXAMPLES πŸŽ€

# Purge DLC for the current git repository's project

$ circleci dlc purge
# Purge DLC for a specific project

$ circleci dlc purge --project gh/myorg/myrepo
# Purge DLC and output result as JSON

$ circleci dlc purge --project gh/myorg/myrepo --json

🌱 env <command> 🌱

Work with environment variables β€” the little key-value besties that run everything 🫢

πŸ“¦ COMMANDS πŸ“¦

✨ subst [string] ✨

Substitute environment variables in a string β€” it's giving "find and replace but make it ✨env vars✨" πŸ’…

🌈 EXAMPLES 🌈

# Substitute a single variable

$ export API_URL=https://circleci.com

$ circleci env subst "Base URL: $API_URL"
# Substitute variables in a JSON payload via stdin

$ export TOKEN=abc123

$ echo '{"token": "$TOKEN"}' | circleci env subst
# Substitute into a config file before uploading

$ circleci env subst < .circleci/config.template.yml > .circleci/config.yml

πŸ” envvar <command> πŸ”

List, set and delete a project's environment variables β€” full custody of your secrets, bestie πŸ’…

πŸ“¦ COMMANDS πŸ“¦

πŸ’€ delete <name> πŸ’€

Delete a project environment variable. Gone. Poof. No take-backs. 😭

πŸ¦‹ OPTIONS πŸ¦‹

  • -f, --force β€” skip confirmation prompt πŸ™ˆ
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote 😌

πŸ’– EXAMPLES πŸ’–

# Delete an env var from the current project (with confirmation)

$ circleci envvar delete MY_SECRET
# Delete without confirmation

$ circleci envvar delete MY_SECRET --force
# Delete an env var from a specific project

$ circleci envvar delete MY_SECRET --project gh/myorg/myrepo --force

πŸ“ list πŸ“

List project environment variables β€” the whole roster πŸ‘‘

⭐ OPTIONS ⭐

  • --jq β€” process values from the response using jq syntax ✨
  • --json β€” output as JSON 🫢
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote 😌

🌸 EXAMPLES 🌸

# List env vars for the current project

$ circleci envvar list
# List env vars for a specific project

$ circleci envvar list --project gh/myorg/myrepo
# Output as JSON

$ circleci envvar list --json

🧚 set <name> <value> 🧚

Set a project environment variable ✨ new key, new value, new you πŸ’…

πŸŽ€ OPTIONS πŸŽ€

  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote 😌

πŸ”₯ EXAMPLES πŸ”₯

# Set an env var for the current project

$ circleci envvar set MY_SECRET s3cr3t
# Set an env var for a specific project

$ circleci envvar set MY_SECRET s3cr3t --project gh/myorg/myrepo
# Read a value from a file

$ circleci envvar set MY_SECRET "$(cat secret.txt)"

πŸ¦‹ EXAMPLES πŸ¦‹

# List all environment variables for the current project

$ circleci envvar list
# Set an environment variable

$ circleci envvar set MY_SECRET s3cr3t --project gh/myorg/myrepo
# Delete an environment variable

$ circleci envvar delete MY_SECRET

🧩 extension <command> 🧩

Manage CLI extensions β€” plug-ins for your fave CLI, iykyk πŸ’…

πŸ“¦ COMMANDS πŸ“¦

⭐ install <extension> ⭐

Install an extension ✨

πŸ’œ EXAMPLES πŸ’œ

# Install the testsuite extension

$ circleci extension install testsuite

πŸ“ remove <extension> πŸ“

Remove an installed extension πŸ‘‹

🌈 OPTIONS 🌈

  • -f, --force β€” skip confirmation prompt πŸ™ˆ

πŸ‘‘ EXAMPLES πŸ‘‘

# Remove using the name of the extension

$ circleci extension remove <name>
# Remove using the full binary name

$ circleci extension remove circleci-<name>
# Remove without confirmation prompt

$ circleci extension remove <name> --force

πŸ’Œ feedback <message> πŸ’Œ

Send feedback about the CLI to CircleCI β€” tell them how you feel, bestie, they literally want to know 🫢✨

🌸 OPTIONS 🌸

  • --jq β€” process values from the response using jq syntax ✨
  • --json β€” output as JSON 🫢
  • --tool β€” the CLI command or MCP tool this feedback is actually about (like "run get") πŸ‘ˆ

✨ EXAMPLES ✨

# Report a missing capability

$ circleci feedback "I wanted to compare job timings between two runs but found no command for it"

# Report confusing output from a command

$ circleci feedback "run get shows no jobs for a run that has three" --tool "run get"

# Capture just the report ID

$ circleci feedback "context list printed nothing for an org with contexts" --json --jq '.id'

🌸 help [command]

Bestie. It gives you help about any command. That's it, that's the whole vibe. Whenever you're lost, just ask for help 🫢 (no shade, we've all been there).


πŸ”₯ job <command>

This is the whole job-inspection situation β€” details, output, artifacts, all of it. Main character energy for your build jobs πŸ’…

artifact <job-id>

List or download artifacts for a job. Your files! The things your build made! πŸŽ€

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • -o, --output β€” download artifacts into this directory

EXAMPLES

# List artifacts for a job

$ circleci job artifact 5034460f-c7c4-4c43-9457-de07e2029e7b

# Download artifacts into ./artifacts

$ circleci job artifact 5034460f-c7c4-4c43-9457-de07e2029e7b --output ./artifacts

# Output as JSON

$ circleci job artifact 5034460f-c7c4-4c43-9457-de07e2029e7b --json

get <job-id>

Get job details.</purl> Just, like, the whole run-down on one job ✨

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Get job details by UUID

$ circleci job get 8e50c384-0083-43d0-bc8f-93f0db589d6b

# Output as JSON

$ circleci job get 8e50c384-0083-43d0-bc8f-93f0db589d6b --json

# Get a specific field with jq

$ circleci job get 8e50c384-0083-43d0-bc8f-93f0db589d6b --json | jq '.status'

open <job-id>

Open job in browser.</purl> One command and boom, you're in the UI looking at it with your own two eyes πŸ‘€πŸ’»

EXAMPLES

# Open job by UUID

$ circleci job open 8e50c384-0083-43d0-bc8f-93f0db589d6b

output <command>

Work with job step output.</purl> This is where the receipts live, bestie 😭 the actual logs, step by step.

COMMANDS

get <job-id>

Get the output of a job step. One step, one big ol' blob of text 🫠

OPTIONS

  • --condensed β€” fetch error-relevant lines only, filtered server-side (this one is experimental ⚠️)
  • --execution β€” parallel execution index to read output from
  • --step-num β€” step number whose output to fetch (required β€” like, you gotta give it one, no cap)
  • --strip-ansi β€” force ANSI stripping (or with =false, disable it); defaults to stripping only when it's not a terminal

EXAMPLES

# Get the output of step 3 in a job

$ circleci job output get 8e50c384-0083-43d0-bc8f-93f0db589d6b --step-num 3

# Get the output of step 3 from the second parallel execution

$ circleci job output get 8e50c384-0083-43d0-bc8f-93f0db589d6b --step-num 3 --execution 1

# Pipe the output to a file

$ circleci job output get 8e50c384-0083-43d0-bc8f-93f0db589d6b --step-num 3 > step.log

# Pipe condensed output to an AI CLI tool

$ circleci job output get 8e50c384-0083-43d0-bc8f-93f0db589d6b --step-num 3 --condensed | llm "Why did this fail?"

list <job-id>

List a job's steps with their output β€” the full tour, every step, all the drama πŸ’€

OPTIONS

  • --execution β€” parallel execution index to list output from
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --tail β€” show only the last N lines of each step's output in the rendered view (0 for all of them)

EXAMPLES

# List the steps and output of a job

$ circleci job output list 8e50c384-0083-43d0-bc8f-93f0db589d6b

# List output for the second parallel execution

$ circleci job output list 8e50c384-0083-43d0-bc8f-93f0db589d6b --execution 1

# As JSON, with the output of the failing step

$ circleci job output list 8e50c384-0083-43d0-bc8f-93f0db589d6b --json \
    | jq '.steps[] | select(.exit_code != 0) | .output'

# Show every line of every step in the rendered view

$ circleci job output list 8e50c384-0083-43d0-bc8f-93f0db589d6b --tail 0

resource-usage <command>

Work with a job's CPU and memory usage.</purl> For when your build is being a lil resource-hungry gremlin and you need to know exactly how hungry πŸ“πŸ“ˆ

COMMANDS

get <job-id>

Chart a job's CPU and memory usage. Pretty little graphs, bestie 🌈✨

OPTIONS

  • --chart β€” plot parallel executions together or apart, one of auto|combined|separate
  • --execution β€” parallel execution index to report on (default is all of them)
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Chart a job's CPU and memory usage

$ circleci job resource-usage get 0dc4d8df-8f7e-41b0-a3ef-88066a5465c1

# One chart per execution, however few there are

$ circleci job resource-usage get 0dc4d8df-8f7e-41b0-a3ef-88066a5465c1 --chart separate

# Only the third parallel execution

$ circleci job resource-usage get 0dc4d8df-8f7e-41b0-a3ef-88066a5465c1 --execution 2

# How close each execution came to its memory limit

$ circleci job resource-usage get 0dc4d8df-8f7e-41b0-a3ef-88066a5465c1 --json \
    | jq '.executions[].memory.peak_percent_of_limit'

πŸ¦‹ mcp

Run the CLI as an MCP server for AI tools πŸ€–πŸ’œ lowkey the coolest part ngl.

COMMANDS

claude

Manage Claude Desktop MCP servers. Yes, that Claude. Your AI bestie deserves config too 🫢

COMMANDS

disable β€” remove server from Claude config

OPTIONS

  • --config-path β€” path to Claude config file
  • --server-name β€” name of the MCP server to remove

enable β€” add server to Claude config

OPTIONS

  • --config-path β€” path to Claude config file
  • -e, --env β€” environment variables (like --env KEY1=value1 --env KEY2=value2)
  • --log-level β€” log level (debug, info, warn, error)
  • --server-name β€” name for the MCP server

list β€” show Claude MCP servers

OPTIONS

  • --config-path β€” path to Claude config file

cursor

Manage Cursor MCP servers πŸ–±οΈβœ¨

COMMANDS

disable β€” remove server from Cursor config

OPTIONS

  • --config-path β€” path to Cursor config file
  • --server-name β€” name of the MCP server to remove
  • --workspace β€” remove from workspace settings (.cursor/mcp.json) instead of user settings

enable β€” add server to Cursor config

OPTIONS

  • --config-path β€” path to Cursor config file
  • -e, --env β€” environment variables (like --env KEY1=value1 --env KEY2=value2)
  • --log-level β€” log level (debug, info, warn, error)
  • --server-name β€” name for the MCP server
  • --workspace β€” add to workspace settings (.cursor/mcp.json) instead of user settings

list β€” show Cursor MCP servers

OPTIONS

  • --config-path β€” path to Cursor config file
  • --workspace β€” list from workspace settings (.cursor/mcp.json) instead of user settings

start

Start the MCP server πŸ”₯ like, actually run it.

OPTIONS

  • --log-level β€” log level (debug, info, warn, error)

stream

Stream the MCP server over HTTP 🌊 serving it up, but like, continuously.

OPTIONS

  • --host β€” host to listen on
  • --log-level β€” log level (debug, info, warn, error)
  • --port β€” port number to listen on

tools

Export tools as JSON 🧰 everything laid out in nice machine-readable form.

OPTIONS

  • --log-level β€” log level (debug, info, warn, error)

vscode

Manage VSCode MCP servers πŸ’»πŸŽ€

COMMANDS

disable β€” remove server from VSCode config

OPTIONS

  • --config-path β€” path to VSCode config file
  • --server-name β€” name of the MCP server to remove
  • --workspace β€” remove from workspace settings (.vscode/mcp.json) instead of user settings

enable β€” add server to VSCode config

OPTIONS

  • --config-path β€” path to VSCode config file
  • -e, --env β€” environment variables (like --env KEY1=value1 --env KEY2=value2)
  • --log-level β€” log level (debug, info, warn, error)
  • --server-name β€” name for the MCP server
  • --workspace β€” add to workspace settings (.vscode/mcp.json) instead of user settings

list β€” show VSCode MCP servers

OPTIONS

  • --config-path β€” path to VSCode config file
  • --workspace β€” list from workspace settings (.vscode/mcp.json) instead of user settings

🧚 migrate <command>

Migrate workflows from other CI platforms to CircleCI. Come to the good side, we have cookies πŸ“βœ¨

COMMANDS

actions <workflow-file>

Copy a GitHub Actions workflow into .circleci/workflows/ β€” snatch it right out of .github and make it ours πŸ’…

OPTIONS

  • --force β€” overwrite the destination file if it already exists (yes, it will clobber it, that's the whole point ⚠️)

EXAMPLES

# Migrate a single workflow file

$ circleci migrate actions .github/workflows/run_tests.yml

# Migrate a workflow stored at a non-standard path

$ circleci migrate actions ci/build.yml

# Overwrite an existing destination file

$ circleci migrate actions --force .github/workflows/run_tests.yml

πŸ‘‘ my <command>

Show resources for the authenticated user. It's giving main character β€” this is your stuff, and only yours πŸͺžπŸ’–

COMMANDS

runs

List your recent runs grouped by project πŸ—‚οΈ everything you've been up to, nicely sorted.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --limit β€” the max number of runs we're pulling down [default: 20] β€” no, we are not scrolling forever, bestie πŸ’…

✨ EXAMPLES ✨

# List your recent runs across all projects

$ circleci my runs
# Show more results

$ circleci my runs --limit 50
# Output as JSON for scripting

$ circleci my runs --json
# Pull out just the run IDs with jq

$ circleci my runs --json --jq '.[].id'

πŸŽ€ namespace <command> πŸŽ€

Okay so this is the whole vibe behind the org namespace that your orbs publish under β€” managing it, claiming it, renaming it, yeeting it. It's giving "behind the scenes but make it iconic" ✨

create <name> --org <org>

Claim a namespace, bestie β€” this is how you stake your claim πŸ‘‘

OPTIONS

  • --jq β€” process values from the response using jq syntax πŸͺ„
  • --json β€” output as JSON
  • --org β€” Organization slug (e.g. gh/myorg) or UUID to claim the namespace for (required) β€” like, non-negotiable, you must pass this 🫢

EXAMPLES

# Create a namespace for an organization

$ circleci namespace create myorg --org gh/acme
# Create a namespace and output JSON

$ circleci namespace create myorg --org gh/acme --json
# Capture just the namespace ID

$ circleci namespace create myorg --org gh/acme --json --jq '.id'

delete <name>

Deletes a namespace β€” and like, all its orbs too. Not a drill 😭 Everything goes. Periodt.

OPTIONS

  • -n, --dry-run β€” print what would be deleted without actually deleting β€” the responsible queen move πŸ‘‘
  • -f, --force β€” skip confirmation prompt

EXAMPLES

# Delete a namespace (with confirmation prompt)

$ circleci namespace delete myorg
# Preview what would be deleted without deleting

$ circleci namespace delete myorg --dry-run
# Delete without a confirmation prompt

$ circleci namespace delete myorg --force
# Delete in a CI environment (non-interactive; --force required)

$ circleci namespace delete myorg -f
🚨 Heads up: in a CI environment it's non-interactive, so --force is required. No prompt to save you there, bestie.

get <name>

Get the deets on a namespace β€” the little info pull πŸ”

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Get a namespace by name

$ circleci namespace get myorg
# Output as JSON

$ circleci namespace get myorg --json
# Extract just the namespace ID

$ circleci namespace get myorg --json --jq '.id'

rename <name> <new-name>

Rename a namespace β€” glow-up era πŸ’« (takes the old name, then the new name, in that order, iykyk)

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Rename a namespace

$ circleci namespace rename oldname newname
# Rename and output the result as JSON

$ circleci namespace rename oldname newname --json
# Confirm the new ID after rename

$ circleci namespace rename oldname newname --json --jq '.id'

πŸ”” notification <command> πŸ””

Configure where CircleCI sends your notifications. Like deciding who gets the texts πŸ“²

slack <command>

Send a project's notifications straight into a Slack channel 🫢

delete

Remove a project's Slack channel β€” unsubscribing, but make it official πŸ’€

OPTIONS

  • -n, --dry-run β€” show what would be removed without removing it
  • -f, --force β€” skip confirmation prompt
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote β€” so if you don't say anything, it sniffs your remote, cute right?

EXAMPLES

# Remove the current project's Slack channel (with confirmation)

$ circleci notification slack delete
# Preview what would be removed

$ circleci notification slack delete --dry-run
# Remove it from a specific project without confirmation

$ circleci notification slack delete --project gh/myorg/myrepo --force

get

Show a project's Slack channel and its Slack preferences β€” the full vibe check πŸ‘€

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Show the current project's Slack channel

$ circleci notification slack get
# Show it for a specific project

$ circleci notification slack get --project gh/myorg/myrepo
# Print only the channel ID

$ circleci notification slack get --json --jq .channel_id

set (--channel <name|ID> | --enable | --disable)

Set, enable or disable a project's Slack channel β€” the main character of this whole notification situation 🌟 You pick ONE of those modes, okay?

OPTIONS

  • --channel β€” Slack channel name (e.g. #ci-alerts) or ID to send notifications to
  • --disable β€” pause Slack notifications, keeping the configured channel β€” like muting, not blocking πŸ™ˆ
  • --enable β€” resume Slack notifications for the configured channel
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Send the current project's notifications to #ci-alerts

$ circleci notification slack set --channel '#ci-alerts'
# Use a channel ID (required for private channels)

$ circleci notification slack set --channel C0123ABCD --project gh/myorg/myrepo
# Pause Slack notifications, keeping the channel

$ circleci notification slack set --disable
# Resume them and print the result as JSON

$ circleci notification slack set --enable --json
πŸ’‘ Fr fr: --channel takes a name like #ci-alerts or an ID β€” but for private channels you need the ID. No cap.

πŸš€ onboard [path] πŸš€

Guided onboarding, bestie β€” it generates config, signs you up, and connects your project. The whole starter-pack arc πŸŽ€

OPTIONS

  • --no-browser β€” print the signup URL instead of opening a browser
  • --org β€” Organization slug (e.g. gh/myorg) or UUID to set the project up in
  • --repo-id β€” Repository ID, if it can't be resolved from the git remote
  • --scan β€” Skip prompt: set up this repo on CircleCI
  • --signup β€” Skip prompt: sign up for CircleCI

EXAMPLES

# Interactive mode: choose repo setup or signup

$ circleci onboard
# Set up the current directory (skip the choice prompt)

$ circleci onboard --scan
# Set up in a named org (required when you belong to several)

$ circleci onboard --scan --org gh/acme
# Sign up for CircleCI (no repo needed)

$ circleci onboard --signup
⚠️ If you belong to several orgs, --org is required with --scan. It can't read your mind, sadly 😭

🧚 orb <command> 🧚

Create, publish and inspect orbs β€” aka reusable config, aka the moment everything gets iconic ✨

OPTIONS

  • --host β€” CircleCI host (deprecated: set CIRCLE_HOST) β€” yeah she's deprecated, use the env var πŸ’…
  • --token β€” CircleCI API token (deprecated: set CIRCLE_TOKEN) β€” same story, env var it is

add-to-category <namespace>/<orb> <category>

Add an orb to a registry category β€” filing it under the right aesthetic πŸ—‚οΈ

EXAMPLES

# Add an orb to the Testing category

$ circleci orb add-to-category myorg/my-orb "Testing"
# Add an orb to the Deployment category

$ circleci orb add-to-category myorg/my-orb "Deployment"
# List available categories first

$ circleci orb list-categories

create <namespace>/<orb>

Reserve an orb name in a namespace β€” calling dibs, but legally 🫢

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --private β€” create as a private orb

EXAMPLES

# Create a public orb

$ circleci orb create myorg/my-orb
# Create a private orb

$ circleci orb create myorg/my-orb --private
# Create and output as JSON

$ circleci orb create myorg/my-orb --json

diff <namespace>/<orb> --from <v1> --to <v2>

Show a unified diff between two orb versions β€” the "what changed" reveal πŸ”

OPTIONS

  • --from β€” the first version (semver e.g. 1.0.0, or a dev label e.g. dev:my-branch)
  • --to β€” the second version, in the same form as --from

EXAMPLES

# Diff two semver versions

$ circleci orb diff myorg/my-orb --from 1.0.0 --to 1.1.0
# Diff a semver and a dev version

$ circleci orb diff myorg/my-orb --from 1.0.0 --to dev:my-branch
# Diff two dev versions

$ circleci orb diff myorg/my-orb --from dev:branch-a --to dev:branch-b

get <namespace>/<orb>[@<version>]/<orb-id>

Get orb metadata and statistics β€” the full dossier πŸ“Š

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Get info for an orb

$ circleci orb get myorg/my-orb
# Get info for a specific version

$ circleci orb get myorg/my-orb@1.2.3
# Output as JSON

$ circleci orb get myorg/my-orb --json

init <path>

Initialize a brand new orb project β€” fresh start energy 🌱

OPTIONS

  • --branch β€” primary git branch to track
  • --org β€” Organization slug (e.g. gh/myorg) or UUID to own the orb namespace and publishing context
  • --private β€” initialize a private orb
  • --remote β€” remote git repository URL (required for git setup when non-interactive)
  • --skip-git β€” skip local git repository setup
  • --template-only β€” download the template only; skip all setup β€” the "just give me the files" mode πŸ™ˆ

EXAMPLES

# Interactive setup

$ circleci orb init ./my-orb
# Just download the template, no setup

$ circleci orb init ./my-orb --template-only
# Non-interactive: create a private orb under an org, skip git

$ circleci orb init ./my-orb --private --org gh/acme --skip-git

list [<namespace>]

List orbs in the registry β€” window shopping but for config πŸ‘‘ (takes an optional namespace)

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --private β€” only list private orbs (requires namespace)
  • --uncertified β€” include uncertified orbs

EXAMPLES

# List certified orbs globally

$ circleci orb list
# List all orbs in a namespace

$ circleci orb list myorg
# Include uncertified orbs

$ circleci orb list --uncertified
# List orbs as JSON

$ circleci orb list --json
# List private orbs in a namespace

$ circleci orb list myorg --private

list-categories

List orb registry categories β€” every bucket your orb could live in πŸ—‚οΈβœ¨

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# List all orb categories

$ circleci orb list-categories
# Output as JSON

$ circleci orb list-categories --json
# Capture category names only

$ circleci orb list-categories --json --jq '.[].name'

pack <path>

Bestie, this one packs a whole multi-file orb directory into a single YAML file. It's giving "cleanup era" πŸ’…

EXAMPLES

# Pack a single orb file

$ circleci orb pack orb.yml
# Pack a multi-file orb directory

$ circleci orb pack ./src
# Pack and save to a file

$ circleci orb pack ./src > orb.yml
# Pack and immediately validate

$ circleci orb pack ./src | circleci orb validate -

process <path>

Validate and print the expanded orb YAML ✨ (yes, it validates and shows you the fully-expanded glow-up).

OPTIONS

  • --org β€” organization slug (e.g. gh/myorg) or UUID for private orb dependencies

EXAMPLES

# Process an orb file and print expanded YAML

$ circleci orb process orb.yml
# Process from stdin

$ cat orb.yml | circleci orb process -
# Process with a specific org for private deps

$ circleci orb process orb.yml --org gh/acme

publish <command>

Publish orb versions πŸš€ the moment where your orb goes public, no cap.

COMMANDS

increment <path> <namespace>/<orb> --bump major|minor|patch

Increment and publish a brand-new orb version. Two birds, one iconique command πŸ¦‹

OPTIONS

  • --bump β€” which version segment to increment: major, minor, or patch

EXAMPLES

# Increment patch version and publish

$ circleci orb publish increment orb.yml myorg/my-orb --bump patch
# Increment minor version

$ circleci orb publish increment orb.yml myorg/my-orb --bump minor
# Read orb from stdin, increment major

$ cat orb.yml | circleci orb publish increment - myorg/my-orb --bump major

promote <namespace>/<orb>@dev:<label> --bump major|minor|patch

Promote a dev orb version into a stable semver πŸŽ€ like, your dev version got its main character moment.

OPTIONS

  • --bump β€” which version segment to increment: major, minor, or patch

EXAMPLES

# Promote dev:my-branch to a patch release

$ circleci orb publish promote myorg/my-orb@dev:my-branch --bump patch
# Promote to a minor release

$ circleci orb publish promote myorg/my-orb@dev:my-branch --bump minor
# Promote to a major release

$ circleci orb publish promote myorg/my-orb@dev:my-branch --bump major

EXAMPLES

# Publish a specific version

$ circleci orb publish orb.yml myorg/my-orb@1.0.0
# Publish a dev version

$ circleci orb publish orb.yml myorg/my-orb@dev:my-branch
# Promote a dev version to a patch release

$ circleci orb publish promote myorg/my-orb@dev:my-branch --bump patch
# Increment major version and publish

$ circleci orb publish increment orb.yml myorg/my-orb --bump major

remove-from-category <namespace>/<orb> <category>

Remove an orb from a registry category 🫢 sometimes you just gotta un-tag yourself from the vibe.

EXAMPLES

# Remove an orb from the Testing category

$ circleci orb remove-from-category myorg/my-orb "Testing"
# Remove an orb from the Deployment category

$ circleci orb remove-from-category myorg/my-orb "Deployment"
# See current categories

$ circleci orb get myorg/my-orb

source <namespace>/<orb>[@<version>]

Print the YAML source of an orb version πŸ‘‘ straight-up receipts, no filter.

EXAMPLES

# Print source of the latest version

$ circleci orb source myorg/my-orb
# Print source of a specific version

$ circleci orb source myorg/my-orb@1.2.3
# Print source of a dev version

$ circleci orb source myorg/my-orb@dev:my-branch
# Save the source to a file

$ circleci orb source myorg/my-orb@1.0.0 > orb.yml

unlist <namespace>/<orb>

Hide or restore an orb in the registry πŸ™ˆ lowkey stealth mode for your orb.

OPTIONS

  • --restore β€” restore the orb's visibility instead of hiding it

EXAMPLES

# Hide an orb from the registry

$ circleci orb unlist myorg/my-orb
# Restore an orb's visibility

$ circleci orb unlist myorg/my-orb --restore

validate <path>

Validate an orb YAML file βœ… vibe check for your orb, fr fr.

OPTIONS

  • --org β€” organization slug (e.g. gh/myorg) or UUID for private orb dependencies
  • --org-id β€” organization slug or UUID (deprecated: use --org) πŸ’€
  • --org-slug β€” organization slug or UUID (deprecated: use --org) πŸ’€

EXAMPLES

# Validate an orb file

$ circleci orb validate orb.yml
# Validate from stdin

$ cat orb.yml | circleci orb validate -
# Validate with a specific org for private deps

$ circleci orb validate orb.yml --org gh/acme

org <command>

Manage CircleCI organizations 🏒✨ your whole org situation, handled.

COMMANDS

create <name>

Create an organization 🌱 new org, who dis.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Create an organization

$ circleci org create acme
# Create one and output as JSON for scripting

$ circleci org create acme --json
# Capture the slug to pass to --org

$ circleci org create acme --json --jq '.slug'

list

List organizations you belong to πŸ’– your org family tree.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# List all your organizations

$ circleci org list
# Output as JSON for scripting

$ circleci org list --json
# Extract just the IDs

$ circleci org list --json --jq '.[].id'

setting <command>

View and update org advanced settings βš™οΈ the deep-lore switches.

COMMANDS

get <setting>

Get the current value of an org setting πŸ”

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID; defaults to git remote

EXAMPLES

# Get a setting for the current org

$ circleci org setting get private-orbs
# Get a setting for a specific org

$ circleci org setting get private-orbs --org gh/myorg
# Output as JSON

$ circleci org setting get private-orbs --json

list

List all advanced settings for an org πŸ“‹ the full settings haul.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID; defaults to git remote

EXAMPLES

# List settings for the current org

$ circleci org setting list
# List settings for a specific org

$ circleci org setting list --org gh/myorg
# Output as JSON

$ circleci org setting list --json

set <setting> <true|false>

Set an org setting 🎚️ flip the switch, queen.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID; defaults to git remote

EXAMPLES

# Enable a setting for the current org

$ circleci org setting set private-orbs true
# Disable a setting for a specific org

$ circleci org setting set private-orbs false --org gh/myorg
# Output the updated value as JSON

$ circleci org setting set ai-error-summarization true --json

pipeline <command>

Manage the pipeline definitions a run executes 🌈 this is the stuff that decides what actually runs, iykyk.

COMMANDS

create

Create a pipeline definition ✨

OPTIONS

  • --checkout-provider β€” checkout source provider (one of: github_app, github_server, origin)
  • --checkout-repo-full-name β€” checkout source repo owner/name (required for origin)
  • --checkout-repo-id β€” checkout source repo external ID
  • --config-file β€” config file path (e.g. .circleci/config.yml)
  • --config-file-type β€” config file type, omit for standard CircleCI YAML (one of: github-actions)
  • --config-provider β€” config source provider (one of: github_app, github_server, circleci, origin)
  • --config-repo-full-name β€” config source repo owner/name (required for origin)
  • --config-repo-id β€” config source repo external ID (required for github_app, github_server, origin)
  • --description β€” pipeline definition description
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --name β€” pipeline definition name (required)
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote
  • --project-id β€” project UUID (overrides --project)

EXAMPLES

# Create a pipeline definition using GitHub App

$ circleci pipeline create \

    --project gh/myorg/myrepo \

    --name "my-pipeline" \

    --config-provider github_app \

    --config-repo-id 123456789 \

    --config-file .circleci/config.yml \

    --checkout-provider github_app \

    --checkout-repo-id 123456789
# Create with a description and output as JSON

$ circleci pipeline create \

    --name "release-pipeline" \

    --description "Runs on tagged releases" \

    --config-provider github_app \

    --config-repo-id 123456789 \

    --config-file .circleci/release.yml \

    --checkout-provider github_app \

    --checkout-repo-id 123456789 \

    --json
# Create for a Cursor repository (Origin needs the owner/name too)
$ circleci pipeline create \
    --project-id a1b2c3d4-... \
    --name "my-pipeline" \
    --config-provider origin \
    --config-repo-id repo_01abc \
    --config-repo-full-name myorg/myrepo \
    --config-file .circleci/config.yml \
    --checkout-provider origin \
    --checkout-repo-id repo_01abc \
    --checkout-repo-full-name myorg/myrepo

list β€” pipeline definitions, but make it a list ✨

Okay so list does exactly what it says: list pipeline definitions for a project. Lowkey the most chill subcommand here, no cap.

OPTIONS πŸ’…

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote
  • --project-id β€” project UUID (overrides --project)

EXAMPLES πŸŽ€

# List pipeline definitions for the current repository's project

$ circleci pipeline list

# List pipeline definitions for a specific project

$ circleci pipeline list --project gh/myorg/myrepo

# Output as JSON for scripting

$ circleci pipeline list --json

# Filter by config provider

$ circleci pipeline list --json --jq '.[] | select(.config_source.provider == "github_app")'

run β€” trigger a new pipeline run πŸ”₯

This one triggers a brand-new pipeline run. It's giving main character energy, fr fr.

OPTIONS πŸ’…

  • -b, --branch β€” branch for config fetch and checkout (mutually exclusive with --tag)
  • --definition-id β€” pipeline definition UUID to run (prompted interactively if omitted)
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --param β€” pipeline parameter as key=value (repeatable)
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote
  • -t, --tag β€” tag for config fetch and checkout (mutually exclusive with --branch)

EXAMPLES πŸŽ€

# Trigger a pipeline interactively β€” pick definition and branch from menus

$ circleci pipeline run --project gh/myorg/myrepo

# Trigger a specific definition on a branch non-interactively

$ circleci pipeline run --project gh/myorg/myrepo \
    --definition-id 2338d0ae-5541-4bbf-88a2-55e9f7281f80 \
    --branch main

# Trigger on a tag with parameters

$ circleci pipeline run --project gh/myorg/myrepo \
    --definition-id 2338d0ae-5541-4bbf-88a2-55e9f7281f80 \
    --tag v1.2.3 \
    --param deploy_env=staging

# Output as JSON for scripting

$ circleci pipeline run --project gh/myorg/myrepo \
    --definition-id 2338d0ae-5541-4bbf-88a2-55e9f7281f80 \
    --branch main --json

policy <command> β€” govern config with Rego security policies πŸ›‘οΈ

This is the security-guard era of your config: Rego security policies. It's giving locked door, but make it YAML.

COMMANDS πŸ›‘οΈ

decide β€” evaluate a config against remote policies

This is the vibe check for your config, bestie. It evaluates a config against remote policies.

OPTIONS πŸ’…

  • --input β€” path to input file (e.g. .circleci/config.yml) (required)
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --meta β€” decision metadata as a JSON string
  • --metafile β€” path to decision metadata file (YAML or JSON)
  • --org β€” organization slug (e.g. gh/myorg) or UUID (required)
  • --policy-context β€” policy context
  • --strict β€” exit non-zero for HARD_FAIL or ERROR decisions

EXAMPLES πŸŽ€

# Evaluate a config against remote policies

$ circleci policy decide --org gh/acme --input .circleci/config.yml

# Exit non-zero on hard failures

$ circleci policy decide --org gh/acme --input .circleci/config.yml --strict

# Pass metadata alongside the decision

$ circleci policy decide --org gh/acme --input .circleci/config.yml --meta '{"project_id":"abc"}'

# Output decision as JSON

$ circleci policy decide --org gh/acme --input .circleci/config.yml --json

diff <path> β€” show diff between local and remote policy bundles

Show the diff between your local policy bundle and the remote one. Spot the difference, but make it security.

OPTIONS πŸ’…

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID (required)
  • --policy-context β€” policy context

EXAMPLES πŸŽ€

# Diff policies in ./policies against the remote bundle

$ circleci policy diff ./policies --org gh/acme

# Diff against a custom policy context

$ circleci policy diff ./policies --org gh/acme --policy-context config

# Output diff as JSON for scripting

$ circleci policy diff ./policies --org gh/acme --json

eval <policy-path> β€” evaluate a raw OPA query against policies locally

This one evaluates a raw OPA query against policies locally. No remote trip needed β€” it's giving local icon.

OPTIONS πŸ’…

  • --context β€” policy context (config compilation only runs when this is "config")
  • --input β€” path to input file (e.g. .circleci/config.yml) (required)
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --meta β€” decision metadata as a JSON string
  • --metafile β€” path to decision metadata file (YAML or JSON)
  • --no-compile β€” evaluate the raw config without compiling it first
  • --org β€” organization slug (e.g. gh/myorg) or UUID for private orb resolution; defaults to git remote
  • --pipeline-parameters β€” pipeline parameters as a YAML map or path to a YAML file
  • --query β€” the OPA query to evaluate

EXAMPLES πŸŽ€

# Evaluate a policy directory against a compiled config

$ circleci policy eval ./policies --input .circleci/config.yml

# Evaluate a specific query

$ circleci policy eval ./policies --input .circleci/config.yml --query 'data.org.enable_rule'

# Evaluate the raw (uncompiled) config

$ circleci policy eval ./policies --input .circleci/config.yml --no-compile

# Pass decision metadata

$ circleci policy eval ./policies --input .circleci/config.yml --meta '{"project_id":"abc"}'

fetch [policy-name] β€” download the remote policy bundle

Grab that remote policy bundle. Optionally name one policy and fetch just that one. Obsessed with a targeted download, honestly.

OPTIONS πŸ’…

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID (required)
  • --policy-context β€” policy context

EXAMPLES πŸŽ€

# Fetch the full policy bundle

$ circleci policy fetch --org gh/acme

# Fetch a single policy by name

$ circleci policy fetch my-policy --org gh/acme

# Output as JSON with jq filtering

$ circleci policy fetch --org gh/acme --json --jq 'keys'

logs [decision-id] β€” get policy decision logs

Get policy decision logs. Yes bestie, we're reading the receipts. Receipts era.

OPTIONS πŸ’…

  • --after β€” return logs created after this time (RFC3339 or YYYY-MM-DD)
  • --before β€” return logs created before this time (RFC3339 or YYYY-MM-DD)
  • --branch β€” filter by branch name
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID (required)
  • --out β€” write output to this file instead of stdout
  • --policy-bundle β€” retrieve the policy bundle snapshot for the given decision ID
  • --policy-context β€” policy context
  • --project-id β€” filter by project ID
  • --status β€” filter by decision status (PASS, SOFT_FAIL, HARD_FAIL, ERROR)

EXAMPLES πŸŽ€

# Get all decision logs

$ circleci policy logs --org gh/acme

# Get a specific decision log

$ circleci policy logs abc123 --org gh/acme

# Filter by status and branch

$ circleci policy logs --org gh/acme --status HARD_FAIL --branch main

# Write output to a file

$ circleci policy logs --org gh/acme --out logs.json

push <path> β€” push a policy bundle to CircleCI

Push a policy bundle up to CircleCI. It's giving send it live energy.

Heads up: there's a confirmation prompt unless you pass --no-prompt. So no accidental yeet, okay?

OPTIONS πŸ’…

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --no-prompt β€” skip confirmation prompt
  • --org β€” organization slug (e.g. gh/myorg) or UUID (required)
  • --policy-context β€” policy context

EXAMPLES πŸŽ€

# Push policies in the ./policies directory

$ circleci policy push ./policies --org gh/acme

# Push without confirmation prompt

$ circleci policy push ./policies --org gh/acme --no-prompt

# Push to a custom policy context

$ circleci policy push ./policies --org gh/acme --policy-context config

# Output the diff as JSON

$ circleci policy push ./policies --org gh/acme --no-prompt --json

settings <command> β€” manage policy enforcement settings

Manage policy enforcement settings. This is the on/off switch corner, and yes, it has main character energy too.

COMMANDS πŸŽ€

get β€” get policy enforcement settings

OPTIONS πŸ’…

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID (required)
  • --policy-context β€” policy context

EXAMPLES πŸŽ€

# Get policy enforcement settings

$ circleci policy settings get --org gh/acme

# Output as JSON

$ circleci policy settings get --org gh/acme --json

# Use with jq to extract the enabled field

$ circleci policy settings get --org gh/acme --json --jq '.enabled'

set β€” update policy enforcement settings

OPTIONS πŸ’…

  • --enabled β€” enable policy enforcement
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID (required)
  • --policy-context β€” policy context

EXAMPLES πŸŽ€

# Enable policy enforcement

$ circleci policy settings set --org gh/acme --enabled

# Disable policy enforcement

$ circleci policy settings set --org gh/acme --enabled=false

# Output result as JSON

okay picking right back up where those settings examples left off, last one in that batch:

$ circleci policy settings set --org gh/acme --enabled --json

test <path>

Run policy tests πŸ§ͺ like, actually run them, bestie, and see what passes.

OPTIONS

  • --all β€” show every test, not just the failures. yes, including the passing ones, we love a full picture πŸ’…
  • --explain β€” print each test's full evaluation context. heads up: this one implies --all, so you get everything whether you asked or not 🫢
  • --jq β€” process values from the response using jq syntax. for the girlies who think in filters ✨
  • --json β€” output as JSON
  • --junit β€” output results as JUnit XML
  • --org β€” Organization slug (e.g. gh/myorg) or UUID for private orb resolution when a test compiles; defaults to git remote πŸŽ€
  • --run β€” only run tests whose name matches this regexp. filter your faves, we gatekeep responsibly πŸ”₯

EXAMPLES

# Run every test under ./policies and its subdirectories

$ circleci policy test ./policies/...
# Run tests in a single directory, showing passing tests too

$ circleci policy test ./policies --all
# Run only tests whose name matches a regexp

$ circleci policy test ./policies/... --run 'test_enforce_.*'
# Emit JUnit XML for CI

$ circleci policy test ./policies/... --junit

project <command>

List, follow and configure CircleCI projects 🌸 your whole project-management era.

create [project-name] --org <vcs/org-slug>

Create a new project ✨ brand new, fresh out the box.

OPTIONS

  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg)

EXAMPLES

# Create a project (prompted for name if run interactively)

$ circleci project create --org gh/myorg
# Create a GitHub-hosted project

$ circleci project create my-new-repo --org gh/myorg
# Create a CircleCI-native project (standalone pipelines)

$ circleci project create new-service --org circleci/9YytKzouJxzu4TjCRFqAoD
# Create a project and output as JSON for scripting

$ circleci project create my-new-repo --org gh/myorg --json

dlc <command>

Purge a project's Docker layer cache (DLC) 🧼 sometimes you just gotta clear the cache, no cap.

COMMANDS

purge

Purge the Docker Layer Cache for a project.

OPTIONS

  • -f, --force β€” skip confirmation prompt, living dangerously (but efficiently) πŸ’€
  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Purge DLC for the current git repository's project

$ circleci dlc purge
# Purge DLC for a specific project

$ circleci dlc purge --project gh/myorg/myrepo
# Skip the confirmation prompt (for scripting)

$ circleci dlc purge --project gh/myorg/myrepo --force
# Purge DLC and output result as JSON

$ circleci dlc purge --project gh/myorg/myrepo --force --json
# Purge DLC for a Bitbucket project

$ circleci dlc purge --project bb/myorg/myrepo

EXAMPLES

# Purge DLC for the current git repository's project

$ circleci dlc purge
# Purge DLC for a specific project

$ circleci dlc purge --project gh/myorg/myrepo
# Purge DLC and output result as JSON

$ circleci dlc purge --project gh/myorg/myrepo --json

envvar <command>

List, set and delete a project's environment variables πŸ” secrets stay secret, iykyk.

COMMANDS

delete <name>

Delete a project environment variable. gone, girl, bye πŸ‘‹

OPTIONS

  • -f, --force β€” skip confirmation prompt
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Delete an env var from the current project (with confirmation)

$ circleci envvar delete MY_SECRET
# Delete without confirmation

$ circleci envvar delete MY_SECRET --force
# Delete an env var from a specific project

$ circleci envvar delete MY_SECRET --project gh/myorg/myrepo --force

list

List project environment variables πŸ“‹ a whole little roster.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# List env vars for the current project

$ circleci envvar list
# List env vars for a specific project

$ circleci envvar list --project gh/myorg/myrepo
# Output as JSON

$ circleci envvar list --json

set <name> <value>

Set a project environment variable ✨ give it a name and a value and it's iconic now.

OPTIONS

  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Set an env var for the current project

$ circleci envvar set MY_SECRET s3cr3t
# Set an env var for a specific project

$ circleci envvar set MY_SECRET s3cr3t --project gh/myorg/myrepo
# Read a value from a file

$ circleci envvar set MY_SECRET "$(cat secret.txt)"
okay real talk, careful with MY_SECRET s3cr3t typed directly on a command line β€” that's between you and your shell history πŸ™ˆ

follow

Follow a project πŸ’– hit that follow button, become a supporter.

OPTIONS

  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Follow the project for the current git repository

$ circleci project follow
# Follow a specific project

$ circleci project follow --project gh/myorg/myrepo
# Follow a Bitbucket project

$ circleci project follow --project bb/myorg/myrepo

get

Show project details πŸ” the full profile, no filter.

OPTIONS

  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Show details for the current git repository's project

$ circleci project get
# Show details for a specific project

$ circleci project get --project gh/myorg/myrepo
# Output as JSON for scripting

$ circleci project get --json

Bind this checkout to a CircleCI project πŸ”— it's giving committed relationship.

OPTIONS

  • -f, --force β€” overwrite an existing .circleci/info.yml
  • --project β€” project slug (e.g. gh/org/repo or circleci/<orgID>/<projectID>)

EXAMPLES

# Auto-detect from the current git repository

$ circleci project link
# Bind to a specific project (skips lookup if it exists)

$ circleci project link --project gh/myorg/myrepo
# Bind to a standalone project by its CircleCI slug

$ circleci project link --project circleci/<orgID>/<projectID>
# Overwrite an existing .circleci/info.yml

$ circleci project link --force

list

List projects πŸ“š a whole lineup.

OPTIONS

  • --following β€” only projects you follow (default when no other filter is given)
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --name β€” only projects matching this name
  • --org-id β€” only projects in this organization UUID
  • --slug β€” resolve one project by slug (e.g. gh/myorg/myrepo)

EXAMPLES

# List the projects you follow

$ circleci project list
# List every project in an organization

$ circleci project list --org-id 8f7c5a1e-0000-4000-8000-000000000001
# Resolve a single project by slug

$ circleci project list --slug gh/myorg/myrepo
# Output as JSON for scripting

$ circleci project list --json

open

Open the project page in the browser 🌐 literally one command and you're there.

OPTIONS

  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Open the project page for the current repo

$ circleci project open
# Open the project page for a specific project

$ circleci project open --project gh/myorg/myrepo
# Open when your remote is on CircleCI server

$ circleci project open --host https://circleci.example.com

setting <command>

View and update project advanced settings βš™οΈ the deep-lore settings, bestie.

COMMANDS

get <setting>

Get the current value of a project setting.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Get a setting for the current project

$ circleci project setting get build-forked-pull-requests
# Get a setting for a specific project

$ circleci project setting get build-forked-pull-requests --project gh/myorg/myrepo
# Output as JSON

$ circleci project setting get build-forked-pull-requests --json

list

List all advanced settings for a project πŸ“ the whole settings menu, laid out.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# List settings for the current project

$ circleci project setting list
# List settings for a specific project

$ circleci project setting list --project gh/myorg/myrepo
# Output as JSON

$ circleci project setting list --json

set <setting> <true|false>

Set a project setting 🎚️ flip it on, flip it off.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --project β€” project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# Enable a setting for the current project

$ circleci project setting set build-forked-pull-requests true
# Disable a setting for a specific project

$ circleci project setting set build-forked-pull-requests false --project gh/myorg/myrepo
# Output the updated value as JSON

$ circleci project setting set auto-cancel-builds true --json

trigger <command>

Manage project triggers ⏰ the "make it go when X happens" department.

πŸŽ€ create πŸŽ€

Bestie, this one spins up a brand-new project trigger. Slay.

OPTIONS

  • --checkout-ref β€” the Git ref we check out code with. Only needed when the checkout repo is not the same as the event source repo, iykyk.
  • --config-ref β€” the Git ref we fetch config with. Again: only needed when the config repo differs from the event source repo.
  • --event-preset β€” the preset that filters which events fire this trigger. One of: all-pushes, only-tags, default-branch-pushes, only-build-prs, only-open-prs, only-labeled-prs, only-merged-prs, only-ready-for-review-prs, only-branch-delete, only-build-pushes-to-non-draft-prs, only-merged-or-closed-prs, pr-comment-equals-run-ci, non-draft-pr-opened, pushes-to-merge-queues. Yes it's a long list, no I'm not skipping any of them πŸ’…
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --pipeline-definition-id β€” pipeline definition ID (required ⭐)
  • --project β€” project slug, like gh/org/repo; defaults to your git remote
  • --project-id β€” project UUID (this overrides --project)
  • --provider β€” the event source provider. One of: github_app, github_server, github_oauth, origin, webhook, schedule
  • --repo-full-name β€” repository owner/name (required for origin)
  • --repo-id β€” repository external ID (required for github_app, github_server, github_oauth, origin)

EXAMPLES

# Create a GitHub App trigger (provider defaults to github_app)
$ circleci project trigger create \
    --pipeline-definition-id a1b2c3d4-... \
    --repo-id 123456789
# Create a trigger for a Cursor repository (Origin needs the owner/name too)
$ circleci project trigger create \
    --provider origin \
    --pipeline-definition-id a1b2c3d4-... \
    --repo-id repo_01abc \
    --repo-full-name myorg/myrepo
# Create a trigger with event filtering and output as JSON
$ circleci project trigger create \
    --pipeline-definition-id a1b2c3d4-... \
    --repo-id 123456789 \
    --event-preset all-pushes \
    --json

🌈 list 🌈

Lists out all the triggers hanging off a pipeline definition. It's giving inventory day.

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --pipeline-definition-id β€” pipeline definition ID (required ⭐)
  • --project β€” project slug, like gh/org/repo; defaults to your git remote
  • --project-id β€” project UUID (overrides --project)

EXAMPLES

# List triggers for the current repository's project
$ circleci project trigger list \
    --pipeline-definition-id a1b2c3d4-...
# List triggers for a specific project
$ circleci project trigger list \
    --project gh/myorg/myrepo \
    --pipeline-definition-id a1b2c3d4-...
# Output as JSON for scripting
$ circleci project trigger list \
    --pipeline-definition-id a1b2c3d4-... \
    --json

πŸ‘‘ run <command> πŸ‘‘

The main-character command: trigger runs, watch them, approve them, cancel them. Your whole pipeline life is in here, fr fr.

πŸ›  COMMANDS πŸ› 

πŸ’œ approve <run-number-or-id> πŸ’œ

Gives the green light to an approval job that's currently sitting on hold. Go πŸ‘ ahead πŸ‘.

OPTIONS

  • -f, --force β€” skip the confirmation prompt
  • --job β€” name or UUID of the approval job you want to approve
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --project β€” project slug, like gh/org/repo; used when you're approving by number

EXAMPLES

# Approve the approval job on hold in run 75 (with confirmation)
$ circleci run approve 75
# Approve a specific approval job by name, without confirmation
$ circleci run approve 75 --job hold-deploy --force
# Approve the hold on the latest run on main, by run UUID
$ circleci run list --branch main --json --jq '.[0].id' | xargs circleci run approve --force

πŸ’€ cancel <run-number-or-id> πŸ’€

Nukes a run. Bye bestie 🫢

OPTIONS

  • -f, --force β€” skip the confirmation prompt
  • --project β€” project slug, like gh/org/repo; used when you're cancelling by number

EXAMPLES

# Cancel a run by number (with confirmation)
$ circleci run cancel 75
# Cancel a run by UUID without confirmation
$ circleci run cancel 5034460f-c7c4-4c43-9457-de07e2029e7b --force
# Cancel the latest run on a branch
$ circleci run list --branch main --json --jq '.[0].id' | xargs circleci run cancel --force

πŸ¦‹ get [<run-id>] πŸ¦‹

Fetches the status of a run. It's the vibe check for your pipeline.

OPTIONS

  • -b, --branch β€” branch name (defaults to the current branch, or main when --project is set)
  • --failure-report β€” prints condensed output for every failed step; made for agent consumption πŸ€–
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • -m, --mine β€” filter to runs owned by you.
  • --no-interactive β€” skip the interactive picker and resolve the latest run directly
  • --project β€” project slug, like gh/org/repo; used for the latest-run lookup

EXAMPLES

# Get the latest run for the current branch
$ circleci run get
# Get a run by UUID
$ circleci run get 5034460f-c7c4-4c43-9457-de07e2029e7b
# Output as JSON for scripting
$ circleci run get --json
# Get only your runs
$ circleci run get --mine
# Skip the picker and resolve the latest run directly
$ circleci run get --no-interactive

⭐ list ⭐

Recent runs for a project, all lined up like a little runway.

OPTIONS

  • -b, --branch β€” filter by branch
  • -B, --current-branch β€” filter by the branch you currently have checked out
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --limit β€” max number of runs to show [default: 10]
  • --project β€” project slug, like gh/org/repo; defaults to your git remote

EXAMPLES

# List recent runs for the current project
$ circleci run list
# Filter to the branch you have checked out
$ circleci run list --current-branch
# Filter to a specific branch
$ circleci run list --branch main
# List runs for an explicit project
$ circleci run list --project gh/org/repo
# Show more results
$ circleci run list --limit 25
# Output as JSON for scripting
$ circleci run list --json

🌸 open 🌸

Pops open the current project's runs page in your browser. Cute, convenient, no notes.

OPTIONS

  • -b, --branch β€” branch name (defaults to the current branch)
  • --project β€” project slug, like gh/org/repo; used for the latest-run lookup

EXAMPLES

# Open runs for the current repo
$ circleci run open
# Open runs filtered to the current git branch
$ circleci run open --current-branch
# Open runs filtered to a specific branch
$ circleci run open --branch my-feature
# Open runs filtered to a specific branch (short flag)
$ circleci run open -b main
# Open when your remote is on CircleCI server
$ circleci run open --host https://circleci.example.com

πŸ”₯ trigger πŸ”₯

Kicks off a brand new run. Hit send bestie πŸ’Œ

OPTIONS

  • -b, --branch β€” branch to trigger (defaults to the current branch)
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --parameter β€” run parameter as key=value (repeatable)
  • --project β€” project slug, like gh/org/repo; defaults to your git remote

EXAMPLES

# Trigger a run on the current branch
$ circleci run trigger
# Trigger on a specific branch
$ circleci run trigger --branch main
# Trigger with run parameters
$ circleci run trigger --parameter deploy_env=staging --parameter run_e2e=true
# Output the triggered run as JSON
$ circleci run trigger --json

🧚 watch [<run-id>] 🧚

Sits with a run until it finishes. Emotional support watcher, basically 😭

OPTIONS

  • -b, --branch β€” branch to watch (defaults to the current branch)
  • --failfast β€” bail out the second any job fails, no waiting around for the rest of the run
  • --project β€” project slug, like gh/org/repo; defaults to your git remote
  • --sha β€” watch the run for this commit SHA; polls up to 2m if it hasn't been created yet
  • --timeout β€” max time to wait for the run to complete

EXAMPLES

# Watch the latest run on the current branch
$ circleci run watch
# Push and watch in one step
$ git push && circleci run watch --sha $(git rev-parse HEAD)
# Watch by UUID (e.g. from 'run list --json')
$ circleci run watch 5034460f-c7c4-4c43-9457-de07e2029e7b
# Watch with a longer timeout
$ circleci run watch --timeout 30m
# Exit as soon as any job fails
$ circleci run watch --failfast

🫢 runner <command> 🫢

Everything self-hosted-runner related. Your own machines, your own rules ✨

πŸ›  COMMANDS πŸ› 

πŸ“ config <resource-class> πŸ“

Generates the config for a self-hosted runner. One resource class, one config, iconic.

OPTIONS

  • --name β€” runner name, machine only (default: hostname)
  • --nickname β€” nickname for the new token
  • -o, --output β€” write config to this file instead of stdout
  • --product β€” runner product: machine|container|machineOrchestrator (default machine, prompts when unset)
  • --token β€” bestie, if you already have a token value lying around, pass it here and we'll use that instead of minting a shiny new one ✨
  • --working-directory β€” the job working directory. machine only, babes β€” container runner doesn't wanna hear it πŸ’…

✨ EXAMPLES ✨

Generate a machine runner 3 config, using the hostname as the runner name:

# Generate machine runner 3 config, using the hostname as the
# runner name

$ circleci runner config my-org/my-runner

Write the machine runner config straight to the path the agent actually reads (iconic move, lowkey):

# Write machine runner config to the path the agent reads

$ circleci runner config my-org/my-runner --name prod-server-1
--output /etc/circleci-runner/circleci-runner-config.yaml

Generate Helm values for container runner πŸŽ€

# Generate Helm values for container runner

$ circleci runner config my-org/my-runner --product container
--output values.yaml

And if you're building config from a token you already have β€” no API token creation at all:

# Generate config from an existing token value (no API token
# creation)

$ circleci runner config my-org/my-runner --token
"$EXISTING_TOKEN_VALUE"

fleet <command> 🌸

View your runner fleets. Yes, fleets. Very main character energy πŸ‘‘

πŸŽ€ COMMANDS πŸŽ€

get <resource-class>

Show a single runner fleet. Just the one. Spotlight moment ✨

OPTIONS

  • --jq β€” process values from the response using jq syntax. Chef's kiss for plucking out exactly what you want 🧚
  • --json β€” output as JSON

EXAMPLES

# Show the fleet of a resource class

$ circleci runner fleet get my-org/my-runner
# Show it by resource class ID

$ circleci runner fleet get
01234567-89ab-4cde-8f01-23456789abcd
# Show how many tasks are waiting for an agent

$ circleci runner fleet get my-org/my-runner --json --jq
'.queued_tasks'

list

List runner fleets. Gotta see 'em all 🌈

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --namespace β€” filter by namespace (organization)
  • --org β€” organization slug (e.g. gh/myorg) or UUID; defaults to git remote 🫢
  • --resource-class β€” filter by resource class (namespace/name or ID)

EXAMPLES

# List fleets for the org inferred from the git remote

$ circleci runner fleet list
# List the fleets in one namespace

$ circleci runner fleet list --namespace my-org
# Show the fleet of one resource class, by name or ID

$ circleci runner fleet list --resource-class my-org/my-
runner
# Extract the resource classes with no connected agents

$ circleci runner fleet list --json --jq '.[] |
select(.agent_count == 0) | .resource_class'

instance <command> πŸ’œ

Manage runner instances β€” the ones actually connected and out here living their lives πŸ¦‹

πŸŽ€ COMMANDS πŸŽ€

list [namespace | resource-class]

List connected runner instances

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --namespace β€” filter by namespace (organization)
  • --org β€” organization slug (e.g. gh/myorg) or UUID; defaults to git remote
  • --resource-class β€” filter by resource class (namespace/name or ID)

EXAMPLES

# List connected instances for the org inferred from the git
# remote

$ circleci runner instance list
# List instances for a specific organization (slug or UUID)

$ circleci runner instance list --org gh/my-org
# List instances for a namespace

$ circleci runner instance list my-org
# List instances for a specific resource class

$ circleci runner instance list my-org/my-runner

open πŸ”₯

Open the runners inventory page in the browser. Literally one command, zero scrolling, we love convenience πŸ’…

OPTIONS

  • --org β€” organization slug (e.g. gh/myorg); defaults to git remote

EXAMPLES

# Open runners for the org inferred from git remote

$ circleci runner open
# Open runners for a specific organization

$ circleci runner open --org gh/myorg
# Open when your remote is on CircleCI server

$ CIRCLE_HOST=https://circleci.example.com circleci runner open
ngl that last one is the sneaky genius one β€” set CIRCLE_HOST inline and it'll open the right place on CircleCI server πŸ‘‘βœ¨

resource-class <command> πŸŽ€

Manage runner resource classes. This is the section, fr fr β€” create 'em, delete 'em, list 'em, update 'em 😭

πŸŽ€ COMMANDS πŸŽ€

create <namespace>/<name>

Create a runner resource class. Fresh out the box ✨

OPTIONS

  • --description β€” human-readable description of the resource class
  • --generate-token β€” also create a token for the resource class, nicknamed "default"
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID; defaults to git remote

EXAMPLES

# Create a resource class in the org inferred from the git
# remote

$ circleci runner resource-class create my-org/my-runner
# Create in a specific organization

$ circleci runner resource-class create my-org/my-runner
--org gh/my-org
# Create with a description

$ circleci runner resource-class create my-org/my-runner
--description "Linux amd64 runner"
# Create a resource class and generate a token nicknamed
# "default"

$ circleci runner resource-class create my-org/my-runner
--generate-token
# Output as JSON

$ circleci runner resource-class create my-org/my-runner
--json

delete <resource-class>

Delete a runner resource class. Bye bestie πŸ’€

OPTIONS

  • -f, --force β€” skip confirmation prompt
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Delete a resource class (with confirmation prompt)

$ circleci runner resource-class delete my-org/my-runner
# Delete without confirmation

$ circleci runner resource-class delete my-org/my-runner
--force
# Delete by ID in a script, and report what was deleted

$ circleci runner resource-class delete
01234567-89ab-4cde-8f01-23456789abcd --force --json

list [namespace]

List runner resource classes

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --namespace β€” filter by namespace (organization)
  • --org β€” organization slug (e.g. gh/myorg) or UUID; defaults to git remote
  • --resource-class β€” filter by resource class (namespace/name or ID)

EXAMPLES

# List resource classes for the org inferred from the git
# remote

$ circleci runner resource-class list
# List resource classes for a specific organization (slug)

$ circleci runner resource-class list --org gh/my-org
# List resource classes for a specific organization (UUID)

$ circleci runner resource-class list --org
f22b6566-597d-46d5-ba74-99ef5bb3d85c
# List the resource classes in one namespace

$ circleci runner resource-class list my-org
# Output as JSON

$ circleci runner resource-class list --org gh/my-org --json

update <resource-class>

Update a runner resource class β€” glow-up time 🌸

OPTIONS

  • --description β€” new description for the resource class (use "" to clear)
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Update the description of a resource class

$ circleci runner resource-class update my-org/my-runner
--description "Linux amd64 runner"
# Clear the description

$ circleci runner resource-class update my-org/my-runner
--description ""
# Update a resource class by its ID

$ circleci runner resource-class update
01234567-89ab-4cde-8f01-23456789abcd --description "ARM
runner"
# Update and output the result as JSON

$ circleci runner resource-class update my-org/my-runner
--description "ARM runner" --json

token <command> πŸ”‘

Manage runner tokens. Guard these with your life, okay? 🫢

πŸŽ€ COMMANDS πŸŽ€

create <resource-class>

Create a token for a resource class

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --nickname β€” human-readable nickname for the token

EXAMPLES

# Create a token for a resource class

$ circleci runner token create my-org/my-runner
# Create a token with a nickname

$ circleci runner token create my-org/my-runner --nickname
"prod-server-1"
# Create a token for a resource class given by its ID

$ circleci runner token create
01234567-89ab-4cde-8f01-23456789abcd
# Output as JSON (includes the token value)

$ circleci runner token create my-org/my-runner --json

delete <token-id>

Delete a runner token

OPTIONS

  • -f, --force β€” skip confirmation prompt
  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON

EXAMPLES

# Delete a token by ID (with confirmation prompt)

$ circleci runner token delete
abc12345-0000-0000-0000-000000000000
# Delete without confirmation

$ circleci runner token delete
abc12345-0000-0000-0000-000000000000 --force
# Delete in a script using JSON output

$ ID=$(circleci runner token list --resource-class my-
org/my-runner --json --jq '.[0].id')

$ circleci runner token delete "$ID" --force --json

list [resource-class]

List tokens for a resource class

OPTIONS

  • --jq β€” process values from the response using jq syntax
  • --json β€” output as JSON
  • --org β€” organization slug (e.g. gh/myorg) or UUID; defaults to git remote
  • --resource-class β€” filter by resource class, either as namespace/name or as an ID

EXAMPLES

# List tokens for all resource classes in the org inferred from the git remote

$ circleci runner token list

# List tokens for all resource classes in a specific org

$ circleci runner token list --org gh/my-org

# List tokens for a specific resource class

$ circleci runner token list my-org/my-runner

# Extract IDs with --jq

$ circleci runner token list --resource-class my-org/my-runner --json --jq '.[].id'

setting <command> πŸŽ€

Configure the CLI itself β€” like, the token, the host, the defaults, all that self-care stuff. Your CLI's little morning routine, honestly.

COMMANDS

list β€” List current CLI settings

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON

EXAMPLES

# Show current settings

$ circleci setting list

# Output as JSON

$ circleci setting list --json

set <key> <value> β€” Set a CLI setting

EXAMPLES

# Store your personal API token

$ circleci setting set token mytoken123

# Read the token from stdin to avoid shell history exposure

$ echo "mytoken123" | circleci setting set token -

# Point to a self-hosted CircleCI server

$ circleci setting set host https://circleci.mycompany.com

# Enable telemetry

$ circleci setting set telemetry on

# Disable telemetry

$ circleci setting set telemetry off

# Set the color theme used for rendered output

$ circleci setting set theme dracula

# Pick the color theme interactively

$ circleci setting set theme

# Disable update notifications

$ circleci setting set update-check off
Bestie, note the - for the value on token β€” that's how you pipe it in through stdin so your token never ends up chillin' in your shell history. Protect your secrets, periodt. πŸ”

unset <key> β€” Remove a stored CLI setting

EXAMPLES

# Remove your stored API token

$ circleci setting unset token

# Revert update notifications to the default

$ circleci setting unset update-check

signing-config <command> 🍎

Manage iOS signing configs. Yes, iOS. Yes, certificates. It's giving ✨developer account anxiety✨ but we're handling it.

COMMANDS

create β€” Create an iOS signing config

OPTIONS

  • --cert-id β€” ID of an uploaded certificate (see: circleci certificate list)
  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --name β€” Name for the signing config (referenced in pipeline config)
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; defaults to git remote
  • --profile β€” Path to a provisioning profile file (repeatable)

EXAMPLES

# Create a signing config (org inferred from git remote)

$ circleci signing-config create \
    --name production-signing \
    --cert-id <cert-id> \
    --profile ./MyApp.mobileprovision

# Multiple profiles

$ circleci signing-config create \
    --name multi-target-signing \
    --cert-id <cert-id> \
    --profile ./MyApp.mobileprovision \
    --profile ./MyAppExtension.mobileprovision

# Explicit org and capture the id for scripting

$ circleci signing-config create --org gh/acme --name prod --cert-id <cert-id> --profile ./p.mobileprovision --json --jq -r '.id'

delete <signing-config-id> β€” Delete an iOS signing config

OPTIONS

  • -f, --force β€” skip confirmation prompt

EXAMPLES

# Delete a signing config (with confirmation)

$ circleci signing-config delete <signing-config-id>

# Delete without confirmation

$ circleci signing-config delete <signing-config-id> --force

list β€” List iOS signing configs

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --org β€” Organization slug (e.g. gh/myorg) or UUID; defaults to git remote

EXAMPLES

# List signing configs (org inferred from git remote)

$ circleci signing-config list

# List for a specific org

$ circleci signing-config list --org gh/acme

# Output as JSON

$ circleci signing-config list --json

# Get signing config names only

$ circleci signing-config list --json --jq '.[].name'

profile <command> β€” Add or remove provisioning profiles on a signing config

COMMANDS

add <signing-config-id> β€” Add or replace a provisioning profile on a signing config

OPTIONS

  • --profile β€” Path to a provisioning profile file

EXAMPLES

# Add a new profile

$ circleci signing-config profile add <signing-config-id> --profile ./MyAppExtension.mobileprovision

# Replace an existing profile (same bundle ID and profile type, regardless of file name)

$ circleci signing-config profile add <signing-config-id> --profile ./MyApp.mobileprovision

# Find the signing config ID first

$ circleci signing-config list --json --jq '.[].id'

remove <signing-config-id> <profile-id> β€” Remove a provisioning profile from a signing config

EXAMPLES

# Remove a profile by ID

$ circleci signing-config profile remove <signing-config-id> <profile-id>

# Find the profile ID first

$ circleci signing-config list --json --jq '.[] | select(.id=="<signing-config-id>") | .provisioning_profiles'

testresult <command> πŸ§ͺ

Inspect test results for a job. Your tests flopped? This is where we go find out which one and why, bestie. 🫢

COMMANDS

get <job-id> <name> β€” Get a single test result by name

OPTIONS

  • --filter β€” Disambiguate by classname=<value> when a name is shared; repeatable
  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --plain β€” Print only the raw test message, verbatim and unformatted

EXAMPLES

# Get a test by name

$ circleci testresult get 8e50c384-0083-43d0-bc8f-93f0db589d6b TestLogin

# Disambiguate when the name appears in multiple suites

$ circleci testresult get <job-id> TestLogin --filter classname=api

# Print only the raw test message

$ circleci testresult get <job-id> TestLogin --plain

# Output as JSON

$ circleci testresult get <job-id> TestLogin --json

list <job-id> β€” List test results for a job

OPTIONS

  • --all β€” Show all results (passing, failed and skipped), not just failures
  • --filter β€” Filter by key=value; repeatable. Keys: result (success|failure|skipped, exact), name and classname (case-insensitive substring). Same key repeated is OR, different keys AND. Cannot combine result= with --all
  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --limit β€” Maximum number of results to show (0 = no limit)
  • --sort β€” Sort by name, classname, result or run_time

EXAMPLES

# List failed tests for a job (the default)

$ circleci testresult list 8e50c384-0083-43d0-bc8f-93f0db589d6b

# Show every result: passing, failed and skipped

$ circleci testresult list <job-id> --all

# Show skipped tests instead

$ circleci testresult list <job-id> --filter result=skipped

# Failed tests in one suite, slowest last

$ circleci testresult list <job-id> --filter classname=api --sort run_time

# Count failed tests by aggregating the JSONL stream with jq

$ circleci testresult list <job-id> --json --jq '[.,inputs] | length'
Ok important vibe check πŸ’… β€” the default is failures only. And result= and --all are beefing; you genuinely cannot use them together. Pick a lane, girlie.

testsuite 🧚

Extension (circleci-testsuite)


version ⭐

Print version information

OPTIONS

  • --json β€” output as JSON (fields: version, commit, modified, latest, outdated, upgrade_command)

EXAMPLES

# Print version and commit hash

$ circleci version

# Print as JSON

$ circleci version --json

# Extract just the commit hash

$ circleci version --json | jq -r .commit

# Check whether a newer release is available

$ circleci version --json | jq .outdated

workflow <command> πŸ”₯

Inspect, rerun and cancel workflows (job graphs). The whole little pipeline ecosystem, under your thumb. Main character energy fr fr.

COMMANDS

cancel <workflow-id> β€” Cancel a running workflow

OPTIONS

  • -f, --force β€” skip confirmation prompt

EXAMPLES

# Cancel a running workflow (with confirmation)

$ circleci workflow cancel 5034460f-c7c4-4c43-9457-de07e2029e7b

# Cancel without confirmation

$ circleci workflow cancel 5034460f-c7c4-4c43-9457-de07e2029e7b --force

# Find a running workflow ID from the latest run and cancel it

$ circleci run get --json --jq '.workflows[] | select(.status=="running") | .id' | xargs circleci workflow cancel --force

get <workflow-id> β€” Get workflow details

OPTIONS

  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON

EXAMPLES

# Get workflow details

$ circleci workflow get 5034460f-c7c4-4c43-9457-de07e2029e7b

# Output as JSON

$ circleci workflow get 5034460f-c7c4-4c43-9457-de07e2029e7b --json

# Get workflow ID from a run

$ circleci run get | grep -A1 "Workflows"

list [<run-id>] β€” List workflows for a run or recent runs

OPTIONS

  • -b, --branch β€” Filter by branch (recent-runs mode)
  • --jq β€” Process values from the response using jq syntax
  • --json β€” Output as JSON
  • --limit β€” Number of recent runs to show (recent-runs mode)
  • --project β€” Project slug (e.g. gh/org/repo); defaults to git remote

EXAMPLES

# List workflows for recent runs in the current project

$ circleci workflow list

# Filter to a specific branch

$ circleci workflow list --branch main

# List workflows by run number

$ circleci workflow list 75

# List workflows by run UUID
  • --json β€” output it as JSON instead, king behaviour

EL EXAMPLES ✨

$ circleci workflow list 9e0c9d52-3b7e-4cd6-b5f7-bfc5e4a07e81

and if you want the raw JSON tea instead of the pretty table:

# Output as JSON

$ circleci workflow list --json

πŸ‘€ open <workflow-id>

Open workflow in browser. that's it, that's the whole job β€” it literally just yeets you straight to the workflow page in your default browser so you don't have to go digging through the UI like a peasant 🫢

EXAMPLES

# Open workflow details

$ circleci workflow open 5034460f-c7c4-4c43-9457-de07e2029e7b

πŸ” rerun <workflow-id>

Rerun a workflow. your build broke, your vibe is shattered, the pipeline said no β€” so you run it again. main character energy, periodt πŸ’…

OPTIONS

  • --from-failed β€” rerun only the failed jobs, not the whole thing. lowkey the most useful flag here ngl
  • --json β€” output as JSON

EXAMPLES

# Rerun all jobs in a workflow from scratch

$ circleci workflow rerun 5034460f-c7c4-4c43-9457-de07e2029e7b
# Rerun only the failed jobs

$ circleci workflow rerun 5034460f-c7c4-4c43-9457-de07e2029e7b --from-failed

okay but how do you even find a workflow ID 😭 the pipeline keeps printing them but you never wrote them down. bestie, it's fine β€” grab it out of the latest run:

# Find a workflow ID from the latest run

$ circleci run get --json --jq '.workflows[].id'

and the combo move, the iconic one-two punch β€” rerun just the failed bits and capture the brand-new workflow's ID so you can stalk it:

# Rerun and capture the new workflow's ID

$ circleci workflow rerun <workflow-id> --from-failed --json --jq .workflow_id

⭐ real talk bestie: --json + --jq is the ship that never sinks. pipe it, script it, put it in CI, live your truth. iykyk πŸ’œ

and that's a wrap on the whole page, babe πŸŽ€ this gorgeous thing came from the circleci tool itself, version/date stamped 2026-10-27 in the footer, and it's formatted as CIRCLECI(1) because of course it is. go forth and make your pipelines immaculate πŸ’–βœ¨πŸŒΈ

πŸ“¦ where this page comes from