Allow customizing the status line

Resolved 💬 16 comments Opened Aug 30, 2025 by guidedways Closed Feb 5, 2026
💡 Likely answer: A maintainer (etraut-openai, contributor) responded on this thread — see the highlighted reply below.

What feature would you like to see?

I'd like to see the current working directory / git branch being worked on in the status line (the area below the entry field). Claude Code offers complete customization of this area, which makes it very easy to see what's important for the project at hand. Right now switching between terminals it's easy to forget what the working directory is.

Are you interested in implementing this feature?

_No response_

Additional information

_No response_

View original on GitHub ↗

16 Comments

hagan · 10 months ago

I second this, just knowing the current working directory/git branch details makes this so much better. Additionally, allowing users to customize in a similar manner to Claude would be an extremely useful addition to Codex. I wrote my own custom statusline for Claude in Rust to provide/track stats too, so I'm a little biased here. https://github.com/hagan/claudia-statusline. I would be willing to rework/rename and re-license to support Codex supporting this feature.

joshsymonds · 8 months ago

@etraut-openai is there interest in this feature and is it something OpenAI intends to produce itself? I am maintaining a fork of Codex to add the status line that I want but rebasing it constantly on upstream is proving very painful. Per CONTRIBUTING.md I'd be happy to contribute a more configurable status line/styling system if contributions like that would be accepted. I'd be happy to post what the API would look like first if that would be a good way to start this conversation, either here or in a new issue.

etraut-openai contributor · 8 months ago

Thanks for the offer to help. I think we'd be interested in this, but it may be a little while before we can engage. The codex team has limited bandwidth, and we've received many hundreds of great feature requests from the community. We're trying to prioritize bug fixes and feature requests that have the highest impact. We use upvotes (reactions) to help inform priorities. I see that this feature has received some reactions, but there are many other features ahead of it in the queue. Thanks for your patience as we work through the list of feature requests and bug reports. It's gratifying to see the innovative ways that the community is leveraging and extending codex.

If you'd like to post your thoughts below about the shape that this feature could take, that would be most welcome!

joshsymonds · 8 months ago

Thanks @etraut-openai! This is kind of the end result I'm thinking of, which is what I have working right now:

<img width="1728" height="184" alt="Image" src="https://github.com/user-attachments/assets/dd607108-c1c4-4b4b-b59b-569ec1510b4b" />

Below is the shape I’ve been prototyping in my fork -- figured I’d capture it here so others can react. The inspiration is Starship, for which I have a prompt setup I really like that I want to replicate in my LLM tools.

### Goal

Expose the status area (above the transcript) and the footer (above the composer) as configurable “zones” composed from a small set of modules. My use case is a richer git/mode/context display, but the same hook would let others plug in the pieces they care about without forking Codex.

### Layout Model

  • Zones: header (above the chat widget) and footer (below the chat widget). Each zone is optional; if unset we fall back to the current renderer.
  • Regions per zone: left, center, right.
  • left renders an ordered stack left→right.
  • center is exactly one segment, centered.
  • right renders an ordered stack right→left.

### Segments

Each entry looks like:

  { module = "git", format = "<nerdtree branch icon> {branch}", fg = "accent", bg = "base", transition = { text = "<", fg = "accent", bg = "warning" } }
  • module points to a built-in data source.
  • format (optional) is a printf-style string with module-specific placeholders so you can prepend icons or hide fields (e.g. {branch}, {dirty}, {ahead}).
  • fg / bg can reference named colors or raw hex codes. Modifiers (bold, dim, etc.) are boolean flags.
  • transition is an optional trailing separator (text + fg/bg) rendered exactly where you define it—even on the first or last segment—so you can reproduce powerline-style caps. (Centered elements get transition_left and transition_right.)

### Colors

Colors live under statusline.colors:

  [statusline.colors]
  accent = "#89b4fa"
  warning = "#fab387"
  base = "#1e1e2e"

Segments can use fg = "accent" or fg = "#ffffff" directly.

