DeepSeek Harness Plugin

jakehemmerle/dsh-usage-limits

Stars ★ 0 Category Usage & Billing Added 2026-11-02

Shows how much of your Claude and Codex plan limits you have used: a line above the prompt in dst with 5-hour and weekly windows, percent used and time to reset, and a ring meter beside the context meter in dsh web that opens a panel listing every window.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:jakehemmerle/dsh-usage-limits

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

A DeepSeek Harness (DSH) plugin that shows how much of your Claude and Codex plan limits you have used: an omp-style line in the terminal client (dst, dsh-TUI) and a ring meter in dsh web. The product and technical specification is SPEC.md; the test plan and evidence are in TESTING.md.

What it shows

dst. One coloured line above the prompt, on the first screen (Launchpad) and in chat, in the format of Jake's omp line:

Claude (proxy) 5h ░░░░░░░░ 1% ↻2h29m 7d ██░░░░░░ 29% ↻5d6h   Codex (proxy) 7d █░░░░░░░ 12% ↻3d11h

Each account shows its 5-hour and weekly windows: a bar, the percent used and the time to the reset. Percents are green below 50%, amber from 50% and red from 80%. A narrow terminal drops the bars, then the reset times, then shortens names (Claude·px), and finally shows only the fullest window. A refresh that fails keeps the last numbers and marks the account stale. Nothing shows until data arrives.

dsh web. A small ring and label beside the composer's context meter in a session, for example Codex (proxy) 7d 52%: the fullest 5-hour or weekly window, coloured by the same thresholds. Click it for a panel that lists every window of every account, including per-model windows such as Weekly · Fable and extra Codex limits, with reset times and stale or error notes.

Meter beside the context meter

Panel, dark theme Panel, light theme

Where the data comes from

Accounts, in display order:

Account Source
Claude (proxy), Codex (proxy) ProviderProxy: GET <baseURL>/usage/claude and /usage/chatgpt with the proxy client key from PROVIDERPROXY_API_KEY (or proxy.apiKeyEnv)
Claude, Codex DSH's own sign-ins (llm-pi-ai/anthropic, llm-pi-ai/openai-codex) → https://api.anthropic.com/api/oauth/usage, https://chatgpt.com/backend-api/wham/usage

An account that is not configured is left out. The plugin never refreshes, writes or logs tokens; an expired sign-in waits for DSH to refresh it. ProviderProxy accounts are read at most once a minute (the proxy caches its upstream for a minute); direct sign-ins at most every minIntervalMs (default 5 minutes, never below 1 minute), with back-off after errors. dst asks every minute and redraws reset times every 30 seconds without a request; the web page polls the plugin's route every minute.

Install

Both rows are generated by nix-config (home/dsh.nix); by hand they are:

# ~/.dsh/profiles/web/cordis.patch.yml
- insert:
    - id: usage-limits
      name: /path/to/dsh-usage-limits/index.js
      config: &usage
        minIntervalMs: 300000
        proxy:
          baseURL: http://gpu.tail47033e.ts.net:4000/v1
          apiKeyEnv: PROVIDERPROXY_API_KEY
# ~/.dsh/profiles/dsh-tui/cordis.patch.yml
- insert:
    - id: usage-limits
      name: /path/to/dsh-usage-limits/tui.js
      config: *usage

name must point at the entry file (index.js or tui.js), not the package directory. DSH finds the browser half through package.json. dsh-TUI 0.14.0 draws plugin status lines only in chat; the patch in patches/ (applied by nix-config's pkgs/dsh-tui.nix) puts them on the Launchpad too. dsh web loads the plugin when dsh-web starts; dst loads it in each new process.

Test

npm ci
npm test                                   # properties, host runtime, contracts, smoke
DSH_TUI_DIR=<patched dsh-tui> npm run test:e2e:tui   # real dst in tmux
npm run test:e2e:web                       # real dsh web in Playwright

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.