CIRCLECI(1)
π 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 settingNO_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;@filereads 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-for-dis 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.p12certificate 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.p12file. 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, orgroup--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 (likegh/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 yes0= all of them π (careful, bestie)--org-wideβ list deploys across all projects in the org β zoom out energy π₯--projectβ project slug (likegh/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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--jsonβ output as JSON--tailβ show only the last N lines of each step's output in the rendered view (0for 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 ofauto|combined|separate--executionβ parallel execution index to report on (default is all of them)--jqβ process values from the response usingjqsyntax--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 usingjqsyntax--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:--channeltakes a name like#ci-alertsor 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,--orgis 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: setCIRCLE_HOST) β yeah she's deprecated, use the env var π--tokenβ CircleCI API token (deprecated: setCIRCLE_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, orpatch
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, orpatch
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 fororigin)--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 fororigin)--config-repo-idβ config source repo external ID (required forgithub_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 usingjqsyntax--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 usingjqsyntax--jsonβ output as JSON--paramβ pipeline parameter askey=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 usingjqsyntax--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 forHARD_FAILorERRORdecisions
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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax. 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 usingjqsyntax--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
link
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/repoorcircleci/<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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--jsonβ output as JSON--pipeline-definition-idβ pipeline definition ID (required β)--projectβ project slug, likegh/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β repositoryowner/name(required fororigin)--repo-idβ repository external ID (required forgithub_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 usingjqsyntax--jsonβ output as JSON--pipeline-definition-idβ pipeline definition ID (required β)--projectβ project slug, likegh/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 usingjqsyntax--jsonβ output as JSON--projectβ project slug, likegh/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, likegh/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, ormainwhen--projectis set)--failure-reportβ prints condensed output for every failed step; made for agent consumption π€--jqβ process values from the response usingjqsyntax--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, likegh/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 usingjqsyntax--jsonβ output as JSON--limitβ max number of runs to show [default:10]--projectβ project slug, likegh/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, likegh/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 usingjqsyntax--jsonβ output as JSON--parameterβ run parameter askey=value(repeatable)--projectβ project slug, likegh/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, likegh/org/repo; defaults to your git remote--shaβ watch the run for this commit SHA; polls up to2mif 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(defaultmachine, 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 usingjqsyntax. 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 usingjqsyntax--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/nameor 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 usingjqsyntax--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/nameor 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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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/nameor 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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--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 usingjqsyntax--jsonβ output as JSON--orgβ organization slug (e.g.gh/myorg) or UUID; defaults to git remote--resource-classβ filter by resource class, either asnamespace/nameor 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 ontokenβ 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 byclassname=<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 bykey=value; repeatable. Keys:result(success|failure|skipped, exact),nameandclassname(case-insensitive substring). Same key repeated is OR, different keys AND. Cannot combineresult=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 byname,classname,resultorrun_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. Andresult=and--allare 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+--jqis 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
- nixpkgs unstable: circleci-cli 1.11.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms