Skip to content

feat(cliproxy): clarify that quota percentages are remaining, not used #1714

Description

@kiyo-e

Affected area

CLI runtime — ccs cliproxy quota

Problem

ccs cliproxy quota --provider claude renders remaining quota, but the row labels only say usage limit and the percentage has no remaining qualifier.

Example from CCS 8.8.1:

Claude (2 accounts)

  [!] account-a
    5h usage limit           [▓▓▓▓▓▓▓▓▓▓          ] 50% Resets in 57m
    Weekly usage limit       [██████████████████  ] 91% Resets in 5d 23h

  [OK] account-b
    5h usage limit           [████████████████████] 100% Resets in 5h
    Weekly usage limit       [█████████████████   ] 84% Resets in 6d 1h

A first-time reader can reasonably interpret 100% under usage limit as 100% used. In reality it means 100% remaining, which is why the account is [OK].

The renderer confirms the value is remaining quota:

const bar = formatQuotaBar(window.remainingPercent);
...
`${window.remainingPercent.toFixed(0)}%`

Current source: src/commands/cliproxy/quota-subcommand.ts, Claude rendering around displayClaudeQuotaSection.

The normalized types also explicitly distinguish usedPercent and remainingPercent, so this appears to be a presentation-label issue rather than a data issue.

Why this matters

Operators use this command to decide whether routing and account rotation are healthy. Reversing the meaning at a glance can lead to routing away from a fresh account or continuing to drain an exhausted one.

This ambiguity also causes problems in agent-operated environments such as Hermes Agent. An agent reading the plain CLI output can reasonably interpret:

5h usage limit  100%

as "100% used" rather than "100% remaining." We have encountered this during operations: the quota state had to be checked against the implementation before it was safe to decide whether an account was exhausted or available.

This affects workflows that use CLI output for:

  • selecting or rotating accounts;
  • diagnosing why round-robin traffic is concentrated;
  • generating quota alerts and operational summaries;
  • deciding whether a provider has enough capacity for a scheduled or parallel job.

Human readers can sometimes infer the direction from [OK] or the bar, but automation should not need to correlate presentation hints or inspect source code to determine whether a percentage means used or remaining. Explicit output also makes future machine-readable parsing less fragile.

Proposed change

Make the direction explicit in the CLI output. For example:

5h remaining              [▓▓▓▓▓▓▓▓▓▓          ] 50% Resets in 57m
Weekly remaining          [██████████████████  ] 91% Resets in 5d 23h

or retain the existing labels but qualify the value:

5h usage limit            [▓▓▓▓▓▓▓▓▓▓          ] 50% remaining
Weekly usage limit        [██████████████████  ] 91% remaining

A dual display such as 50% remaining (50% used) would also be clear, but may be unnecessarily verbose.

Acceptance criteria

  • 100% is unambiguously presented as fully remaining, not fully used.
  • The bar direction remains consistent: a fuller bar means more quota remaining.
  • Claude and Codex quota CLI displays use consistent terminology where both render remainingPercent.
  • Focused CLI rendering tests assert the remaining qualifier.

Related but not duplicate

This issue is specifically about remaining-vs-used semantics in the CLI text output.

Environment

  • CCS: 8.8.1
  • CLIProxy Plus: 7.2.127-6-plus

Metadata

Metadata

Assignees

No one assigned

    Labels

    released-devFix available in @dev npm channel

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions