openai / openai/codex

CLI: add a /settings page for discoverable terminal preferences

Open
#44,722 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

CLI config enhancement TUI
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

What variant of Codex are you using?

CLI (TUI).

What feature would you like to see?

Add a /settings page for discovering and changing terminal preferences without leaving the conversation or knowing their TOML keys.

My initial use case was disabling the decorative composer stars when redraws interfere with terminal text selection and copying. The existing tui.whimsy = false option addresses the effect; the missing piece is discovering and changing that preference inside the CLI. Notifications, copy-friendly output, and other terminal preferences have the same discoverability problem.

The proposed interaction is:

  • A few controls per section: Appearance, Input & copying, Notifications, Conversation, Sessions, and Advanced.
  • One list of settings with current values. Up/Down selects a setting, Left/Right changes and saves it, and Tab/Shift+Tab changes sections while remembering the selection.
  • The selected setting's explanation appears below the list by default, including whether a change applies immediately, to the next session, or after restarting. Keyboard shortcuts stay at the bottom.
  • Unavailable controls are dimmed and explain why when focused. For example, pets and pet positioning are unavailable in tmux. They cannot be activated accidentally.
  • Complex choices, such as themes and keyboard shortcuts, open their existing pickers with Enter and return to the settings page.

Example from the working prototype:

Settings · saves automatically
Appearance  Input & copying  [Notifications]  Conversation  Sessions  Advanced

  Notifications   On
› Delivery        ‹ Desktop (OSC 9) ›
  When to notify  When unfocused

Delivery · Applies immediately

Automatic chooses an appropriate terminal notification backend. Desktop uses OSC
9 when supported; Bell uses the terminal bell, whose sound or visual behavior is
controlled by your terminal.

Delivery: Saved. Applies immediately.

Tab / Shift+Tab section · ↑ / ↓ move · ← / → change · esc back · r reset

Changes should preserve unrelated configuration, respect project and command-line overrides, report failed or overridden saves, and offer a reset to the inherited value.

Additional information

I built and tried a reference implementation in a fork: design and implementation, at commit c521281. It covers 23 existing preferences without new config keys or dependencies. The page was exercised locally in Ghostty/tmux; the TUI test suite passed 4,613 tests with six skipped, including 12 added behavior tests and 18 reviewed layout snapshots.

Related problem: #38017 documents selection failures during status animation redraws in GNOME Terminal/VTE. A settings page makes existing workarounds discoverable; it does not itself fix the underlying terminal redraw behavior.

I understand that external code PRs are not accepted, so the fork is offered as a concrete design reference for this feature discussion. Would a grouped TUI settings page fit the planned CLI UX, and which controls would make sense for an initial version?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the linked reference implementation at commit c521281 and the related issue #38017, then run the TUI test suite to understand the existing behavior. Done means a grouped /settings page covers an agreed initial set of terminal preferences, preserves unrelated configuration, respects overrides, reports save failures, and supports resetting inherited values.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
cli
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.