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

@adeildo/pi-look

v5.12.0

Published

Pi's start screen, a framed editor and the footer, redrawn around the data that matters and painted only with the theme's colours.

Readme

The screen

A finished answer takes a box of its own, so you can see what the model wants to run before it runs. The mark of the tool and its name sit on the top line, the command under them, and the reason it was allowed under that, when another model answered it. A line cuts the command off from what it printed, and the bottom line says how it went: a check, a cross, and how long it took. A command still running says running with the time so far. A tool from an MCP server shows its server and tool instead of mcp__server__tool. A tool with no drawing of its own, like the memory calls, gets the same box with its name and arguments on top and its text under the cut.

The strip above the editor is calm on purpose. Nothing moves while the model streams except the stopwatch.

| Piece | Means | | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | | 0:12 3 calls | How long the agent has worked on this prompt, and how many calls to the model it made | | last call 1.7s wait 900ms thought ↓906 tok/s | The last call: how long the model took to start, how long it thought then wrote, and how fast it writes | | answered in 0:47 2 calls $0.31 | Once the run ends: how long it took, how many calls to the model, and what it cost |

The border around the editor carries the branch with its distance and changes, the folder, the permission mode, the model with an effort meter, and the context. It takes pi's own effort colour, so it warms up as the model thinks harder and turns to the shell colour in bash mode.

The spinner names the state instead of saying "Working": waiting for the first token, thinking, writing, drafting bash while the model writes the call, running bash while it runs.

Your messages sit in a frame like the tool calls', in the accent colour and named you, without pi's background or the blank rows above and below the text. look.userFrame turns it off.

The start card shows the π, the folder, the branch and the model, and under them only what changed or waits on you since your last session in the folder: an account that needs a sign-in, files in conflict, a branch behind its remote, a failed CI run on the branch, a pull request of yours with changes requested or a new comment, other agents working there, a plan past 70%, a new harness version. On a quiet day it says nothing is new, and its bottom edge reads ready when you are. GitHub is asked once per launch, in the background, so the card never waits on it: those two lines appear when the answers arrive, and a missing gh, no network or a folder that is not on GitHub leaves them out. The π rises from its feet once per launch. With pi's quietStartup on header, which the harness sets, pi's list of everything it loaded stays out of the way.

The mark of a phase that lasts moves: a clock goes round its hours while a call runs, the hourglass flows while it waits on you, and the pencil fills with ink and empties while the model writes the call, in its own cell. With the Unicode icons a quarter circle goes round and the pencil tilts as it writes instead, and with ASCII a line spins. The mark stands still once the call ends.

Pi's own entries sit in the same frame as the tool calls: compactions and branch summaries under π, skills, ! commands with a cut between the command and what it printed, and the messages of extensions that bring no renderer of their own. The messages you send while the agent works wait above the editor in a dashed frame, each marked steer (between the agent's calls) or next (after its run), with the key that takes them back to the editor in the bottom edge.

While the model writes an edit or a write, its frame shows the end of what has arrived, with a cursor where the model is writing. A write shows its last 8 lines with their numbers, and says whether it makes a new file or how many lines it replaces. An edit shows the lines it takes out and puts in. The lines it repeats around the change stay as context. The bottom rule counts the lines and the size, or the edits and the lines changed. Once the call is written, pi's own view takes over, with the diff read from the file.

The footer is the session, each number with its word: the cost, the tokens sent and received, how much of the last prompt was cached, the average speeds, the plan's windows with when they reset, and last what other packages report, because that changes the most.

Alt+O opens the session's tool output in a frame you scroll, one call at a time, newest first. The arrows up and down scroll it, left and right move to older and newer calls, and the bottom edge says which lines you are on. Pi shows a long output cut in the transcript, and Ctrl+O opens every call at once.

It holds still

Numbers change on every frame, and the screen must not move with them.

  • Every number sits in a cell of fixed width, so 17 and 2.8k take the same room.
  • A value nobody knows yet shows as – and does not appear later in the middle of the line.
  • The working time counts as a stopwatch, 0:59 then 1:00.
  • An estimate is drawn quieter, so you know it is one.
  • The strip and the footer hold their line from the start, so the editor does not jump when the first answer arrives.

Pi records usage without a duration, so every finished answer leaves one small entry in the session with its time to the first token and its writing time. That is what keeps the averages right after a resume.

Your theme

The look never names a colour. Every piece names a theme token, so it follows whatever theme pi runs, and it moves with it when you change themes. The reference maps each piece to its token.

Settings

Alt+S opens them on the Look tab. The look is opinionated, so three things are yours: the icons (Nerd Font, Unicode or ASCII, which depend on your terminal's font), the style of the editor's frame, and whether your messages sit in a frame. Each shows a preview of what it changes as you pick it. The reference lists them.

The framed editor, and the idea of writing into its borders, come from pi-open-tui, which this replaces. The segments with priorities come from oh-my-pi.

Part of pi-harness, which brings every piece in one install.