UiPath Documentation
uipath-cli
latest
false
UiPath CLI user guide

Global options

Global options accepted by every `uip` invocation, covering output format, output filter, log level, and log file.

Every uip invocation is pre-scanned for a fixed set of global options before any tool or subcommand sees its arguments — they can appear anywhere on the command line, work identically across every tool, and are stripped out before per-command flag parsing runs.

OptionShortValueDefaultPurpose
--outputtable, json, yaml, plain, markdownjsonFormat of the primary output written to stdout.
--jsonflagHidden compatibility alias for --output json. Passing it together with an explicit --output <value> is a conflict — see below.
--output-filterJMESPath expressionPost-filter applied to the JSON payload before formatting.
--log-leveldebug, info, warn, errorinfoVerbosity of log messages written to stderr (and --log-file if set).
--log-filepathIf set, logs are duplicated to this file in JSON Lines format.
--profilenameSelects a named, saved login profile instead of the default credentials location. Mutually exclusive with a command's own -f, --file <folder> (for example on uip login, uip login tenant list/set, uip logout) — passing both is a ValidationError. See Sessions and credentials.
--interactive / --no-interactiveflagauto (prompts only on a TTY)Force prompting on or off, overriding the default "prompt only when connected to a TTY" behavior. Not specific to any one command — it governs every place a uip command would otherwise ask a question (for example tenant selection during uip login, or the agent/target picker on uip skills install).

--version (-v) and --help (-h) are also recognized on uip and every subcommand, but they are standard CLI conventions rather than global flags in the sense above.

--output

Choose the output format. Both --output json and --output=json work; values are case-sensitive.

uip or folders list                     # default: json
uip or folders list --output table      # human-friendly table
uip or folders list --output yaml       # yaml
uip or folders list --output plain      # key=value lines, no structure
uip or folders list --output markdown   # GitHub-flavored markdown, for agents/chat surfaces
uip or folders list                     # default: json
uip or folders list --output table      # human-friendly table
uip or folders list --output yaml       # yaml
uip or folders list --output plain      # key=value lines, no structure
uip or folders list --output markdown   # GitHub-flavored markdown, for agents/chat surfaces
  • json (default) — one JSON document on stdout. Parseable by jq, --output-filter, and any JSON consumer. This is the default for every invocation regardless of whether the terminal is a TTY.
  • table — bordered, colored table suitable for reading in a terminal. Not stable across versions — do not parse it.
  • yaml — YAML serialization of the same structure as json.
  • plain — flat key=value lines. Useful for piping into shell read, grep, and cut without installing jq.
  • markdown — a GFM table for a list, or **key:** value lines for a single record. Meant for an agent or chat surface reading uip output, not a terminal session. See Output formats — markdown for the full behavior.
Note:

The default is json, not table. When a human runs uip or folders list in a terminal they see a JSON document on stdout. Pass --output table explicitly (or add it to a shell alias) for the reading-friendly view. This choice keeps the same stdout shape in a terminal and in a pipeline — scripts do not need to care whether they are running interactively.

--json (hidden alias)

--json is a hidden compatibility alias for --output json — it doesn't appear in --help, but it is fully functional:

uip or folders list --json   # identical to --output json
uip or folders list --json   # identical to --output json

Passing --json together with an explicit --output <value> (any value, including json) is flagged as a conflict internally; avoid combining them — pass one or the other.

--profile

Select a named, saved login profile instead of the default credentials location:

uip login --profile ci-runner --client-id env.UIPATH_CLIENT_ID --client-secret env.UIPATH_CLIENT_SECRET --tenant Production
uip or folders list --profile ci-runner
uip login --profile ci-runner --client-id env.UIPATH_CLIENT_ID --client-secret env.UIPATH_CLIENT_SECRET --tenant Production
uip or folders list --profile ci-runner

--profile <name> and a command's own -f, --file <folder> are mutually exclusive — passing both fails with ValidationError: option '--profile' cannot be used with option '--file'. Profile names are normalized (case and separator rules apply); an invalid name is rejected before any network call. See Sessions and credentials — named profiles.

--interactive / --no-interactive

Override the default "prompt only when stdout is a TTY" behavior:

uip login --interactive        # force the tenant-selection prompt even when not on a TTY
uip skills install --no-interactive --agent claude   # never prompt, fail instead if a required choice is missing
uip login --interactive        # force the tenant-selection prompt even when not on a TTY
uip skills install --no-interactive --agent claude   # never prompt, fail instead if a required choice is missing

--interactive sets prompting to always-on; --no-interactive forces it off. Neither flag is specific to uip login — despite appearing in login examples throughout this documentation set, interactivity is a cross-cutting global option with no command-specific short form (there is no --it or similar alias anywhere in the CLI).

Stream separation

--output controls stdout only. Logs, progress indicators, and human-facing errors go to stderr, regardless of format. This means a pipeline can capture clean JSON with:

uip or folders list > folders.json 2> uip.log
uip or folders list > folders.json 2> uip.log

…and still see the log output separately.

--output-filter

Apply a JMESPath expression to the JSON payload before formatting. The filter runs on the full response envelope, so Data[*].Name picks names out of the Data array, length(Data) returns a count, and so on.

