{"version":"2.1.238","anchor":"oauth-refresh-token-lookup-goes-async-and-skips-macos","canonical_anchor":"oauth-refresh-token-lookup-goes-async-and-skips-macos","heading":"OAuth refresh-token lookup goes async and skips macOS","tier":"internal","area":"Auth","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.238\/e\/oauth-refresh-token-lookup-goes-async-and-skips-macos","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.238","markdown":"### OAuth refresh-token lookup goes async and skips macOS\n\nThe stored-refresh-token check now runs asynchronously and returns false straight away on macOS.\n\n**What**\n\nThe check that decides whether a stored OAuth refresh token exists is now asynchronous, so it can consult state that has to be read from disk or over the network before answering. On macOS it returns false immediately without doing that work, leaving the keychain-backed path to handle credentials there.\n\n**Details**\n\n- The check also returns false immediately when the `CLAUDE_CODE_OAUTH_TOKEN` environment variable is unset, and only looks for the saved token when neither the macOS nor the unset-variable condition applies.\n- Three call sites that conclude a token cannot be refreshed now await the check rather than calling it synchronously, so the resulting `no_refresh` outcome reflects state fetched at the time of the check.\n- On macOS the outcome is unchanged in effect: the keychain path supplies credentials, and this check contributes nothing.\n\n**Evidence**\n\n`CLAUDE_CODE_OAUTH_TOKEN`, `no_refresh`\n\n- Area: Auth\n- Tier: Under the hood\n- Useful: 1\/5\n- Signal: 2\/5"}