Feature Request: Add --format to `codex features list` output

Resolved 💬 4 comments Opened Dec 21, 2025 by DCjanus Closed Mar 14, 2026
💡 Likely answer: A maintainer (etraut-openai, contributor) responded on this thread — see the highlighted reply below.

Summary

  • Add a --format flag to codex features list to control output format.

Motivation

The current output is plain TSV without headers. Because feature names vary in length, columns drift in typical terminals/fonts, making the list hard to scan.

For example in v0.77.0:

<img width="391" height="274" alt="Image" src="https://github.com/user-attachments/assets/d8ca017c-e3c4-468b-a0d4-b25aff46143b" />

A structured output option (table/markdown/json) would improve readability for humans while also making it easier to consume in scripts or docs.

Proposed behavior

  • --format plain|table|markdown|json, default plain.

Expected output examples

<details>
<summary>table output</summary>

  ╭──────────────────────────────┬──────────────┬─────────╮
  │ name                         │ stage        │ enabled │
  ├──────────────────────────────┼──────────────┼─────────┤
  │ undo                         │ stable       │ true    │
  ├──────────────────────────────┼──────────────┼─────────┤
  │ parallel                     │ stable       │ true    │
  ├──────────────────────────────┼──────────────┼─────────┤
  │ view_image_tool              │ stable       │ true    │
  ├──────────────────────────────┼──────────────┼─────────┤
  │ ...                          │ ...          │ ...     │
  ├──────────────────────────────┼──────────────┼─────────┤
  │ skills                       │ experimental │ true    │
  ├──────────────────────────────┼──────────────┼─────────┤
  │ tui2                         │ experimental │ false   │
  ╰──────────────────────────────┴──────────────┴─────────╯

</details>

<details>
<summary>markdown output</summary>

  | name                         | stage        | enabled |
  |------------------------------|--------------|---------|
  | undo                         | stable       | true    |
  | parallel                     | stable       | true    |
  | view_image_tool              | stable       | true    |
  | ...                          | ...          | ...     |
  | skills                       | experimental | true    |
  | tui2                         | experimental | false   |

</details>

<details>
<summary>plain output</summary>

  undo	stable	true
  parallel	stable	true
  view_image_tool	stable	true
  ...
  skills	experimental	true
  tui2	experimental	false

</details>

<details>
<summary>json output</summary>

  {
    "features": [
      { "name": "undo", "stage": "stable", "enabled": true },
      { "name": "parallel", "stage": "stable", "enabled": true },
      { "name": "view_image_tool", "stage": "stable", "enabled": true },
      { "name": "...", "stage": "...", "enabled": "..." },
      { "name": "skills", "stage": "experimental", "enabled": true },
      { "name": "tui2", "stage": "experimental", "enabled": false }
    ]
  }

</details>

Backward compatibility

  • Keeping the default as plain preserves backward compatibility and avoids breaking existing scripts.
  • A more human-readable default (like table) could benefit most users, so this is worth discussing.

Reference

Notes

  • Table and Markdown table output can be implemented via the tabled crate, avoiding custom layout logic.

View original on GitHub ↗

4 Comments

santiago-afonso · 8 months ago

Just parse it, man

DCjanus · 8 months ago
Just parse it, man

Parsing is possible, but the format option is also about making the output easier to read for humans.

Tables/markdown are much more scannable in terminals and docs, while JSON remains best for scripts.

Default can stay plain; the flag just adds a clearer view when needed.

etraut-openai contributor · 8 months ago

I don't know that a new command-line option is the right answer here. Every new option that we add needs to be documented, localized, and maintained. This doesn't feel like it meets the bar.

We can leave this feature request open to see if this is a problem other users would like to see addressed. If it gets enough upvotes, we can look at potential solutions.

etraut-openai contributor · 5 months ago

This feature request hasn't received enough upvotes, so I'm closing it.