Skip to content

[Bug]: Claude account rows ignore the saved alias and show only "Account N" (since #8055), so pool accounts cannot be identified #8196

Closed as not planned

Description

@daehwanahn

Client or integration

OpenCodex dashboard

Area

Dashboard

Summary

Since #8055, every Claude (anthropic) OAuth account row in the dashboard is named by its list position ("Account 1" through "Account 8"), even when the operator has saved an alias for that account. In my pool, all 8 accounts have an alias. GET /api/oauth/accounts?provider=anthropic returns a non-empty alias for each of them (values redacted here), and the "Edit alias" button is still on every row. The rows show only "Account N".

The cause is in oauthAccountDisplayLabel (gui/src/provider-workspace/auth.ts, still present on dev @ 0a30c55). Claude rows call it with ordinalOnly = true, and that flag drops the alias along with the email:

const alias = ordinalOnly ? undefined : account.alias?.trim();
if (alias) return alias;
const email = ordinalOnly ? undefined : account.email?.trim();

Expected: when an alias is set, show it. Fall back to "Account N" only when no alias exists. Hiding the login email by default is fine. The alias is a different field, and this request does not ask for the email back.

Why the alias should not be hidden

  1. The alias is not private data that the dashboard exposes. The operator writes it for this screen. fix(anthropic): support Ultra quota windows and show subscription names #8055 set out to keep emails and opaque IDs off the screen. The alias is neither: the operator types it into this dashboard so that the row can be recognized, and only the operator sees it. Suppressing it protects nothing, and it disables a feature whose button and save toast ("Alias saved") still work.
  2. An ordinal is not an identity. "Account 3" means "the third row right now". Adding, removing or re-logging an account renumbers the rows after it. The label cannot be written down, compared across days, or matched against claude.ai, which identifies the same subscription by its email.
  3. The rows carry account-specific and destructive actions. Pause, Claude usage reset, per-account threshold and Remove all act on the row. The remove prompt reads "Remove account Account 3? Its login is deleted from this proxy." With eight Max seats, the operator confirms a deletion against a position number.
  4. A multi-account pool is run by choosing an account and a model from these rows. I decide what to run next (Fable or Opus, and on which subscription) from each row's 5-hour, weekly and Fable meters. That decision only works if I know which subscription a row is. Today the same account has three unrelated names: "Account 1" in the rows, anthropic-p951dfa in the request log, and its email on claude.ai. A saved alias is the one stable name that could connect them.
  5. Only Claude rows are affected. Other OAuth providers in the same workspace call the same function with ordinalOnly = false and still show alias → email → ordinal.

This compounds #8110. In the screenshot below, Account 1 (the active account) shows no Fable meter even though it served 213 successful claude-fable-5-1 requests (75.6M tokens) since its weekly window opened. So on this page I can neither see that account's Fable usage nor tell which subscription it is.

Proposed change

  • In oauthAccountDisplayLabel, let ordinalOnly suppress the email (and IDs) only, not the alias:

    const alias = account.alias?.trim();
    if (alias) return alias;
    const email = ordinalOnly ? undefined : account.email?.trim();
    if (email) return email;
  • Use the same label everywhere fix(anthropic): support Ultra quota windows and show subscription names #8055 switched Claude accounts to ordinals: Overview, reset dialogs, confirmations and notifications.

  • Optional: show the alias next to the anthropic-p<hex6> account label in Usage & Logs, so a log line can be traced to a row.

Reproduction

  1. Connect two or more Claude (anthropic) OAuth accounts to the pool.
  2. Providers → Anthropic Claude → Accounts → "Edit alias" on a row, enter any name, and save. PUT /api/oauth/accounts/alias returns ok and the toast reads "Alias saved".
  3. The row still reads "Account N". GET /api/oauth/accounts?provider=anthropic returns the saved alias for that account.

Observed on my install: all 8 accounts have an alias, and all 8 rows read "Account 1" through "Account 8".

Version

2.97.0 (npm global); the same code is on dev @ 0a30c55

Operating system

Windows 11 (build 26300)

Provider and model

anthropic (Claude OAuth account pool, 8 × Max 5x)

Screenshots and supporting files

Claude account rows: aliases are set on all 8 accounts, but every row shows "Account N". Only Accounts 2 and 7 show a Fable meter (see #8110).

Claude account rows labelled Account 1 to Account 8; only Accounts 2 and 7 show a Fable meter

Provider quota summary for Anthropic Claude: this follows the active account (Account 1) and has no Fable row.

Provider quota summary for Anthropic Claude with 5-hour and weekly rows only

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Activity

  1. github-actions commented on Nov 6, 2026

    @github-actions
    Contributor

    Automated translation bookkeeping — detected language: English.

  2. added
    bugSomething isn't working
    account-poolOAuth, credentials, Codex pool, quota, failover, plans
    guiDashboard, tray, settings UI
    on Nov 6, 2026
  3. coderabbitai commented on Nov 6, 2026

    @coderabbitai
    Contributor
    🔗 Related PRs

    #8069 - [WRONG BRANCH] release: promote frozen tip 007dbfd to main as 2.96.0 [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  4. github-actions commented on Nov 6, 2026

    @github-actions
    Contributor

    Issue closed: insufficient detail

    Thanks for taking the time to submit this issue. It was closed automatically because the structured report is missing information needed to evaluate or reproduce it.

    • Reproduction is empty.
    • Version is missing.
    • Operating system is missing.

    Please edit the issue to add:

    • List the exact steps to reproduce the problem.
    • Add your OpenCodex version so we can reproduce the environment.
    • Add your OS name and version (for example Windows 11 24H2).

    See the Contributing guide for details.

    Once the report passes the automated checks, it will be reopened automatically unless a maintainer has changed its state.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    account-poolOAuth, credentials, Codex pool, quota, failover, plansbugSomething isn't workingguiDashboard, tray, settings UI

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions