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

pi-harper-grammar

v0.3.1

Published

Type it right, make the agent guess less — live grammar-check (and one-key alt+g fix) for the Pi/OMP chat input, powered by Harper.

Readme

pi-harper-grammar

Type it right, make the agent guess less.

CI npm version npm downloads license

Live grammar checking of the chat input box in Pi and OMP (Oh My Pi), powered by Harper.

It lints what you are about to send — the text in the input editor — and shows issues (with fixes) in a widget just below the editor. It does not read or check your project files, and it never sends anything to the model to do the check: everything runs locally through harper-cli.

pi-harper-grammar demo

Prerequisite: Harper

This extension shells out to the harper-cli binary. Install it first:

harper-cli must be on your PATH (or point $HARPER_CLI at it). If it's missing, the extension shows a one-line install hint instead of failing silently.

Install

# Pi
pi install npm:pi-harper-grammar

# OMP (Oh My Pi)
omp plugin install npm:pi-harper-grammar

Or straight from git without npm:

pi install git:github.com/LoneExile/pi-harper-grammar

Restart the agent (or open a new session) after installing.

Usage

Just type. As soon as your input is stable for a moment, Harper checks it and lists any issues below the editor. The widget clears when the input is empty, corrected, or a slash command.

  • alt+g — apply Harper's suggested fixes to the current input, in place.
  • /grammar — toggle the live checker on/off.
  • /grammar-allow <term> — never flag <term> again (-<term> to undo, no args to list).

alt+g applies the issues Harper can concretely replace (spelling, agreement, a/an, punctuation, etc.). A lint with no replacement suggestion is left for you to fix by hand — the alt+g to fix hint appears only when something is auto-fixable.

Configuration

  • $HARPER_CLI — absolute path to the harper-cli binary, if it isn't on PATH.

  • Allow list — terms this extension drops from the results, whatever rule fired. One term per line, # starts a comment, matched case-insensitively against the text Harper flagged (so a multi-word entry like cloud flare works too). Default location ~/.config/harper-grammar/allow.txt; override with $HARPER_GRAMMAR_ALLOW. Use /grammar-allow or edit the file directly — either way the widget refreshes on the next poll, no restart:

    # ~/.config/harper-grammar/allow.txt
    cloudflare
    kubeconfig
    cloud flare
  • User dictionary — Harper's own per-user dictionary (one word per line), at the path printed by harper-cli lint --help (--user-dict-path). Adding a word there teaches Harper that it exists, which silences SpellCheck — but other rules can still fire. A lowercase cloudflare in the dictionary trades "Did you mean Cloudflare?" for OrthographicConsistency ("the canonical dictionary spelling is title case"). Use the allow list above when you want a term left alone unconditionally.

Tunables live at the top of extensions/harper-grammar.ts:

  • POLL_MS — how often the editor is polled (debounce cadence).
  • MAX_LINES — how many issues are shown at once.

How it works

There is no per-keystroke editor event, so the extension polls ctx.ui.getEditorText() on a timer and runs harper-cli once the text has been stable across a tick (a lightweight debounce). Results are parsed from harper-cli lint --format json and rendered via ctx.ui.setWidget(...) in a belowEditor widget. Warm harper-cli runs in well under a second, and a check only fires when the text — or the allow list — actually changes.

This checks your input before you send it. It does not grammar-check the assistant's replies.

License

MIT — see LICENSE.