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

Resolved 💬 4 comments Opened Dec 21, 2025 by DCjanus Closed Mar 14, 2026

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 ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