Skip to content

CLI Output Formatting

Sequant uses a consistent set of typographic symbols and formatting conventions across all CLI commands. This document covers the design principles, symbol reference, and how output adapts to different environments.

  1. Sequant installednpx sequant --version
  2. Terminal with Unicode support — most modern terminals (iTerm2, Windows Terminal, VS Code)
  1. No emoji in structured output — typographic symbols (, , , ·, !) align properly in monospace
  2. Ora is the source of truth — success/fail symbols match what ora spinners produce
  3. Columnar alignment — config key-value pairs are padded for readability
  4. Minimal chrome — no boxes, light dividers, bold titles instead of bordered headers
  5. Quiet by default — heartbeats only when genuinely idle; phase events are the primary progress signal
  6. Graceful degradation — noColor, non-TTY, CI, and verbose modes all work

Used by statusIcon() in src/lib/cli-ui.ts and throughout all commands:

StatusTTY SymbolNo-Color FallbackUsage
Success (green)[OK]Completed phases, passed checks
Error (red)[FAIL]Failed phases, errors
Warning! (yellow)[WARN]Non-fatal warnings, degraded state
Pending· (gray)[ ]Not yet started
Running (cyan)[..]In progress

Used in sequant run parallel mode and phase tracking:

StateSymbolExample
Running▸ #151 exec
Complete✔ #151 exec 46s
Failed✖ #151 exec
Waiting·#153 ·
  • Standard: light (U+2500) repeated to width
  • Legacy Windows: - (ASCII hyphen)
  • JSON/minimal mode: empty string (suppressed)
  • headerBox(title) returns bold text only (no boxen borders)
  • sectionHeader(title) returns bold title + light divider underneath
ModeBehavior
TTY (default)Animated ora spinners, colored symbols, light dividers
Non-TTYText spinners (///!), no ANSI overwrite
No-color (NO_COLOR=1)ASCII fallbacks: [OK], [FAIL], [WARN], [ ], [..]
CI (CI=true)Minimal output, no animations, no decorative elements
JSON (--json)All decorative output suppressed
Verbose (--verbose)Text spinners (no animation) to avoid overwriting log lines

When running sequant run with multiple issues in parallel mode:

Stack node
Phases auto-detect from labels
Mode parallel (concurrency: 3)
Issues #151, #152, #153
▸ #151 exec
▸ #152 spec
✔ #151 exec 46s
✖ #153 spec
✔ #152 spec 12s
✔ #151 completed (2m 2s)
✖ #153 failed: spec error
3 passed · 0 failed
✔ #151: spec → exec → qa → PR #160 (13m 38s)
Log: .sequant/runs/2026-04-08T12-00-00.json

In parallel mode, a heartbeat message appears every 5 minutes (only when no phase events occurred in the last 60 seconds):

Still running... (5m 0s elapsed)

The sequant run command displays configuration in columnar format:

Stack node
Phases auto-detect from labels
Mode sequential (stop-on-failure)
Quality loop enabled (max 3 iterations)
Logging JSON (run a1b2c3d4...)
State enabled
Issues #218, #219

When adding new CLI output, follow these conventions:

  • Use statusIcon() from src/lib/cli-ui.ts for status indicators
  • Use divider() for horizontal rules
  • Use headerBox() for section titles
  • Use colors.muted() for secondary information
  • Never use decorative emoji in terminal output
  • Always provide no-color fallbacks via config.noColor checks

Symbols display as boxes or question marks

Section titled “Symbols display as boxes or question marks”

Symptoms: shows as or ?

Solution: Your terminal doesn’t support Unicode. Set NO_COLOR=1 to use ASCII fallbacks, or switch to a modern terminal (iTerm2, Windows Terminal, VS Code integrated terminal).

Symptoms: Animated spinners produce noisy logs

Solution: Set CI=true environment variable (most CI systems do this automatically). Sequant detects CI and switches to minimal output.


Generated for Issue #495 on 2026-04-08