### Initial Module Catalog

I'm primarily concerned in coding towards parity with my custom status line:

  • context – token usage meter / percent remaining.
  • tokens – raw counts (total/input/output/reasoning) if you want them broken out.
  • model – model name + reasoning effort.
  • run_state – current task label/spinner (“Working…”, “Idle”, etc.).
  • queued_messages – count or first queued hint.
  • approval_mode, sandbox – current policies.
  • git – branch / dirty / ahead / behind (pulls from the existing git snapshot).
  • kubernetes – current kube context, resolved from ~/.kube/config.
  • aws_profile – active AWS CLI profile.
  • hostname – host the CLI is running on.
  • cwd – working directory (with Starship-esque elipses options).
  • clock – formatted local time.
  • env – environment variables rendered out directly.
  • text – literal copy block (for headings, separators, etc.).

I’ve been experimenting with “escape hatches” like custom_command (run a user script) or custom_renderer (pipe the snapshot to an external process and render its response), but those could be follow-ons once the core API settles.

### Example Config

  [statusline.header]
  left = [
    { module = "git", format = "<nerdfont-branch-icon> {branch}", fg = "base", bg = "accent",
      transition = { text = "<", fg = "accent", bg = "warning" } }
  ]
  center = { module = "context", format = "{used}/{limit}", fg = "base", bg = "warning",
             transition_left  = { text = "<", fg = "warning", bg = "background" },
             transition_right = { text = ">", fg = "warning", bg = "background" }
}

  right = [
    { module = "clock", format = "{time:%H:%M}", fg = "accent", bg = "background",
      transition = { text = ")<, fg = "background", bg = "#000000" } }
  ]

  [statusline.footer]
  left = [
    { module = "model", format = "{name}", fg = "base", bg = "accent",
      transition = { text = "", fg = "accent", bg = "background" } }
  ]
  center = { module = "run_state", fg = "warning", bg = "background" }
  right = [
    { module = "queued_messages", format = "queued {count}", fg = "base", bg = "accent",
      transition = { text = "", fg = "accent", bg = "background" } }
  ]

  [statusline.colors]
  accent = "#89b4fa"
  warning = "#fab387"
  base = "#1e1e2e"
  background = "#11111b"

### Behaviour

  • Codex would build a rich status snapshot (git info, token usage, approvals, environment hints). The renderer would walk the config, evaluate modules against that snapshot, apply formatting/padding/transitions, and emit ratatui Lines.
  • If a zone or module isn’t configured (or fails), Codex falls back to the stock status bar so the UX stays safe.

Let me know if this direction makes sense. Happy to iterate or trim scope, or open a PR if this seems like something y'all would want. If there's no bandwidth to help me shepherd something like this into the code let me know and I'll just continue maintaining my fork.

joshsymonds · 8 months ago

Hey @etraut-openai -- any interest in pursuing this or wanna just backburner it for the time being?

etraut-openai contributor · 8 months ago

@Veraticus, thanks for posting your thoughts above. We'll get to it in priority order.

Kritoooo · 6 months ago

How is it coming along?

ssh352 · 6 months ago

how about just copy claude code, status line has been native in Claude Code for a long time

nk-tedo-001 · 6 months ago

If you want to learn from those who already have it, you should adopt best practices, such as https://github.com/sirmalloc/ccstatusline, and use them right out of the box.

etraut-openai contributor · 5 months ago

This feature will be included in the next release of the CLI.

nevertoday · 5 months ago

so cool !!!!

fkysly · 5 months ago
This feature will be included in the next release of the CLI.

nice!

efstathiosntonas · 5 months ago

FINALLY!!!!!!!

mrshu · 5 months ago

@etraut-openai can you confirm this should now be available in the CLI?

etraut-openai contributor · 5 months ago

Yes, this is now available! Use the /statusline slash command to configure.

mehul-as24 · 4 months ago

Its possible to configure the contents of the statusline but can we also extend it to use the theme color or a possibility to configure its output separately ?