Hmbown/CodeWhale · error
OpenAI Codex uses OAuth. Run `codex login`, then grant exact
Error message
OpenAI Codex uses OAuth. Run `codex login`, then grant exact read-only access with `codewhale auth external-consent --provider openai-codex --mode read-only`, or set OPENAI_CODEX_ACCESS_TOKEN for this process; Codewhale does not store an API key for this provider.
What it means
Error "OpenAI Codex uses OAuth. Run `codex login`, then grant exact read-only access with `codewhale auth external-consent --provider openai-codex --mode read-only`, or set OPENAI_CODEX_ACCESS_TOKEN for this process; Codewhale does not store an API key for this provider." thrown in Hmbown/CodeWhale.
Source
Thrown at crates/tui/src/config.rs:10984
route_config: &Config,
api_key: &str,
) -> Result<SavedCredential> {
if identity.provider == ApiProvider::Xai {
return codewhale_config::with_xai_oauth_revocation_transaction(|| {
save_api_key_for_identity_unlocked(identity, route_config, api_key)
});
}
save_api_key_for_identity_unlocked(identity, route_config, api_key)
}
fn save_api_key_for_identity_unlocked(
identity: &ProviderIdentity,
route_config: &Config,
api_key: &str,
) -> Result<SavedCredential> {
let provider = identity.provider;
if provider == ApiProvider::OpenaiCodex {
anyhow::bail!(
"OpenAI Codex uses OAuth. Run `codex login`, then grant exact read-only access with `codewhale auth external-consent --provider openai-codex --mode read-only`, or set OPENAI_CODEX_ACCESS_TOKEN for this process; Codewhale does not store an API key for this provider."
);
}
let is_legacy_literal_custom = provider == ApiProvider::Custom
&& identity.key.trim() == ApiProvider::Custom.as_str()
&& identity.persisted_id().is_none();
if matches!(provider, ApiProvider::Deepseek | ApiProvider::DeepseekCN) {
return save_api_key(api_key);
}
if is_legacy_literal_custom {
return save_root_api_key_for_secret_slot(api_key, "custom", false);
}
let api_key = api_key.trim();
anyhow::ensure!(!api_key.is_empty(), "Refusing to save an empty API key.");
let config_path =
credential_config_path().context("Failed to resolve config path for provider API key.")?;View on GitHub (pinned to 8880682c63)
When it happens
Trigger: Thrown at crates/tui/src/config.rs:10984 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16).
Data as JSON: /api/errors/e850f1c5f97173fd.
Report an issue: GitHub.