Compare commits

...

2 Commits

Author SHA1 Message Date
pakrym-oai
f2a14cea60 oauth: invert macOS debug keyring env flag semantics
Rename CODEX_MCP_OAUTH_KEYRING_DEBUG_ALLOW to
CODEX_MCP_OAUTH_KEYRING_DEBUG_DISABLE and flip the logic so that
setting CODEX_MCP_OAUTH_KEYRING_DEBUG_DISABLE=1 disables keyring
access in debug builds on macOS. Update the error message accordingly.
2026-01-08 11:58:59 -08:00
pakrym-oai
069dc2895f auto fail oauth loading in debug 2026-01-08 11:40:08 -08:00
2 changed files with 15 additions and 0 deletions

View File

@@ -50,6 +50,7 @@ use tokio::sync::Mutex;
use crate::find_codex_home::find_codex_home;
const KEYRING_SERVICE: &str = "Codex MCP Credentials";
const MCP_OAUTH_KEYRING_DEBUG_DISABLE_ENV_VAR: &str = "CODEX_MCP_OAUTH_KEYRING_DEBUG_DISABLE";
const REFRESH_SKEW_MILLIS: u64 = 30_000;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
@@ -95,6 +96,12 @@ pub(crate) fn load_oauth_tokens(
url: &str,
store_mode: OAuthCredentialsStoreMode,
) -> Result<Option<StoredOAuthTokens>> {
if keyring_load_disabled_in_debug() {
return Err(anyhow::anyhow!(
"MCP OAuth keyring access is disabled in debug because {MCP_OAUTH_KEYRING_DEBUG_DISABLE_ENV_VAR} is set."
));
}
let keyring_store = DefaultKeyringStore;
match store_mode {
OAuthCredentialsStoreMode::Auto => {
@@ -116,6 +123,12 @@ pub(crate) fn has_oauth_tokens(
Ok(load_oauth_tokens(server_name, url, store_mode)?.is_some())
}
fn keyring_load_disabled_in_debug() -> bool {
cfg!(debug_assertions)
&& cfg!(target_os = "macos")
&& std::env::var_os(MCP_OAUTH_KEYRING_DEBUG_DISABLE_ENV_VAR).is_some_and(|v| v == "1")
}
fn refresh_expires_in_from_timestamp(tokens: &mut StoredOAuthTokens) {
let Some(expires_at) = tokens.expires_at else {
return;

View File

@@ -12,6 +12,8 @@ Codex can connect to MCP servers configured in `~/.codex/config.toml`. See the c
- https://developers.openai.com/codex/config-reference
On macOS debug builds, Codex skips reading MCP OAuth tokens from the system keychain to avoid repeated access prompts. Set `CODEX_MCP_OAUTH_KEYRING_DEBUG_ALLOW=1` to allow keychain reads when debugging.
## Notify
Codex can run a notification hook when the agent finishes a turn. See the configuration reference for the latest notification settings: