Repository navigation
feat: Multi-Account OAuth Rotation with Settings UI #9068
Copy link
Copy link
Closed
Labels
webRelates to opencode on web / desktopRelates to opencode on web / desktop
Description
Problem Statement
Users with Claude Max subscriptions frequently hit rate limits, causing workflow interruptions. While OpenCode supports OAuth login, there was no way to:
- Login with multiple accounts for the same provider
- Manually switch between accounts
- See rate limit usage across accounts
- Automatically rotate to another account when one hits limits
- Delete individual accounts when no longer needed
Additionally, the desktop app lacked a centralized settings interface for managing providers and viewing usage statistics.
Solution Overview
This feature introduces comprehensive multi-account OAuth support with:
- Automatic rotation when accounts hit rate limits
- Manual switching via CLI and desktop UI
- Usage statistics display (currently Anthropic only)
- Delete individual accounts via CLI and desktop UI
- New Settings menu in desktop app
Feature Details
1. Multi-Account OAuth Rotation (Backend)
Core Changes:
Auth.OAuthPool.setActive(providerID, namespace, recordID)- Set active accountAuth.OAuthPool.removeRecord(providerID, recordID)- Delete individual accountAuth.OAuthPool.snapshot()- Now returnsactiveIDfor credential selectionAuth.OAuthPool.getAccounts()- Correctly identifies active accountfetchAnthropicUsage()- Respectsprovider.active[namespace]
Credential Selection Flow:
1. snapshot() returns { records, orderedIDs, activeID }
2. candidates = [activeID, ...other accounts]
3. pickNextCandidate() selects first non-cooldown account
4. On 429 → account gets cooldown, next account used
2. API Endpoints
POST /auth/active
Request: { "providerID": "anthropic", "recordID": "..." }
Response: { "success": true, "anthropicUsage": {...} }DELETE /auth/account
Request: { "providerID": "anthropic", "recordID": "..." }
Response: { "success": true, "remaining": 2 }3. Desktop App - Settings Menu
New DialogSettings component with tabs:
| Tab | Features |
|---|---|
| Providers | Connected providers list, add new providers with search |
| Provider Detail | Account list, usage bars, switch functionality, delete buttons |
| About | GitHub, docs, Discord links, keyboard shortcuts |
Delete Account Flow:
- Click X button on account
- Confirmation dialog appears
- Account removed from storage
- Auto-navigate back when last account removed
4. Desktop App - Context Panel Integration
When viewing a session using Anthropic:
- Anthropic Rate Limits section appears after Context Breakdown
- Shows 5-hour, 7-day (all), 7-day (sonnet) usage bars
- Account switch buttons when multiple accounts configured
- Matches existing Context Breakdown visual style
5. CLI Enhancements
| Command | Description |
|---|---|
opencode auth list |
Shows providers with account counts |
opencode auth usage |
Detailed usage per account with rate limits |
opencode auth switch |
Interactive account switching |
opencode auth logout |
Now supports selecting individual accounts |
All provider lists are now sorted alphabetically.
Logout Account Selection:
$ opencode auth logout
┌ Remove credential
│
◆ Select provider
│ ● Anthropic (oauth)
│
◆ Remove which account?
│ ○ Remove all accounts (3 accounts)
│ ○ Account 1
│ ○ Account 2
│ ● Account 3
│
◐ Account removed. 2 accounts remaining.
│
└ DoneTechnical Implementation
Files Changed
| File | Changes |
|---|---|
packages/opencode/src/auth/index.ts |
setActive(), removeRecord(), snapshot(), getAccounts(), fetchAnthropicUsage() |
packages/opencode/src/auth/rotating-fetch.ts |
Prefer activeID in candidate selection |
packages/opencode/src/server/server.ts |
POST /auth/active, DELETE /auth/account endpoints |
packages/opencode/src/cli/cmd/auth.ts |
usage, switch commands, logout account selection, sorting |
packages/app/src/components/dialog-settings.tsx |
New settings dialog with delete buttons |
packages/app/src/components/session/session-context-tab.tsx |
Anthropic usage section |
packages/app/src/pages/layout.tsx |
Settings button integration |
Auto-Rotation Preserved
The automatic rotation on rate limit (429) is preserved:
if (response.status === 429) {
await Auth.OAuthPool.recordOutcome({...cooldownUntil})
await Auth.OAuthPool.moveToBack(providerID, namespace, nextID)
continue // → Try next account
}Current Limitations
- Usage statistics: Only available for Anthropic (OAuth API limitation)
- Multi-account support: Anthropic, OpenAI, GitHub Copilot (OAuth providers)
- Other providers: Contributions welcome for usage stats
Testing
CLI
opencode auth list # Should show account counts
opencode auth usage # Should show per-account stats
opencode auth switch # Should allow switching
opencode auth logout # Should allow selecting individual accountsDesktop
- Settings → Providers → Click connected provider
- Verify usage bars display correctly
- Switch accounts, verify bars update
- Click X on account → Confirm deletion
- Context panel → Verify Anthropic section appears
Related
- Builds on feat(app): Add OAuth rate limits and usage dashboard #8912 (OAuth rate limits dashboard)
- Addresses user feedback about rate limit management
Implementation
PR #9069 implements all features described above.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
webRelates to opencode on web / desktopRelates to opencode on web / desktop
Activity
github-actions commentedon Jan 17, 2026
This issue might be a duplicate of existing issues. Please check:
Feel free to ignore if none of these address your specific case.
mguttmann commentedon Jan 17, 2026
mguttmann commentedon Jan 17, 2026
Relationship to Related Issues
Thanks for the references! Here's how this issue relates:
Key additions beyond previous work:
auth switch, enhancedauth usage)This can be considered the completion of the multi-account OAuth feature set.
kfiramar commentedon Jan 18, 2026
Please bring this feature to life!
mguttmann commentedon Jan 21, 2026
Implementation Update
PR #9069 has been rebased onto latest dev (v1.1.30+) and is ready for review.
What's implemented:
opencode auth usage,opencode auth switch/auth/usage,/auth/active,/auth/accountRelated PRs:
Branch:
feat/multi-account-oauth-rotation-and-settingsmguttmann commentedon Jan 22, 2026
Closing in favor of combined issue with all features