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-eta

v0.1.1

Published

Estimate calibration and wall-clock timing tools for pi agents

Readme

pi-eta

Estimate calibration for pi agents.

Agents are terrible at estimating how long things will take. pi-eta fixes that by having the agent give an estimate, measuring how long the work actually takes, and building calibration from the difference so the ETA you see is corrected.

The agent hands over its estimate and only gets a confirmation back. The calibrated ETA, the multiplier, and the confidence stats are shown only to you. If the agent knew it always runs 3x over it could start padding its estimates, and then calibration would be training on padded numbers.

Install

pi install npm:pi-eta

Tools

| Tool | Description | | ------------ | ------------------------------------------------------------------------ | | eta_check | Privately show the user a calibrated estimate without starting a timer | | eta_start | Start a wall-clock ETA timer from the agent's own estimate | | eta_finish | Close an ETA timer as completed, abandoned, scope-changed, or superseded |

The agent only receives confirmation text. Calibrated estimates, multipliers, confidence, and spread are rendered to the user through tool UI details.


Commands

| Command | Description | | --------------------- | ------------------------------------------------- | | /eta | Open the Pi ETA stats overlay | | /eta stats | Same as /eta | | /eta verbose | Toggle persistent verbose tool output | | /eta verbose on | Enable persistent verbose tool output | | /eta verbose off | Disable persistent verbose tool output | | /eta verbose status | Show whether persistent verbose output is enabled | | /eta reset | Confirm and append a reset marker |

Verbose output is disabled by default. Pressing Ctrl+O on a Pi ETA tool temporarily shows the same details as verbose mode without changing the saved preference. /eta reset does not delete the raw event log; it appends a reset event and excludes earlier data from future calibration.

Calibration

Calibration is tracked separately for each model and thinking level combination, since the same model at low and at xhigh behaves very differently against the clock.

How the multiplier, blending, and the size effect are computed is in CALIBRATION.md.

Storage

Events and display settings are stored globally under the Pi agent directory:

~/.pi/agent/state/extensions/pi-eta/events.jsonl
~/.pi/agent/state/extensions/pi-eta/settings.json

Event writes are append-only and protected with a small lock directory so multiple Pi sessions can record events safely. Settings are written atomically and persist across sessions and Pi restarts.

Advanced calibration settings

Calibration policy is configured directly in settings.json; run /reload after editing it:

{
  "verbose": false,
  "calibrationMode": "blended",
  "profileSampleThreshold": 3
}

| Mode | Behavior | | ------------------- | -------------------------------------------------------------------------- | | blended | Default. Shrink the exact profile through its model toward other models. | | profile | Strictly use the current model and thinking level, with no fallback. | | global | Strictly use calibration across all eligible completed tasks. | | profile-threshold | Use global calibration until the profile reaches profileSampleThreshold. |

profileSampleThreshold must be a positive integer, defaults to 3, and is ignored outside profile-threshold mode. Invalid settings fall back to the defaults.

Behavior notes

  • Calibration uses wall time: eta_finish - eta_start.
  • Only outcome=completed trains calibration.
  • abandoned, scope_changed, and superseded close the timer but are excluded from calibration.
  • Changing the model or thinking level while a task is open records one durable marker. Such mixed-profile tasks stay in history and in the overlay but train nothing.
  • One ETA task may be open per Pi session.
  • Agents are instructed not to infer or restate hidden calibrated values.

Known limitation

Calibration measures wall time, which for long tasks can include user pauses, waiting between turns, and overnight gaps. That inflates long-task durations and can exaggerate a measured size effect. Distinguishing active agent time from elapsed wall time is not implemented.

This will be implemented once earendil-works/pi#7147 is approved. Right now an extension can't know when an approval dialog is sitting open, and that issue adds the missing events around UI dialogs. Once it lands, calibration can use active agent time instead of raw wall time.

Requirements

  • Pi 0.82.1 or newer.
  • Node.js 22.19 or newer.