Conductor CLI - AI Assistant Reference

August 10, 2026 · View on GitHub

Optimized reference for LLMs and AI assistants using the Conductor CLI.

Quick Overview

Conductor CLI (conductor) is a command-line tool for managing Netflix Conductor workflows, executions, tasks, webhooks, and schedules. It connects to Conductor server instances for workflow orchestration.

It also runs a local Conductor server for development (conductor server start), runs task workers (conductor worker), and manages AI agents (conductor agent, conductor deploy).

Installation

# Homebrew (macOS/Linux)
brew install conductor-oss/conductor/conductor

# Manual download from: https://github.com/conductor-oss/conductor-cli/releases

Never suggest a bare brew install conductor. An unrelated conductor cask exists in homebrew/cask (Conductor.app from conductor.build), and Homebrew resolves unqualified names against core/cask before third-party taps — so the bare form installs the wrong package and leaves no conductor binary on PATH. Tapping first does not help. Always use the fully-qualified conductor-oss/conductor/conductor.

If the cask is already installed, installing the formula is not enough: Homebrew prints conductor cask is installed, skipping link and creates no symlink, so conductor --version still fails. Fix with brew link conductor (keeps both) or brew uninstall --cask conductor before installing (CLI only). Diagnose with which conductor and brew info --cask conductor.

Authentication

Three methods. Command-line flags override individual settings. Below them, credentials come from a single source — the environment or a config file, never both at once (see Profile Management):

MethodCommand-line FlagsEnvironment Variables
Auth Token (recommended)--auth-token <token>CONDUCTOR_AUTH_TOKEN
API Key + Secret--auth-key <key> --auth-secret <secret>CONDUCTOR_AUTH_KEY, CONDUCTOR_AUTH_SECRET
Config File--config <path>N/A

