Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
375 commits
Select commit Hold shift + click to select a range
c2a924f
Fix stale environment config in the network approval test (#46560)
sayan-oai Sep 18, 2026
888be42
Support explicit provider model catalog URLs (#46561)
andrewgu-oai Sep 18, 2026
3bb0a53
Add system proxy fallback for login and startup requests (#46562)
abhinav-oai Sep 18, 2026
b948cfa
Rename plugin MCP and app extension APIs (#46564)
TAFOYA-OAI Sep 18, 2026
de33f2d
Preserve reasoning order in TUI activity groups (#46565)
etraut-openai Sep 18, 2026
ef9f3d0
Allow recovery commands when the current thread is unavailable (#46566)
etraut-openai Sep 18, 2026
a7e069d
Separate plugin catalog listing from package resolution (#46567)
TAFOYA-OAI Sep 18, 2026
5685183
Use captured environment state for permissions and daemon recovery (#…
sayan-oai Sep 18, 2026
f81a633
Set explicit turn triggers for exec and TUI requests (#46569)
eddie-openai Sep 18, 2026
c223ff3
Tag remote model fetch duration by authentication mode (#46570)
andrewgu-oai Sep 18, 2026
d84ebff
Preserve macOS Seatbelt exclusions in scratch directories (#46571)
nornagon-openai Sep 18, 2026
394dadb
Add turn-start cloud plugin discovery to the MCP extension (#46572)
TAFOYA-OAI Sep 19, 2026
94e3c20
Add a standalone network proxy binary with JSON configuration (#46573)
viyatb-oai Sep 19, 2026
d5afb62
Notify users when asynchronous questions arrive in the TUI (#46574)
etraut-openai Sep 19, 2026
fd59b42
Preserve Windows package identity for sandboxed descendants (#46575)
zm-oai Sep 19, 2026
e24ac44
Allow thread instruction providers to share updates with subagents (#…
vinh-gpt Sep 19, 2026
29a5786
Fix standalone network proxy policy initialization (#46578)
etraut-openai Sep 19, 2026
6b78e82
Limit the agent command center to 10 recent sessions on startup (#46579)
etraut-openai Sep 19, 2026
ed12cc7
Keep Guardian reviews on the applied instruction snapshot (#46580)
jif-oai Sep 19, 2026
78245b4
Deny XPC service lookups in macOS Seatbelt profiles (#46583)
nornagon-openai Sep 19, 2026
d086e27
Move local child-process spawning into `codex-utils-pty` (#46659)
charliemarsh-oai Sep 19, 2026
3801fc8
Make local child process launch settings explicit (#46660)
charliemarsh-oai Sep 19, 2026
595cc91
Avoid fork when spawning macOS filesystem helpers (#46661)
charliemarsh-oai Sep 19, 2026
a529002
Extend server version notices to prerelease and local clients (#46673)
etraut-openai Sep 19, 2026
132c2be
Improve TUI contrast, keyboard hints, and picker layouts (#46680)
etraut-openai Sep 19, 2026
79d2144
Standardize TUI picker presentation and fix wrapping boundaries (#46691)
etraut-openai Sep 19, 2026
018687b
Unify TUI picker styling and improve compact layouts (#46692)
etraut-openai Sep 19, 2026
e28fa3e
Unify TUI completion popup styling and preserve result identity (#46694)
etraut-openai Sep 19, 2026
c9d13e8
Unify TUI prompts with shared picker styling and layouts (#46695)
etraut-openai Sep 19, 2026
5ee2bdf
Unify TUI picker styling and improve compact session layouts (#46697)
etraut-openai Sep 19, 2026
fcaa035
Preserve logical source text and styles across TUI wrapping (#46708)
etraut-openai Sep 19, 2026
321c50f
Add compact activity rendering and preserve transcript source text (#…
etraut-openai Sep 19, 2026
4abcb8d
Restore rich tool details in persisted TUI transcripts (#46710)
etraut-openai Sep 19, 2026
f43faf1
Align persisted TUI activity groups and reasoning with live output (#…
etraut-openai Sep 19, 2026
ed0ee70
Recover executed tool call metadata under recorder capacity pressure …
ningyi-oai Sep 19, 2026
50a90f3
Skip polling delays in the external queue lifecycle test (#46714)
charliemarsh-oai Sep 19, 2026
daed4b9
Split shell snapshot credential tests into focused cases (#46715)
charliemarsh-oai Sep 19, 2026
1ac4b69
Extract the TUI transcript overlay into its own module (#46719)
etraut-openai Sep 19, 2026
30ab0ee
Cache transcript layouts across measurement and rendering (#46720)
etraut-openai Sep 19, 2026
a63ae00
Anchor transcript scrolling to entries and bound viewport rendering (…
etraut-openai Sep 19, 2026
392f56a
Cancel pending transcript Home jumps on subsequent navigation (#46722)
etraut-openai Sep 19, 2026
6ba6b73
Render dynamic tool activity and preserve TUI history ordering (#46731)
etraut-openai Sep 19, 2026
d7d9f2b
Add selection and copying to the transcript viewer (#46732)
etraut-openai Sep 19, 2026
f1feda2
Integrate the interactive transcript into the alternate-screen TUI (#…
etraut-openai Sep 19, 2026
df7f717
Add transcript search and per-activity detail controls (#46734)
etraut-openai Sep 19, 2026
551844b
Add compact transcript browsing and prompt navigation to the TUI (#46…
etraut-openai Sep 20, 2026
de6ae71
Stabilize transcript and composer interactions in the TUI (#46749)
etraut-openai Sep 20, 2026
9ed1b74
Preserve startup drafts and submit them when the session is ready (#4…
etraut-openai Sep 20, 2026
6b0a1a8
Add a warning footer and dedicated warnings viewer to the TUI (#46751)
etraut-openai Sep 20, 2026
5c5308f
Add an animated Codex logo to fresh conversations and onboarding (#46…
etraut-openai Sep 20, 2026
bba48e5
Add independent controls for TUI visual effects (#46832)
etraut-openai Sep 20, 2026
b05b3e1
Respect reduced motion in the voice UI (#46835)
etraut-openai Sep 20, 2026
d4cb753
Improve agent command center rows and page navigation (#46837)
etraut-openai Sep 20, 2026
569888a
Refine the agent command center layout and metadata editing (#46838)
etraut-openai Sep 20, 2026
eef77aa
Add status filter tabs to the agent command center (#46839)
etraut-openai Sep 20, 2026
724cdfb
Simplify agent command center hints and back navigation (#46840)
etraut-openai Sep 20, 2026
15312c3
Select read-only permissions for temporary structured threads (#46844)
etraut-openai Sep 20, 2026
79ef00d
Honor the system clock preference in TUI completion timestamps (#46845)
etraut-openai Sep 20, 2026
a2de8fe
Move fullscreen transcript control to TUI configuration (#46849)
etraut-openai Sep 20, 2026
7c1e485
Increase the default terminal probe timeout from 100 ms to 250 ms (#4…
etraut-openai Sep 20, 2026
2426ed7
Support stadium nodes in Mermaid terminal diagrams (#46856)
etraut-openai Sep 20, 2026
f3f0775
Extract shared text selection helpers for the TUI (#46857)
etraut-openai Sep 20, 2026
e398395
Add mouse selection and editing to the fullscreen composer (#46858)
etraut-openai Sep 20, 2026
ad538e1
Limit the welcome logo animation to onboarding (#46859)
etraut-openai Sep 20, 2026
d2d196b
Remove analytics TUI snapshots (#46861)
etraut-openai Sep 20, 2026
5e5cada
Refresh analytics on identity changes and compact usage menus (#46862)
etraut-openai Sep 20, 2026
46f7d99
Stabilize usage dashboard navigation and add keyboard help (#46863)
etraut-openai Sep 20, 2026
d6d4327
Improve usage report layouts and preserve reading positions (#46864)
etraut-openai Sep 20, 2026
b48232f
Enable mouse navigation in the TUI usage view (#46866)
etraut-openai Sep 20, 2026
e29eceb
Preserve streamed answers when subagents finish (#46867)
fcoury-oai Sep 20, 2026
c45ea25
Allow subagents to request MCP elicitation input (#46877)
rennie-openai Sep 20, 2026
8b79d8a
Count TUI launches by fullscreen transcript configuration (#46879)
etraut-openai Sep 20, 2026
282d655
Preserve voice playback across pauses and packet bursts (#46880)
etraut-openai Sep 20, 2026
93b44c3
Streamline agent command-center shortcuts and layout (#46882)
etraut-openai Sep 20, 2026
2f34d23
Add `/tui` to choose the terminal UI mode for the next launch (#46883)
fcoury-oai Sep 20, 2026
9fdff73
Enable plain clicks on transcript links and style bare URLs (#46884)
etraut-openai Sep 20, 2026
2db0ab7
Add right-click copying for transcript and composer selections (#46895)
fcoury-oai Sep 20, 2026
d992132
Honor the effective terminal color level in activity charts (#46897)
etraut-openai Sep 20, 2026
4ca8e7a
Make transcript list spacing uniform after streaming (#46899)
fcoury-oai Sep 20, 2026
eaff9a5
Hide Back to bottom when the current transcript tail is visible (#46902)
fcoury-oai Sep 20, 2026
88ef37c
Identify local background servers in `/status` (#46905)
etraut-openai Sep 20, 2026
ee2149a
Preserve transcript position when opening settings pickers (#46910)
etraut-openai Sep 21, 2026
bb054a2
Keep quota warnings visible in the TUI (#46912)
fcoury-oai Sep 21, 2026
75db67b
Enforce current provider requirements for the model catalog (#46917)
alexsong-oai Sep 21, 2026
d1e3f9d
Fix realtime V3 transcript reconciliation for handoffs (#46922)
etraut-openai Sep 21, 2026
05f39d7
Remove the `Error` prefix from TUI `config.toml` load errors (#46929)
etraut-openai Sep 21, 2026
57567b8
Use shared, keymap-aware tips in the fullscreen composer (#46931)
etraut-openai Sep 21, 2026
a866315
Add independent TUI rendering toggles for Mermaid, math, and tables (…
etraut-openai Sep 21, 2026
774d642
Populate the agents overview from background tool responses (#46946)
etraut-openai Sep 21, 2026
a6fdb11
Preserve metadata in native user verification requests (#46952)
teddywyly-oai Sep 21, 2026
abbdde9
Add shared agent message-board extension interfaces (#46959)
jif-oai Sep 21, 2026
0ad1876
Avoid exposing config values in `codex doctor` errors (#46962)
jif-oai Sep 21, 2026
293de27
Add SQLite storage for local agent message boards (#46966)
jif-oai Sep 21, 2026
8f2c15c
Implement paginated queries for the local agent message board (#46978)
jif-oai Sep 21, 2026
4d160ea
Index channel posts by timestamp for latest-message lookups (#46979)
jif-oai Sep 21, 2026
ffbd30a
Canonicalize the workspace trust key in the doctor config test (#46981)
jif-oai Sep 21, 2026
695ab0a
Add collaboration tools for the agent message board (#46985)
jif-oai Sep 21, 2026
48f897e
Expand agent message board tool integration coverage (#46989)
jif-oai Sep 21, 2026
f747d23
Clarify Bazel lockfile verification failures (#46993)
jif-oai Sep 21, 2026
3938a27
Route agent delivery through captured send requests (#46994)
jif-oai Sep 21, 2026
ebc05da
Decouple tool restrictions from session identity with `ToolPolicy` (#…
felixxia-oai Sep 21, 2026
7d99ee8
Add agent inspection without restoring unloaded runtimes (#47010)
jif-oai Sep 21, 2026
6149914
Wire agent message boards into persistent multi-agent runtimes (#47017)
jif-oai Sep 21, 2026
23a6b70
Add diagnostics for rollout compression metadata failures (#47026)
jif-oai Sep 21, 2026
8a62cc4
Align message-board tools with the multi-agent namespace (#47028)
jif-oai Sep 21, 2026
7312971
Delete persisted message boards with their root threads (#47029)
jif-oai Sep 21, 2026
f585f13
Preserve ordered assistant context in Guardian reviews (#47030)
felixxia-oai Sep 21, 2026
3ead673
Defer extension tool history materialization until first access (#47035)
charliemarsh-oai Sep 21, 2026
dd6eff3
Share stored JSON payloads across code mode cells with `Arc` (#47036)
charliemarsh-oai Sep 21, 2026
87bc50f
Cache OS discovery for user agents and telemetry (#47038)
charliemarsh-oai Sep 21, 2026
3483294
Preserve delivered messages through post-tool hook failures (#47039)
felixxia-oai Sep 21, 2026
40eeb6e
Recover corrupt message-board storage during thread deletion (#47042)
jif-oai Sep 21, 2026
f484f72
Share SQLite pools across local agent message-board handles (#47049)
jif-oai Sep 21, 2026
0e69d3b
Batch message-board subscriber reads into one SQLite result (#47050)
jif-oai Sep 21, 2026
d583e73
Fetch local message board thread summaries in one query (#47055)
jif-oai Sep 21, 2026
fe6455a
Add a partial index for agent message board root posts (#47063)
jif-oai Sep 21, 2026
51d221a
Stop redundant message-board reads when limits reach one (#47064)
jif-oai Sep 21, 2026
a4c8fc7
Deduplicate deprecation notices in the TUI transcript (#47065)
etraut-openai Sep 21, 2026
f07aaf9
Highlight selected newlines in the transcript view (#47068)
etraut-openai Sep 21, 2026
20cdcb0
Wait for thread idle in Guardian context budget tests (#47073)
jif-oai Sep 21, 2026
f3037ca
Refresh host-supplied cloud skills at turn startup (#47074)
TAFOYA-OAI Sep 21, 2026
e51aaca
Include attributed previews in agent message board notifications (#47…
jif-oai Sep 21, 2026
62ea6d4
Serialize environment updates and cancel removed pending attachments …
sayan-oai Sep 21, 2026
7cec3e1
Mask daemon socket paths exposed through ancestor bind mounts (#47079)
nicksteele-oai Sep 21, 2026
ac98537
Track cumulative MCP attribution across requests and thread history (…
peilin-openai Sep 21, 2026
2fe4a2b
Show the voice toggle in the TUI shortcut overlay (#47082)
etraut-openai Sep 21, 2026
429afbc
Extract per-thread enrichment into a dedicated async helper (#47083)
aibrahim-oai Sep 21, 2026
3627bb9
Avoid building a host SQLite driver for SQLx macros (#47084)
aibrahim-oai Sep 21, 2026
deb0a08
Update model catalog descriptions and GPT-5.6-Sol priority (#47085)
andrewgu-oai Sep 21, 2026
c37b730
Format analytics credit usage with consistent decimal precision (#47086)
fcoury-oai Sep 21, 2026
09bb3d6
Disable unused default dependency features (#47088)
aibrahim-oai Sep 21, 2026
b4b30dd
Centralize JSON-RPC response serialization through payloads (#47089)
aibrahim-oai Sep 21, 2026
afe4249
Restrict Unix local MCP servers to stdio descriptors (#47094)
yuzhu-oai Sep 21, 2026
9c77996
Remove the `rust-release-prepare` workflow (#47095)
andrewgu-oai Sep 21, 2026
e8cd975
Keep TUI hints immediately above the composer (#47096)
fcoury-oai Sep 21, 2026
8e7f50c
Preserve assistant answers in bounded TUI task responses (#47100)
etraut-openai Sep 21, 2026
142360d
Honor configured proxies for realtime WebSocket connections (#47101)
celia-oai Sep 21, 2026
6a601c0
Preserve originating turn metadata for yielded skill calls (#47106)
eddie-openai Sep 21, 2026
023d81b
Preserve required Windows runtime variables for filesystem helpers (#…
iceweasel-oai Sep 21, 2026
bf91058
Lowercase the retry hint for conversations open in another app (#47112)
fcoury-oai Sep 21, 2026
23ae65b
Persist thread creator identity in rollouts and SQLite (#47113)
nornagon-openai Sep 21, 2026
772abc9
Preserve and expose thread item lifecycle timestamps (#47114)
chiam-oai Sep 21, 2026
3fd5160
Honor the configured product SKU in remote plugin requests (#47116)
jessedu-oai Sep 21, 2026
5aa4939
Support model-catalog overrides for Code Mode tool messages (#47118)
rhan-oai Sep 21, 2026
4a8cfe6
Pass thread IDs to attachment uploads (#47121)
kchainani-oai Sep 21, 2026
171dd0d
Increase OpenAI file blob upload timeout from 60 seconds to 5 minutes…
wilkes-oai Sep 21, 2026
26cb4d7
Add extra policy configuration for Guardian reviews (#47125)
won-openai Sep 21, 2026
69759ba
Preserve foreign working directories in extension tool environments (…
anp-oai Sep 21, 2026
cf6754e
Remove the `ultrafast` service tier from `gpt-5.6-sol` (#47130)
andrewgu-oai Sep 21, 2026
e4dba90
Support caller-provided MITM CAs in the network proxy (#47132)
viyatb-oai Sep 21, 2026
720a21a
Prevent horizontal transcript selection from triggering autoscroll (#…
imac-oai Sep 22, 2026
b045757
Honor system proxy settings for standalone web search (#47142)
celia-oai Sep 22, 2026
517f51a
Extract exec-server CLI startup into a dedicated module (#47143)
anp-oai Sep 22, 2026
c11ed24
Update code mode catalog snapshot hashes (#47149)
andrewgu-oai Sep 22, 2026
bf7c87a
Ignore stale thread-close notifications after resuming a thread (#47155)
etraut-openai Sep 22, 2026
9f22ba8
Harden gateway OAuth credential persistence and error redaction (#47158)
alexsong-oai Sep 22, 2026
b233249
Expose HTTP origins in MCP server status (#47159)
frantic-openai Sep 22, 2026
30daed3
Apply workspace routing to Guardian v2 classifier requests (#47162)
acrognale-oai Sep 22, 2026
f4389de
Add explicit gateway login control and authentication status (#47170)
alexsong-oai Sep 22, 2026
a37f260
Preserve empty cell metadata under pending tool-call pressure (#47174)
ningyi-oai Sep 22, 2026
5106a52
Enable the fullscreen transcript by default (#47178)
etraut-openai Sep 22, 2026
75ec81c
Enable automatic daemon startup by default (#47179)
etraut-openai Sep 22, 2026
d109286
Allow forking conversations locked by another app in the TUI (#47185)
fcoury-oai Sep 22, 2026
639d247
Render aligned equations and optimization notation in TUI math (#47191)
etraut-openai Sep 22, 2026
b781733
Separate thread preparation from execution persistence (#47199)
dermanyang-oai Sep 22, 2026
6ea62c4
Resolve proxy routes for standalone web search redirects (#47204)
celia-oai Sep 22, 2026
064e701
Add explicit gateway OAuth sign-in to app-server (#47207)
alexsong-oai Sep 22, 2026
94174e4
Preserve MCP request trace context across transport workers (#47212)
bromano-oai Sep 22, 2026
f908e5a
Route multi-agent spawning through `SpawnRequest` (#47235)
jif-oai Sep 22, 2026
b58b05e
Suppress agent message board notifications to the post author (#47236)
jif-oai Sep 22, 2026
acc20df
Prevent V2 agent eviction from racing with queued messages (#47240)
jif-oai Sep 22, 2026
c46aa58
Centralize agent resume handling in `LocalAgentControl` (#47244)
jif-oai Sep 22, 2026
3b50349
Add explicit app and account targets to MCP resource reads (#47248)
victor-openai Sep 22, 2026
c117207
Drop descendant channel posts from retained remote compaction v2 hist…
jif-oai Sep 22, 2026
fdd89e7
Return agent snapshots from `close_agent` (#47252)
jif-oai Sep 22, 2026
0160eb3
Preserve explicit message-board unsubscribes when posting (#47257)
jif-oai Sep 22, 2026
3d5cdc5
Test spawn settings reporting after child removal (#47258)
jif-oai Sep 22, 2026
d3e5840
Subscribe authors to message-board channels created by posting (#47259)
jif-oai Sep 22, 2026
a1f40f3
Expose hosted plugin extensions in app-server summaries (#47263)
victor-openai Sep 22, 2026
ac7634b
Stream agent snapshots from local status subscriptions (#47267)
jif-oai Sep 22, 2026
16bb1b9
Implement `AgentControl` for `LocalAgentControl` (#47271)
jif-oai Sep 22, 2026
99784bd
Allow Guardian sync review across compaction hash differences (#47272)
felixxia-oai Sep 22, 2026
279ba89
Enable Guardian thread context by default (#47275)
felixxia-oai Sep 22, 2026
89a7298
Add regression coverage for message board unsubscribe persistence (#4…
jif-oai Sep 22, 2026
d9ac1f0
Update the Guardian extra-policy snapshot for retained instructions (…
felixxia-oai Sep 22, 2026
c6c09fe
Consolidate agent operations in the `AgentControl` implementation (#4…
jif-oai Sep 22, 2026
5c07856
Separate local agent runtime state from controller handles (#47301)
jif-oai Sep 22, 2026
4f6c106
Use compact display metadata for Guardian review threads (#47302)
charliemarsh-oai Sep 22, 2026
44b857c
Clean up legacy Guardian thread metadata in SQLite (#47303)
charliemarsh-oai Sep 22, 2026
7e6c4c2
Enable `/import` in remote and local daemon sessions (#47317)
etraut-openai Sep 22, 2026
d6093d3
Offer explicit recovery for incompatible background servers (#47318)
etraut-openai Sep 22, 2026
a327521
Match agent status symbols to the selected row style (#47319)
etraut-openai Sep 22, 2026
2c087a0
Fix Escape navigation in read-only agent sessions (#47320)
etraut-openai Sep 22, 2026
13a966f
Honor the system clock preference across more TUI timestamps (#47321)
etraut-openai Sep 22, 2026
5a11c45
Render TUI Markdown lists with Unicode bullets and checkboxes (#47322)
etraut-openai Sep 22, 2026
286d4ec
Persist resume metadata in compaction checkpoints (#47323)
owenlin0 Sep 22, 2026
8a57739
Keep report reason tags within Sentry limits (#47325)
ningyi-oai Sep 22, 2026
2c2a42e
Restrict MCP OAuth authorization endpoints to HTTP(S) (#47326)
viyatb-oai Sep 22, 2026
6cfe299
Preserve image generation request IDs on failure (#47327)
chrisdong-oai Sep 22, 2026
00d92ad
Standardize TUI menu description wording and punctuation (#47329)
etraut-openai Sep 22, 2026
3b7a852
Identify failed SQLite databases in `codex doctor` output (#47330)
dkovalenko-oai Sep 22, 2026
0a73d55
Avoid redundant spacing above the transcript composer (#47331)
fcoury-oai Sep 22, 2026
49e95cc
Add GPT-6 Sol and Luna to the model catalog (#47332)
andrewgu-oai Sep 22, 2026
1b1b58f
Move the activity inspection hint into keyboard shortcut help (#47338)
fcoury-oai Sep 22, 2026
04fc75a
Add conditional turn interruption that preserves pending input (#47340)
pmccrary-oai Sep 22, 2026
d93909a
Skip stored title lookups for ephemeral forks (#47342)
keyz Sep 22, 2026
df30941
Add GPT-6 Sol and Luna to Amazon Bedrock catalogs (#47347)
celia-oai Sep 22, 2026
5121aef
Overlap subagent spawn persistence and clean up cancelled children (#…
owenlin0 Sep 22, 2026
9124e23
Move plugin recommendations into developer context (#47349)
adaley-openai Sep 22, 2026
8edfca8
Reuse cloud skill catalogs across turns until invalidated (#47350)
hlevy-openai Sep 22, 2026
559264d
Preserve `invalid_prompt` as a distinct error classification (#47353)
rennie-openai Sep 22, 2026
3ebfe7b
Reserve spacing after recaps at the transcript tail (#47355)
fcoury-oai Sep 22, 2026
722dae7
Color paths and URLs in `codex doctor` by check status (#47358)
dkovalenko-oai Sep 22, 2026
7db578f
Preserve user prompt URL destinations across terminal widths (#47360)
fcoury-oai Sep 22, 2026
c6ad6f3
Restrict Windows sandbox default object access to the logon session (…
viyatb-oai Sep 22, 2026
54487a5
Bound inbound exec-server requests across client transports (#47362)
viyatb-oai Sep 22, 2026
e7bbc79
Resume model context from the latest compaction boundary (#47365)
owenlin0 Sep 22, 2026
78fdcd2
Overlap agent metadata reads when resuming a V2 root (#47369)
vkg-oai Sep 22, 2026
418199f
Add an opt-in preference for the local MXC sandbox (#47375)
iceweasel-oai Sep 22, 2026
90e6530
Add opt-in reasoning status for realtime V3 delegations (#47377)
guinness-oai Sep 22, 2026
72ec34e
Route TUI voice controls through the app (#47380)
etraut-openai Sep 22, 2026
a837a65
Keep voice conversations running across TUI thread navigation (#47381)
etraut-openai Sep 22, 2026
58d722c
Show a voice badge in the agents overview (#47382)
etraut-openai Sep 22, 2026
506a328
Restore composer hints after clearing selection at the transcript bot…
fcoury-oai Sep 22, 2026
888e02d
Enforce network policy throughout HTTP and WebSocket requests (#47389)
acrognale-oai Sep 22, 2026
2c32953
Retry transient OpenAI file blob upload failures (#47393)
mtsui-oai Sep 22, 2026
2446223
Refresh bundled model metadata and instructions (#47397)
andrewgu-oai Sep 22, 2026
4b664e0
Respect tmux mouse settings in fullscreen and overlays (#47399)
fcoury-oai Sep 23, 2026
22a3f6d
Enforce application network policy across app-server requests (#47407)
acrognale-oai Sep 23, 2026
8f8ace7
Enforce application network policy for AWS auth and telemetry (#47408)
acrognale-oai Sep 23, 2026
db3cb33
Honor network policy in remote control and recover remote execution (…
acrognale-oai Sep 23, 2026
9d4d34d
Apply shared network policy throughout embedded Codex startup (#47411)
acrognale-oai Sep 23, 2026
53486e5
Cache decrypted gateway OAuth secrets per backend (#47413)
charliemarsh-oai Sep 23, 2026
39598ed
Support Shift-click to extend transcript selections (#47414)
etraut-openai Sep 23, 2026
2925d06
Use native scrollback for Terminal.app over SSH in auto mode (#47417)
fcoury-oai Sep 23, 2026
811fe5f
Recover unsent question drafts when TUI turns end (#47422)
imac-oai Sep 23, 2026
3032b38
Preserve history search during background draft recovery (#47423)
imac-oai Sep 23, 2026
408a77d
Clear pending async question notifications when turns end (#47424)
imac-oai Sep 23, 2026
8a3c4ea
Apply inherited environment settings at turn boundaries (#47428)
sayan-oai Sep 23, 2026
370cd7c
Allow environment selection updates during an active turn (#47435)
sayan-oai Sep 23, 2026
b7add4d
Stabilize retry timing and WebSocket tests (#47437)
anp-oai Sep 23, 2026
0d7f10b
Add diagnostic reasons to MCP attribution errors (#47899)
peilin-openai Sep 24, 2026
00c972e
## New Features
imac-oai Sep 25, 2026
54abc9d
Suppress console windows when spawning the code-mode host on Windows …
zm-oai Sep 25, 2026
036fe4d
Allow Windows daemon launches with residual job membership (#48157)
etraut-openai Sep 25, 2026
dd18e81
Suppress console windows for local Windows MCP servers (#48238)
malsamiri-oai Sep 25, 2026
51db676
Prevent Windows daemon launches from retaining launcher stdio (#48272)
zm-oai Sep 25, 2026
3665039
## Chores
imac-oai Sep 25, 2026
84498c3
Merge published Codex rust-v0.157.0 into local-LLM fork
ehrvs Sep 28, 2026
bf7a143
Merge published Codex rust-v0.157.1 patch release
ehrvs Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
300 changes: 300 additions & 0 deletions .github/actions/build-codex-packages/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,300 @@
name: build-codex-packages
description: Build and smoke-test unsigned Codex CLI and app-server release packages.
inputs:
target:
description: Rust release target triple to build and test.
required: true
package-version:
description: Semantic version to record in both packages.
required: true
build-mode:
description: Use release optimizations (release) or disable them for faster smoke coverage (debug).
required: true

# Resolve package sources relative to the action so it works in both repository layouts.
runs:
using: composite
steps:
- name: Select release binaries
shell: bash
working-directory: codex-rs
env:
BASE_BINARIES: "codex codex-app-server codex-code-mode-host"
WINDOWS_ONLY_BINARIES: "codex-command-runner codex-windows-sandbox-setup"
BUILD_MODE: ${{ inputs.build-mode }}
# macOS symbol extraction needs packed dSYM bundles before binaries are stripped.
CARGO_PROFILE_RELEASE_SPLIT_DEBUGINFO: ${{ contains(inputs.target, 'apple-darwin') && 'packed' || 'off' }}
run: |
set -euo pipefail
needed_binaries="$BASE_BINARIES"
if [[ "$RUNNER_OS" == "Windows" ]]; then
needed_binaries+=" $WINDOWS_ONLY_BINARIES"
fi
echo "NEEDED_BINARIES=$needed_binaries" >> "$GITHUB_ENV"
echo "CARGO_PROFILE_RELEASE_SPLIT_DEBUGINFO=$CARGO_PROFILE_RELEASE_SPLIT_DEBUGINFO" >> "$GITHUB_ENV"
case "$BUILD_MODE" in
release) ;;
debug)
# Use the release profile so assertions, symbols and packaging match production.
# Only trade compiler optimizations for faster builds.
{
echo "CARGO_PROFILE_RELEASE_OPT_LEVEL=0"
echo "CARGO_PROFILE_RELEASE_LTO=off"
echo "CARGO_PROFILE_RELEASE_CODEGEN_UNITS=256"
} >> "$GITHUB_ENV"
;;
*) echo "Unsupported build mode: $BUILD_MODE" >&2; exit 1 ;;
esac

- uses: ./.github/actions/setup-ci

- name: Set up Python 3.12
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
version: "0.11.3"

- name: Install Linux build dependencies
if: ${{ runner.os == 'Linux' }}
shell: bash
working-directory: codex-rs
run: |
set -euo pipefail
sudo apt-get update -y
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends binutils make pkg-config libcap-dev

- uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0
with:
targets: ${{ inputs.target }}

- name: Use hermetic Cargo home (musl)
if: ${{ runner.os == 'Linux' }}
shell: bash
working-directory: codex-rs
run: |
set -euo pipefail
cargo_home="${GITHUB_WORKSPACE}/.cargo-home"
mkdir -p "${cargo_home}/bin"
echo "CARGO_HOME=${cargo_home}" >> "$GITHUB_ENV"
echo "${cargo_home}/bin" >> "$GITHUB_PATH"
: > "${cargo_home}/config.toml"

- name: Install Zig
if: ${{ runner.os == 'Linux' }}
uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
with:
version: 0.14.0
use-cache: false

- name: Install musl build tools
if: ${{ runner.os == 'Linux' }}
shell: bash
working-directory: codex-rs
env:
TARGET: ${{ inputs.target }}
run: bash "${GITHUB_WORKSPACE}/.github/scripts/install-musl-build-tools.sh"

- name: Disable aws-lc jitter entropy (musl)
if: ${{ runner.os == 'Linux' }}
shell: bash
working-directory: codex-rs
env:
TARGET: ${{ inputs.target }}
run: |
set -euo pipefail
# Match public releases: aws-lc's jitter entropy path does not work
# reliably on musl builders, so disable it globally and per target.
echo "AWS_LC_SYS_NO_JITTER_ENTROPY=1" >> "$GITHUB_ENV"
target_no_jitter="AWS_LC_SYS_NO_JITTER_ENTROPY_${TARGET}"
target_no_jitter="${target_no_jitter//-/_}"
echo "${target_no_jitter}=1" >> "$GITHUB_ENV"

- name: Configure rusty_v8 artifact overrides and verify checksums
uses: ./.github/actions/setup-rusty-v8
with:
target: ${{ inputs.target }}

- name: Configure MSVC environment
if: ${{ runner.os == 'Windows' }}
uses: ./.github/actions/setup-msvc-env
with:
target: ${{ inputs.target }}

- name: Build bwrap and export digest
if: ${{ runner.os == 'Linux' }}
shell: bash
working-directory: codex-rs
env:
TARGET: ${{ inputs.target }}
run: |
set -euo pipefail
cargo build --target "${TARGET}" --release --timings --bin bwrap

bwrap_path="${CARGO_TARGET_DIR}/${TARGET}/release/bwrap"
# Codex embeds this digest at build time and verifies the packaged
# bwrap at runtime, so hash its final stripped bytes first.
strip --strip-debug --strip-unneeded "$bwrap_path"
digest="$(sha256sum "$bwrap_path" | awk '{print $1}')"
echo "CODEX_BWRAP_SHA256=${digest}" >> "$GITHUB_ENV"

- name: Build Codex package binaries
shell: bash
working-directory: codex-rs
env:
TARGET: ${{ inputs.target }}
run: |
set -euo pipefail
build_args=()
for binary in $NEEDED_BINARIES; do
build_args+=(--bin "$binary")
done
# SQLite intrinsics can emit instructions unsupported by older x64
# CPUs, causing Windows release binaries to crash during startup.
if [[ "${TARGET}" == "x86_64-pc-windows-msvc" ]]; then
export LIBSQLITE3_FLAGS=SQLITE_DISABLE_INTRINSIC
fi
STABLE_GIT_COMMIT="$(git rev-parse HEAD)"
export STABLE_GIT_COMMIT
cargo build --target "${TARGET}" --release --timings "${build_args[@]}"

- name: Normalize Windows PDB filenames
if: ${{ runner.os == 'Windows' }}
shell: bash
working-directory: codex-rs
env:
TARGET: ${{ inputs.target }}
run: |
set -euo pipefail
release_dir="${CARGO_TARGET_DIR}/${TARGET}/release"
for binary in $NEEDED_BINARIES; do
expected_pdb="${release_dir}/${binary}.pdb"
if [[ -f "$expected_pdb" ]]; then
continue
fi

underscored_pdb="${release_dir}/${binary//-/_}.pdb"
if [[ ! -f "$underscored_pdb" ]]; then
echo "PDB for ${binary} not found at ${expected_pdb} or ${underscored_pdb}" >&2
exit 1
fi
cp "$underscored_pdb" "$expected_pdb"
done

- name: Download packaged zsh manifest
if: ${{ runner.os != 'Windows' }}
shell: bash
working-directory: codex-rs
run: |
set -euo pipefail
curl -fsSL \
"https://github.com/openai/codex/releases/download/codex-zsh-v0.1.0/codex-zsh" \
-o "${RUNNER_TEMP}/codex-zsh"

- name: Archive symbols and strip binaries
shell: bash
working-directory: codex-rs
env:
TARGET: ${{ inputs.target }}
PACKAGE_ACTION_PATH: ${{ github.action_path }}
run: |
set -euo pipefail
bash "${PACKAGE_ACTION_PATH}/../../../.github/scripts/archive-release-symbols-and-strip-binaries.sh" \
--target "${TARGET}" \
--artifact-name "${TARGET}" \
--release-dir "${CARGO_TARGET_DIR}/${TARGET}/release" \
--archive-dir "../symbols-dist/${TARGET}" \
--binaries "$NEEDED_BINARIES"

- name: Build Codex package archives
shell: bash
working-directory: codex-rs
env:
TARGET: ${{ inputs.target }}
CODEX_PACKAGE_VERSION: ${{ inputs.package-version }}
PACKAGE_ACTION_PATH: ${{ github.action_path }}
run: |
set -euo pipefail
target="${TARGET}"
release_dir="${CARGO_TARGET_DIR}/${target}/release"
archive_dir="${GITHUB_WORKSPACE}/dist/${target}"
exe_suffix=""
if [[ "$RUNNER_OS" == "Windows" ]]; then
exe_suffix=".exe"
fi

package_args=(
--target "$target"
--code-mode-host-bin "${release_dir}/codex-code-mode-host${exe_suffix}"
--cargo-profile release
--package-version "$CODEX_PACKAGE_VERSION"
--force
)
if [[ "$RUNNER_OS" == "Linux" ]]; then
package_args+=(--bwrap-bin "${release_dir}/bwrap")
fi
if [[ "$RUNNER_OS" == "Windows" ]]; then
package_args+=(
--codex-command-runner-bin "${release_dir}/codex-command-runner.exe"
--codex-windows-sandbox-setup-bin "${release_dir}/codex-windows-sandbox-setup.exe"
)
else
package_args+=(--zsh-manifest "${RUNNER_TEMP}/codex-zsh")
fi

python3 "${PACKAGE_ACTION_PATH}/../../../scripts/build_codex_package.py" \
"${package_args[@]}" \
--variant codex \
--entrypoint-bin "${release_dir}/codex${exe_suffix}" \
--package-dir "${RUNNER_TEMP}/codex-package-${target}" \
--archive-output "${archive_dir}/codex-package-${target}.tar.gz" \
--archive-output "${archive_dir}/codex-package-${target}.tar.zst"

python3 "${PACKAGE_ACTION_PATH}/../../../scripts/build_codex_package.py" \
"${package_args[@]}" \
--variant codex-app-server \
--entrypoint-bin "${release_dir}/codex-app-server${exe_suffix}" \
--package-dir "${RUNNER_TEMP}/codex-app-server-package-${target}" \
--archive-output "${archive_dir}/codex-app-server-package-${target}.tar.gz" \
--archive-output "${archive_dir}/codex-app-server-package-${target}.tar.zst"

- name: Smoke-test assembled packages
shell: bash
working-directory: codex-rs
env:
TARGET: ${{ inputs.target }}
PYTHONPATH: ${{ github.workspace }}/sdk/python/src${{ runner.os == 'Windows' && ';' || ':' }}${{ github.workspace }}/sdk/python/tests
PACKAGE_ACTION_PATH: ${{ github.action_path }}
run: |
set -euo pipefail
cd "${PACKAGE_ACTION_PATH}/../../../scripts/codex_package/smoke_tests"
target="${TARGET}"
archive_dir="${GITHUB_WORKSPACE}/dist/${target}"
mkdir -p "${GITHUB_WORKSPACE}/codex-rs/target"
pytest_args=(
-v
--basetemp "${GITHUB_WORKSPACE}/codex-rs/target/package-smoke-tmp"
--package-target "$target"
--symbols-archive "${GITHUB_WORKSPACE}/symbols-dist/${target}/codex-symbols-${target}.tar.gz"
)

# CI must exercise packaged tools; local smoke runs may use host tools.
if command -v rg || { [[ "$RUNNER_OS" == "Linux" ]] && command -v bwrap; }; then
echo "Host rg (or bwrap on Linux) is on PATH; CI must use packaged tools." >&2
exit 1
fi

uv run --frozen pytest "${pytest_args[@]}" \
--compression gzip \
--cli-archive "${archive_dir}/codex-package-${target}.tar.gz" \
--app-server-archive "${archive_dir}/codex-app-server-package-${target}.tar.gz" \
test_codex_package.py

uv run --frozen pytest "${pytest_args[@]}" \
--compression zstd \
--cli-archive "${archive_dir}/codex-package-${target}.tar.zst" \
--app-server-archive "${archive_dir}/codex-app-server-package-${target}.tar.zst" \
test_codex_package.py
40 changes: 40 additions & 0 deletions .github/scripts/macos-signing/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Provisioned CLI signing identity

The provisioned CLI has two deliberately separate identifiers:

| Purpose | Identifier |
| ------------------------------------- | ------------------------------- |
| Code-signing identifier | `codex` |
| Bundle identifier | `com.openai.codex.cli` |
| Provisioned App ID and keychain group | `<TeamID>.com.openai.codex.cli` |

The code-signing identifier preserves access to existing login-keychain items
whose access rules require the original CLI identity. Giving the CLI an app
bundle must not change that identifier. The bundle identifier, App ID,
entitlements, profile, and approved certificate remain independently validated.
The native-verification keys use the provisioned keychain group; they do not
replace existing login-keychain credential access rules.

Changing the new binary's designated requirement to accept both identifiers
would not make it satisfy an existing item's requirement for `codex`. Items
created by a binary signed as `com.openai.codex.cli` are a separate compatibility
case: restoring `codex` does not silently authorize access to those items.

The signing backend must honor an explicit `--binary-identifier` when signing
an app bundle. The wrapper signs the bundle once; rcodesign seals its metadata
and resources while retaining `codex` as the main executable's identity.
Release tool artifact URIs and SHA-256 digests are pinned in the signing
environment configuration.

## Release verification

When `CODEX_PROVISIONED_MACOS_CANDIDATE` is enabled, tag releases automatically
publish the provisioned archives and versioned `codex-provisioned` manifest after
both architecture packages pass the existing signature, entitlement, profile,
architecture, stapling, Gatekeeper, and package-smoke checks. An enabled
provisioned build that fails verification blocks release publication.

The signing-driver tests use generated credentials and stubbed native tools.
They cover the signing command contract and failure handling. Actual keychain
access and credential recovery across identity changes require runtime testing;
these unit tests do not establish that behavior.
10 changes: 10 additions & 0 deletions .github/scripts/macos-signing/provisioned_macos_cli_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
from pathlib import Path

BUNDLE_ID = "com.openai.codex.cli"
# Existing login-keychain ACLs identify the CLI by its code-signing identifier.
# Keep this stable independently of the bundle and provisioned App ID.
CODE_SIGNING_ID = "codex"
APP = Path("CodexCLI.app")
EXECUTABLE = APP / "Contents/MacOS/codex"
SIGNING = Path(__file__).resolve().parent
Expand Down Expand Up @@ -156,6 +159,13 @@ def prepare(package, reports, configuration: ProfileConfiguration):
def verify(package, reports, expected_target, configuration: ProfileConfiguration):
"""Check profile and certificate pins; the signing driver verifies code."""
load_profile(configuration)
info = plistlib.loads((package / APP / "Contents/Info.plist").read_bytes())
if (
info.get("CFBundleIdentifier") != BUNDLE_ID
or info.get("CFBundleExecutable") != EXECUTABLE.name
or info.get("CFBundlePackageType") != "APPL"
):
raise ValueError("Unexpected provisioned CLI bundle identity or executable")
if (
package / APP / "Contents/embedded.provisionprofile"
).read_bytes() != configuration.profile.read_bytes():
Expand Down
Loading
Loading