# just the Data field
uip or folders list --output-filter "Data"

# folder names only
uip or folders list --output-filter "Data[*].Name"

# count
uip or folders list --output-filter "length(Data)"

# first folder's key and name
uip or folders list --output-filter "Data[0] | {key: Key, name: Name}"
# just the Data field
uip or folders list --output-filter "Data"

# folder names only
uip or folders list --output-filter "Data[*].Name"

# count
uip or folders list --output-filter "length(Data)"

# first folder's key and name
uip or folders list --output-filter "Data[0] | {key: Key, name: Name}"

Combining with --output:

# names as YAML
uip or folders list --output-filter "Data[*].Name" --output yaml

# names as one-per-line plain text
uip or folders list --output-filter "Data[*].Name" --output plain
# names as YAML
uip or folders list --output-filter "Data[*].Name" --output yaml

# names as one-per-line plain text
uip or folders list --output-filter "Data[*].Name" --output plain

A malformed filter expression fails fast with a ValidationError and exit code 3 before the underlying command runs — so a typo does not waste an API call.

Tip:

--output-filter is the CLI's version of Azure CLI's --query, AWS CLI's --query, and gcloud's --filter/--format. If you already know JMESPath from those tools, the syntax is identical.

--log-level

Set the verbosity of log messages (written to stderr and to --log-file if provided).

uip or folders list --log-level debug   # verbose — HTTP calls, auth refresh, tool loading
uip or folders list --log-level info    # default
uip or folders list --log-level warn
uip or folders list --log-level error   # only failures
uip or folders list --log-level debug   # verbose — HTTP calls, auth refresh, tool loading
uip or folders list --log-level info    # default
uip or folders list --log-level warn
uip or folders list --log-level error   # only failures

Values are case-insensitive. Unknown values are silently ignored (the default is kept) rather than erroring — on purpose, so a typo in a wrapper script does not break a pipeline.

The UIPATH_LOG_LEVEL environment variable is not honored; pass the flag or set it in a profile script.

--log-file

Write a duplicate of the log stream to the specified file, in JSON Lines format (one JSON object per line). The file is appended — use a build-specific path if you need separate logs per run.

uip or folders list --log-file ./uip.log
uip or folders list --log-file /var/log/uip/$(date +%F).log --log-level debug
uip or folders list --log-file ./uip.log
uip or folders list --log-file /var/log/uip/$(date +%F).log --log-level debug

Each line in the file looks like:

{"time":"2026-04-24T18:42:00.123Z","level":"info","message":"CLI v1.0.0 starting — output=json, logLevel=info, logFile=./uip.log"}
{"time":"2026-04-24T18:42:00.123Z","level":"info","message":"CLI v1.0.0 starting — output=json, logLevel=info, logFile=./uip.log"}

This format is designed for log shippers (Fluent Bit, Loki, Splunk) and for post-mortem analysis.

Where global options apply

Global options are stripped from the command line before per-command flags are parsed, so they can appear anywhere on the command line:

uip --output table or folders list
uip or --output table folders list
uip or folders list --output table
uip or folders list --output=table
uip --output table or folders list
uip or --output table folders list
uip or folders list --output table
uip or folders list --output=table

All four invocations are equivalent.

Tool subcommands do not define their own --output or --log-level. A tool that inadvertently defined one would shadow the global flag — the CLI's lint checks forbid this.

Exit codes

Global options control output and logging only; they do not affect exit codes. See Exit codes.

Environment variable overrides

Two environment variables change global-option behavior without a flag:

VariableEffect
UIP_DEFAULT_OUTPUTOverrides the built-in json default for --output when the flag isn't passed. Accepts table, json, yaml, plain, or markdown; invalid values are ignored. An explicit --output on the command line always wins.
UIP_TIMINGSSet to 1 or true to print a per-invocation timing line to stderr on every uip command. See Command timings below.

Command timings

Set UIP_TIMINGS=1 (or true) and every invocation prints one line to stderr:

[timing] 'uip or assets list' exit=0 total=1250ms startup=380ms command=863ms http=691ms httpCalls=3 flush=7ms
[timing] 'uip or assets list' exit=0 total=1250ms startup=380ms command=863ms http=691ms httpCalls=3 flush=7ms
FieldMeaning
(the quoted command)The command as typed.
exitThe exit code the invocation returned.
totalTotal wall clock, measured from process start.
startupEverything before the command handler ran — process boot, config, tool loading.
commandThe command handler itself.
httpSummed duration of the run's outbound HTTP calls — a sum, not wall clock. It overlaps command rather than adding to it, so parallel calls can make it larger than command.
httpCallsHow many outbound HTTP calls that sum covers.
flushEverything after the handler returned — telemetry bookkeeping and the final flush.

startup + command + flush always equals total. Fields are omitted when they don't apply: a run that never reaches a handler (uip --version, an unknown command) prints only total and exit; a command that makes no HTTP call has neither http nor httpCalls.

The report has its own switch — it doesn't depend on --log-level, so you get durations without turning on debug output, and stdout is never touched.

See also

Was this page helpful?

Connect

Need help? Support

Want to learn? UiPath Academy

Have questions? UiPath Forum

Stay updated