You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
macOS Sequoia 15.7.1 quarantine kills codex binary until xattr is cleared #5787
Adding to this. I tried installing via both brew and npm. macOS Tahoe 26.0.1 quarantined which I believe also triggered a block by Jamf Protect (in corporate environment). I was not able to use the suggested xattr solution above. Workaround for me was to uninstall and go back to the last known working version by running "npm install -g @openai/codex@0.46.0".
Adding to this. I tried installing via both brew and npm. macOS Tahoe 26.0.1 quarantined which I believe also triggered a block by Jamf Protect (in corporate environment). I was not able to use the suggested xattr solution above. Workaround for me was to uninstall and go back to the last known working version by running "npm install -g @openai/codex@0.46.0".
@JeffreyArt1 I experience the same with v0.55.0. Note I worked with a different coding agent to troubleshoot why 0.46.0 works but not 0.55.0 and got the following:
Version 0.46.0 (working):
Uses adhoc signature (essentially unsigned)
No hardened runtime
macOS allows it because it doesn't claim to be a properly signed app
Version 0.55.0 (blocked):
Properly signed with Developer ID certificate from OpenAI
Has hardened runtime enabled
NOT notarized - missing Apple's notarization ticket
This triggers stricter Gatekeeper enforcement
OpenAI improved their security by adding proper code signing to 0.55.0, but forgot to notarize it. Since it's signed with a Developer ID but lacks notarization, macOS blocks it more aggressively than the unsigned 0.46.0 version.
@JeffreyArt1 I experience the same with v0.55.0. Note I worked with a different coding agent to troubleshoot why 0.46.0 works but not 0.55.0 and got the following:
Version 0.46.0 (working):
Uses adhoc signature (essentially unsigned)
No hardened runtime
macOS allows it because it doesn't claim to be a properly signed app
Version 0.55.0 (blocked):
Properly signed with Developer ID certificate from OpenAI
Has hardened runtime enabled
NOT notarized - missing Apple's notarization ticket
This triggers stricter Gatekeeper enforcement
OpenAI improved their security by adding proper code signing to 0.55.0, but forgot to notarize it. Since it's signed with a Developer ID but lacks notarization, macOS blocks it more aggressively than the unsigned 0.46.0 version.
That makes a lot of sense! I can see that they are working towards fixing it(?) thanks for the info.
Thanks for flagging - just checked and we added notarization step but it seems like we did not staple the notarization ticket to the binary itself which can cause failed check in certain situations. Sorry about the inconvenience and I will address this.
We just spent some time looking into this and we can't find anything wrong with the binaries we're distributing via homebrew. They are correctly notarized. They are not stapled because plain binaries cannot be stapled, only packages such as dmg of app bundles can be. But stapling just allows macOS to skip "phoning home" to Apple to verify the notarization, so it's totally optional and given that you can't staple a binary, expected.
Our hypothesis is that you may have an MDM profile on your machine that's enabling some stricter macOS Gatekeeper rules that lead to the binary being rejected.
If you wouldn't mind, would you be willing to run a few commands on your terminal so we can gather some more info and see if we can find the root-cause and a workaround?
# Sanity-check the file signature to make sure nothing else has messed with the file
shasum -a 256 $(which codex)# Ask Gatekeeper what it thinks about the binary
spctl --assess --type execute -vv $(which codex)# Check code-signing
codesign -dv --verbose=4 $(which codex)
Besides that, if you run this in a terminal tab right before you run codex in another to reproduce the crash ([1] 35571 killed codex), we'll be able to see exactly the reason why macOS is rejecting it:
@JaviSoto It looks like macOS gatekeeper is no longer quarantining codex cli, however Jamf Protect is still blocking it (for me and other people in my org). I can provide outputs from the commands, but note the log stream command returns nothing because it is now just Jamf Protect removing codex and killing the process. Here are the outputs:
➜ personal_scratch git:(main) ✗ npm uninstall -g @openai/codex
removed 1 package in 176ms
➜ personal_scratch git:(main) ✗ brew install --cask codex
==> Downloading https://github.com/openai/codex/releases/download/rust
Already downloaded: /Users/dsumpter/Library/Caches/Homebrew/downloads/769f50af6021c5a7a9582db63970a32b728fc4365aea65571507ca9c856cf765--codex-aarch64-apple-darwin.tar.gz
All dependencies satisfied.
==> Installing Cask codex
==> Linking Binary 'codex-aarch64-apple-darwin' to '/opt/homebrew/bin/🍺 codex was successfully installed!➜ personal_scratch git:(main) ✗ shasum -a 256 $(which codex)3c1b1f0769af9b227b2cbf01f9e96fb8ea7f7f0df7baeb7941f6426f2e61876a /opt/homebrew/bin/codex➜ personal_scratch git:(main) ✗ spctl --assess --type execute -vv $(which codex)/opt/homebrew/bin/codex: rejected (the code is valid but does not seem to be an app)origin=Developer ID Application: OpenAI, L.L.C. (2DC432GLL2)➜ personal_scratch git:(main) ✗ codesign -dv --verbose=4 $(which codex)Executable=/opt/homebrew/Caskroom/codex/0.55.0/codex-aarch64-apple-darwinIdentifier=codexFormat=Mach-O thin (arm64)CodeDirectory v=20500 size=273937 flags=0x10000(runtime) hashes=8555+2 location=embeddedVersionPlatform=1VersionMin=720896VersionSDK=984320Hash type=sha256 size=32CandidateCDHash sha256=a43e9adc24181ad1b636015d4ca334544e249e4eCandidateCDHashFull sha256=a43e9adc24181ad1b636015d4ca334544e249e4e3ff8c7091cf290ac764ce4cbHash choices=sha256CMSDigest=a43e9adc24181ad1b636015d4ca334544e249e4e3ff8c7091cf290ac764ce4cbCMSDigestType=2Executable Segment base=0Executable Segment limit=33914880Executable Segment flags=0x1Page size=4096CDHash=a43e9adc24181ad1b636015d4ca334544e249e4eSignature size=9048Authority=Developer ID Application: OpenAI, L.L.C. (2DC432GLL2)Authority=Developer ID Certification AuthorityAuthority=Apple Root CATimestamp=Nov 4, 2025 at 12:08:26 PMInfo.plist=not boundTeamIdentifier=2DC432GLL2Runtime Version=15.5.0Sealed Resources=noneInternal requirements count=1 size=168➜ personal_scratch git:(main) ✗ log stream --style syslog --predicate 'subsystem == "com.apple.security.syspolicy"|| category == "SecAssessment"' --infoFiltering the log data using "subsystem == "com.apple.security.syspolicy" OR category == "SecAssessment""^CTimestamp (process)[PID]
Gotcha thank you that's very helpful!!!
You might be able to get some info by running log stream --style syslog --predicate 'subsystem CONTAINS "jamf" OR process CONTAINS "jamf"' --info, but I think you may need to ask your IT department about this, as it seems it's some policy they have enabled on your laptop that's causing this. If it's something we're doing that's tripping Jamf Protect for you folks, let us know cause we'd love to make it better!
We just spent some time looking into this and we can't find anything wrong with the binaries we're distributing via homebrew. They are correctly notarized. They are not stapled because plain binaries cannot be stapled, only packages such as dmg of app bundles can be. But stapling just allows macOS to skip "phoning home" to Apple to verify the notarization, so it's totally optional and given that you can't staple a binary, expected.
Our hypothesis is that you may have an MDM profile on your machine that's enabling some stricter macOS Gatekeeper rules that lead to the binary being rejected.
If you wouldn't mind, would you be willing to run a few commands on your terminal so we can gather some more info and see if we can find the root-cause and a workaround?
Sanity-check the file signature to make sure nothing else has messed with the file
shasum -a 256 $(which codex)
Ask Gatekeeper what it thinks about the binary
spctl --assess --type execute -vv $(which codex)
Check code-signing
codesign -dv --verbose=4 $(which codex)
Besides that, if you run this in a terminal tab right before you run codex in another to reproduce the crash ([1] 35571 killed codex), we'll be able to see exactly the reason why macOS is rejecting it:
log stream --style syslog --predicate 'subsystem == "com.apple.security.syspolicy" || category == "SecAssessment"' --info
After you repro it, do ctrl+c on that log stream, and see if you find something in the logs like:
SecAssessment: rejected <reason>
Policy: disallowed by configuration profile
Gatekeeper: refusing unnotarized executable at path … 
Hopefully we can get this fixed for you 🙏 thank you for your patience!
Thanks for confirming the fix. I'm going to close the issue under the assumption that the problem has been addressed. If anyone sees the problem again with the latest version of codex, let us know.
@etraut-openai and @JaviSoto I tried installing latest codex version to see if anything has changed. I am back to getting codex blocked by macOS gatekeeper (in addition to Jamf)
I suspect I stopped getting blocked by gatekeeper because I removed the quarantine attribute in the prior version (following advice above), but installing the latest version means quarantine attribute is present again:
but installing the latest version means quarantine attribute is present again:
That is entirely expected for any binary you download from the internet. I see that here as well, but I'm able to run codex because the first time macOS tries to run a quarantined app it checks the notarization.
You ran spctl --assess --type execute -vv $(which codex) but I gave you the wrong command, the right one for bare executables would be:
spctl --assess --type install -vv $(which codex)
Can you share what that outputs? 🙏
I ran that on the last 5 releases of codex and this is what I see:
spctl --assess --type install -vv /opt/homebrew/bin/codex
/opt/homebrew/bin/codex: accepted
source=Notarized Developer ID
origin=Developer ID Application: OpenAI, L.L.C. (2DC432GLL2)
@JaviSoto I believe I identified the culprit - the call to notary.apple.com. TLS Inspection breaks the call (normally not an issue but looks like notary.apple.com is more sensitive to this). If true resolution options are:
I ask to get notary.apple.com whitelisted so its not subject to TLS Inspection. This would need to be done by any company using TLS Inspection (if they identify it as the culprit).
Codex is distributed in another format (than tar.gz) that allows stapling so gatekeeper does not need to call home. This would be my personal hope, but unsure about the complexity of switching formats.
Ah yeah, MiTM-ing Apple's requests is gonna be an issue :D I'm surprised it doesn't cause problems with more programs!
We will look into the feasibility of distributing a stapled package. Thanks a lot for working on this with me though so we could get to the root-cause! That was super helpful 🙏
Activity
JeffreyArt1 commentedon Oct 26, 2025
as a workaround i ran
to fix the issue.
bolinfest commentedon Oct 28, 2025
@JeffreyArt1 so you installed Codex via
brew(as opposed to downloading it from GitHub Releases or some other mechanishm?)JeffreyArt1 commentedon Oct 28, 2025
Yeah, i had it installed. The issue was with this particular version. I upgraded from a previous version using
brew upgrade codexdsumpter commentedon Nov 4, 2025
Adding to this. I tried installing via both brew and npm. macOS Tahoe 26.0.1 quarantined which I believe also triggered a block by Jamf Protect (in corporate environment). I was not able to use the suggested xattr solution above. Workaround for me was to uninstall and go back to the last known working version by running "npm install -g @openai/codex@0.46.0".
JeffreyArt1 commentedon Nov 7, 2025
Can you try with the latest version?
v0.55.0dsumpter commentedon Nov 7, 2025
@JeffreyArt1 I experience the same with v0.55.0. Note I worked with a different coding agent to troubleshoot why 0.46.0 works but not 0.55.0 and got the following:
Version 0.46.0 (working):
Version 0.55.0 (blocked):
OpenAI improved their security by adding proper code signing to 0.55.0, but forgot to notarize it. Since it's signed with a Developer ID but lacks notarization, macOS blocks it more aggressively than the unsigned 0.46.0 version.
JeffreyArt1 commentedon Nov 7, 2025
That makes a lot of sense! I can see that they are working towards fixing it(?) thanks for the info.
shijie-oai commentedon Nov 7, 2025
Thanks for flagging - just checked and we added notarization step but it seems like we did not staple the notarization ticket to the binary itself which can cause failed check in certain situations. Sorry about the inconvenience and I will address this.
JaviSoto commentedon Nov 7, 2025
Hi @JeffreyArt1!
We just spent some time looking into this and we can't find anything wrong with the binaries we're distributing via homebrew. They are correctly notarized. They are not stapled because plain binaries cannot be stapled, only packages such as dmg of app bundles can be. But stapling just allows macOS to skip "phoning home" to Apple to verify the notarization, so it's totally optional and given that you can't staple a binary, expected.
Our hypothesis is that you may have an MDM profile on your machine that's enabling some stricter macOS Gatekeeper rules that lead to the binary being rejected.
If you wouldn't mind, would you be willing to run a few commands on your terminal so we can gather some more info and see if we can find the root-cause and a workaround?
Besides that, if you run this in a terminal tab right before you run
codexin another to reproduce the crash ([1] 35571 killed codex), we'll be able to see exactly the reason why macOS is rejecting it:log stream --style syslog --predicate 'subsystem == "com.apple.security.syspolicy" || category == "SecAssessment"' --infoAfter you repro it, do
ctrl+con thatlog stream, and see if you find something in the logs like:Hopefully we can get this fixed for you 🙏 thank you for your patience!
dsumpter commentedon Nov 7, 2025
@JaviSoto It looks like macOS gatekeeper is no longer quarantining codex cli, however Jamf Protect is still blocking it (for me and other people in my org). I can provide outputs from the commands, but note the log stream command returns nothing because it is now just Jamf Protect removing codex and killing the process. Here are the outputs:
JaviSoto commentedon Nov 7, 2025
Gotcha thank you that's very helpful!!!
You might be able to get some info by running
log stream --style syslog --predicate 'subsystem CONTAINS "jamf" OR process CONTAINS "jamf"' --info, but I think you may need to ask your IT department about this, as it seems it's some policy they have enabled on your laptop that's causing this. If it's something we're doing that's tripping Jamf Protect for you folks, let us know cause we'd love to make it better!JeffreyArt1 commentedon Nov 12, 2025
Hi @JaviSoto!
I ended up installing v0.51.0, and the issues went away. I periodically upgrade the package via
brewand haven’t seen the issue since.I’m not sure if that’s enough to close this issue since it’s working fine for me now, but I noticed a few other comments mentioning similar problems.
etraut-openai commentedon Nov 12, 2025
Thanks for confirming the fix. I'm going to close the issue under the assumption that the problem has been addressed. If anyone sees the problem again with the latest version of codex, let us know.
dsumpter commentedon Nov 12, 2025
@etraut-openai and @JaviSoto I tried installing latest codex version to see if anything has changed. I am back to getting codex blocked by macOS gatekeeper (in addition to Jamf)
I suspect I stopped getting blocked by gatekeeper because I removed the quarantine attribute in the prior version (following advice above), but installing the latest version means quarantine attribute is present again:
Here are the diagnostics output, I think most pertinent is that spctl --assess now says that source=Unnotarized Developer ID.:
JaviSoto commentedon Nov 12, 2025
That is entirely expected for any binary you download from the internet. I see that here as well, but I'm able to run codex because the first time macOS tries to run a quarantined app it checks the notarization.
You ran
spctl --assess --type execute -vv $(which codex)but I gave you the wrong command, the right one for bare executables would be:spctl --assess --type install -vv $(which codex)Can you share what that outputs? 🙏
I ran that on the last 5 releases of codex and this is what I see:
dsumpter commentedon Nov 12, 2025
@JaviSoto This is what I see
JaviSoto commentedon Nov 12, 2025
Thank you for bearing with me 🙏 hopefully we can figure this out. That is very strange. Can you try these?
dsumpter commentedon Nov 12, 2025
@JaviSoto I believe I identified the culprit - the call to notary.apple.com. TLS Inspection breaks the call (normally not an issue but looks like notary.apple.com is more sensitive to this). If true resolution options are:
Evidence:
JaviSoto commentedon Nov 12, 2025
Ah yeah, MiTM-ing Apple's requests is gonna be an issue :D I'm surprised it doesn't cause problems with more programs!
We will look into the feasibility of distributing a stapled package. Thanks a lot for working on this with me though so we could get to the root-cause! That was super helpful 🙏
celia-oai commentedon Dec 18, 2025
We added stapled dmg target in this PR: #8207. Hope this helps!
SC-CTS commentedon Dec 19, 2025
Would be amazing if the homebrew cask was updated to use the stapled dmg then so updates don't break the binary constantly: https://github.com/Homebrew/homebrew-cask/blob/main/Casks/c/codex.rb