npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

omp-sub-usage

v0.1.1

Published

oh-my-pi plugin: Claude and Codex subscription usage (5h / weekly limits and resets) in the footer

Readme

omp-sub-usage

what the hell are my subs doing

An oh-my-pi plugin that keeps your Claude and ChatGPT Codex subscription limits in the footer: how much of each rolling window you have used, and when it resets.

 pi · [high] Fable 5.1 · ~/src/thing · ctx: 2.9%/1M
Claude 5h 42% (2h 13m) 7d 17% (3d 4h) | Codex 5h 81% (40m) 7d 23% (6d)

Each window reads the same as in omp's own usage status-line segment, which only ever shows the provider of the model you are currently on. This shows both, all the time.

How it gets the numbers

It asks omp. omp already logs in to Anthropic and OpenAI Codex, already fetches plan usage from both (/api/oauth/usage and wham/usage), caches it, and updates the cache from the rate-limit headers on every Claude and Codex response. The plugin reads that cache through the session's AuthStorage, the same path /usage uses. So:

  • no extra logins, no token files read, no second OAuth client;
  • no extra load on the usage endpoints: omp decides when to hit the network (about every five minutes), and the plugin just re-reads the cache every minute and after each turn;
  • multi-account setups show the account the session is actually using.

Works with omp 18.1 and later, including 18.3+, which moved AuthStorage onto namespaces.

It is an oh-my-pi plugin only. Upstream pi has no subscription-usage API to read from, so there is nothing for it to show there.

Install

omp plugin install omp-sub-usage

Log in to the providers you want to see with /login if you have not already.

Use

The footer line appears on its own. /sub-usage prints every window, including per-model weekly caps, with absolute reset times and any saved Codex resets. /sub-usage refresh throws away the cached numbers and fetches fresh ones.

Claude
  5h          11%  resets in 3h 14m (09:00 PM)
  7d           3%  resets in 2d 9h (Tue, Sep 29 03:00 AM)
  7d fable     0%  resets in 2d 9h (Tue, Sep 29 03:00 AM)
Codex (plus)
  7d           0%  resets in 6d 23h (Sat, Oct 3 05:45 PM)
  saved resets: 2

Settings

Managed with omp's plugin config, globally or per project (.omp/plugin-overrides.json):

omp plugin config list omp-sub-usage
omp plugin config set omp-sub-usage display widget

| Setting | Default | What it does | | ---------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------- | | display | status | status puts a plain line in omp's footer status area. widget draws a coloured line just below the editor. | | providers | anthropic,openai-codex | Which omp providers to show, in order. | | modelLimits | false | Also show per-model weekly caps, such as Claude's Fable limit, in the footer. | | refreshSeconds | 60 | How often to re-read omp's usage cache (minimum 15). |

Settings are read when a session starts, so changes apply to the next session.

In widget mode percentages are coloured like omp's native segment: yellow from 50%, red from 80%, and red whenever the provider reports the window exhausted. The status area is plain text by omp's design. Hide status lines entirely with omp's statusLine.showHookStatus setting.

Development

git clone https://github.com/ryanskidmore/omp-sub-usage
cd omp-sub-usage
bun install
omp plugin link .         # run your checkout in omp
bun run check             # lint, typecheck, unit tests, integration tests
bun run test:integration  # boots real omp in RPC mode with the plugin loaded
OMP_BIN=$(which omp) bun run test:integration   # against your installed omp

The integration tests run omp itself, with the plugin loaded both via -e and by linking the npm pack tarball, so they also check that the published files are complete. Only the upstream usage fetchers are faked (integration/fake-usage.ts), so everything from omp's AuthStorage to the footer text is the real code path. CI runs them against the locked omp version and the latest one on npm.

Releasing

Bump version in package.json, merge to main, then tag and push:

git tag v0.2.0 && git push origin v0.2.0

The Publish workflow checks the tag matches the version, runs bun run check, publishes to npm with trusted publishing (no npm token lives in the repository, and provenance is attached) and creates the GitHub release with generated notes. Each step skips work already done, so a failed run can simply be re-run.

npm publish from a checkout refuses to run, so no version reaches npm without its tag and release. npm publish --ignore-scripts bypasses that if CI is ever unavailable; push the tag afterwards and the workflow creates the missing release.

npm's trusted publisher for this package is GitHub Actions, ryanskidmore/omp-sub-usage, workflow publish.yml, with npm publish allowed.