Opus-specific rate limit is not reflected in the usage meter — misleading UX

Resolved 💬 2 comments Opened Jun 29, 2026 by hiroexlt Closed Jun 30, 2026

Summary

When using Claude Code on the Pro plan with the Opus model (high effort), users can hit a rate limit error even when the displayed usage meters (weekly and 5-hour rolling window) show plenty of remaining capacity. The Opus-specific sub-quota is not surfaced in the UI at all, which causes significant user confusion.

Steps to reproduce

  1. Use a Pro plan subscription
  2. Start a Claude Code session with --model claude-opus-4-8 --effort high
  3. Continue working until the Opus-specific quota is exhausted
  4. Observe: "Usage limit reached" error appears even though:
  • Weekly usage meter shows well under the limit
  • 5-hour rolling window shows well under the limit

Expected behavior

The usage meter should display Opus-specific quota separately, or at minimum indicate which sub-quota caused the limit. Example:

Overall usage:  ████░░░░░░ 40%
Opus quota:     ██████████ 100% ← limit hit here

Actual behavior

All meters show "plenty of capacity," yet the user receives a rate limit error. There is no indication that a model-specific sub-quota exists or is being tracked.

Impact

  • Users are confused and may incorrectly assume there is a billing issue
  • Users may purchase additional API credits thinking that will resolve the limit (it does not, since the Pro plan uses time-based rolling quotas, not credit-based limits)
  • Users cannot make informed decisions about which model to use if the sub-quota is not visible

Suggestion

  • Add a per-model quota indicator to the usage display (even if approximate)
  • Or: when a rate limit is hit due to a model-specific sub-quota, clearly state in the error message which quota was exhausted and when it resets (e.g., "Opus quota resets in 2h 15m — switch to Sonnet to continue")

Environment

  • Plan: Pro
  • Model: claude-opus-4-8
  • Effort: high
  • Platform: macOS (darwin)
  • Claude Code version: 2.1.187

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