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

plainspeak

v0.1.9

Published

A voice layer for AI agents to write like a human. Plain words, no em dashes, no AI vocabulary.

Readme


You know the voice. It is a bit too clean. Every reply opens with "Certainly!" or "Let's dive in". Em dashes land in every other line. It says "leverage", "robust", and "seamless" so much you can tell a machine wrote it from across the room.

Plainspeak puts a plain human voice inside your agent.

The point is simple. Agents make easy things sound hard. They reach for big words, long phrases, and heavy writing when a short one would do. Plainspeak turns that off. What should be simple stays simple.

Before / after

Your agent explains a fix:

Let me walk you through a robust, comprehensive solution that leverages cutting-edge technology to seamlessly streamline your workflow. It is important to note that this utilizes a nuanced approach to error handling.

With plainspeak:

Here is a simple way to save time. The system handles errors in a few steps.

More rewrites in rules/voice.md.

How it works

Plainspeak is one short set of voice rules. The agent keeps them in its context on every reply. You never have to ask for them.

The rules do three things:

  1. Ban a word list. Words like delve, leverage, robust, seamless, and utilize are never written.
  2. Ban filler phrases. No "Let's dive in", no "It's important to note", no "I hope this helps".
  3. Ban em dashes. Split the sentence with a period or a comma. Or write two sentences.

They also ask for plain words, short sentences, and a direct tone. Say what you mean first. Do not hedge. Do not over-apologize. Match the reader's tone.

The full list is in rules/voice.md. That file is the single source of truth. Every adapter reads it or copies it, so all agents follow the same rules.

Install

The Claude Code, Codex, and Copilot plugins run two tiny Node.js lifecycle hooks. node needs to be on your PATH.

Claude Code

/plugin marketplace add CoderSufiyan/plainspeak
/plugin install plainspeak@plainspeak

Send those as two separate prompts. The plugin adds the voice rules on every session start and into every subagent.

Codex

codex plugin marketplace add CoderSufiyan/plainspeak
codex plugin add plainspeak@plainspeak

Run codex, open /hooks, review and trust the two hooks, then start a new thread.

GitHub Copilot CLI

copilot plugin marketplace add CoderSufiyan/plainspeak
copilot plugin install plainspeak@plainspeak

OpenCode

Install the package, then add it to your opencode.json:

{ "plugin": ["plainspeak"] }

From a checkout instead, point it at the local plugin:

{ "plugin": ["./.opencode/plugins/plainspeak.mjs"] }

The plugin appends the voice rules to the system prompt on every turn. OpenCode also auto-loads this repo's AGENTS.md, so the rules hold even without the plugin.

Cursor, Windsurf, Cline, Copilot Chat, and any agent

These read rule files from your project. The CLI writes them for you:

npx plainspeak install

It creates:

  • AGENTS.md for Codex and generic agents
  • .cursor/rules/plainspeak.mdc for Cursor
  • .windsurf/rules/plainspeak.md for Windsurf
  • .clinerules/plainspeak.md for Cline
  • .github/copilot-instructions.md for GitHub Copilot Chat
  • .agents/rules/plainspeak.md for the agents standard

Existing AGENTS.md files stay intact. The rules go in a marked block at the end.

CLI

plainspeak install [dir]    Inject voice rules into a project (default: cwd)
plainspeak uninstall [dir]  Remove injected voice rules
plainspeak status [dir]     Show what is installed where
plainspeak check <file>     Lint a file for banned words and dashes

check does the enforcing. Point it at a draft, a changelog, or an agent transcript and it reports every banned word and every em or en dash:

plainspeak check draft.md
#   banned: "leverage" x1
#   em dash x2

It exits with a non-zero code when anything is found, so it can gate CI.

Turn it off

Say stop plain voice in a session to turn it off, and start plain voice to turn it back on.

Uninstall

| Host | Command | |------|---------| | Claude Code | /plugin remove plainspeak | | Codex | codex plugin remove plainspeak | | Copilot CLI | copilot plugin remove plainspeak | | OpenCode | Remove plainspeak from opencode.json | | Cursor / Windsurf / Cline / etc. | npx plainspeak uninstall |

Development

Edit rules/voice.md first, then regenerate the agent copies:

npm run build
npm run check
npm test

build writes the rule files from rules/voice.md. check fails if any of them drift. The test suite covers the rule copies, the voice rule content, the CLI, and the lint check.

FAQ

Does it change what the agent builds? No. Only how it writes. Code stays the same.

Does it need a config file? No.

What if I want a fancier word? Use it. The rules are a default, not a cage. Say stop plain voice to turn it off.

Why "plainspeak"? Plain speaking is the point.

License

MIT.