Skip to content

Show remaining usage limits from coding agents #33

Description

@henry-wicaksono

Problem

The dashboard currently tracks historical token consumption for OpenCode, Codex CLI, and Hermes — showing how many tokens were used across sessions. However, there is no view of the remaining usage limit or quota available to each agent. When a coding agents rate limits or free-tier caps are approaching, the user has no visibility inside the dashboard and must check each tool separately.

For the free-tier / limited-access API plans that these CLI agents commonly use (GitHub Copilot tokens via Codex, OpenAI rate limits, third-party API budgets), seeing the gap between consumed and remaining is as important as seeing what was already spent.

Suggested Scope

  • Codex CLI: Codex exposes usage-plan info via its CLI (codex usage or the equivalent status command) showing remaining Copilot tokens or account-level quota. Surface this in the dashboard.
  • OpenCode: OpenCode queries model providers (OpenAI, Anthropic, OpenRouter, etc.) which each impose rate limits / token caps. The available data depends on the provider — at minimum show what OpenCode Zen tracks internally about remaining quota, plus any provider-reported usage headers from recent API calls.
  • Hermes (stretch): If Hermes sessions report provider-level rate-limit headers or remaining-usage metadata, surface it. Otherwise flag this as future scope.

For each agent, the display should include:

  • remaining / total limit (where available)
  • reset window (hourly / daily / monthly)
  • how the limit was determined (agent API, CLI command, provider header, or unavailable)

Acceptance Criteria

  • A new card or section on the dashboard shows remaining usage limits for at least Codex and OpenCode.
  • Each limit entry is labeled by agent and source (e.g. "Codex CLI — GitHub Copilot tokens" or "OpenCode — OpenAI rate limit").
  • Where a limit cannot be determined, show a clear "unavailable" / "not exposed" message rather than a guessed value.
  • Source provenance stays visible: the card notes where each limit value was read from (CLI output, provider API, local cache).
  • Existing tests continue to pass; new tests cover the limit-reporting adapter(s).
  • Simulated mode provides deterministic placeholder values for screenshots and review.

Related

  • The dashboard already has source adapters in dashboard/sources.py with OpenCode (SQLite), Codex (SQLite + JSONL), and Hermes (SQLite) record pipelines. The limit-check adapter would be a natural extension of this pattern, preferably in a new module (e.g. dashboard/limits.py).
  • Profile and reduce dashboard endpoint load time #24 profiling work may inform whether the limit check runs synchronously alongside current endpoints or deferred to avoid page-load overhead.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions