Jeremy Rose and GitHub
530382db05
Use agent reply text in turn notifications ( #3756 )
...
Instead of "Agent turn complete", turn-complete notifications now
include the first handful of chars from the agent's final message.
2025-09-17 11:23:46 -07:00
Jeremy Rose and GitHub
b8d2b1a576
restyle thinking outputs ( #3755 )
...
<img width="1205" height="930" alt="Screenshot 2025-09-16 at 2 23 18 PM"
src="https://github.com/user-attachments/assets/bb2494f1-dd59-4bc9-9c4e-740605c999fd "
/>
2025-09-16 16:42:43 -07:00
easong-openai
45bccd36b0
fix permissions alignment
2025-09-15 17:34:04 -07:00
Jeremy Rose and GitHub
0560079c41
notifications on approvals and turn end ( #3329 )
...
uses OSC 9 to notify when a turn ends or approval is required. won't
work in vs code or terminal.app but iterm2/kitty/wezterm supports it :)
2025-09-15 10:22:02 -07:00
Michael Bolin and GitHub
0de154194d
fix: change MIN_ANIMATION_HEIGHT so show_animation is calculated correctly ( #3656 )
...
Reported height was `20` instead of `21`, so `area.height >=
MIN_ANIMATION_HEIGHT` was `false` and therefore `show_animation` was
`false`, so the animation never displayed.
2025-09-15 10:02:53 -07:00
ae and GitHub
5c583fe89b
feat: tweak onboarding strings ( #3650 )
2025-09-15 08:49:37 -07:00
easong-openai and GitHub
cf63cbf153
fix stray login url characters persisting in login ( #3639 )
...
<img width="885" height="177" alt="image"
src="https://github.com/user-attachments/assets/d396e0a5-f303-494f-bab1-f7af57b88a3e "
/>
Fixes this.
2025-09-15 15:44:53 +00:00
934d728946
feat: skip animations on small terminals ( #3647 )
...
Changes:
- skip the welcome animation when the terminal area is below 60x21
- skip the model upgrade animation when the terminal area is below 60x24
to avoid clipping
---------
Co-authored-by: Michael Bolin <mbolin@openai.com >
2025-09-15 08:30:32 -07:00
Michael Bolin and GitHub
f037b2fd56
chore: rename ( #3648 )
2025-09-15 08:17:13 -07:00
ae and GitHub
9baa5c33da
feat: update splash ( #3631 )
...
- Update splash styling.
- Add center truncation for long paths.
(Uses new `center_truncate_path` utility.)
- Update the suggested commands.
## New splash
<img width="560" height="326" alt="image"
src="https://github.com/user-attachments/assets/b80d7075-f376-4019-a464-b96a78b0676d "
/>
## Example with truncation:
<img width="524" height="317" alt="image"
src="https://github.com/user-attachments/assets/b023c5cc-0bf0-4d21-9b98-bfea85546eda "
/>
2025-09-15 06:44:40 -07:00
fdf4a68646
chore(deps): bump tracing-subscriber from 0.3.19 to 0.3.20 in /codex-rs ( #3620 )
...
Bumps [tracing-subscriber](https://github.com/tokio-rs/tracing ) from
0.3.19 to 0.3.20.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/tracing/releases ">tracing-subscriber's
releases</a>.</em></p>
<blockquote>
<h2>tracing-subscriber 0.3.20</h2>
<p><strong>Security Fix</strong>: ANSI Escape Sequence Injection
(CVE-TBD)</p>
<h2>Impact</h2>
<p>Previous versions of tracing-subscriber were vulnerable to ANSI
escape sequence injection attacks. Untrusted user input containing ANSI
escape sequences could be injected into terminal output when logged,
potentially allowing attackers to:</p>
<ul>
<li>Manipulate terminal title bars</li>
<li>Clear screens or modify terminal display</li>
<li>Potentially mislead users through terminal manipulation</li>
</ul>
<p>In isolation, impact is minimal, however security issues have been
found in terminal emulators that enabled an attacker to use ANSI escape
sequences via logs to exploit vulnerabilities in the terminal
emulator.</p>
<h2>Solution</h2>
<p>Version 0.3.20 fixes this vulnerability by escaping ANSI control
characters in when writing events to destinations that may be printed to
the terminal.</p>
<h2>Affected Versions</h2>
<p>All versions of tracing-subscriber prior to 0.3.20 are affected by
this vulnerability.</p>
<h2>Recommendations</h2>
<p>Immediate Action Required: We recommend upgrading to
tracing-subscriber 0.3.20 immediately, especially if your
application:</p>
<ul>
<li>Logs user-provided input (form data, HTTP headers, query parameters,
etc.)</li>
<li>Runs in environments where terminal output is displayed to
users</li>
</ul>
<h2>Migration</h2>
<p>This is a patch release with no breaking API changes. Simply update
your Cargo.toml:</p>
<pre lang="toml"><code>[dependencies]
tracing-subscriber = "0.3.20"
</code></pre>
<h2>Acknowledgments</h2>
<p>We would like to thank <a href="http://github.com/zefr0x ">zefr0x</a>
who responsibly reported the issue at
<code>security@tokio.rs </code>.</p>
<p>If you believe you have found a security vulnerability in any
tokio-rs project, please email us at <code>security@tokio.rs </code>.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tokio-rs/tracing/commit/4c52ca5266a3920fc5dfeebda2accf15ee7fb278 "><code>4c52ca5</code></a>
fmt: fix ANSI escape sequence injection vulnerability (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3368 ">#3368</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/f71cebe41e4c12735b1d19ca804428d4ff7d905d "><code>f71cebe</code></a>
subscriber: impl Clone for EnvFilter (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3360 ">#3360</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/3a1f571102b38bcdca13d59f3c454989d179055d "><code>3a1f571</code></a>
Fix CI (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3361 ">#3361</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/e63ef57f3d686abe3727ddd586eb9af73d6715b7 "><code>e63ef57</code></a>
chore: prepare tracing-attributes 0.1.30 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3316 ">#3316</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/6e59a13b1a7bcdd78b8b5a7cbcf70a0b2cdd76f0 "><code>6e59a13</code></a>
attributes: fix tracing::instrument regression around shadowing (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3311 ">#3311</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/e4df76127538aa8370d7dee32a6f84bbec6bbf10 "><code>e4df761</code></a>
tracing: update core to 0.1.34 and attributes to 0.1.29 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3305 ">#3305</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/643f392ebb73c4fb856f56a78c066c82582dd22c "><code>643f392</code></a>
chore: prepare tracing-attributes 0.1.29 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3304 ">#3304</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/d08e7a6eea1833810ea527e18ea03b08cd402c9d "><code>d08e7a6</code></a>
chore: prepare tracing-core 0.1.34 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3302 ">#3302</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/6e70c571d319a033d5f37c885ccf99aa675a9eac "><code>6e70c57</code></a>
tracing-subscriber: count numbers of enters in <code>Timings</code> (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/2944 ">#2944</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/c01d4fd9def2fb061669a310598095c789ca0a32 "><code>c01d4fd</code></a>
fix docs and enable CI on <code>main</code> branch (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3295 ">#3295</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/tracing/compare/tracing-subscriber-0.3.19...tracing-subscriber-0.3.20 ">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores )
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-15 00:51:33 -07:00
b9af1d2b16
Login flow polish ( #3632 )
...
# Description
- Update sign in flow
# Tests
- Passes CI
---------
Co-authored-by: Michael Bolin <mbolin@openai.com >
2025-09-15 00:42:53 -07:00
Ahmed Ibrahim and GitHub
2d52e3b40a
Fix codex resume so flags (cd, model, search, etc.) still work ( #3625 )
...
Bug: now we can add flags/config values only before resume.
`codex -m gpt-5 resume` works
However, `codex resume -m gpt-5` should also work.
This PR is following this
[approach](https://stackoverflow.com/questions/76408952/rust-clap-re-use-same-arguments-in-different-subcommand )
in doing so.
I didn't convert those flags to global because we have `codex login`
that shouldn't expect them.
2025-09-15 06:16:17 +00:00
Thibault Sottiaux and GitHub
6039f8a126
feat: tighten preset filter, tame storage load logs, enable rollout prompt by default ( #3628 )
...
Summary
- common: use exact equality for Swiftfox exclusion to avoid hiding
future slugs that merely contain the substring
- core: treat missing internal_storage.json as expected (debug), warn
only on real IO/parse errors
- tui: drop DEBUG_HIGH gate; always consider showing rollout prompt, but
suppress under ApiKey auth mode
2025-09-14 23:05:41 -07:00
Ed Bayes and GitHub
839b2ae7cf
Change animation frames ( #3627 )
...
## Description
- Changes animation frames to be smaller
- Cleans up file names and popup logic
## tests
- Passes local CI
2025-09-15 04:36:34 +00:00
Thibault Sottiaux and GitHub
d7d9d96d6c
feat: add reasoning level to header ( #3622 )
2025-09-15 03:59:22 +00:00
Ahmed Ibrahim and GitHub
26f1246a89
Revert "refactor transcript view to handle HistoryCells" ( #3614 )
...
Reverts openai/codex#3538
It panics on forking first message. It also calculates the index in a
wrong way.
2025-09-15 03:39:36 +00:00
Ahmed Ibrahim and GitHub
6581da9b57
Show the header when resuming a conversation ( #3615 )
2025-09-15 03:31:08 +00:00
Ahmed Ibrahim and GitHub
2ad6a37192
Don't show the model for apikey ( #3607 )
2025-09-15 01:32:18 +00:00
Fouad Matin and GitHub
1823906215
fix(tui): update full-auto to default preset ( #3608 )
...
Update `--full-auto` to use default preset
2025-09-14 18:14:11 -07:00
Ahmed Ibrahim and GitHub
ce984b2c71
Add session header to chat widget ( #3592 )
...
<img width="570" height="332" alt="image"
src="https://github.com/user-attachments/assets/ca6dfcb0-f3a1-4b3e-978d-4f844ba77527 "
/>
2025-09-14 17:53:50 -07:00
pakrym-oai and GitHub
c47febf221
Append full raw reasoning event text ( #3605 )
...
We don't emit correct delta events and only get full reasoning back.
Append it to history.
2025-09-14 17:50:06 -07:00
76c37c5493
feat: UI animation ( #3590 )
...
Add NUX animation
---------
Co-authored-by: Thibault Sottiaux <tibo@openai.com >
2025-09-14 17:42:17 -07:00
Ahmed Ibrahim and GitHub
a30e5e40ee
enable-resume ( #3537 )
...
Adding the ability to resume conversations.
we have one verb `resume`.
Behavior:
`tui`:
`codex resume`: opens session picker
`codex resume --last`: continue last message
`codex resume <session id>`: continue conversation with `session id`
`exec`:
`codex resume --last`: continue last conversation
`codex resume <session id>`: continue conversation with `session id`
Implementation:
- I added a function to find the path in `~/.codex/sessions/` with a
`UUID`. This is helpful in resuming with session id.
- Added the above mentioned flags
- Added lots of testing
2025-09-14 19:33:19 -04:00
jimmyfraiture2 and GitHub
99e1d33bd1
feat: update model save ( #3589 )
...
Edit model save to save by default as global or on the profile depending
on the session
2025-09-14 16:25:43 -07:00
pakrym-oai and GitHub
51f88fd04a
Fix swiftfox model selector ( #3598 )
...
The model shouldn't be saved with a suffix. The effort is a separate
field.
2025-09-14 23:12:21 +00:00
Ahmed Ibrahim and GitHub
7e1543f5d8
Align user history message prefix width ( #3467 )
...
<img width="798" height="340" alt="image"
src="https://github.com/user-attachments/assets/fdd63f40-9c94-4e3a-bce5-2d2f333a384f "
/>
2025-09-14 20:51:08 +00:00
Ahmed Ibrahim and GitHub
d701eb32d7
Gate model upgrade prompt behind ChatGPT auth ( #3586 )
...
- refresh the login_state after onboarding.
- should be on chatgpt for upgrade
2025-09-14 13:08:24 -07:00
Michael Bolin and GitHub
9baae77533
chore: update output_lines() to take a struct instead of a sequence of bools ( #3591 )
...
I found the boolean literals hard to follow.
2025-09-14 13:07:38 -07:00
Ahmed Ibrahim and GitHub
e932722292
Add spacing before queued status indicator messages ( #3474 )
...
<img width="687" height="174" alt="image"
src="https://github.com/user-attachments/assets/e68f5a29-cb2d-4aa6-9cbd-f492878d8d0a "
/>
2025-09-14 15:37:28 -04:00
Jeremy Rose and GitHub
4891ee29c5
refactor transcript view to handle HistoryCells ( #3538 )
...
No (intended) functional change.
This refactors the transcript view to hold a list of HistoryCells
instead of a list of Lines. This simplifies and makes much of the logic
more robust, as well as laying the groundwork for future changes, e.g.
live-updating history cells in the transcript.
Similar to #2879 in goal. Fixes #2755 .
2025-09-13 19:23:14 -07:00
Thibault Sottiaux
14ab1063a7
chore: rename
2025-09-12 23:17:41 -07:00
Thibault Sottiaux
19b4ed3c96
w
2025-09-12 22:44:05 -07:00
dedrisian-oai and GitHub
90a0fd342f
Review Mode (Core) ( #3401 )
...
## 📝 Review Mode -- Core
This PR introduces the Core implementation for Review mode:
- New op `Op::Review { prompt: String }:` spawns a child review task
with isolated context, a review‑specific system prompt, and a
`Config.review_model`.
- `EnteredReviewMode`: emitted when the child review session starts.
Every event from this point onwards reflects the review session.
- `ExitedReviewMode(Option<ReviewOutputEvent>)`: emitted when the review
finishes or is interrupted, with optional structured findings:
```json
{
"findings": [
{
"title": "<≤ 80 chars, imperative>",
"body": "<valid Markdown explaining *why* this is a problem; cite files/lines/functions>",
"confidence_score": <float 0.0-1.0>,
"priority": <int 0-3>,
"code_location": {
"absolute_file_path": "<file path>",
"line_range": {"start": <int>, "end": <int>}
}
}
],
"overall_correctness": "patch is correct" | "patch is incorrect",
"overall_explanation": "<1-3 sentence explanation justifying the overall_correctness verdict>",
"overall_confidence_score": <float 0.0-1.0>
}
```
## Questions
### Why separate out its own message history?
We want the review thread to match the training of our review models as
much as possible -- that means using a custom prompt, removing user
instructions, and starting a clean chat history.
We also want to make sure the review thread doesn't leak into the parent
thread.
### Why do this as a mode, vs. sub-agents?
1. We want review to be a synchronous task, so it's fine for now to do a
bespoke implementation.
2. We're still unclear about the final structure for sub-agents. We'd
prefer to land this quickly and then refactor into sub-agents without
rushing that implementation.
2025-09-12 23:25:10 +00:00
jif-oai and GitHub
8d56d2f655
fix: NIT None reasoning effort ( #3536 )
...
Fix the reasoning effort not being set to None in the UI
2025-09-12 21:17:49 +00:00
jif-oai and GitHub
8408f3e8ed
Fix NUX UI ( #3534 )
...
Fix NUX UI
2025-09-12 14:09:31 -07:00
Ahmed Ibrahim and GitHub
a2e9cc5530
Update interruption error message styling ( #3470 )
...
<img width="497" height="76" alt="image"
src="https://github.com/user-attachments/assets/a1ad279d-1d01-41cd-ac14-b3343a392563 "
/>
<img width="493" height="74" alt="image"
src="https://github.com/user-attachments/assets/baf487ba-430e-40fe-8944-2071ec052962 "
/>
2025-09-12 16:17:02 -04:00
Ahmed Ibrahim and GitHub
d4848e558b
Add spacing before composer footer hints ( #3469 )
...
<img width="647" height="82" alt="image"
src="https://github.com/user-attachments/assets/867eb5d9-3076-4018-846e-260a50408185 "
/>
2025-09-12 15:31:24 -04:00
Ahmed Ibrahim and GitHub
1a6a95fb2a
Add spacing between dropdown headers and items ( #3472 )
...
<img width="927" height="194" alt="image"
src="https://github.com/user-attachments/assets/f4cb999b-16c3-448a-aed4-060bed8b96dd "
/>
<img width="1246" height="205" alt="image"
src="https://github.com/user-attachments/assets/5d9ba5bd-0c02-46da-a809-b583a176528a "
/>
2025-09-12 15:31:15 -04:00
jif-oai and GitHub
c6fd056aa6
feat: reasoning effort as optional ( #3527 )
...
Allow the reasoning effort to be optional
2025-09-12 12:06:33 -07:00
jif-oai and GitHub
bba567cee9
bug: fix model save ( #3525 )
...
Fix those 2 behaviors:
1. The model does not get saved if we don't CTRL + S
2. The reasoning effort get saved
2025-09-12 10:38:12 -07:00
Ahmed Ibrahim and GitHub
ba6af23cb6
Add spacing to timer duration formats ( #3471 )
...
<img width="426" height="28" alt="image"
src="https://github.com/user-attachments/assets/b281aca3-3c8d-4b88-a017-5d2f8ea9f3d5 "
/>
2025-09-12 12:05:57 -04:00
Michael Bolin and GitHub
9bbeb75361
feat: include reasoning_effort in NewConversationResponse ( #3506 )
...
`ClientRequest::NewConversation` picks up the reasoning level from the user's defaults in `config.toml`, so it should be reported in `NewConversationResponse`.
2025-09-11 21:04:40 -07:00
jif-oai and GitHub
8453915e02
feat: TUI onboarding ( #3398 )
...
Example of how onboarding could look like
2025-09-11 15:04:29 -07:00
Michael Bolin and GitHub
bec51f6c05
chore: enable clippy::redundant_clone ( #3489 )
...
Created this PR by:
- adding `redundant_clone` to `[workspace.lints.clippy]` in
`cargo-rs/Cargol.toml`
- running `cargo clippy --tests --fix`
- running `just fmt`
Though I had to clean up one instance of the following that resulted:
```rust
let codex = codex;
```
2025-09-11 11:59:37 -07:00
Ahmed Ibrahim and GitHub
167b4f0e25
Clear composer on fork ( #3445 )
...
Fixes this
<img width="344" height="51" alt="image"
src="https://github.com/user-attachments/assets/f227d338-b044-4f8d-bf07-87499b4230d8 "
/>
2025-09-11 11:45:17 -07:00
Eric Traut and GitHub
e13b35ecb0
Simplify auth flow and reconcile differences between ChatGPT and API Key auth ( #3189 )
...
This PR does the following:
* Adds the ability to paste or type an API key.
* Removes the `preferred_auth_method` config option. The last login
method is always persisted in auth.json, so this isn't needed.
* If OPENAI_API_KEY env variable is defined, the value is used to
prepopulate the new UI. The env variable is otherwise ignored by the
CLI.
* Adds a new MCP server entry point "login_api_key" so we can implement
this same API key behavior for the VS Code extension.
<img width="473" height="140" alt="Screenshot 2025-09-04 at 3 51 04 PM"
src="https://github.com/user-attachments/assets/c11bbd5b-8a4d-4d71-90fd-34130460f9d9 "
/>
<img width="726" height="254" alt="Screenshot 2025-09-04 at 3 51 32 PM"
src="https://github.com/user-attachments/assets/6cc76b34-309a-4387-acbc-15ee5c756db9 "
/>
2025-09-11 09:16:34 -07:00
Ahmed Ibrahim and GitHub
162e1235a8
Change forking to read the rollout from file ( #3440 )
...
This PR changes get history op to get path. Then, forking will use a
path. This will help us have one unified codepath for resuming/forking
conversations. Will also help in having rollout history in order. It
also fixes a bug where you won't see the UI when resuming after forking.
2025-09-10 17:42:54 -07:00
Jeremy Rose and GitHub
8068cc75f8
replace tui_markdown with a custom markdown renderer ( #3396 )
...
Also, simplify the streaming behavior.
This fixes a number of display issues with streaming markdown, and paves
the way for better markdown features (e.g. customizable styles, syntax
highlighting, markdown-aware wrapping).
Not currently supported:
- footnotes
- tables
- reference-style links
2025-09-10 12:13:53 -07:00
Michael Bolin and GitHub
64e6c4afbb
fix: remove empty file: chatwidget_stream_tests.rs ( #3356 )
...
Originally added in https://github.com/openai/codex/pull/2029 .
2025-09-10 10:35:24 -07:00