# Principles for CLI output There are four types of output: 1. Command output 2. Command error 3. Progress reporting 4. Logging We try to adhere to the following rules: * On success, the command's primary output is written to standard output. This is required to make commands composable in scripts. * On error, the command's error message is written to standard error and the command exits with a non-zero exit code. * Progress reporting may be provided to standard error, iff standard error is a TTY _and_ logging is disabled _or_ the logging output is different from standard error. * Logging must be enabled explicitly. If enabled, it writes to standard error by default. Logging is **only** an aid to investigate issues and must not be relied on for command output, command errors, or progress reporting.