stablyai/orca · error · Error

Claude login completed, but Orca could not resolve the accou

Error message

Claude login completed, but Orca could not resolve the account email.

What it means

Thrown by persistCapturedClaudeAccount() when captured.identity.email is falsy after a login+capture flow. The login technically completed (credentials were read) but the account email could not be resolved from any of: `claude auth status --json`, oauth-account.json, or the credentials JSON's claudeAiOauth.email. Orca refuses to persist an account without a primary identifier.

Source

Thrown at src/main/claude-accounts/service.ts:255

    // Why: this post-login RPC did not observe the legacy Keychain value before
    // login unless the CLI supplied its one-way pre-login credential baseline.
    const currentLegacyKeychain = await readActiveClaudeKeychainCredentialsStrict()
    return this.captureAuthFromConfigDir(
      resolvedDir,
      status,
      currentLegacyKeychain,
      previousLegacyCredentialsSha256
    )
  }

  private async persistCapturedClaudeAccount(
    accountId: string,
    managedAuth: ManagedClaudeAuthLocation,
    previousSettings: ReturnType<Store['getSettings']>,
    captured: CapturedClaudeAuth
  ): Promise<ClaudeRateLimitAccountsState> {
    if (!captured.identity.email) {
      throw new Error('Claude login completed, but Orca could not resolve the account email.')
    }
    // Why: duplicate rows confuse selection and rate-limit tracking; re-authentication
    // is the supported way to refresh an account that is already managed.
    if (
      findDuplicateClaudeAccount(previousSettings.claudeManagedAccounts, {
        email: captured.identity.email,
        organizationUuid: captured.identity.organizationUuid,
        managedAuthRuntime: managedAuth.managedAuthRuntime,
        wslDistro: managedAuth.wslDistro
      })
    ) {
      throw new DuplicateClaudeAccountError('This Claude account is already added.')
    }
    await this.writeManagedAuth(accountId, managedAuth.managedAuthPath, captured)

    const now = Date.now()
    const account: ClaudeManagedAccount = {
      id: accountId,

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Update the Claude CLI to a version Orca supports and re-authenticate.
  2. Inspect the temp config dir's .claude.json / .credentials.json / oauth-account.json for an email field and report the schema.
  3. Re-run `claude login` fully (not from existing dir) so the CLI populates identity.
  4. If the email lives in a new field, extend resolveIdentity to read it.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  await persistCapturedClaudeAccount(...)
} catch (error) {
  if (error instanceof Error && /could not resolve the account email/.test(error.message)) {
    // surface 'update Claude CLI and re-auth' to the user
  }
  throw error
}

Prevention

When it happens

Trigger: The Claude CLI version emits a different status JSON shape Orca cannot parse. oauth-account.json and .credentials.json lack an email field. `claude auth status` failed/warned and returned no usable identity. A newer/older CLI schema mismatch.

Common situations: Claude CLI version skew (Orca's parser expects fields the installed CLI does not emit). A partial login that produced credentials but no identity record. Enterprise SSO accounts where the email is in a non-standard field.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/2cb58402c99e3128. Report an issue: GitHub.