Skip to content

fix(chat): greet a fresh Codex started in a terminal - #1967

Merged
devswha merged 4 commits into
mainfrom
fix/codex-fresh-terminal-greeting
Oct 26, 2026
Merged

devswha merged 4 commits into
mainfrom
fix/codex-fresh-terminal-greeting

Conversation

@devswha

@devswha devswha commented Oct 26, 2026 •

Copy link
Copy Markdown
Owner

Problem

Typing codex in a Herdr terminal and opening Chat before the first message said "Conversation
unavailable", while a Codex started from New workspace, New tab or New worktree showed its greeting
(#990). Codex writes no session before the first message (0.163 makes no state_5.sqlite at all
until then), and herdr reports none, so nothing tied the pane to a transcript.

Fixes #1191

Fix

#990 left terminal launches out because they may resume a conversation. Chat now greets one only
when every fact says it has begun none, and otherwise keeps the terminal fallback as before
(codexFreshSession in server/codex.ts, called from the no_session_path fallback in
paneConversation):

  • Screen: Codex's start screen with nothing said (codexStartScreenUnused,
    server/start-screen.ts, sharing the footer rule the model is read by). Under the last banner
    line (>_ OpenAI Codex (v…), boxed or not, never an answer that only mentions it) the composer
    is the first prompt line, and no prompt, answer, warning or error cell follows it. None may sit
    above the banner either: that would be a command's card or a second session in the same
    terminal.
  • Command line: no resume or fork on the argv of the pane's Codex processes.
  • Store: no interactive thread with a first message, for any folder the pane names (the shell's
    and the foreground process's, as given and as they resolve), begun or written since those processes
    started (a lower bound of their start, less a second), in the store the pane's Codex writes to. A
    missing store holds none. That store must be placed for certain on every platform
    (certainProcessCodexHome): the CODEX_HOME directory each Codex's environment names, or
    .codex in the HOME its environment names when it names none (never the server's own home). An environment that cannot be read (another user's process, a gone
    one, Windows), a CODEX_HOME that is relative or not a directory, and on macOS a command line that
    spells CODEX_HOME= or HOME=, no HOME or a relative one, or a ps -E line with no
    environment all say no, as do a store or a start time
    that cannot be read.
  • Status: the pane is not working or blocked.

The answer is a conversation not begun, as for an app launch, with the model and effort the status
line states. Its history id names the pane and its Codex processes, with no time in it (a start
time read on macOS moves between reads), so the first message's transcript replaces it whole. A
resumed session still shows its saved messages through the existing lookup. Anything this cannot
identify keeps "Conversation unavailable". A launcher that picks another CODEX_HOME works because
the pane's own Codex home is the one checked.

Verification

  • Unit (server/conversation.test.ts, server/start-screen.test.ts): a Codex at its start
    screen gets the greeting with no store, and with a store whose threads of the folder all ended
    before it started. Each of these keeps "unavailable": a resume or fork command line, something
    said on screen, a pane at work, a thread of the folder (or of its resolved path, or of the
    foreground folder) with a first message begun or written since, and an unreadable store. A thread
    in another folder, a subagent's, a codex exec run's, or one with no first message does not count.
    The screen cases cover a draft in the composer, an answer quoting the banner, a boxed banner and a
    conversation above the banner. A second test starts real child processes with the CODEX_HOME
    under test (server default store isolated): an absolute home greets; a relative one whose store holds
    a conversation begun now, a non-directory, and a second Codex with a relative home do not. With no
    CODEX_HOME, the store follows the child's own HOME; with no HOME there is no greeting. Each child
    says it runs before it is read, so the test does not race its exec (0 failures in 30 runs).
    163/163 pass on Linux and on macOS 27 (the test MacBook Air, fresh clone). Restoring the
    default-store fallback, or the server's homedir(), fails the test on both.
  • Real surface: real codex 0.163.0 typed in a pane of the isolated test herdr session
    (throwaway CODEX_HOME, closed provider), with Chat opened in headless Chrome:
    • At 1440 px and 390 px, the greeting "What should Codex do in proj?" shows with the GPT-6-Sol /
      Medium chip, and the frame shows no "Conversation unavailable".
      GET /api/pane/conversation answers 200 with history_id: unwritten:codex:…, no turns, and
      model gpt-6-sol / medium.
    • After a first message the greeting is gone, and Chat shows the terminal fallback as on main
      while the turn runs.
  • bun run check fast on d12ff6d: green (unit 7191 pass, 0 fail, 24 skip; typecheck, build, generated types and themes, workflow syntax ok).

Reviews

  • omo-native-code-reviewer: approve. Its one MEDIUM (the symlinked-folder assertion could not fail, because the
    foreground folder still matched) is fixed: the case now names the link as both folders, and dropping the
    realpathSync in codexFreshSession fails it. LOWs left as follow-ups:
    • A fresh Codex that draws a start-up warning cell (an MCP server failing to start) keeps "Conversation
      unavailable", as on main: a warning counts as something said.
    • Windows never greets a terminal-started Codex: there is no process start time or environment to read.
    • Its other two LOWs (a relative CODEX_HOME guard on Linux only, and the fallback listing the pane's
      Codex processes twice) went away with the merge-pass fix below, which places the store itself.
  • Codex (gpt-6.1-sol): no HIGH, MEDIUM or LOW on the rebased commit; it checked the greeting against main's
    newer lookups (fix(chat): find a Codex session the picker resumed from another folder among the threads Codex has loaded #1941 loaded threads, fix(chat): offer the Codex thread its title names as a screen-match candidate #1790 title candidates, fix(codex): read the pane's Codex home as Codex does #1750 the pane's Codex home), which all run
    before it. Two earlier rounds on the pre-rebase version found a HIGH (answer text taken for the banner) and
    MEDIUMs (symlinked folder, relative CODEX_HOME, macOS start time, foreground folder), all fixed.
  • Merge pass (Astra gate) on 9cc35fa: one blocker. On macOS a relative CODEX_HOME fell back to the
    server's default store, so a false greeting was possible. Fixed in c1b4e8d: the store is now placed for
    certain on every platform, as described under Store. Its re-review of c1b4e8d found a HIGH (with no
    CODEX_HOME, the store came from the server's home rather than the Codex's own HOME) and a MEDIUM (the
    new test raced its child's exec), both fixed in d12ff6d and 11d7b71.

Typing `codex` in a Herdr terminal and opening Chat before the first
message said "Conversation unavailable", while a Codex started from New
workspace, New tab or New worktree showed its greeting (#990). Codex
writes no session before the first message, and herdr reports none, so
nothing tied the pane to a transcript.

Chat now greets one only when every fact says it has begun none, and
keeps the terminal otherwise:

- the screen is Codex's start screen with nothing said: under the last
  banner line ("> _ OpenAI Codex (v…)", not an answer that mentions it)
  the composer is the first prompt line, no prompt or answer, warning or
  error cell follows it, and none is above the banner either (a command's
  card, or a second session in the same terminal);
- no `resume` or `fork` is on the command line of the pane's Codex
  processes;
- the pane's own CODEX_HOME holds no interactive thread of its folders
  (the shell's and the foreground process's, as given or as they resolve) with a first message, begun or written
  since those processes started (a lower bound of their start, less a
  second). Codex 0.163 makes no store before the first message at all.
  A store that cannot be read, or a CODEX_HOME the server cannot place
  (a relative one), says no;
- the pane is not working or blocked.

The answer is a conversation not begun, as for an app launch, with a
history id of the pane and its Codex processes (no time: a start read
on macOS moves between reads), so the first message's transcript
replaces it whole.

Fixes #1191
@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 7ab4bde and 9cc35fa.

Files selected for processing: 6
  • changelog.d/codex-fresh-terminal-greeting.md
  • server/codex.ts
  • server/conversation.test.ts
  • server/conversation.ts
  • server/start-screen.test.ts
  • server/start-screen.ts

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 2 remain after this review.

📝 Summary

Summary by CodeRabbit

  • New Features
    • Codex can now display a terminal-start greeting before the first message when a new, idle session is detected. The greeting is shown only when the start screen is unused and there is no recent conversation history for the pane or its working directory.
  • Bug Fixes
    • Improved recognition of Codex start screens, helping distinguish an unused screen from one showing a message, response, error, or resumed conversation.

Codex conversation handling now returns an unwritten conversation with screen metadata when a terminal-started session meets the screen, process, and store checks. Start-screen parsing also identifies screens without prior conversation content.

Changes: Codex terminal greeting

Layer / File(s) Summary
Codex start-screen recognition
server/start-screen.ts, server/start-screen.test.ts
Screen parsing validates the Codex banner, footer, and composer layout. A new predicate checks for prior conversation content, with tests for screen variations.
Fresh-session detection
server/codex.ts
codexFreshSession checks the screen, process arguments and start times, and relevant Codex threads. It returns an unwritten identifier when the checks confirm a fresh session.
Conversation response and validation
server/conversation.ts, server/conversation.test.ts, changelog.d/codex-fresh-terminal-greeting.md
When no session path exists, conversation handling checks for a fresh session and returns an unwritten conversation with screen metadata when confirmed. Tests cover qualifying and excluded cases. The changelog records the behavior.

Priority: Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix · Severity of issue fixed: Medium

Suggested reviewers: evanwy0223, yoonwoo-ha

Merge Risk: Minimal · up to 9cc35

The greeting is intended to appear only for confidently fresh sessions, with the unavailable-conversation fallback otherwise preserved. No confirmed issue prevents merging after normal checks.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main change: greeting users when Codex starts fresh in a terminal.
Linked Issues check Passed Active direct issue #1191 requires a greeting for a reliably fresh terminal Codex session, support for the pane's selected CODEX_HOME, saved messages for resumed sessions, and the existing unavailable…
Out of Scope Changes check Passed The changed implementation, tests, and changelog support #1191. The start-screen.ts changes make the fresh-screen and model detection precise for this greeting. The conversation.ts and codex.ts …
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 8 functions across 5 files. (1 skipped: 1 …
Description check Passed The pull request description is complete and relevant. It explains the problem, resulting behavior, linked issue, implementation conditions, validation results, test coverage, and known limitations. I…
Full details: Linked Issues check

Explanation

Active direct issue #1191 requires a greeting for a reliably fresh terminal Codex session, support for the pane's selected CODEX_HOME, saved messages for resumed sessions, and the existing unavailable fallback for ambiguous sessions. The supplied PR evidence shows codexStartScreenUnused, rejection of resume and fork, pane-process timing and status checks, and recent interactive-thread checks in the pane's Codex store and relevant folders. conversation.ts uses this check only in the no-session fallback and preserves the existing lookup path otherwise. Tests cover fresh, resumed, ambiguous, store, folder, screen, and status cases. The reported 162/162 focused tests pass.

Full details: Out of Scope Changes check

Explanation

The changed implementation, tests, and changelog support #1191. The start-screen.ts changes make the fresh-screen and model detection precise for this greeting. The conversation.ts and codex.ts changes implement the terminal no-session decision. No unrelated change is demonstrated. Closed issue #990 supplies historical context only and does not add scope.

Full details: Docstring Coverage

Explanation

Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 8 functions across 5 files. (1 skipped: 1 unsupported.)

Full details: Description check

Explanation

The pull request description is complete and relevant. It explains the problem, resulting behavior, linked issue, implementation conditions, validation results, test coverage, and known limitations. It uses different headings from the template ("Problem"/"Fix"/"Verification" instead of "Change"/"Validation"), but it provides the required information.

Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devswha

devswha commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Merge pass review of 9cc35fa. The Astra gate (omo-native-gate-reviewer, gpt-6-astra) rejected it on one real blocker.

What holds:

  • The 162 affected tests pass. My local run was 237/237, and typecheck is clean.
  • Each of the three checks (screen, argv, store) is covered: mutating any one of them makes the regression test fail.
  • No overfitting or slop.

BLOCKER: a false greeting from the wrong store on macOS (server/codex.ts:408, :435, :1357; section B1 of the report)

  • What happens: when the pane sets CODEX_HOME to a relative path, that value is dropped and paneCodexHome falls back to the server's default store. The Linux-only guard does not refuse this case.
  • Reproduction: the code returned an unwritten:codex:... greeting even though the pane's real store held a recent first message. Checking that store directly returned null.
  • Fix: keep the fact that the home is unknown instead of falling back, and fail closed (keep the terminal fallback) on every platform whenever the pane's own CODEX_HOME can't be resolved with certainty.

CI: Fast checks failed on this head. It is the known markdown timing flake #1901 (lane fix-1901 is on it), not this PR; it will be re-run.

This PR touches server/, so it can only merge after the 0.4.18 Release run. The re-review will cover only the new commits.

The merge pass's gate found a false greeting on macOS: a pane whose Codex
sets a relative CODEX_HOME had that value dropped, paneCodexHome fell back
to the server's default store, and the Linux-only /proc guard did not
refuse it, so a store with no conversation stood in for one that had a
first message.

codexFreshSession now places each Codex's store itself, on every
platform (certainProcessCodexHome): the CODEX_HOME directory its
environment names, ~/.codex when it names none, or no greeting. No
greeting covers an environment that cannot be read (another user's
process, a gone one, Windows), a CODEX_HOME that is relative or no
directory, and on macOS a command line that spells CODEX_HOME= itself,
which ps -E cannot tell from the environment, or a ps line that shows no
environment. Every Codex of the pane must be placed; the first decides,
as in paneCodexHome. An explicit server store (the codexHome option,
which only tests set) still wins.
@devswha

devswha commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Thanks. Fixed in c1b4e8d (one new commit on top of 9cc35fa, so the re-review covers only that commit).

Blocker B1 (false greeting from the wrong store on macOS): codexFreshSession no longer takes the store from paneCodexHome, whose fallback was the problem. It now places each Codex's store itself, on every platform (certainProcessCodexHome):

  • the CODEX_HOME directory its environment names;
  • ~/.codex when it names none;
  • otherwise no greeting. That covers an environment that cannot be read (another user's process, a gone one, Windows), a CODEX_HOME that is relative or not a directory, and on macOS either a command line that spells CODEX_HOME= itself or a ps -E line that shows no environment.

Every Codex process of the pane must be placed, and the first decides, as in paneCodexHome. The Linux-only /proc guard is gone. An explicit server store (the codexHome option, which only tests set) still wins. readProcessCodexHome behaves as before; its ps spawn is only factored out.

Test: "greets a terminal Codex only in the store its own environment places for certain" runs real child processes started with the CODEX_HOME under test, with the server's own default store isolated and empty:

  • an absolute home with no store gets the greeting;
  • a relative home whose store holds a conversation begun now, a home that is not a directory, and a second Codex with a relative home each keep "Conversation unavailable".

Results:

  • Linux: 163/163.
  • macOS 27 on the test MacBook Air (fresh /tmp clone, deleted afterwards): 163/163.
  • Mutations: restoring the default-store fallback fails the test on both Linux and macOS. Checking only the first Codex fails it on Linux.
  • One macOS detail found on the way: ps -E shows no environment for system binaries such as /bin/sleep, so the test's stand-in Codex is a Bun process. A real Codex is not a system binary, and its environment shows.

bun run check fast on c1b4e8d: green (unit 7191 pass, 0 fail, 24 skip; typecheck, build, generated types and themes, workflow syntax ok).

CI: the earlier Fast checks failure on 9cc35fa was the #1901 markdown timing flake. This push starts a fresh run.

@devswha

devswha commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Merge pass re-review of c1b4e8d (Astra gate). B1 is fixed, but this change surfaced two new findings.

Fixed: Astra re-ran the original B1 reproduction. A simulated macOS pane whose CODEX_HOME is relative, missing or unreadable now gets no greeting. Removing the strict home check makes the new regression test fail at server/conversation.test.ts:2702.

HIGH: with no CODEX_HOME, the greeting can still come from the wrong store (server/codex.ts:433)

  • Cause: the new helper finds the default store from the server's homedir(), not from the pane process's HOME.
  • Reproduction: a real Linux child with a different HOME and no CODEX_HOME had a recent first message in its own .codex, yet got an unwritten:codex:... greeting. Checking that store directly returned null.
  • Fix: derive the default store from trustworthy pane evidence, such as the process's own HOME. If that can't be read, fail closed and keep the terminal fallback.

MEDIUM: the new regression test races its child processes (server/conversation.test.ts:2672-2678, :2705)

  • What happens: started publishes the child pids immediately. An unchanged run of the suite got 162 passing tests and 1 failure, at the missing-directory assertion on line 2705.
  • Fix: wait for each child to signal that it is ready before probing, with a deadline. Astra tried exactly that in a throwaway copy that changed only the test fixture, and the test passed with the production code unchanged. This failure is separate from Flaky: markdown.test.ts measures the parser against 1000 ms of wall clock #1901.

This PR touches server/, so it merges only after the 0.4.18 Release run. The re-review will cover only the new commits.

mp added 2 commits October 26, 2026 18:18
The new store test failed in CI ("a CODEX_HOME that is no directory" was
greeted): it asked about each stand-in Codex right after Bun.spawn, and
until the child's exec the OS shows the environment it was forked with,
the test's own, whose CODEX_HOME is the empty fallback store. Locally it
failed 2 runs in 30.

Each stand-in now prints "ready" once it runs, and the test reads that
line before asking: 0 failures in 60 runs. A real Codex has run for
seconds before its pane is read, so the server is unchanged.
The merge pass's re-review found a false greeting: a Codex that names no
CODEX_HOME had its store placed in this server's own home (homedir()),
so one running with another HOME, whose .codex held a conversation begun
since it started, was still greeted.

Its store is now .codex in the HOME its own environment names, read like
CODEX_HOME (/proc on Linux, ps -E on macOS). No HOME, a relative one, or
on macOS a command line that spells HOME= itself means no greeting.
@devswha

devswha commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Thanks. Both findings are fixed in two new commits on top of c1b4e8d.

HIGH: default store from the server's home (d12ff6d). When a Codex names no CODEX_HOME, its store is now .codex in the HOME its own environment names, read the same way as CODEX_HOME (/proc/<pid>/environ on Linux, ps -E on macOS). The server's homedir() is never used for it. These all mean no greeting:

  • no HOME, or a relative one;
  • an environment ps does not show (another user's process);
  • on macOS, a command line that spells HOME= itself.

New cases in the same test, each a real child process with no CODEX_HOME and HOME set to a temp user folder:

  • that folder's empty .codex gives the greeting;
  • a thread with a first message begun there now gives "Conversation unavailable";
  • no HOME, or a relative one, gives "Conversation unavailable".

Putting homedir() back fails the test on both Linux and macOS.

MEDIUM: test race (11d7b71). The cause was the one you found: read before the child's exec, the OS shows the environment the child was forked with, which is the test's own, whose CODEX_HOME is the empty fallback store. Each stand-in now prints ready once it runs, and the test reads that line before asking. The test's timeout (bun's 5 s) is the deadline. Before the fix it failed 2 runs in 30 on Linux. After it, 0 in 30 on Linux and 0 in 15 on macOS.

Results on d12ff6d:

  • server/conversation.test.ts and server/start-screen.test.ts: 163/163 on Linux and on macOS 27 (test MacBook Air, fresh /tmp clone, deleted afterwards).

  • bun run check fast on d12ff6d: green (unit 7191 pass, 0 fail, 24 skip; typecheck, build, generated types and themes, workflow syntax ok).

@devswha

devswha commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@devswha

devswha commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Merge pass review report. Overall: PASSED. This PR changes server behaviour: it decides which transcript a Chat binds to. Each round was reviewed by an Astra gate (omo-native-gate-reviewer, gpt-6-astra). It approved d12ff6d after three rounds.

What it does: Chat greets a Codex started in a terminal only when every fact says it has begun nothing:

  • The screen: the untouched start screen.
  • The command line: no resume or fork in the argv.
  • The store: the pane's own Codex store holds no interactive thread with a first message.

Otherwise the terminal fallback stays as before. Each of the three checks was mutated, and each mutation fails the regression.

Findings, and how each was resolved:

  • B1 (9cc35fa): on macOS, a relative or unknown pane CODEX_HOME fell back to the server's default store and gave a false greeting. Fixed in c1b4e8d, which greets only in a store the pane's environment places.
  • D1 (c1b4e8d, HIGH): with no CODEX_HOME, the default store came from the server's homedir(), not the pane's HOME. Fixed in d12ff6d, which uses the pane process's own HOME. A missing or relative HOME, an empty CODEX_HOME with a nonempty store, and an exited process whose environment can't be read all keep the terminal fallback. With the fix reverted, the test fails at server/conversation.test.ts:2729.
  • D2 (c1b4e8d, MEDIUM): the new regression raced child readiness. Fixed in 11d7b71: the test awaits the child's stdout readiness before using its pid. It passed five runs in a row under the runner's 5 s deadline.

Tests: the affected suites pass, 163 tests with 0 failures. Locally 238/238 pass, and typecheck is clean.

git merge-tree against main is clean. This PR shares server/conversation.ts with #1986 and outside PRs #1955/#1442. It merges cleanly with #1986. It merges only after the 0.4.18 Release run, because it touches server/.

@devswha
devswha merged commit 988acbe into main Oct 26, 2026
19 of 20 checks passed
@devswha
devswha deleted the fix/codex-fresh-terminal-greeting branch October 26, 2026 10:56
devswha pushed a commit that referenced this pull request Nov 7, 2026
…r's model (#3265)

<!-- See CONTRIBUTING.md for checks, translations, contract tests and
the changelog (a file in changelog.d/, never CHANGELOG.md). -->

## Change

Fixes #3263. Codex running a custom model provider writes the model in
its footer as the provider names it (`DeepSeek4.1flash(OpenCode) low ·
…`, `gpt-6.1-terra high · …`). `codexLayout` read only `GPT-…` there, so
a new terminal-started Codex on such a model was never taken for a start
screen and its Chat showed "Conversation unavailable" until the first
answer, instead of the new-chat greeting (#1967).

- `codexLayout`: the footer's model is one word without spaces or `·`.
The header, prompt line, effort word and hint row checks are unchanged,
so a quoted picker, a draft or a popup still names no model.
- `codexScreen`: `GPT-…` is lowercased to its id as before; another
provider's name is kept as written, as `gjcScreen` keeps a model it has
no id for.

## Validation

On main d5b8333 (macOS 26.5, Bun 1.4.4):
- `bun test server/start-screen.test.ts
server/start-screen.contract.test.ts server/conventions.test.ts
scripts/changelog-fold.test.ts`: 38 pass, 0 fail. The new test fails
without the change (10 pass, 1 fail).
- `bun test server/codex.test.ts server/conversation.test.ts
server/codex-list-regression.test.ts
server/codex-composer-regression.test.ts
server/codex-linked-completion.test.ts server/codex-steering.test.ts
server/prompt.test.ts`: pass, except three `Codex's store, read whether
or not a Codex holds it (#2444)` cases that fail the same way on main
without this change on this Mac.
- `bun run typecheck`: pass.
- Not run: `bun run check fast` / `full` as a whole.
- Live, with the same change as a local patch on 0.4.22: a new Codex
pane on a provider-named model opened on the empty new chat before its
first message.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Chat: show the greeting for fresh Codex sessions started in a terminal

1 participant