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-speed-inhibitor

v1.0.1

Published

pi extension that sleeps a configurable amount of milliseconds before every tool call, adjustable live via ctrl+up / ctrl+down or /speed-inhibit

Readme

pi-speed-inhibitor

A pi extension that deliberately slows the agent down by sleeping a configurable number of milliseconds before every tool call, so you can see what's about to run and watch it work.

How it works

  • Registers a tool_execution_start hook that sleeps for the configured delay before each tool call runs, blocking the agent loop until the delay elapses (pi awaits extension handlers, so the tool waits).
  • Two keyboard shortcuts adjust the delay live:
    • ctrl+up — increase the delay by 100ms ("up")
    • ctrl+down — decrease the delay by 100ms, floored at 0ms ("down")
  • A /speed-inhibit <ms> command sets the delay to an exact value (e.g. /speed-inhibit 5000); no argument shows the current delay.
  • Every adjustment is persisted to the extension's config.json, so the delay and keys survive restarts.
  • An always-visible widget above the editor shows the current delay (e.g. 🐢 speed inhibitor: 400ms before each tool call), so you always know it's loaded and how much it's inhibiting pi.
  • A notification confirms the extension loaded and reports the current delay on startup//reload.
  • The sleep is abort-aware: pressing Esc cancels the wait immediately instead of holding up the agent.

Why arrow keys

The bindings went through a few iterations before landing on arrow keys:

  • ctrl+( / ctrl+) — the parentheses live on the shifted number row, and terminals report the gesture under different key IDs depending on the keyboard protocol (kitty: shift+ctrl+(, modifyOtherKeys: shift+ctrl+8). The plain form matched nothing.
  • ctrl+shift+u — intercepted by the Kitty terminal itself (its Unicode-input dialog), so it never reached pi.
  • ctrl+u — collides with a pi built-in binding (app.tree.filter.userOnly).

Arrow keys have no such problems: pi binds ctrl+left/ctrl+right but not ctrl+up/ctrl+down, tmux and Kitty don't intercept them, and the key IDs are identical under every keyboard protocol (kitty: ESC[1;5A/B, legacy: ESC Oa/Ob).

Install

Copy or symlink this folder into a pi extension location, then run /reload in pi:

# global (all projects)
mkdir -p ~/.pi/agent/extensions
cp -r pi-speed-inhibitor ~/.pi/agent/extensions/

# or project-local
mkdir -p .pi/extensions
cp -r pi-speed-inhibitor .pi/extensions/

No npm install needed — the extension only uses Node built-ins.

Usage

| Key / command | Effect | | --- | ------ | | ctrl+up | Add 100ms to the per-tool-call delay ("up") | | ctrl+down | Remove 100ms from the per-tool-call delay ("down", min 0ms) | | /speed-inhibit 5000 | Set the per-tool-call delay to exactly 5000ms | | /speed-inhibit | Show the current delay |

Configuration

The delay and keys are stored in <agent dir>/extensions/pi-speed-inhibitor/config.json:

{
  "sleepMs": 400,
  "decreaseKeys": ["ctrl+down"],
  "increaseKeys": ["ctrl+up"]
}

<agent dir> is $PI_CODING_AGENT_DIR if set, otherwise ~/.pi/agent. You can edit the file directly to change the delay or the keys — the extension re-reads it on load, so run /reload to pick changes up. The first entry of each list is the display name shown in the widget; every entry is registered, so list all the key IDs your terminal may report for the gesture you want. Any key combo pi supports (see the keybindings docs) works.

Development

npm install   # dev deps only (typescript + pi's types)
npm run typecheck