Skip to content

Output Modes

Choose how panix reports progress with --output-mode, and pair non-interactive modes with file logging and CI flags.

ModeDescription
tuiInteractive TUI with real-time visibility (default, requires a TTY)
consoleHuman-readable log output to stdout
jsonJSON-structured log output to stdout
Terminal window
panix deploy --output-mode console # Human-readable output
panix deploy --output-mode json # JSON output for piping to tools
panix deploy --output-mode json --log

When no TTY is present, console is selected automatically since the TUI cannot render without a terminal. For interactive behavior in TUI mode (keybinds and view options), see TUI Keybinds.

--log writes structured JSON to a file with an epoch timestamp in the name (e.g., panix.1746565600.log):

Terminal window
panix deploy --log # Log to panix.<epoch>.log
panix deploy --log --log-file deploy.log # Log to deploy.<epoch>.log
panix deploy --debug # Debug mode (enables logging)

In panix.yml these live under flags.logging: log, log_file, debug.

Console/JSON output includes:

  • Structured fields: xpath, phase, description, command, duration (end events only), status, status_running, output
  • command_start / command_end events per command with duration in seconds
  • phase_start / phase_end events per phase
  • workflow_start (emitted first, includes the machine count)
  • workflow_end with final state of all machines (xpath, status, phase, total duration, error)
  • Failed events are logged at ERROR level, successful ones at INFO

Example:

{"level":"info","xpath":"fleet/infrastructure/personal-workstation/personal-workstation","phase":"activate","description":"activate","command":"ssh ...","event":"command_start","status_running":"activating","time":"2026-04-08T23:58:59+02:00","message":"command started"}
{"level":"info","xpath":"fleet/infrastructure/personal-workstation/personal-workstation","phase":"activate","description":"activate","command":"ssh ...","event":"command_end","duration":1.94,"output":"...","status":"success","time":"2026-04-08T23:59:01+02:00","message":"command finished"}
{"level":"error","event":"workflow_end","machines":[{"xpath":"fleet/...","status":"failed","phase":"inspect","duration":0.06,"error":"reachability check failed: regular SSH is unreachable"}],"status":"failed","error":"one or more machines failed","time":"2026-04-08T23:59:43+02:00","message":"workflow completed"}
Terminal window
panix deploy --require-all-success # Abort if any task fails
panix deploy --exit-on-complete # Exit when the workflow finishes
  • --require-all-success aborts the run if any task fails, primarily for CI/CD. The retry and restart keybinds are disabled in this mode.
  • --exit-on-complete forces the TUI to exit when the workflow finishes. Console and JSON modes exit automatically.