Output Modes
Choose how panix reports progress with --output-mode, and pair non-interactive modes with file logging and CI flags.
| Mode | Description |
|---|---|
tui | Interactive TUI with real-time visibility (default, requires a TTY) |
console | Human-readable log output to stdout |
json | JSON-structured log output to stdout |
panix deploy --output-mode console # Human-readable outputpanix deploy --output-mode json # JSON output for piping to toolspanix deploy --output-mode json --logWhen 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.
File Logging
Section titled “File Logging”--log writes structured JSON to a file with an epoch timestamp in the name (e.g., panix.1746565600.log):
panix deploy --log # Log to panix.<epoch>.logpanix deploy --log --log-file deploy.log # Log to deploy.<epoch>.logpanix deploy --debug # Debug mode (enables logging)In panix.yml these live under flags.logging: log, log_file, debug.
JSON Structure
Section titled “JSON Structure”Console/JSON output includes:
- Structured fields: xpath, phase, description, command, duration (end events only), status, status_running, output
command_start/command_endevents per command with duration in secondsphase_start/phase_endevents per phaseworkflow_start(emitted first, includes the machine count)workflow_endwith final state of all machines (xpath, status, phase, total duration, error)- Failed events are logged at
ERRORlevel, successful ones atINFO
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"}CI Flags
Section titled “CI Flags”panix deploy --require-all-success # Abort if any task failspanix deploy --exit-on-complete # Exit when the workflow finishes--require-all-successaborts the run if any task fails, primarily for CI/CD. The retry and restart keybinds are disabled in this mode.--exit-on-completeforces the TUI to exit when the workflow finishes. Console and JSON modes exit automatically.