Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
724 commits
Select commit Hold shift + click to select a range
167553f
fix: session downgrade (#8196)
jif-oai Dec 17, 2025
3d92b44
feat: add config to disable warnings around ghost snapshot (#8178)
jif-oai Dec 17, 2025
1e9babe
fix: PathBuf -> AbsolutePathBuf in ConfigToml struct (#8205)
bolinfest Dec 17, 2025
df35189
feat: make list_models non-blocking (#8198)
shijie-oai Dec 17, 2025
a9a7cf3
download new windows binaries when staging npm package (#8203)
iceweasel-oai Dec 17, 2025
927a6ac
Load models from static file (#8153)
aibrahim-oai Dec 17, 2025
25ecd0c
speed and reliability improvements for setting reads ACLs (#8216)
iceweasel-oai Dec 17, 2025
774bd9e
feat: model picker (#8209)
aibrahim-oai Dec 18, 2025
a879701
chore: cleanup Config instantiation codepaths (#8226)
bolinfest Dec 18, 2025
6f102e1
Show migration link (#8228)
aibrahim-oai Dec 18, 2025
da3869e
Support SYSTEM skills. (#8220)
xl-openai Dec 18, 2025
50dafbc
Make loading malformed skills fail-open (#8243)
gverma-openai Dec 18, 2025
580c59a
fix: introduce ConfigBuilder (#8235)
bolinfest Dec 18, 2025
e1deeef
Change "Team" to "Buisness" and add Education (#8221)
ethantphillips Dec 18, 2025
5c8d221
Reintroduce feature flags for skills. (#8244)
xl-openai Dec 18, 2025
cea76b8
nit: ui background terminals (#8255)
jif-oai Dec 18, 2025
1cfacbf
chore: add beta features (#8201)
jif-oai Dec 18, 2025
9bf41e9
chore: simplify loading of Mac-specific logic in config_loader (#8248)
bolinfest Dec 18, 2025
374d591
chores: clean picker (#8232)
aibrahim-oai Dec 18, 2025
deafead
chore: prefer AsRef<Path> to &Path (#8249)
bolinfest Dec 18, 2025
4c9d589
docs: clarify codex resume --all (CWD column & filtering) (#8264)
magsonleone Dec 18, 2025
f084e52
caribou (#8265)
aibrahim-oai Dec 18, 2025
aea47b6
feat: add name to beta features (#8266)
jif-oai Dec 18, 2025
425c8dc
cloud: default to current branch in cloud exec (#7460)
squinlan-oai Dec 18, 2025
b903285
feat: migrate to new constraint-based loading strategy (#8251)
bolinfest Dec 18, 2025
7157421
splash screen (#8270)
aibrahim-oai Dec 18, 2025
be274cb
tui: improve rendering of search cell (#8273)
nornagon-openai Dec 18, 2025
2e5d52c
[release] Add a dmg target for MacOS (#8207)
celia-oai Dec 18, 2025
ad41182
grant read ACL to exe directory first so we can call the command runn…
iceweasel-oai Dec 18, 2025
e9023d5
use mainline version as baseline in ci (#8271)
iceweasel-oai Dec 18, 2025
df46ea4
Terminal Detection Metadata for Per-Terminal Scroll Scaling (#8252)
joshka-oai Dec 18, 2025
6395430
add a default dacl to restricted token to enable reading of pipes (#8…
iceweasel-oai Dec 18, 2025
87abf06
fix: flaky tests 5 (#8282)
jif-oai Dec 18, 2025
4fb0b54
feat: add `/ps` (#8279)
jif-oai Dec 18, 2025
2f048f2
feat: add support for /etc/codex/requirements.toml on UNIX (#8277)
bolinfest Dec 18, 2025
d7ae342
feat(app-server): add v2 deprecation notice (#8285)
owenlin0 Dec 18, 2025
8f0b383
model list (#8286)
pakrym-oai Dec 18, 2025
9fb9ed6
Set exclude to true by default in app server (#8281)
ambrosino-oai Dec 18, 2025
53f5317
chore: upgrade rmcp crate from 0.10.0 to 0.12.0 (#8288)
bolinfest Dec 18, 2025
1cd1cf1
Update system skills bundled with codex-rs (#8253)
gverma-openai Dec 18, 2025
358a5ba
Support skills shortDescription. (#8278)
xl-openai Dec 18, 2025
46baedd
fix: change codex/sandbox-state/update from a notification to a reque…
bolinfest Dec 18, 2025
2d98260
fix: remove duplicate shell_snapshot FeatureSpec (#8274)
zchee Dec 18, 2025
3d4ced3
chore: migrate from Config::load_from_base_config_with_overrides to C…
bolinfest Dec 19, 2025
3429de2
feat: introduce ExternalSandbox policy (#8290)
apanasenko-oai Dec 19, 2025
6c76d17
feat: collapse "waiting" of `unified_exec` (#8257)
jif-oai Dec 19, 2025
dcc0119
UI tweaks on skills popup. (#8250)
xl-openai Dec 19, 2025
ba835c3
Fix tests (#8299)
xl-openai Dec 19, 2025
d353372
skills feature default on. (#8297)
xl-openai Dec 19, 2025
8120c87
Support admin scope skills. (#8296)
xl-openai Dec 19, 2025
f4371d2
Add short descriptions to system skills (#8301)
gverma-openai Dec 19, 2025
339b052
Fix admin skills. (#8305)
xl-openai Dec 19, 2025
6f94a90
Keep skills feature flag default OFF for windows. (#8308)
xl-openai Dec 19, 2025
eeda6a5
Revert "Keep skills feature flag default OFF for windows." (#8325)
xl-openai Dec 19, 2025
37071e7
Update system skills from OSS repo (#8328)
gverma-openai Dec 19, 2025
b15b508
Fix link to contributing.md in experimental.md (#8311)
jdijk-deventit Dec 19, 2025
014235f
Fix: /undo destructively interacts with git staging (#8214) (#8303)
Galaxy-0 Dec 19, 2025
7e5c343
feat: make ConstraintError an enum (#8330)
bolinfest Dec 19, 2025
0a7021d
fix: enable resume_warning that was missing from mod.rs (#8333)
bolinfest Dec 19, 2025
e3d3445
Update models.json (#8168)
github-actions[bot] Dec 19, 2025
1d4463b
feat(tui2): coalesce transcript scroll redraws (#8295)
joshka-oai Dec 19, 2025
ec3738b
feat: move file name derivation into codex-file-search (#8334)
RQfreefly Dec 19, 2025
dc61fc5
feat: support allowed_sandbox_modes in requirements.toml (#8298)
bolinfest Dec 19, 2025
797a68b
bump cargo-deny-action ver (#8345)
sayan-oai Dec 19, 2025
f0dc6fd
Rename OpenAI models to models manager (#8346)
aibrahim-oai Dec 20, 2025
a697408
chore: enusre the logic that creates ConfigLayerStack has access to c…
bolinfest Dec 20, 2025
63942b8
feat(tui2): tune scrolling inpu based on (#8357)
joshka-oai Dec 20, 2025
987dd7f
Chore: remove rmcp feature and exp flag usages (#8087)
shijie-oai Dec 20, 2025
fab1ded
Remove plan from system skills (#8374)
gverma-openai Dec 21, 2025
d281bcf
Point skills docs to developer documentation site (#8407)
etraut-openai Dec 22, 2025
aa83d7d
fix: do not panic on alphas (#8406)
aibrahim-oai Dec 22, 2025
99cbba8
Update ghost_commit flag reference to undo (#8091)
charlie-openai Dec 22, 2025
3c353a3
test(tui2): re-enable ANSI for VT100 tests (#8423)
joshka-oai Dec 22, 2025
4e6d6cd
fix(tui2): constrain transcript mouse selection bounds (#8419)
joshka-oai Dec 22, 2025
7a8407b
chore: un-ship undo (#8424)
jif-oai Dec 22, 2025
372de6d
docs: add `developer_instructions` config option and update descripti…
448523760 Dec 22, 2025
45727b9
chore: drop undo from the docs (#8431)
jif-oai Dec 22, 2025
5a0b5d1
chore(deps): bump peter-evans/create-pull-request from 7 to 8 (#8410)
dependabot[bot] Dec 22, 2025
334dbe5
chore(deps): bump test-log from 0.2.18 to 0.2.19 in /codex-rs (#8412)
dependabot[bot] Dec 22, 2025
6c84709
chore(deps): bump landlock from 0.4.2 to 0.4.4 in /codex-rs (#8413)
dependabot[bot] Dec 22, 2025
8d5ab97
chore(deps): bump clap from 4.5.47 to 4.5.53 in /codex-rs (#8414)
dependabot[bot] Dec 22, 2025
b24b788
chore(deps): bump openssl-sys from 0.9.109 to 0.9.111 in /codex-rs (#…
dependabot[bot] Dec 22, 2025
33e1d08
feat(windows) start powershell in utf-8 mode (#7902)
dylan-hurd-oai Dec 22, 2025
96fdbdd
Add ExecPolicyManager (#8349)
pakrym-oai Dec 22, 2025
8ff16a7
feat: support in-repo .codex/config.toml entries as sources of config…
bolinfest Dec 22, 2025
314937f
feat: add support for project_root_markers in config.toml (#8359)
bolinfest Dec 22, 2025
0237459
Handle concatenation nodes in bash command parser for exec policy (#8…
ivanmurashko Dec 22, 2025
7809e36
Update models.json (#8446)
github-actions[bot] Dec 22, 2025
d65fe38
use a junction for the cwd while read ACLs are being applied (#8444)
iceweasel-oai Dec 22, 2025
6b2ef21
remove minimal client version (#8447)
aibrahim-oai Dec 22, 2025
8e900c2
chore: add ConfigLayerStack as a field of Config (#8448)
bolinfest Dec 22, 2025
4673090
feat: open prompt in configured external editor (#7606)
sayan-oai Dec 22, 2025
7d0c5c7
fix(tui2): copy transcript selection outside viewport (#8449)
joshka-oai Dec 22, 2025
f6275a5
chore(tui): include tracing targets in file logs (#8418)
joshka-oai Dec 22, 2025
14dbd06
chore: include User layer in ConfigLayerStack even if config.toml is …
bolinfest Dec 23, 2025
277babb
feat: load ExecPolicyManager from ConfigLayerStack (#8453)
bolinfest Dec 23, 2025
414fbe0
feat(tui2): add copy selection shortcut + UI affordance (#8462)
joshka-oai Dec 23, 2025
e27d9bd
feat: honor /etc/codex/config.toml (#8461)
bolinfest Dec 23, 2025
310f211
fix(tui2): fix screen corruption (#8463)
joshka-oai Dec 23, 2025
cbc5fb9
chore: save more about turn context in rollout log file (#8458)
apanasenko-oai Dec 23, 2025
2828549
fix(tui2): start transcript selection on drag (#8466)
joshka-oai Dec 23, 2025
53eb2e9
[tui] add optional details to TUI status header (#8293)
sayan-oai Dec 23, 2025
0130a2f
feat(tui2): add multi-click transcript selection (#8471)
joshka-oai Dec 23, 2025
f2b740c
fix(codex-cli): improve ripgrep download diagnostics (#8486)
joshka-oai Dec 23, 2025
fb24c47
fix: limit output size for exec command in unified exec (#8460)
shijie-oai Dec 23, 2025
972b585
fix: fix test that was writing temp file to cwd instead of TMPDIR (#8…
bolinfest Dec 23, 2025
40de81e
Remove reasoning format (#8484)
aibrahim-oai Dec 24, 2025
96a65ff
perf(tui): cap redraw scheduling to 60fps (#8499)
joshka-oai Dec 24, 2025
e61bae1
feat: introduce codex-utils-cargo-bin as an alternative to assert_cmd…
bolinfest Dec 24, 2025
38de0a1
fix: declare test path relative to `$CARGO_MANIFEST_DIR` (#8498)
bolinfest Dec 24, 2025
bf73260
[chore] add additional_details to StreamErrorEvent + wire through (#8…
sayan-oai Dec 24, 2025
810ebe0
fix: restrict windows-sys to Windows target (#8522)
RunjiLiu Dec 25, 2025
ce3ff29
chore(deps): bump toml_edit from 0.23.7 to 0.24.0+spec-1.1.0 in /code…
dependabot[bot] Dec 30, 2025
4313e0a
chore(deps): bump tracing-subscriber from 0.3.20 to 0.3.22 in /codex-…
dependabot[bot] Dec 30, 2025
a48904d
chore(deps): bump tokio from 1.47.1 to 1.48.0 in /codex-rs (#8597)
dependabot[bot] Dec 30, 2025
13c42a0
chore(deps): bump regex-lite from 0.1.7 to 0.1.8 in /codex-rs (#8598)
dependabot[bot] Dec 30, 2025
66b7c67
Refresh on models etag mismatch (#8491)
aibrahim-oai Jan 1, 2026
79ce79a
use a SandboxUsers group for ACLs instead of granting to each sandbox…
iceweasel-oai Jan 2, 2026
7078a0b
Log compaction request bodies (#8676)
pakrym-oai Jan 2, 2026
2de7314
Remove model family from tui (#8488)
aibrahim-oai Jan 2, 2026
ab75338
Replaced user documentation with links to developers docs site (#8662)
etraut-openai Jan 2, 2026
3cfa4bc
perf(tui2): reduce unnecessary redraws (#8681)
joshka-oai Jan 2, 2026
82fcc08
Fixed broken link in README (#8682)
etraut-openai Jan 2, 2026
efd2d76
Account for last token count on resume (#8677)
aibrahim-oai Jan 2, 2026
6846bc1
hard disable remote models refresh when feature is disabled (#8687)
aibrahim-oai Jan 2, 2026
c673e7a
chore(deps): bump tracing-opentelemetry from 0.31.0 to 0.32.0 in /cod…
dependabot[bot] Jan 3, 2026
1b5095b
Attach more tags to feedback submissions (#8688)
pakrym-oai Jan 3, 2026
ee9d441
chore: update outdated docs (#8701)
tibo-openai Jan 3, 2026
90f37e8
perf(tui2): cache transcript view rendering (#8693)
joshka-oai Jan 3, 2026
19525ef
fix: brighten transcript copy affordance (#8697)
joshka-oai Jan 3, 2026
0c1658d
ci: prevent workflows from running on forks (#8629)
leezenn Jan 3, 2026
279283f
fix(tui2): avoid scroll stickiness at cell boundaries (#8695)
joshka-oai Jan 3, 2026
5678213
fix(tui2): render copy pill at viewport bottom (#8716)
joshka-oai Jan 5, 2026
181ff89
tui2: copy selection dismisses highlight (#8718)
joshka-oai Jan 5, 2026
1d678c8
chore(deps): bump clap_complete from 4.5.57 to 4.5.64 in /codex-rs (#…
dependabot[bot] Jan 5, 2026
db1423a
chore(deps): bump tokio-stream from 0.1.17 to 0.1.18 in /codex-rs (#8…
dependabot[bot] Jan 5, 2026
e139ef3
chore(deps): bump derive_more from 2.0.1 to 2.1.1 in /codex-rs (#8724)
dependabot[bot] Jan 5, 2026
a8e0fe8
chore(deps): bump insta from 1.44.3 to 1.46.0 in /codex-rs (#8725)
dependabot[bot] Jan 5, 2026
649badd
fix: chat multiple tool calls (#8556)
jif-oai Jan 5, 2026
0b53aed
fix: /review to respect session cwd (#8738)
tibo-openai Jan 5, 2026
468ee8a
[MCP] Sanitize MCP tool names to ensure they are compatible with the …
gpeal Jan 5, 2026
8f10d3b
feat(tui2): transcript scrollbar (auto-hide + drag) (#8728)
joshka-oai Jan 5, 2026
bba5e5e
fix(codex-api): handle Chat Completions DONE sentinel (#8708)
joshka-oai Jan 5, 2026
1d8e2b4
(MacOS) Load config requirements from MDM (#8743)
gt-oai Jan 5, 2026
807f8a4
feat: expose outputSchema to user_turn/turn_start app_server API (#8377)
apanasenko-oai Jan 5, 2026
fabb797
chore: GH pager (#8747)
jif-oai Jan 5, 2026
720fa67
better idempotency for creating/updating firewall rules during setup.…
iceweasel-oai Jan 5, 2026
95580f2
never let sandbox write to .codex/ or .codex/.sandbox/ (#8683)
iceweasel-oai Jan 5, 2026
57f8158
chore: improve skills render section (#8459)
gverma-openai Jan 5, 2026
7cf6f1c
Use issuer URL in device auth prompt link (#7858)
abrar71 Jan 5, 2026
07f077d
best effort to "hide" Sandbox users (#8492)
iceweasel-oai Jan 5, 2026
cafb07f
feat: add justification arg to prefix_rule() in *.rules (#8751)
bolinfest Jan 5, 2026
c29afc0
[device-auth] Update login instruction for headless environments. (#8…
mzeng-openai Jan 5, 2026
58a91a0
Use ConfigLayerStack for skills discovery. (#8497)
xl-openai Jan 5, 2026
5f8776d
Allow global exec flags after `resume` and fix CI codex build/timeout…
fjord-oai Jan 5, 2026
b1c93e1
chore(apply-patch) additional scenarios (#8230)
dylan-hurd-oai Jan 5, 2026
771f1ca
fix: accept whitespace-padded patch markers (#8746)
tibo-openai Jan 6, 2026
c92dbea
tui2: stop baking streaming wraps; reflow agent markdown (#8761)
joshka-oai Jan 6, 2026
4c3d2a5
fix: render cwd-relative paths in tui (#8771)
joshka-oai Jan 6, 2026
6346e4f
fix: fix readiness subscribe token wrap-around (#8770)
tibo-openai Jan 6, 2026
8858012
chore: emit unified exec begin only when PTY exist (#8780)
jif-oai Jan 6, 2026
7ecd0dc
fix: stop honoring CODEX_MANAGED_CONFIG_PATH environment variable in …
bolinfest Jan 6, 2026
06e21c7
fix: update model examples to gpt-5.2 (#8566)
seuros Jan 6, 2026
32db8ea
feat: add head-tail buffer for `unified_exec` (#8735)
jif-oai Jan 6, 2026
cab7136
chore: add model/list call to app-server-test-client (#8331)
owenlin0 Jan 6, 2026
d1c6329
feat: forced tool tips (#8752)
jif-oai Jan 6, 2026
740bf0e
chore: clear background terminals on interrupt (#8786)
jif-oai Jan 6, 2026
915352b
feat: add analytics config setting (#8350)
JaviSoto Jan 6, 2026
1dd1355
feat: agent controller (#8783)
jif-oai Jan 6, 2026
4ce9d0a
suppress popups while browsing input history (#8772)
xl-openai Jan 6, 2026
a0b2d03
Clear copy pill background and add snapshot test (#8777)
joshka-oai Jan 6, 2026
188f79a
feat: drop agent bus and store the agent status in codex directly (#8…
jif-oai Jan 6, 2026
8b7ec31
feat(app-server): thread/rollback API (#8454)
owenlin0 Jan 6, 2026
11d4f3f
[app-server] fix config loading for conversations (#8765)
celia-oai Jan 6, 2026
54ded1a
add web_search_cached flag (#8795)
sayan-oai Jan 6, 2026
dc1a568
fix: populate the release notes when the release is created (#8799)
bolinfest Jan 6, 2026
8b4d27d
fix: truncate long approval prefixes when rendering (#8734)
tibo-openai Jan 6, 2026
3389465
Enable model upgrade popup even when selected model is no longer in p…
charley-oai Jan 7, 2026
230a045
chore: stabilize core tool parallelism test (#8805)
tibo-openai Jan 7, 2026
8372d61
chore: silent just fmt (#8820)
jif-oai Jan 7, 2026
a590523
fix: parse git apply paths correctly (#8824)
tibo-openai Jan 7, 2026
124a09e
fix: handle /review arguments in TUI (#8823)
tibo-openai Jan 7, 2026
4cef89a
chore: rename unified exec sessions (#8822)
jif-oai Jan 7, 2026
0d788e6
fix: handle early codex exec exit (#8825)
tibo-openai Jan 7, 2026
116059c
chore: unify conversation with thread name (#8830)
jif-oai Jan 7, 2026
fedcb8f
Move tests below auth manager (#8840)
pakrym-oai Jan 7, 2026
a1e8118
fix: upgrade lru crate to 0.16.3 (#8845)
bolinfest Jan 7, 2026
9179c9d
Merge Modelfamily into modelinfo (#8763)
aibrahim-oai Jan 7, 2026
c31960b
remove unnecessary todos (#8842)
aibrahim-oai Jan 7, 2026
018de99
Stop using AuthManager as the source of codex_home (#8846)
pakrym-oai Jan 7, 2026
4c9b4b6
Fix app-server `write_models_cache` to treat models with less priorit…
aibrahim-oai Jan 7, 2026
1253d19
chore: drop useless feature flags (#8850)
jif-oai Jan 7, 2026
fe460e0
chore: drop some deprecated (#8848)
jif-oai Jan 7, 2026
e8421c7
[chore] update app server doc with skills (#8853)
celia-oai Jan 7, 2026
66450f0
fix: implement 'Allow this session' for apply_patch approvals (#8451)
owenlin0 Jan 7, 2026
187924d
Override truncation policy at model info level (#8856)
aibrahim-oai Jan 7, 2026
a9b5e8a
Simplify error managment in `run_turn` (#8849)
aibrahim-oai Jan 7, 2026
21c6d40
Add feature for optional request compression (#8767)
cconger Jan 7, 2026
5f3f702
Clarify YAML frontmatter formatting in skill-creator (#8610)
darlingm Jan 7, 2026
f07b8aa
Warn in /model if BASE_URL set (#8847)
gt-oai Jan 7, 2026
61e81af
Support symlink for skills discovery. (#8801)
xl-openai Jan 7, 2026
efd0c21
Feat: appServer.requirementList for requirement.toml (#8800)
shijie-oai Jan 7, 2026
54b290e
fix: update resource path resolution logic so it works with Bazel (#8…
bolinfest Jan 7, 2026
ef8b8eb
fix: use tokio for I/O in an async function (#8868)
bolinfest Jan 8, 2026
357e4c9
add footer note to TUI (#8867)
iceweasel-oai Jan 8, 2026
f6b563e
feat: introduce find_resource! macro that works with Cargo or Bazel (…
bolinfest Jan 8, 2026
75076aa
Support UserInput::Skill in V2 API. (#8864)
xl-openai Jan 8, 2026
ccba737
add ability to disable input temporarily in the TUI. (#8876)
iceweasel-oai Jan 8, 2026
35fd69a
fix: make the find_resource! macro responsible for the absolutize() c…
bolinfest Jan 8, 2026
0f8bb45
fix: windows can now paste non-ascii multiline text (#8774)
dylan-hurd-oai Jan 8, 2026
8a0c2e5
chore: add list thread ids on manager (#8855)
jif-oai Jan 8, 2026
634650d
feat: metrics capabilities (#8318)
jif-oai Jan 8, 2026
267c05f
fix: stabilize list_dir pagination order (#8826)
tibo-openai Jan 8, 2026
e21ce6c
chore: drop metrics exporter config (#8892)
jif-oai Jan 8, 2026
5b022c2
chore: align error limit comment (#8896)
tibo-openai Jan 8, 2026
be212db
fix: include project instructions in /review subagent (#8899)
tibo-openai Jan 8, 2026
0318f30
chore: add small debug client (#8894)
jif-oai Jan 8, 2026
7520d8b
fix: leverage find_resource! macro in load_sse_fixture_with_id (#8888)
bolinfest Jan 8, 2026
9ce6bbc
Avoid setpgid for inherited stdio on macOS (#8691)
seeekr Jan 8, 2026
1e29774
fix: leverage codex_utils_cargo_bin() in codex-rs/core/tests/suite (#…
bolinfest Jan 8, 2026
da667b1
chore: drop useless interaction_input (#8907)
jif-oai Jan 8, 2026
98e1712
nit: drop unused function call error (#8903)
jif-oai Jan 8, 2026
5522663
feat: add a few metrics (#8910)
jif-oai Jan 8, 2026
484f6f4
gitignore bazel-* (#8911)
zbarsky-openai Jan 8, 2026
932a5a4
config requirements: improve requirement error messages (#8843)
gt-oai Jan 8, 2026
59d6937
fix: reduce duplicate include_str!() calls (#8914)
bolinfest Jan 8, 2026
5b7707d
feat: add list loaded threads to app server (#8902)
jif-oai Jan 8, 2026
c4af304
[fix] app server flaky thread/resume tests (#8870)
celia-oai Jan 8, 2026
69898e3
clean: all history cloning (#8916)
jif-oai Jan 8, 2026
93dec90
otel test: retry WouldBlock errors (#8915)
gt-oai Jan 8, 2026
7b21b44
Update models.json (#8792)
github-actions[bot] Jan 8, 2026
98122cb
fix: preserve core env vars on Windows (#8897)
tibo-openai Jan 8, 2026
4156060
Add `read-only` when backfilling requirements from managed_config (#8…
gt-oai Jan 8, 2026
5bc3e32
add tooltip hint for shell commands (!) (#8926)
fps7806 Jan 8, 2026
634764e
Immutable CodexAuth (#8857)
pakrym-oai Jan 8, 2026
c9c6560
nit: parse_arguments (#8927)
jif-oai Jan 8, 2026
224c486
fix: increase timeout for tests that have been flaking with timeout i…
bolinfest Jan 8, 2026
a70f5b0
fix: correct login shell mismatch in the accept_elicitation_for_promp…
bolinfest Jan 8, 2026
051bf81
[fix] app server flaky send_messages test (#8874)
celia-oai Jan 8, 2026
41a3173
feat: fork conversation/thread (#8866)
apanasenko-oai Jan 8, 2026
0d3e673
remove `get_responses_requests` and `get_responses_request_bodies` to…
aibrahim-oai Jan 8, 2026
be4364b
[chore] move app server tests from chat completion to responses (#8939)
celia-oai Jan 8, 2026
62a73b6
Attempt to reload auth as a step in 401 recovery (#8880)
pakrym-oai Jan 8, 2026
bdfdebc
fix: increase timeout for wait_for_event() for Bazel (#8946)
bolinfest Jan 8, 2026
6372ba9
Elevated sandbox NUX (#8789)
iceweasel-oai Jan 9, 2026
51dd5af
fix: treat null MCP resource args as empty (#8917)
tibo-openai Jan 9, 2026
81caee3
Add 5s timeout to models list call + integration test (#8942)
aibrahim-oai Jan 9, 2026
d3ff668
fix: remove existing process hardening from Codex CLI (#8951)
bolinfest Jan 9, 2026
f0679a6
## New Features
bolinfest Jan 9, 2026
212006c
chore: sanitize upstream workflow triggers for fork safety
github-actions[bot] Jan 10, 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
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .codespellignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
iTerm
iTerm2
psuedo
2 changes: 1 addition & 1 deletion .codespellrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
skip = .git*,vendor,*-lock.yaml,*.lock,.codespellrc,*test.ts,*.jsonl,frame*.txt
check-hidden = true
ignore-regex = ^\s*"image/\S+": ".*|\b(afterAll)\b
ignore-words-list = ratatui,ser
ignore-words-list = ratatui,ser,iTerm,iterm2,iterm
44 changes: 44 additions & 0 deletions .github/actions/linux-code-sign/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: linux-code-sign
description: Sign Linux artifacts with cosign.
inputs:
target:
description: Target triple for the artifacts to sign.
required: true
artifacts-dir:
description: Absolute path to the directory containing built binaries to sign.
required: true

runs:
using: composite
steps:
- name: Install cosign
uses: sigstore/cosign-installer@v3.7.0

- name: Cosign Linux artifacts
shell: bash
env:
COSIGN_EXPERIMENTAL: "1"
COSIGN_YES: "true"
COSIGN_OIDC_CLIENT_ID: "sigstore"
COSIGN_OIDC_ISSUER: "https://oauth2.sigstore.dev/auth"
run: |
set -euo pipefail

dest="${{ inputs.artifacts-dir }}"
if [[ ! -d "$dest" ]]; then
echo "Destination $dest does not exist"
exit 1
fi

for binary in codex codex-responses-api-proxy; do
artifact="${dest}/${binary}"
if [[ ! -f "$artifact" ]]; then
echo "Binary $artifact not found"
exit 1
fi

cosign sign-blob \
--yes \
--bundle "${artifact}.sigstore" \
"$artifact"
done
246 changes: 246 additions & 0 deletions .github/actions/macos-code-sign/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,246 @@
name: macos-code-sign
description: Configure, sign, notarize, and clean up macOS code signing artifacts.
inputs:
target:
description: Rust compilation target triple (e.g. aarch64-apple-darwin).
required: true
sign-binaries:
description: Whether to sign and notarize the macOS binaries.
required: false
default: "true"
sign-dmg:
description: Whether to sign and notarize the macOS dmg.
required: false
default: "true"
apple-certificate:
description: Base64-encoded Apple signing certificate (P12).
required: true
apple-certificate-password:
description: Password for the signing certificate.
required: true
apple-notarization-key-p8:
description: Base64-encoded Apple notarization key (P8).
required: true
apple-notarization-key-id:
description: Apple notarization key ID.
required: true
apple-notarization-issuer-id:
description: Apple notarization issuer ID.
required: true
runs:
using: composite
steps:
- name: Configure Apple code signing
shell: bash
env:
KEYCHAIN_PASSWORD: actions
APPLE_CERTIFICATE: ${{ inputs.apple-certificate }}
APPLE_CERTIFICATE_PASSWORD: ${{ inputs.apple-certificate-password }}
run: |
set -euo pipefail

if [[ -z "${APPLE_CERTIFICATE:-}" ]]; then
echo "APPLE_CERTIFICATE is required for macOS signing"
exit 1
fi

if [[ -z "${APPLE_CERTIFICATE_PASSWORD:-}" ]]; then
echo "APPLE_CERTIFICATE_PASSWORD is required for macOS signing"
exit 1
fi

cert_path="${RUNNER_TEMP}/apple_signing_certificate.p12"
echo "$APPLE_CERTIFICATE" | base64 -d > "$cert_path"

keychain_path="${RUNNER_TEMP}/codex-signing.keychain-db"
security create-keychain -p "$KEYCHAIN_PASSWORD" "$keychain_path"
security set-keychain-settings -lut 21600 "$keychain_path"
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$keychain_path"

keychain_args=()
cleanup_keychain() {
if ((${#keychain_args[@]} > 0)); then
security list-keychains -s "${keychain_args[@]}" || true
security default-keychain -s "${keychain_args[0]}" || true
else
security list-keychains -s || true
fi
if [[ -f "$keychain_path" ]]; then
security delete-keychain "$keychain_path" || true
fi
}

while IFS= read -r keychain; do
[[ -n "$keychain" ]] && keychain_args+=("$keychain")
done < <(security list-keychains | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/"//g')

if ((${#keychain_args[@]} > 0)); then
security list-keychains -s "$keychain_path" "${keychain_args[@]}"
else
security list-keychains -s "$keychain_path"
fi

security default-keychain -s "$keychain_path"
security import "$cert_path" -k "$keychain_path" -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign -T /usr/bin/security
security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" "$keychain_path" > /dev/null

codesign_hashes=()
while IFS= read -r hash; do
[[ -n "$hash" ]] && codesign_hashes+=("$hash")
done < <(security find-identity -v -p codesigning "$keychain_path" \
| sed -n 's/.*\([0-9A-F]\{40\}\).*/\1/p' \
| sort -u)

if ((${#codesign_hashes[@]} == 0)); then
echo "No signing identities found in $keychain_path"
cleanup_keychain
rm -f "$cert_path"
exit 1
fi

if ((${#codesign_hashes[@]} > 1)); then
echo "Multiple signing identities found in $keychain_path:"
printf ' %s\n' "${codesign_hashes[@]}"
cleanup_keychain
rm -f "$cert_path"
exit 1
fi

APPLE_CODESIGN_IDENTITY="${codesign_hashes[0]}"

rm -f "$cert_path"

echo "APPLE_CODESIGN_IDENTITY=$APPLE_CODESIGN_IDENTITY" >> "$GITHUB_ENV"
echo "APPLE_CODESIGN_KEYCHAIN=$keychain_path" >> "$GITHUB_ENV"
echo "::add-mask::$APPLE_CODESIGN_IDENTITY"

- name: Sign macOS binaries
if: ${{ inputs.sign-binaries == 'true' }}
shell: bash
run: |
set -euo pipefail

if [[ -z "${APPLE_CODESIGN_IDENTITY:-}" ]]; then
echo "APPLE_CODESIGN_IDENTITY is required for macOS signing"
exit 1
fi

keychain_args=()
if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" && -f "${APPLE_CODESIGN_KEYCHAIN}" ]]; then
keychain_args+=(--keychain "${APPLE_CODESIGN_KEYCHAIN}")
fi

for binary in codex codex-responses-api-proxy; do
path="codex-rs/target/${{ inputs.target }}/release/${binary}"
codesign --force --options runtime --timestamp --sign "$APPLE_CODESIGN_IDENTITY" "${keychain_args[@]}" "$path"
done

- name: Notarize macOS binaries
if: ${{ inputs.sign-binaries == 'true' }}
shell: bash
env:
APPLE_NOTARIZATION_KEY_P8: ${{ inputs.apple-notarization-key-p8 }}
APPLE_NOTARIZATION_KEY_ID: ${{ inputs.apple-notarization-key-id }}
APPLE_NOTARIZATION_ISSUER_ID: ${{ inputs.apple-notarization-issuer-id }}
run: |
set -euo pipefail

for var in APPLE_NOTARIZATION_KEY_P8 APPLE_NOTARIZATION_KEY_ID APPLE_NOTARIZATION_ISSUER_ID; do
if [[ -z "${!var:-}" ]]; then
echo "$var is required for notarization"
exit 1
fi
done

notary_key_path="${RUNNER_TEMP}/notarytool.key.p8"
echo "$APPLE_NOTARIZATION_KEY_P8" | base64 -d > "$notary_key_path"
cleanup_notary() {
rm -f "$notary_key_path"
}
trap cleanup_notary EXIT

source "$GITHUB_ACTION_PATH/notary_helpers.sh"

notarize_binary() {
local binary="$1"
local source_path="codex-rs/target/${{ inputs.target }}/release/${binary}"
local archive_path="${RUNNER_TEMP}/${binary}.zip"

if [[ ! -f "$source_path" ]]; then
echo "Binary $source_path not found"
exit 1
fi

rm -f "$archive_path"
ditto -c -k --keepParent "$source_path" "$archive_path"

notarize_submission "$binary" "$archive_path" "$notary_key_path"
}

notarize_binary "codex"
notarize_binary "codex-responses-api-proxy"

- name: Sign and notarize macOS dmg
if: ${{ inputs.sign-dmg == 'true' }}
shell: bash
env:
APPLE_NOTARIZATION_KEY_P8: ${{ inputs.apple-notarization-key-p8 }}
APPLE_NOTARIZATION_KEY_ID: ${{ inputs.apple-notarization-key-id }}
APPLE_NOTARIZATION_ISSUER_ID: ${{ inputs.apple-notarization-issuer-id }}
run: |
set -euo pipefail

for var in APPLE_CODESIGN_IDENTITY APPLE_NOTARIZATION_KEY_P8 APPLE_NOTARIZATION_KEY_ID APPLE_NOTARIZATION_ISSUER_ID; do
if [[ -z "${!var:-}" ]]; then
echo "$var is required"
exit 1
fi
done

notary_key_path="${RUNNER_TEMP}/notarytool.key.p8"
echo "$APPLE_NOTARIZATION_KEY_P8" | base64 -d > "$notary_key_path"
cleanup_notary() {
rm -f "$notary_key_path"
}
trap cleanup_notary EXIT

source "$GITHUB_ACTION_PATH/notary_helpers.sh"

dmg_path="codex-rs/target/${{ inputs.target }}/release/codex-${{ inputs.target }}.dmg"

if [[ ! -f "$dmg_path" ]]; then
echo "dmg $dmg_path not found"
exit 1
fi

keychain_args=()
if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" && -f "${APPLE_CODESIGN_KEYCHAIN}" ]]; then
keychain_args+=(--keychain "${APPLE_CODESIGN_KEYCHAIN}")
fi

codesign --force --timestamp --sign "$APPLE_CODESIGN_IDENTITY" "${keychain_args[@]}" "$dmg_path"
notarize_submission "codex-${{ inputs.target }}.dmg" "$dmg_path" "$notary_key_path"
xcrun stapler staple "$dmg_path"

- name: Remove signing keychain
if: ${{ always() }}
shell: bash
env:
APPLE_CODESIGN_KEYCHAIN: ${{ env.APPLE_CODESIGN_KEYCHAIN }}
run: |
set -euo pipefail
if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" ]]; then
keychain_args=()
while IFS= read -r keychain; do
[[ "$keychain" == "$APPLE_CODESIGN_KEYCHAIN" ]] && continue
[[ -n "$keychain" ]] && keychain_args+=("$keychain")
done < <(security list-keychains | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/"//g')
if ((${#keychain_args[@]} > 0)); then
security list-keychains -s "${keychain_args[@]}"
security default-keychain -s "${keychain_args[0]}"
fi

if [[ -f "$APPLE_CODESIGN_KEYCHAIN" ]]; then
security delete-keychain "$APPLE_CODESIGN_KEYCHAIN"
fi
fi
46 changes: 46 additions & 0 deletions .github/actions/macos-code-sign/notary_helpers.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/usr/bin/env bash

notarize_submission() {
local label="$1"
local path="$2"
local notary_key_path="$3"

if [[ -z "${APPLE_NOTARIZATION_KEY_ID:-}" || -z "${APPLE_NOTARIZATION_ISSUER_ID:-}" ]]; then
echo "APPLE_NOTARIZATION_KEY_ID and APPLE_NOTARIZATION_ISSUER_ID are required for notarization"
exit 1
fi

if [[ -z "$notary_key_path" || ! -f "$notary_key_path" ]]; then
echo "Notary key file $notary_key_path not found"
exit 1
fi

if [[ ! -f "$path" ]]; then
echo "Notarization payload $path not found"
exit 1
fi

local submission_json
submission_json=$(xcrun notarytool submit "$path" \
--key "$notary_key_path" \
--key-id "$APPLE_NOTARIZATION_KEY_ID" \
--issuer "$APPLE_NOTARIZATION_ISSUER_ID" \
--output-format json \
--wait)

local status submission_id
status=$(printf '%s\n' "$submission_json" | jq -r '.status // "Unknown"')
submission_id=$(printf '%s\n' "$submission_json" | jq -r '.id // ""')

if [[ -z "$submission_id" ]]; then
echo "Failed to retrieve submission ID for $label"
exit 1
fi

echo "::notice title=Notarization::$label submission ${submission_id} completed with status ${status}"

if [[ "$status" != "Accepted" ]]; then
echo "Notarization failed for ${label} (submission ${submission_id}, status ${status})"
exit 1
fi
}
Loading