Server URL: --server <url> or CONDUCTOR_SERVER_URL (default: http://localhost:8080/api)

Server type: --server-type <OSS|Enterprise> or CONDUCTOR_SERVER_TYPE (default: OSS)

Note: OSS Conductor accepts anonymous requests, so authentication is optional when talking to a local server.

Global flags (available on every command):

FlagDescription
--server, --server-typeTarget server URL and type
--auth-token, --auth-key, --auth-secretAuthentication credentials
--config <path>Config file path (overrides profile-based loading)
--profile <name>Load config-<name>.yaml
--verbose, -vPrint verbose logs
--yes, -yAuto-confirm destructive operations

Token Types:

  • JWT tokens with exp claim: Automatically cached and refreshed before expiry (5-minute buffer)
  • Long-lived tokens without exp claim: Cached indefinitely, never trigger refresh attempts
  • Expired tokens: CLI validates token expiry and provides helpful error messages with guidance to run conductor config save

Profile Management

Manage multiple environments (dev, staging, prod) using profiles.

OperationCommandResult
Save named profileconductor config save --profile prodCreates ~/.conductor-cli/config-prod.yaml
Save defaultconductor config savePrompts Profile name (empty for default):; Enter creates config.yaml
Save default (no prompt)conductor config save --profile defaultCreates config.yaml
Use profile (flag)conductor --profile prod workflow listLoads config-prod.yaml
Use profile (env)CONDUCTOR_PROFILE=prod conductor workflow listLoads config-prod.yaml
Inspect what is activeconductor config showPrints each value and where it came from

Precedence: --profile flag > CONDUCTOR_PROFILE env var > default config

Profile directory: ~/.conductor-cli/

  • config.yaml - default configuration
  • config-<name>.yaml - named profiles

default is an alias for the default configuration, not a profile of its own. An empty profile name and --profile default both mean ~/.conductor-cli/config.yaml, for save, delete and profile selection alike. The CLI never creates config-default.yaml; if one exists from an older build it is ignored, and config list/config show warn that it is unused.

Configuration comes from exactly one source, never a mix. Flags override individual settings.

OrderSourceExample
1Flags--server, --auth-token
2The file from --config or --profile--profile prod reads config-prod.yaml
3Environment variablesCONDUCTOR_SERVER_URL
4The default config file~/.conductor-cli/config.yaml

So exporting CONDUCTOR_SERVER_URL switches everything onto the environment. A token in config.yaml is no longer used.

CONDUCTOR_PROFILE is different. It selects which file to read, so it does not switch the CLI to the environment.

Setting one variable therefore switches the whole configuration onto the environment: if CONDUCTOR_SERVER_URL is set and config.yaml holds an auth token, that token is not used. CONDUCTOR_PROFILE does not count — it selects a file rather than carrying a setting.

Run conductor config show to see the active source and where each value came from.

Command Reference

Commands are organized into three help groups:

  • Conductor Managementworkflow, task, schedule, webhook, secret, api-gateway, agent
  • CLI Configurationconfig, whoami, update, completion
  • Developmentserver, deploy, doctor, worker

Server Commands

Run a local single-node Conductor server for development and testing. The server JAR is downloaded automatically on first run (~600 MB) into ~/.conductor-cli/server/ and runs as a background process on port 8080.

Requirement: Java 21 or higher on PATH.

CommandDescriptionRequired ArgsOptional FlagsExample
server startStart a local Conductor serverNone--port, --foreground/-f, --version, --oss, --orkesconductor server start --port 9090
server stopStop the running serverNoneconductor server stop
server statusCheck whether the server is runningNoneconductor server status
server logsShow server logsNone--follow/-f, --lines/-nconductor server logs -f -n 200
server updateRe-download the server JARNone--version, --oss, --orkesconductor server update

Flags:

  • --port - Port to run the server on (default: 8080)
  • --foreground, -f - Run in the foreground instead of daemonizing
  • --version - Server version to download and run (default: latest, e.g. 3.21.23)
  • --oss - Use the open-source Conductor server (default)
  • --orkes - Use the Orkes Conductor server (coming soon)
  • --follow, -f - Follow log output like tail -f (logs command)
  • --lines, -n - Number of lines to show (logs command, default: 50)

Notes:

  • This is a single-node dev server, not a cluster.
  • The server must be stopped before running server update.
  • Docker is a faster alternative: docker run -p 8080:8080 conductoross/conductor:latest

Workflow Commands

CommandDescriptionRequired ArgsOptional FlagsExample
Definition Management
workflow listList all workflowsNone--json, --csvconductor workflow list
workflow get <name>Get workflow definitionworkflow nameconductor workflow get my_workflow
workflow get <name> <version>Get specific versionname, versionconductor workflow get my_workflow 2
workflow get-allGet all workflow definitionsNoneconductor workflow get-all
workflow create <file>Create/register workflowJSON file path--forceconductor workflow create workflow.json --force
workflow update <file>Update workflowJSON file pathconductor workflow update workflow.json
workflow delete <name> <version>Delete workflow definitionname, versionconductor workflow delete my_workflow 1
Execution Management
workflow start --workflow <name>Start workflow asyncNone--input, --file, --version, --correlation, --syncconductor workflow start --workflow my_workflow
workflow start --syncStart and wait for completionNone--workflow, --input, --file, --wait-untilconductor workflow start --workflow my_workflow --sync
workflow status <id>Get execution statusworkflow IDconductor workflow status abc-123
workflow get-execution <id>Get full execution detailsworkflow ID--completeconductor workflow get-execution abc-123
workflow searchSearch executionsNone--workflow, --status, --count, --start-time-after, --start-time-before, --jsonconductor workflow search --workflow my_workflow --status FAILED
workflow terminate <id>Terminate executionworkflow IDconductor workflow terminate abc-123
workflow pause <id>Pause executionworkflow IDconductor workflow pause abc-123
workflow resume <id>Resume paused executionworkflow IDconductor workflow resume abc-123
workflow delete-execution <id>Delete executionworkflow ID--archiveconductor workflow delete-execution abc-123
workflow restart <id>Restart completed workflowworkflow ID--use-latestconductor workflow restart abc-123
workflow retry <id>Retry last failed taskworkflow ID--resume-subworkflow-tasksconductor workflow retry abc-123
workflow rerun <id>Rerun from failed taskworkflow ID--task-id, --correlation-id, --task-input, --workflow-inputconductor workflow rerun abc-123
workflow skip-task <id> <ref>Skip a taskworkflow ID, task ref--task-input, --task-outputconductor workflow skip-task abc-123 task1
workflow jump <id> <ref>Jump to taskworkflow ID, task ref--task-inputconductor workflow jump abc-123 task2
workflow update-state <id>Update workflow stateworkflow ID--request-id, --wait-until-task-ref, --variables, --task-updatesconductor workflow update-state abc-123 --variables '{"key":"value"}'

Flags:

  • --force - Overwrite existing workflow when creating
  • --json - Output complete JSON instead of table (applies to list command)
  • --csv - Output CSV instead of table (mutually exclusive with --json)
  • --sync - Execute synchronously and wait for completion (for start command)
  • --complete - Include complete details (for get-execution command)

Alias: get-all also accepts the legacy form get_all.

Table Output (workflow list): Columns: NAME, VERSION, DESCRIPTION

Status values: RUNNING, COMPLETED, FAILED, TERMINATED, TIMED_OUT, PAUSED

Task Commands

CommandDescriptionRequired ArgsOptional FlagsExample
Definition Management
task listList all task definitionsNone--jsonconductor task list
task get <task_type>Get task definitiontask typeconductor task get my_task
task create <file>Create task definitionJSON fileconductor task create task.json
task update <file>Update task definitionJSON fileconductor task update task.json
task delete <task_type>Delete task definitiontask typeconductor task delete my_task
Execution Management
task poll <type>Batch poll for taskstask type--count, --worker-id, --domain, --timeoutconductor task poll my_task --count 5
task update-executionUpdate task by ref nameNone--workflow-id, --task-ref-name, --status, --output, --worker-idconductor task update-execution --workflow-id abc --task-ref-name task1 --status COMPLETED
task signalSignal task asyncNone--workflow-id, --status, --outputconductor task signal --workflow-id abc --status COMPLETED
task signal-syncSignal task syncNone--workflow-id, --status, --outputconductor task signal-sync --workflow-id abc --status COMPLETED

Flags:

  • --json - Output complete JSON instead of table (applies to list command)

Table Output (task list): Columns: NAME, EXECUTABLE, DESCRIPTION, OWNER, TIMEOUT POLICY, TIMEOUT (s), RETRY COUNT, RESPONSE TIMEOUT (s)

Config Commands

CommandDescriptionRequired ArgsOptional FlagsExample
config saveInteractively save configurationNone--profileconductor config save or conductor config save --profile production
config listList all configuration profilesNoneNoneconductor config list
config showShow the effective config and each value's sourceNone--json, --show-secretsconductor config show
config delete [profile]Delete configuration fileNone--profile, -yconductor config delete production or conductor config delete --profile production -y

Notes:

  • config save: Interactive prompts for server URL, server type, and authentication method. Press Enter to keep existing values. --profile <name> writes config-<name>.yaml; an empty name at the prompt, or --profile default, writes the default config.yaml.
  • config list: Shows all profiles. Default config shown as "default", named profiles show as profile name only.
  • config show: Prints KEY, VALUE and SOURCE for every setting, where source is the flag, the environment variable, the config file, or default. Secrets are masked unless --show-secrets is passed.
  • config delete: Profile can be specified as positional arg or via --profile flag. Use default to delete the default config.yaml. Use -y to skip confirmation prompt.

Table Output (config show): Columns: KEY, VALUE, SOURCE

Webhook Commands

Note: Webhook commands are only available with Orkes Conductor (Enterprise).

CommandDescriptionRequired ArgsOptional FlagsExample
webhook listList webhooksNone--jsonconductor webhook list
webhook get <id>Get webhook detailswebhook IDconductor webhook get webhook-id
webhook createCreate webhookname, source-platform, verifierconductor webhook create --name hook1 --source-platform Custom --verifier HEADER_BASED
webhook update <id>Update webhookwebhook ID, fileconductor webhook update id --file webhook.json
webhook delete <id>Delete webhookwebhook IDconductor webhook delete webhook-id

Flags:

  • --json - Output complete JSON instead of table (applies to list command)

Table Output (webhook list): Columns: NAME, WEBHOOK ID, WORKFLOWS, URL

Schedule Commands

Note: Schedule commands work against both OSS Conductor and Orkes Conductor. The OSS server must include the scheduler module — the default jar from conductor-oss/conductor (used by conductor server start) ships it. Custom OSS builds that omit the module will return 404 with a hint message.

CommandDescriptionRequired ArgsOptional FlagsExample
schedule listList schedulesNone--jsonconductor schedule list
schedule get <name>Get schedule detailsschedule nameconductor schedule get my_schedule
schedule create <file>Create scheduleJSON fileconductor schedule create schedule.json
schedule delete <name>Delete scheduleschedule nameconductor schedule delete my_schedule
schedule pause <name>Pause scheduleschedule nameconductor schedule pause my_schedule
schedule resume <name>Resume scheduleschedule nameconductor schedule resume my_schedule

Flags:

  • --json - Output complete JSON instead of table (applies to list command)

Table Output (schedule list): Columns: NAME, WORKFLOW, STATUS, CREATED TIME

Secret Commands

Note: Secret commands are only available with Orkes Conductor (Enterprise).

Secret management for storing and managing sensitive configuration values like API keys, passwords, and tokens.

CommandDescriptionRequired ArgsOptional FlagsExample
Secret Management
secret listList all secretsNone--with-tags, --jsonconductor secret list
secret get <key>Get secret valuesecret key--show-valueconductor secret get db_password
secret put <key> [value]Create/update secretsecret key--valueconductor secret put db_password mySecret
secret delete <key>Delete secretsecret keyconductor secret delete db_password
secret exists <key>Check if secret existssecret keyconductor secret exists db_password
Tag Management
secret tag-list <key>List tags for secretsecret key--jsonconductor secret tag-list db_password
secret tag-add <key>Add tags to secretsecret key--tag (repeatable)conductor secret tag-add db_password --tag env:prod
secret tag-delete <key>Delete tags from secretsecret key--tag (repeatable)conductor secret tag-delete db_password --tag env:prod
Cache Management
secret cache-clearClear secrets cacheNone--local, --redisconductor secret cache-clear --local

Flags:

  • --with-tags - Include tags in list output (applies to list command)
  • --json - Output complete JSON instead of table (applies to list and tag-list commands)
  • --show-value - Display actual secret value (applies to get command, otherwise shows "Secret exists" message)
  • --value - Provide secret value via flag instead of argument (applies to put command)
  • --tag - Tag in key:value format, repeatable (applies to tag-add and tag-delete commands)
  • --local - Clear local cache only (applies to cache-clear command)
  • --redis - Clear Redis cache only (applies to cache-clear command)
  • If neither --local nor --redis is specified for cache-clear, both caches are cleared

Table Output (secret list):

  • Default: Column: KEY
  • With --with-tags: Columns: KEY, TAGS

Table Output (secret tag-list): Columns: KEY, VALUE, TYPE

Security Notes:

  • Secret values are NOT displayed by default in get command for security
  • Use --show-value flag explicitly to display secret values
  • Delete operations require confirmation unless --yes flag is used

Input Methods (secret put):

# Method 1: Value as argument
conductor secret put my_secret "secret_value"

# Method 2: Value via flag
conductor secret put my_secret --value "secret_value"

# Method 3: Value from stdin
echo "secret_value" | conductor secret put my_secret

# Method 4: Value from file
cat secret.txt | conductor secret put my_secret

API Gateway Commands

Note: API Gateway commands are only available with Orkes Conductor (Enterprise).

API Gateway allows exposing Conductor workflows as REST APIs with authentication, CORS configuration, and route management.

CommandDescriptionRequired ArgsOptional FlagsExample
Service Management
api-gateway service listList all servicesNone--completeconductor api-gateway service list
api-gateway service get <id>Get service detailsservice IDconductor api-gateway service get my-service
api-gateway service create [file]Create serviceNone (file optional)--service-id, --name, --path, --description, --enabled, --mcp-enabled, --auth-config-id, --cors-allowed-origins, --cors-allowed-methods, --cors-allowed-headersconductor api-gateway service create service.json
api-gateway service update <id> <file>Update serviceservice ID, JSON fileconductor api-gateway service update my-service service.json
api-gateway service delete <id>Delete serviceservice IDconductor api-gateway service delete my-service
Auth Configuration Management
api-gateway auth listList auth configsNone--completeconductor api-gateway auth list
api-gateway auth get <id>Get auth configauth config IDconductor api-gateway auth get token-based
api-gateway auth create [file]Create auth configNone (file optional)--auth-config-id, --auth-type, --application-id, --api-keysconductor api-gateway auth create auth.json
api-gateway auth update <id> <file>Update auth configauth config ID, JSON fileconductor api-gateway auth update token-based auth.json
api-gateway auth delete <id>Delete auth configauth config IDconductor api-gateway auth delete token-based
Route Management
api-gateway route list <service_id>List routes for serviceservice ID--completeconductor api-gateway route list my-service
api-gateway route create <service_id> [file]Create routeservice ID (file optional)--http-method, --path, --workflow-name, --workflow-version, --execution-mode, --description, --request-metadata-as-input, --workflow-metadata-in-output, --wait-until-tasksconductor api-gateway route create my-service route.json
api-gateway route update <service_id> <path> <file>Update routeservice ID, route path, JSON fileconductor api-gateway route update my-service /users route.json
api-gateway route delete <service_id> <method> <path>Delete routeservice ID, HTTP method, route pathconductor api-gateway route delete my-service GET /users

Service Create Flags:

  • --service-id - Service ID (required when not using file)
  • --name - Display name of the service
  • --path - Base path for the service (required when not using file)
  • --description - Description of the service
  • --enabled - Enable the service (default: true)
  • --mcp-enabled - Enable MCP for the service (default: false)
  • --auth-config-id - Authentication configuration ID
  • --cors-allowed-origins - CORS allowed origins (repeatable, comma-separated)
  • --cors-allowed-methods - CORS allowed methods (repeatable, comma-separated)
  • --cors-allowed-headers - CORS allowed headers (repeatable, comma-separated)

Auth Config Create Flags:

  • --auth-config-id - Authentication configuration ID (required when not using file)
  • --auth-type - Authentication type: API_KEY or NONE (required when not using file)
  • --application-id - Application ID
  • --api-keys - API keys (repeatable, comma-separated)

Route Create Flags:

  • --http-method - HTTP method: GET, POST, PUT, DELETE, etc. (required when not using file)
  • --path - Route path (required when not using file)
  • --workflow-name - Workflow name to map to this route (required when not using file)
  • --workflow-version - Workflow version (optional, uses latest if not specified)
  • --execution-mode - Workflow execution mode: SYNC or ASYNC (default: SYNC). Note: When using JSON files, use full enum values: SYNCHRONOUS or ASYNCHRONOUS
  • --description - Route description
  • --request-metadata-as-input - Pass request metadata as workflow input
  • --workflow-metadata-in-output - Include workflow metadata in output
  • --wait-until-tasks - Comma-separated task reference names to wait for

Table Output (service list): Columns: ID, NAME, PATH, ENABLED, AUTH CONFIG, ROUTES

Table Output (auth list): Columns: ID, AUTH TYPE, APPLICATION ID, API KEYS

Table Output (route list): Columns: METHOD, PATH, WORKFLOW, VERSION, EXECUTION MODE, DESCRIPTION

Agent Commands

Define, run, and observe AI agents. Agent configs are YAML or JSON files.

CommandDescriptionRequired ArgsOptional FlagsExample
Definition Management
agent init <name>Create a starter agent config fileagent name--model, --strategy/-s, --format/-fconductor agent init triage -s handoff
agent compile <config-file>Compile a config and show its execution planconfig fileconductor agent compile triage.yaml
agent listList registered agentsNone--json, --csvconductor agent list
agent get <name>Get an agent definitionagent name--versionconductor agent get triage --version 2
agent delete <name>Delete an agent definitionagent name--versionconductor agent delete triage
Execution
agent run [prompt]Start an agent and stream its outputprompt--name, --config, --session, --no-streamconductor agent run --name triage "check order 123"
agent stream <execution-id>Stream events from a running executionexecution ID--last-event-idconductor agent stream exec-abc
agent status <execution-id>Get detailed status of an executionexecution IDconductor agent status exec-abc
agent executionSearch agent execution historyNone--name, --status, --since, --windowconductor agent execution --status FAILED --since 1d
agent respond <execution-id>Respond to a human-in-the-loop taskexecution ID--approve, --deny, --reason, --message/-mconductor agent respond exec-abc --approve
agent pruneDelete or archive old execution recordsNone--older-than, --archive, --dry-runconductor agent prune --older-than 30 --dry-run

Flags:

  • --name / --config - agent run requires exactly one: a registered agent name, or a local config file path. Note: on agent run, --config means the agent config file and shadows the global --config (CLI config path); use --profile to select CLI configuration here.
  • --session - Session ID for conversation continuity across runs
  • --no-stream - Start the agent and print the execution ID without streaming
  • --strategy, -s - Multi-agent strategy for init (handoff, sequential, parallel, ...)
  • --format, -f - Output format for init: yaml (default) or json
  • --since - Relative time window, e.g. 30m, 1h, 1d
  • --window - Absolute-style window, e.g. now-1h, now-7d
  • --older-than - Delete executions older than N days (prune command)

Streamed event types: thinking, tool, result, handoff, message, waiting, guardrail (PASS/FAIL), error, done

Table Output (agent list): Columns: NAME, VERSION, TYPE, DESCRIPTION

Table Output (agent execution): Columns: ID, AGENT, STATUS, START_TIME, DURATION

Worker Commands

Run task workers that poll Conductor and execute work locally.

CommandDescriptionRequired ArgsOptional FlagsExample
worker js <js_file>Run a JavaScript worker (EXPERIMENTAL)JS file--type (required), --count, --worker-id, --domain, --poll-timeoutconductor worker js worker.js --type my_task
worker stdio <command> [args...]Poll tasks and execute a command via stdin/stdoutcommand--type (required), --count, --worker-id, --domain, --poll-timeout, --exec-timeout, --verboseconductor worker stdio ./handler.sh --type my_task
worker remoteRun a worker from the job-runner registry (EXPERIMENTAL, Orkes only)None--type (required), --count, --worker-id, --domain, --poll-timeout, --exec-timeout, --refreshconductor worker remote --type my_task
worker list-remoteList workers in the job-runner registry (EXPERIMENTAL, Orkes only)None--namespaceconductor worker list-remote

Flags:

  • --type - Task type to poll for (required)
  • --count - Number of tasks to poll in each batch (default: 1)
  • --worker-id - Worker ID reported to the server
  • --domain - Task domain
  • --poll-timeout - Server-side long-poll wait in milliseconds (default: 100)
  • --exec-timeout - Per-task execution timeout in seconds. stdio and remote only — a JavaScript worker runs in-process with no interrupt, so there is nothing to time out. Default 0 (no timeout) for stdio, 100 for remote.
  • --timeout - Deprecated hidden alias for --poll-timeout
  • --verbose - Print task and result JSON to stdout (stdio command)
  • --refresh - Force refresh the worker from the registry, ignoring cache
  • --namespace - Registry namespace to list workers from (default: default)

Both flavours share one poll loop; they differ only in how user code runs and in the result shape it returns:

FlavourWorker returnsFailure carries
stdio{"status","output","logs","reason"} on stdoutreasonForIncompletion + logs
js{status, body} from the script; $.task holds the taskoutput.error

Workers exit on Ctrl-C/SIGTERM once the in-flight batch finishes — a running task is left to complete and report its real result rather than being killed, which would report a failure the worker inflicted on itself and consume one of the task's retries. A second signal exits immediately. Child processes receive TASK_TYPE, TASK_ID, WORKFLOW_ID, EXECUTION_ID, POLL_DOMAIN, and the CLI's own CONDUCTOR_SERVER_URL and credentials.

See WORKER_JS.md and WORKER_STDIO.md for the worker protocols.

Development Commands

CommandDescriptionRequired ArgsOptional FlagsExample
deployDeploy agents from your project to the serverNone--agents/-a, --language/-l, --package/-p, --jsonconductor deploy --language python
doctorCheck runtime and AI provider configurationNoneconductor doctor
whoamiDisplay information about the current userNoneconductor whoami

deploy flags:

  • --agents, -a - Comma-separated agent names to deploy (default: all discovered)
  • --language, -l - Project language: python or typescript (auto-detected if omitted)
  • --package, -p - Package or path to scan for agents
  • --json - Output results as JSON

Notes:

  • deploy discovers agents defined as module-level variables in your project. Python projects need a Python interpreter on PATH or the PYTHON environment variable set.
  • doctor reports Java and Python availability, the configured server URL and auth state, and which AI provider API keys are set in the environment.
  • whoami prints the server URL and decoded JWT claims. With no auth configured it reports Authentication: none (OSS Conductor).

Other Commands

CommandDescriptionExample
updateUpdate CLI to latest versionconductor update
completion <shell>Generate a shell completion scriptconductor completion zsh
--versionShow CLI versionconductor --version
--helpShow helpconductor --help or conductor workflow --help

Exit Codes

CodeMeaning
0Success
1General error (connection failed, authentication failed, not found, etc.)

Output Format

  • Default: Formatted tables for list commands, human-readable text for other commands
  • Table format: Tab-separated columns with headers (for list commands)
  • JSON format: Available via --json flag for all list commands
  • CSV format: Available via --csv flag. --json and --csv are mutually exclusive.
  • Workflow ID extraction: UUIDs in format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (36 characters with hyphens)
  • Status output: Single line with status value (e.g., RUNNING, COMPLETED)

List Commands with Table/JSON Output:

  • workflow list - Table with NAME, VERSION, DESCRIPTION (or --json for complete data)
  • task list - Table with NAME, EXECUTABLE, DESCRIPTION, OWNER, TIMEOUT POLICY, TIMEOUT (s), RETRY COUNT, RESPONSE TIMEOUT (s) (or --json)
  • schedule list - Table with NAME, WORKFLOW, STATUS, CREATED TIME (or --json)
  • webhook list - Table with NAME, WEBHOOK ID, WORKFLOWS, URL (or --json)
  • secret list - Table with KEY, or KEY and TAGS with --with-tags (or --json)
  • agent list - Table with NAME, VERSION, TYPE, DESCRIPTION (or --json/--csv)

Important: To parse output reliably, redirect stderr to /dev/null to suppress update notifications and warnings:

conductor workflow list 2>/dev/null
conductor task list --json 2>/dev/null
WORKFLOW_ID=$(conductor workflow start --workflow my_workflow 2>/dev/null | grep -oE '[a-f0-9-]{36}')

Input Format

Workflow Input Data

Workflows can accept input data in two ways:

1. Inline JSON (--input flag):

conductor workflow start --workflow my_workflow --input '{"key":"value","count":42}'

2. JSON File (--file flag):

# input.json
{
  "orderId": "12345",
  "customerId": "cust_001",
  "items": [
    {"sku": "ITEM-001", "quantity": 2}
  ]
}

# Start with file
conductor workflow start --workflow my_workflow --file input.json

Workflow Definition Format

Workflow definitions are JSON files with structure:

{
  "name": "my_workflow",
  "version": 1,
  "tasks": [
    {
      "name": "task_1",
      "taskReferenceName": "task_1_ref",
      "type": "SIMPLE",
      "inputParameters": {}
    }
  ]
}

See Conductor documentation for complete workflow definition schema.

Common Patterns

0. Spin up a local server and run a workflow

# Start a local OSS Conductor server (downloads the JAR on first run, needs Java 21)
conductor server start

# Confirm it is up — the default server URL already points at http://localhost:8080/api
conductor server status

# Register and run a workflow; no auth needed against OSS
conductor workflow create workflow.json --force
conductor workflow start --workflow my_workflow --sync

# Tail logs if something goes wrong, then shut down
conductor server logs -f
conductor server stop

1. Deploy workflow to production

# Save production profile (interactive prompts for URL, server type, auth)
conductor config save --profile production

# Deploy workflow
conductor --profile production workflow create workflow.json --force

2. Start and monitor execution

# Start workflow and capture ID
WORKFLOW_ID=$(conductor workflow start --workflow my_workflow 2>/dev/null | grep -oE '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}')

# Start with input data
WORKFLOW_ID=$(conductor workflow start --workflow my_workflow --input '{"orderId":"12345","customerId":"cust_001"}' 2>/dev/null | grep -oE '[a-f0-9-]{36}')

# Start with input from file
WORKFLOW_ID=$(conductor workflow start --workflow my_workflow --file input.json 2>/dev/null | grep -oE '[a-f0-9-]{36}')

# Check status
conductor workflow status "$WORKFLOW_ID"

# Get full details
conductor workflow get-execution "$WORKFLOW_ID"

3. Multi-environment workflow

# Deploy to dev
CONDUCTOR_PROFILE=dev conductor workflow create workflow.json --force

# Test in dev
CONDUCTOR_PROFILE=dev conductor workflow start --workflow my_workflow

# Deploy to prod after testing
CONDUCTOR_PROFILE=prod conductor workflow create workflow.json --force

4. Handle workflow failure

# Check status
STATUS=$(conductor workflow status "$WORKFLOW_ID" 2>/dev/null)

if [ "$STATUS" = "FAILED" ]; then
  # Retry failed task
  conductor workflow retry "$WORKFLOW_ID"

  # Or rerun from failed point
  conductor workflow rerun "$WORKFLOW_ID"
fi

5. Terminate stuck workflows

# Find running workflows
conductor workflow search --workflow my_workflow --status RUNNING

# Terminate specific execution
conductor workflow terminate "$WORKFLOW_ID"

6. Create and test webhook

# Create webhook
conductor webhook create \
  --name my_webhook \
  --source-platform Custom \
  --verifier HEADER_BASED \
  --headers "Authorization:secret123" \
  --receiver-workflows my_workflow:1

# List webhooks to verify
conductor webhook list

7. Manage workflow versions

# Get latest version
conductor workflow get my_workflow

# Get specific version
conductor workflow get my_workflow 2

# Delete old version
conductor workflow delete my_workflow 1

8. Poll and process tasks

# Poll for tasks
conductor task poll my_task_type --count 10 --worker-id worker1

# Update task status
conductor task update-execution \
  --workflow-id "$WORKFLOW_ID" \
  --task-ref-name my_task \
  --status COMPLETED \
  --output '{"result":"success"}'

9. Search for executions

# Find failed executions for a workflow
conductor workflow search --workflow my_workflow --status FAILED --count 50

# Find executions within time range
conductor workflow search --workflow my_workflow \
  --start-time-after "2025-01-01" \
  --start-time-before "2025-01-31"

# Combine filters
conductor workflow search --workflow my_workflow \
  --status RUNNING \
  --start-time-after "2025-01-01 10:00:00" \
  --count 100

Search flags:

  • --workflow <name> - Filter by workflow name
  • --status <status> - Filter by status (COMPLETED, FAILED, RUNNING, PAUSED, TERMINATED, TIMED_OUT)
  • --count <n> - Number of results (max 1000, default 10)
  • --start-time-after <time> - Started after time (formats: YYYY-MM-DD HH:MM:SS, YYYY-MM-DD, or epoch milliseconds)
  • --start-time-before <time> - Started before time (same formats)

10. Manage secrets

# Create a secret from command line
conductor secret put db_password mySecretPassword123

# Create a secret from environment variable
conductor secret put api_key --value "$MY_API_KEY"

# Create a secret from file (without exposing value in command history)
cat secret.txt | conductor secret put encryption_key

# List all secrets (keys only)
conductor secret list

# List secrets with tags
conductor secret list --with-tags

# Get secret value (requires explicit flag for security)
conductor secret get db_password --show-value

# Check if secret exists
conductor secret exists db_password

# Add tags to organize secrets
conductor secret tag-add db_password --tag env:prod --tag team:backend --tag type:database

# List tags for a secret
conductor secret tag-list db_password

# Delete specific tags
conductor secret tag-delete db_password --tag env:prod

# Delete a secret (requires confirmation)
conductor secret delete old_api_key

# Delete without confirmation
conductor secret delete old_api_key -y

# Clear caches after secret rotation
conductor secret cache-clear --local
conductor secret cache-clear --redis

# Clear both caches at once
conductor secret cache-clear

11. Create and manage API Gateway services

# Create service from JSON file
conductor api-gateway service create service.json

# Create service using flags
conductor api-gateway service create \
  --service-id my-api \
  --name "My API Service" \
  --path "/api/v1" \
  --description "API for accessing workflows" \
  --enabled \
  --auth-config-id token-based \
  --cors-allowed-origins "https://example.com" \
  --cors-allowed-methods "GET,POST,PUT,DELETE" \
  --cors-allowed-headers "*"

# List all services
conductor api-gateway service list

# Get service details
conductor api-gateway service get my-api

Example service JSON:

{
  "id": "my-api",
  "name": "My API Service",
  "path": "/api/v1",
  "description": "API for accessing workflows",
  "enabled": true,
  "mcpEnabled": true,
  "authConfigId": "token-based",
  "corsConfig": {
    "accessControlAllowOrigin": ["https://example.com"],
    "accessControlAllowMethods": ["GET", "POST", "PUT", "DELETE"],
    "accessControlAllowHeaders": ["*"]
  }
}

12. Set up API Gateway authentication

# Create auth config from file
conductor api-gateway auth create auth-config.json

# Create auth config using flags
conductor api-gateway auth create \
  --auth-config-id "token-based" \
  --auth-type "API_KEY" \
  --application-id "my-app-id" \
  --api-keys "key1,key2,key3"

# List auth configs
conductor api-gateway auth list

# Get specific auth config
conductor api-gateway auth get token-based

Example auth config JSON:

{
  "id": "token-based",
  "authenticationType": "API_KEY",
  "applicationId": "my-app-id",
  "apiKeys": ["key1", "key2"]
}

13. Create API Gateway routes for workflows

# Create a route from JSON
conductor api-gateway route create my-api route.json

# Create a route using flags
conductor api-gateway route create my-service \
  --http-method "GET" \
  --path "/users/{userId}" \
  --description "Get user by ID" \
  --workflow-name "get_user_workflow" \
  --workflow-version 1 \
  --execution-mode "SYNC"

# Create async route with metadata
conductor api-gateway route create my-service \
  --http-method "POST" \
  --path "/orders" \
  --description "Create order" \
  --workflow-name "create_order_workflow" \
  --execution-mode "ASYNC" \
  --request-metadata-as-input \
  --workflow-metadata-in-output

# List routes for a service
conductor api-gateway route list my-api

# Delete a route
conductor api-gateway route delete my-api GET /users

Example route JSON:

{
  "path": "/users/{userId}",
  "httpMethod": "GET",
  "description": "Get user by ID",
  "workflowExecutionMode": "SYNCHRONOUS",
  "mappedWorkflow": {
    "name": "get_user_workflow",
    "version": 1
  }
}

14. Build and run an agent

# Check that a model provider API key is configured
conductor doctor

# Scaffold a config, inspect the plan, then run it
conductor agent init triage
conductor agent compile triage.yaml
conductor agent run --config triage.yaml "summarize open incidents"

# Run a registered agent and keep conversation context across calls
conductor agent run --name triage --session sess-001 "what changed since yesterday?"

# Start without streaming, then attach to the stream later
EXEC_ID=$(conductor agent run --name triage "long task" --no-stream 2>/dev/null | grep -oE '[a-f0-9-]{36}')
conductor agent stream "$EXEC_ID"

# Approve a human-in-the-loop step
conductor agent respond "$EXEC_ID" --approve --reason "verified manually"

15. Run a task worker

# Execute any command per task over stdin/stdout
conductor worker stdio ./handler.sh --type my_task --count 5 --verbose

# Or run a JavaScript worker
conductor worker js worker.js --type my_task --worker-id worker1

Error Handling

Connection Errors

Error: Get "https://...": dial tcp: lookup ...: no such host

Solution: Verify --server URL or CONDUCTOR_SERVER_URL

Authentication Errors

Error: 401 Unauthorized

Solution: Check authentication credentials (token, key/secret)

Not Found Errors

Error: 404 Not Found

Solution: Verify resource name/ID exists

Profile Errors

Error: Profile 'prod' doesn't exist (expected file: ~/.conductor-cli/config-prod.yaml)

Solution: Create profile with conductor config save --profile prod or check profile name

Configuration File Format

Location: ~/.conductor-cli/config.yaml or ~/.conductor-cli/config-<profile>.yaml

server: https://conductor.example.com/api
auth-token: your-token-here
# OR
auth-key: your-key
auth-secret: your-secret

File permissions: Config files are saved with 0600 (read/write for owner only) for security.

Best Practices for LLM Usage

  1. Always redirect stderr when parsing output: conductor command 2>/dev/null
  2. Extract workflow IDs using: grep -oE '[a-f0-9-]{36}'
  3. Check exit codes for error handling: if [ $? -eq 0 ]; then ...
  4. Use profiles for multi-environment operations
  5. Quote workflow names with spaces: conductor workflow get "my workflow"
  6. Use --force flag when updating workflows to overwrite
  7. Save profiles once then use CONDUCTOR_PROFILE env var for cleaner commands

Auto-Update Feature

The CLI checks for updates every 24 hours and notifies when a new version is available:

⚠ A new version is available: v0.0.12 (current: v0.0.11)
Run 'conductor update' to download it or update with your package manager.

Update to latest version:

conductor update

Note: Update notifications are written to stderr and won't interfere with command output.

Full Documentation

For detailed human-readable documentation, see README.md