Repository navigation
Description
Use case
Power users frequently have multiple credentials for the same provider:
- Multiple ChatGPT-Plus subscriptions (personal + family-shared, etc.)
- Multiple OpenAI API keys (personal + team org + research project)
- Multiple OpenRouter keys (different accounts for billing isolation, rate-limit pooling)
- Multiple Anthropic credentials (personal Pro + work API key)
- Multiple GitHub Copilot accounts (personal + enterprise org membership)
Today the Providers panel is one-credential-per-provider — the Connect button replaces the existing entry rather than appending. The only way to add a second credential of the same provider is via "Custom provider" (which works but loses the tailored OAuth flow opencode has so nicely built for known providers).
Proposed UX
In packages/app/src/components/settings-providers.tsx, the connected providers list currently shows just [Disconnect]. Add a second action [+ Add another] next to it:
[Connected providers]
OpenAI [OAuth] [+ Add another] [Disconnect]
OpenRouter [API key] [+ Add another] [Disconnect]
Click flow for [+ Add another]:
- Opens a small dialog: "Name this credential" with a sensible suggestion (
openai-2,openai-team, etc.) - User confirms or edits the name
- Same
<DialogConnectProvider>flow that the Connect button uses — OAuth or API key entry as appropriate to the provider - The completed credential is saved under the chosen name (auth.json gets a new entry alongside the existing one)
- The new credential appears in the Connected providers list as a separate row
The underlying server already supports this — PUT /auth/{providerID} accepts arbitrary providerID strings, and GET /provider returns each credential as a separate entry. It's purely a UI gap.
Why this matters for the provider tier
For OAuth providers especially, the current workaround (Custom provider with manually-typed base URL + API key) is a noticeable downgrade from the polished per-provider Connect flow. ChatGPT-Plus OAuth, GitHub Copilot device-code, etc. — each has been carefully tailored, and that tailoring should extend to the second credential too.
Existing workaround at the agent layer
I've shipped a chat-tool workaround in cheapcode (an opencode provider package, no fork) that:
- Exposes
cheapcode_account_oauth_addandcheapcode_account_apikey_addas MCP tools - For OAuth: auto-launches a private/incognito browser window with the auth URL, polls auth.json for the completion, swaps the new credential under the user-chosen name, restores the user's primary credential
- For API keys: takes the key in chat, PUTs it directly to opencode's
/auth/{name}endpoint - Uses opencode's existing OAuth machinery; never reimplements provider auth flows
That confirms the data model already supports multi-credential-per-provider — only the Providers UI needs the additional button to make it discoverable for non-technical users.
Offer
Happy to draft a PR with the [+ Add another] button + a <DialogNameCredential> step that runs before <DialogConnectProvider> if maintainers think the design is acceptable. Wanted to file this first per the contributing guide's note that UI features should go through design review before implementation.
If maintainers prefer a different shape (e.g., a "credentials" sub-tab per provider, or a dropdown menu instead of a separate button), happy to align with that.
Activity
github-actions commentedon May 4, 2026
This issue doesn't fully meet our contributing guidelines.
What needs to be fixed:
[FEATURE]:prefix in the title (e.g.[FEATURE]: Multi-account per provider...)Please edit this issue to address the above within 2 hours, or it will be automatically closed.
This issue might be a duplicate of existing issues. Please check:
If you believe this was flagged incorrectly, please let a maintainer know.
github-actions commentedon May 4, 2026
This issue has been automatically closed because it was not updated to meet our contributing guidelines within the 2-hour window.
Feel free to open a new issue that follows our issue templates.