Summary
Add a --no-header flag to the commands that emit tab-separated tabular output — runs list, runs search, and roster list — so their output can be piped directly into tools like awk, cut, or fzf without having to skip the first line.
Background
Several parler commands print a header row followed by data rows:
trace_id command status started_at input stages
abc123 process completed 2026-04-13T… meet.mp3 5
When piping into scripts or interactive selectors like fzf, the header row is noise:
# Fragile — has to skip first line manually
parler runs list | tail -n +2 | fzf
# Clean with --no-header
parler runs list --no-header | fzf
This is a small, self-contained improvement with high usability impact.
What to implement
Add --no-header as a boolean flag to three commands in parler/cli.py:
| Command |
Current header line |
parler runs list |
trace_id\tcommand\tstatus\tstarted_at\tinput\tstages |
parler runs search |
trace_id\tcommand\tstatus\tstarted_at\tinput\tstages |
parler roster list |
name\trole\tteam\taliases\tadded_at |
Example:
parler runs list --no-header
# abc123 process completed 2026-04-13T11:00:00Z meeting.mp3 5
parler runs list --no-header | awk '{print $1}'
# abc123
# def456
When --no-header is set, skip the click.echo("trace_id\t...") line and emit data rows only. The flag should have no effect when --json is also set (JSON output has no header to suppress).
Files to look at
| File |
Lines to focus on |
parler/cli.py — list_runs command |
The click.echo("trace_id\t...") line inside the command body |
parler/cli.py — search_runs command |
Same pattern |
parler/cli.py — roster_list command |
Same pattern, different header |
tests/unit/test_cli_commands.py |
TestOperationalCommands and TestRunsSearch for test patterns |
Acceptance criteria
Setting up
git clone https://github.com/AbdelStark/mistral-parler && cd mistral-parler
uv sync --locked --group dev
uv run parler runs list # observe current header
uv run parler roster list # observe current header
uv run pytest tests/unit/test_cli_commands.py -q # confirm baseline
Tips for first-timers
- Adding a flag is one decorator line:
@click.option("--no-header", is_flag=True, help="Suppress the column header row.")
- The change in each command body is a single
if not no_header: guard around the click.echo("trace_id\t...") line
- This is a great first issue if you want to understand how Click options work and get familiar with the CLI test patterns without touching any business logic
- All three commands follow the same pattern — once you've done one, the other two are copy-paste with the column names changed
Summary
Add a
--no-headerflag to the commands that emit tab-separated tabular output —runs list,runs search, androster list— so their output can be piped directly into tools likeawk,cut, orfzfwithout having to skip the first line.Background
Several
parlercommands print a header row followed by data rows:When piping into scripts or interactive selectors like
fzf, the header row is noise:This is a small, self-contained improvement with high usability impact.
What to implement
Add
--no-headeras a boolean flag to three commands inparler/cli.py:parler runs listtrace_id\tcommand\tstatus\tstarted_at\tinput\tstagesparler runs searchtrace_id\tcommand\tstatus\tstarted_at\tinput\tstagesparler roster listname\trole\tteam\taliases\tadded_atExample:
When
--no-headeris set, skip theclick.echo("trace_id\t...")line and emit data rows only. The flag should have no effect when--jsonis also set (JSON output has no header to suppress).Files to look at
parler/cli.py—list_runscommandclick.echo("trace_id\t...")line inside the command bodyparler/cli.py—search_runscommandparler/cli.py—roster_listcommandtests/unit/test_cli_commands.pyTestOperationalCommandsandTestRunsSearchfor test patternsAcceptance criteria
parler runs list --no-headeromits the header row; data rows are unchangedparler runs search --no-headeromits the header rowparler roster list --no-headeromits the header row--no-headerhas no effect when combined with--json(no error, no warning)--no-headeris listed in--helpoutput for each affected command--no-headerand present without itruff checkandruff format --checkpassSetting up
Tips for first-timers
@click.option("--no-header", is_flag=True, help="Suppress the column header row.")if not no_header:guard around theclick.echo("trace_id\t...")line